Opened 9 years ago
Closed 9 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 , 9 years ago
Needs documentation: | set |
---|---|
Needs tests: | set |
Owner: | changed from | to
Status: | new → assigned |
comment:2 by , 9 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:3 by , 9 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 , 9 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 , 9 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 , 9 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 , 9 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