#30616 closed Bug (invalid)
CommandTemplate Behavior Is Inconsistent.
Reported by: | John Gooding | Owned by: | nobody |
---|---|---|---|
Component: | Core (Management commands) | Version: | dev |
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
Moving this here per Adam Johnson's request on the developer forum.
To be clear, I am not saying there is a bug. It does what it is programmed to do. I am saying the expected behavior of the API / CLI / whatever you want to call it is inconsistent.
I am not going to get into an argument of what a "proper" django structure is, etc. I want to focus purely on the behavior of the command.
A more "normal" setup might look like this:
/repository manage.py /project settings.py urls.py etc.. /polls models.py etc...
When you run python manage.py startapp polls
from the same directory as manage.py, it will create the polls directory for you, normal expected behavior.
Another, equally as valid setup looks like this:
repository/ manage.py /project settings.py urls.py etc... /polls models.py etc... /my_app_2 models.py etc...
Where all of the apps live in the project directory, or perhaps some other directory. Now if you try to execute python manage.py startapp polls project
, it will complain that the directory doesn't exist and that you need to create it first. However if you cd
into /project, and run python ../manage.py startapp polls
, it will create the directory for you, even though it doesn't exist.
My ultimate point is this, the behavior of the command should not depend on where it is ran. It should only care if the directory already exists or not, which it does check, but the applied behavior of that check is different depending on if you're in the line 68 if block or the line 76 else block. The applied behavior ought to be the same, regardless of where the command is ran from.
Change History (2)
follow-up: 2 comment:1 by , 5 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Summary: | CommandTemplate Behavior Is Inconsistent → CommandTemplate Behavior Is Inconsistent. |
Type: | Uncategorized → Bug |
Version: | 2.2 → master |
comment:2 by , 5 years ago
I never said it wasn't a documented behavior. I said the behavior isn't consistent. I think saying it depends on arguments and not on where its run, is completely pointless. They are one and the same, the argument is the position. My point is the behavior can be improved, not that it is broken, and I believe it warrants further discussion on that.
Replying to felixxm:
Thanks for the report, however this behavior doesn't depend on where it is run, it depends on arguments and this is a documented behavior:
python ../manage.py startapp polls
- creates a Django app directory structure in the current directory.python manage.py startapp polls project
- creates a Django app directory structure in the existing directoryproject
, because you provided an optionaldestination
, see:"If the optional destination is provided, Django will use that existing directory rather than creating a new one."
Thanks for the report, however this behavior doesn't depend on where it is run, it depends on arguments and this is a documented behavior:
python ../manage.py startapp polls
- creates a Django app directory structure in the current directory.python manage.py startapp polls project
- creates a Django app directory structure in the existing directoryproject
, because you provided an optionaldestination
, see: