#7877 closed defect (fixed)
KeyError: 'tracext/hg/../locale'
Reported by: | Owned by: | Christian Boos | |
---|---|---|---|
Priority: | high | Milestone: | not applicable |
Component: | plugin/mercurial | Version: | 0.12dev |
Severity: | major | Keywords: | mercurial |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
Good evening! I switched to Mercurial from SVN over the weekend, and tonight I set about the task of updating Trac to support my new multirepo environment. After checking out the latest Trac-multirepo and TracMercurial versions from SVN, installing them, and restarting Apache2, I am greeted by the KeyError reproduced in the summary line above.
I think the problem is at line 173 of backend.py:
locale_dir = pkg_resources.resource_filename(name, '../locale')
I don't seem to have a tracext/locale directory anywhere. Let me know if I can provide more info.
Trac Version: 0.12multirepos-r7684-py2.5 TracMercurial Version: 0.12.0.6dev_r7745-py2.5
Platform: Ubuntu 8.10-server amd64
Thanks!
Attachments (0)
Change History (7)
comment:1 by , 16 years ago
Milestone: | → not applicable |
---|---|
Priority: | normal → high |
comment:2 by , 16 years ago
Here's the modified setup.py file
#!/usr/bin/env python from setuptools import setup, find_packages extra = {} try: import babel extra['message_extractors'] = { 'tracext': [ ('**.py', 'python', None), ], } except ImportError: pass TracMercurial = 'http://trac.edgewall.org/wiki/TracMercurial' setup(name='TracMercurial', install_requires='Trac >=0.12dev', description='Mercurial plugin for Trac 0.12', keywords='trac scm plugin mercurial hg', version='0.12.0.6', url=TracMercurial, license='GPL', author='Christian Boos', author_email='cboos@neuf.fr', long_description=""" This plugin for Trac 0.12 provides support for the Mercurial SCM. '''Actually, to take full benefit of this version of the plugin, the http://trac.edgewall.org/browser/sandbox/multirepos branch is required.''' See %s for more details. """ % TracMercurial, namespace_packages=['tracext'], packages=['tracext', 'tracext.hg'], package_data={ '': ['COPYING', 'README'], 'tracext': ['locale/*.*', 'locale/*/LC_MESSAGES/*.*'], }, zip_safe=False, entry_points={'trac.plugins': 'hg = tracext.hg.backend'}, **extra)
This produces an .egg which contains the translation files. When installed as unzipped, it works fine. But when installed as zipped, despite the zip_safe=False
, it doesn't get unzipped automatically and therefore one still get the KeyError
.
As I'm no setuptools expert, maybe someone could point me to what I missed? I have other zipped eggs which correctly get unzipped automatically (e.g. the sandbox/spam-filter-captcha one).
comment:3 by , 16 years ago
Wow, thanks for the quick response! Installing the plugin in development mode did the trick for now - thanks for the tip! I'm not very experienced in setuptools, so I'm not sure why it isn't unzipping, either. I'll play around with it tomorrow night, and if I figure out anything I'll let you know. Thanks again!
comment:4 by , 16 years ago
Now that I'm able to use it, I wanted to let you know that the multirepo feature is FANTASTIC! Great work!
follow-up: 7 comment:5 by , 16 years ago
Status: | new → assigned |
---|
zip_safe issue understood: the .egg file only gets unzipped when a file needed to be accessed. The problem here was that when using the following resource access:
pkg_resources.resource_filename(__name__, '../locale')
the file was not found, as explained by Jorge Vargas in googlegroups:Trac-dev:830e3ccd1f371ae6.
When changing that to 'tracext', 'locale'
, it worked.
Now I should probably move locale
below tracext/hg
.
The actual setting of the zip_safe flag doesn't seem to matter (first, it's autodetected, second, even if set to True and the egg contains EGG-INGO/zip-safe flag, the locale files get extracted in a tracmercurial…egg-tmp/locale folder in the PYTHON_EGG_CACHE).
What should also be checked is whether the similar call to resource_filename(__name__, '../locale')
in trac/util/translation.py will actually work when Trac is installed as an .egg or not.
comment:6 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:7 by , 16 years ago
What should also be checked is whether the similar call to
resource_filename(__name__, '../locale')
in trac/util/translation.py will actually work when Trac is installed as an .egg or not.
Same problem for Trac itself, see #8062.
Ah yes, forgot to include this in the
package_data
. In the meantime you can use the plugin indevelopment
mode, i.e. from the checkout you dopython setup.py develop
.