Opened 14 years ago
Last modified 14 years ago
#18179 closed Bug
Management can't load custom commands when separately packaged apps share a common base module — at Initial Version
| Reported by: | nOw2 | Owned by: | nobody |
|---|---|---|---|
| Component: | Core (Management commands) | Version: | 1.4 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
django.core.management.find_management_module() loads custom commands for manage.py by finding the path of the module and examining file directly.
This fails when apps are within packages that share a common base name, but where the files are NOT in the same directories, example:
app 1: company.division.project_a.app1 stored in path packages/company.subdivision.project_a.app1
app 2: company.division.project_b.app2 stored in path packages/company.subdivision.project_b.app2
Custom commands in app 2 will not be found.
A code trace from pdb follows. Excuse the rather complicated example, but this is from a genuine problem and only the modules names have been changed.
> site-packages/django/core/management/__init__.py(43)find_management_module()
-> parts.append('management')
(Pdb) parts
['company', 'subdivision', 'project_b', 'app2']
. . .
> site-packages/django/core/management/__init__.py(62)find_management_module()
-> f, path, descr = imp.find_module(part, path and [path] or None)
(Pdb)
ImportError: 'No module named project_b'
> site-packages/django/core/management/__init__.py(62)find_management_module()
-> f, path, descr = imp.find_module(part, path and [path] or None)
(Pdb) l
57 if os.path.basename(os.getcwd()) != part:
58 raise e
59
60 while parts:
61 part = parts.pop()
62 -> f, path, descr = imp.find_module(part, path and [path] or None)
63 return path
64
65 def load_command_class(app_name, name):
66 """
67 Given a command name and an application name, returns the Command
(Pdb) part
'project_b'
(Pdb) path
'packages/company.subdivision.project_a.app1/company/subdivision'
Issue was found in 1.3.1 but the code appears the same in the current trunk version:
https://code.djangoproject.com/browser/django/trunk/django/core/management/__init__.py?rev=17842#L60