Opened 15 years ago
Closed 15 years ago
#14953 closed (duplicate)
New find_commands(management_dir) to support .pyc and .pyo
| Reported by: | anonymous | Owned by: | nobody |
|---|---|---|---|
| Component: | Core (Other) | Version: | 1.2 |
| Severity: | Keywords: | find_commands | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
In django/core/management/init.py:
def find_commands(management_dir):
"""
Given a path to a management directory, returns a list of all the command
names that are available.
Returns an empty list if no commands are defined.
"""
command_dir = os.path.join(management_dir, 'commands')
try:
return [f[:-3] for f in os.listdir(command_dir)
if not f.startswith('_') and f.endswith('.py')]
except OSError:
return []
In our environment, We compile all .py to .pyc, and then remove all .py.
Then manage.py can't find our commands because find_commands only find .py.
Here is a modified version for find_command:
def find_commands(management_dir):
"""
Given a path to a management directory, returns a list of all the command
names that are available.
Returns an empty list if no commands are defined.
"""
command_dir = os.path.join(management_dir, 'commands')
ret = {}
try:
filenames = os.listdir(command_dir)
for filename in filenames:
if filename.startswith('_'):
continue
if filename.endswith('.py'):
modname = filename[:-3]
elif filename.endswith('.pyc') or filename.endswith('.pyo'):
modname = filename[:-4]
else:
modname = None
if modname:
ret[modname] = 1
except OSError:
pass
return ret.keys()
Note:
See TracTickets
for help on using tickets.
Dup of #14952