Opened 10 years ago
Closed 10 years ago
#24857 closed New feature (fixed)
Add __main__ entry point as an alias for django-admin
| Reported by: | Tomáš Ehrlich | Owned by: | |
|---|---|---|---|
| Component: | Core (Management commands) | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | yes |
| Needs tests: | yes | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
There's a original pull request at https://github.com/django/django/pull/4588
Add __main__ entry point, so we can call management command via python -m django. It will behave as an alias for django-admin (django-admin.py).
Change History (8)
comment:1 by , 10 years ago
| Needs documentation: | set |
|---|---|
| Needs tests: | set |
| Owner: | changed from to |
| Status: | new → assigned |
comment:2 by , 10 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:3 by , 10 years ago
I've started working on it. I want to make django/bin/django-admin.py an alias for django/__main__.py so we don't have to duplicate code (just two lines though) but the best what I've got so far is:
# django/bin/django-admin.py
#!/usr/bin/env python
from runpy import run_module
if __name__ == "__main__":
run_module('django')
Not sure if it's worth it. I'll rather write some tests…
comment:4 by , 10 years ago
I don't think it's worth it. I expect others will too, given that's how the duplication is avoided in manage.py.
comment:5 by , 10 years ago
I've worked on this a bit more, added a couple updates to the PR referenced in the OP. I spent a little time figuring out how to test it, but don't have it all worked out yet. Best I can tell so far is that the tests probably need to live in tests/admin_scripts/tests.py, but I don't have it worked out what and how is the best way to test.
My first thought is to subclass or copy the DjangoAdmin* tests to use the python entry point. I could subclass AdminScriptTestCase, but that just seems like a lot of test coupling.
One problem I'm not quite sure how to deal with is that the current tests don't seem to require that Django be installed properly. I might be able to just make sure the current working directory is the root of the repository...
comment:6 by , 10 years ago
Did you investigate my suggestion of using the subprocess module (following the example in tests/model_regress/test_pickle.py). I don't think we need to test python -m django, but rather just execute the the __main__.py script directly and ensure it works like django-admin (one test should be enough -- I don't think we don't need to execute all the admin_script tests through it).
comment:7 by , 10 years ago
| Owner: | removed |
|---|---|
| Status: | assigned → new |
I agree that simple test will be sufficient:
import subprocess
def test_module_installed():
call_args = ['python', '-m', 'django', '-v']
assert subprocess.call(call_args) == 0
I think this is a good idea and there was support for it on the mailing list thread [1].
The PR looks good but some basic tests would be nice.
[1] https://groups.google.com/forum/#!searchin/django-developers/guessable/django-developers/_Mrf1nFVchk/tfpGyKatiHIJ