gnu: trytond: Fix import of trytond modules.

For adding modules, trytond uses entry-points, anyhow relying on the
modules being named "trytond.modules.xxx" and being placed in the same
filesystem path as "trytond.modules".

The package "trytond.modules" is not a namespace module, anyhow trytond
modules must be sub-modules of "trytond.modules". This works well if all
packages are installed into the same filesystem path "…/trytond/modules":
The Python importer will find all sub_modules at this place.

Anyhow, in Guix, modules don't share the same filesystem path and the
Python importer will not find them.

Solution is to add all trytond module's locations to
"trytond.modules._path__". This will make "trytond.module" behave much
like a namespace module and the importer pick up the module.

* gnu/packages/patches/trytond-add-egg-modules-to-path.patch: New file.
* gnu/packages/tryton.scm (trytond): Use it.
* gnu/local.mk (dist_patch_DATA): Add it
This commit is contained in:
Hartmut Goebel 2021-12-02 19:28:56 +01:00
parent 6eba17043a
commit 939e3813d0
No known key found for this signature in database
GPG key ID: 634A8DFFD3F631DF
3 changed files with 25 additions and 1 deletions

View file

@ -1845,6 +1845,7 @@ dist_patch_DATA = \
%D%/packages/patches/tor-sandbox-i686.patch \
%D%/packages/patches/transcode-ffmpeg.patch \
%D%/packages/patches/transmission-honor-localedir.patch \
%D%/packages/patches/trytond-add-egg-modules-to-path.patch \
%D%/packages/patches/ttf2eot-cstddef.patch \
%D%/packages/patches/tup-unbundle-dependencies.patch \
%D%/packages/patches/tuxpaint-stamps-path.patch \

View file

@ -0,0 +1,22 @@
Work around trytond.module not being a real namespace module.
Solution is to add all trytond module's locations to
trytond.modules._path__. This will make trytond.module behave much
like a namespace module.
Adding to __path__ is done in update_egg_modules() to ensure __path__
is updated whenever the list of egg modules is updated.
*** a/trytond/modules/__init__.py 1970-01-01 01:00:01.000000000 +0100
--- b/trytond/modules/__init__.py 2021-12-02 18:12:15.385101986 +0100
***************
*** 38,43 ****
--- 38,46 ----
import pkg_resources
for ep in pkg_resources.iter_entry_points('trytond.modules'):
EGG_MODULES[ep.name] = ep
+ path = os.path.join(ep.dist.location, 'trytond', 'modules')
+ if not path in __path__ and os.path.isdir(path):
+ __path__.append(path)
except ImportError:
pass

View file

@ -48,7 +48,8 @@ (define-public trytond
(method url-fetch)
(uri (pypi-uri "trytond" version))
(sha256
(base32 "1jp5cadqpwkcnml8r1hj6aak5kc8an2d5ai62p96x77nn0dp3ny4"))))
(base32 "1jp5cadqpwkcnml8r1hj6aak5kc8an2d5ai62p96x77nn0dp3ny4"))
(patches (search-patches "trytond-add-egg-modules-to-path.patch"))))
(build-system python-build-system)
(propagated-inputs
(list python-dateutil