Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#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)

comment:1 by Mariusz Felisiak, 5 years ago

Resolution: invalid
Status: newclosed
Summary: CommandTemplate Behavior Is InconsistentCommandTemplate Behavior Is Inconsistent.
Type: UncategorizedBug
Version: 2.2master

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 directory project, because you provided an optional destination, see:

"If the optional destination is provided, Django will use that existing directory rather than creating a new one."

in reply to:  1 comment:2 by John Gooding, 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 directory project, because you provided an optional destination, see:

"If the optional destination is provided, Django will use that existing directory rather than creating a new one."

Note: See TracTickets for help on using tickets.
Back to Top