Opened 21 years ago
Closed 21 years ago
#1567 closed defect (fixed)
Cannot import custom plugins
| Reported by: | Emmanuel Blot | Owned by: | Christopher Lenz |
|---|---|---|---|
| Priority: | normal | Milestone: | 0.9 |
| Component: | general | Version: | devel |
| Severity: | normal | Keywords: | |
| Cc: | Branch: | ||
| Release Notes: | |||
| API Changes: | |||
| Internal Changes: | |||
Description
I probably missed an essential point, but I cannot load a custom plugin into Trac.
There are several issues, I believe, in loader.py, at line 38, load_component(name, path, globals(), locals())
nameis always equal to 'module', so how can the actual module be forwarded to theload_componentmethod? Wouldn't it be 'value' instead of name?pathshould be either a string orNone. However, if path is not defined in the matching module section,pathis returned as an empty string, not asNone. Whenpathis an empty string, find_module does not behave as if it is None…- find_module expect a path either as
Noneor as a list. If path is defined in the matching module section, path is forwarded as a string, not as a list of strings, which causes the find_module to fail, even if the path is correct
Whatever the way the path is given to the loader (either through 'path = …' in trac.ini, or through the PYTHONPATH environment variable), the plugin fails to load, with the following exception:
Traceback (most recent call last):
File "tracd", line 87, in ?
main()
File "tracd", line 69, in main
httpd = TracHTTPServer(server_address, args, auths)
File "d:\tmp\trac\current\Lib\site-packages\trac\web\standalone.py", line 150, in __init__
env = open_environment(path)
File "D:\tmp\trac\current\Lib\site-packages\trac\env.py", line 270, in open_environment
env = Environment(env_path)
File "D:\tmp\trac\current\Lib\site-packages\trac\env.py", line 70, in __init__
load_components(self)
File "D:\tmp\trac\current\Lib\site-packages\trac\loader.py", line 38, in load_components
load_component(value, None, globals(), locals())
File "D:\tmp\trac\current\Lib\site-packages\trac\loader.py", line 66, in load_component
module = _load_module(head, module_name, module, path)
File "D:\tmp\trac\current\Lib\site-packages\trac\loader.py", line 80, in _load_module
parent and parent.__path__ or path)
AttributeError: 'module' object has no attribute '__path__'
It seems that the module object returned does not contain __path__ attribute (which can be verified with dir(module), although this attribute exists for default components. The .py file is successfully loaded, but the loader fails to load the plugin's component. I probably forgot some compulsory thing, but I can't find what.
I guess this latter point comes from my poor knowledge in Python, I'll try to solve in on my own.
Attachments (0)
Change History (3)
comment:1 by , 21 years ago
comment:2 by , 21 years ago
| Milestone: | → 0.9 |
|---|---|
| Status: | new → assigned |
comment:3 by , 21 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
This should be fixed in [1685]. Thanks!



Sorry, the latter point is not relevant (starting from the trace dump). I can now load the helloworld plugin (it fails later on, but this is not related to this bug report)