Opened 4 years ago

Closed 4 months ago

Last modified 4 months ago

#19665 closed Bug (fixed)

'Command' object has no attribute 'stderr'

Reported by: stefankoegl Owned by: claudep
Component: Core (Management commands) Version: master
Severity: Normal Keywords:
Cc: mike@… Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When running some self-written management commands with the current stable/1.5.x branch (currently d571894fc09b34b8b43cb8f1790c743a47679851), I get the following AttributeError

$ ./manage.py assign-upload-timestamps
/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py:219: DeprecationWarning: You have no filters defined on the 'mail_admins' logging handler: adding implicit debug-false-only filter. See http://docs.djangoproject.com/en/dev/releases/1.4/#request-exceptions-are-now-always-logged
  DeprecationWarning)

Traceback (most recent call last):
  File "./manage.py", line 36, in <module>
    execute_manager(settings)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 469, in execute_manager
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 226, in run_from_argv
    self.stderr.write('%s: %s' % (e.__class__.__name__, e))
AttributeError: 'Command' object has no attribute 'stderr'

As no part of the trace refers to code of my application, I assume a bug in Django 1.5.

Attachments (1)

19665-1.diff (2.3 KB) - added by claudep 4 years ago.

Download all attachments as: .zip

Change History (11)

comment:1 Changed 4 years ago by claudep

  • Needs documentation unset
  • Needs tests unset
  • Owner changed from nobody to claudep
  • Patch needs improvement unset
  • Status changed from new to assigned
  • Triage Stage changed from Unreviewed to Accepted
  • Type changed from Uncategorized to Bug

comment:2 Changed 4 years ago by claudep

I'm still curious to know what error did your command raises so as self.stderr was not even initialized, as it is one of the first thing execute is doing. Try to replace self.stderr by sys.stderr in your Django code to find out.

Changed 4 years ago by claudep

comment:3 Changed 4 years ago by claudep

  • Has patch set

Patch attached in case someone wants to quickly review it.

comment:4 Changed 4 years ago by charettes

  • Triage Stage changed from Accepted to Ready for checkin
  • Version changed from 1.5-alpha-1 to master

Patch looks good and admin_scripts tests pass on Python 2.7.3 and 3.2.3 (SQlite) while the additional test fails without the fix.

Last edited 4 years ago by charettes (previous) (diff)

comment:5 Changed 4 years ago by Claude Paroz <claude@…>

  • Resolution set to fixed
  • Status changed from assigned to closed

In b9c8bbf3726a1956be1db70ffd3bef04a2e5311a:

Fixed #19665 -- Ensured proper stderr output for Command.run_from_argv

Thanks Stefan Koegl for the report and Simon Charette for the review.

comment:6 Changed 4 years ago by Claude Paroz <claude@…>

In 2d8b0315f46d24c6567a05422bd609f3a689bda8:

[1.5.x] Fixed #19665 -- Ensured proper stderr output for Command.run_from_argv

Thanks Stefan Koegl for the report and Simon Charette for the review.
Backport of b9c8bbf37 from master.

comment:7 Changed 4 years ago by Claude Paroz <claude@…>

In 2d8b0315f46d24c6567a05422bd609f3a689bda8:

[1.5.x] Fixed #19665 -- Ensured proper stderr output for Command.run_from_argv

Thanks Stefan Koegl for the report and Simon Charette for the review.
Backport of b9c8bbf37 from master.

comment:8 Changed 4 months ago by mikepelley

  • Cc mike@… added
  • Resolution fixed deleted
  • Status changed from closed to new

I believe I'm having this same problem again with 1.9.5 (see below). I took a brief look at the code and perhaps the fix for #23663 reverted the fix for this bug, although my review was superficial so I might have that wrong. In the error below, I raised the CommandError exception explicitly after discovering a data validation error.

(virtualenv3) mike@rhea:~/Workspace/auris-server/auris$ ./manage.py load_systems ../populated.json 
Traceback (most recent call last):
  File "/home/mike/Workspace/virtualenv3/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/mike/Workspace/virtualenv3/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/home/mike/Workspace/auris-server/auris/db/management/commands/load_systems.py", line 44, in handle
    self._validate_fields()
  File "/home/mike/Workspace/auris-server/auris/db/management/commands/load_systems.py", line 24, in _validate_fields
    '{2})'.format(field, data['name'], system_id))
django.core.management.base.CommandError: Unknown field "alignment" present in system id 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/mike/Workspace/virtualenv3/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/home/mike/Workspace/virtualenv3/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/mike/Workspace/virtualenv3/lib/python3.4/site-packages/django/core/management/base.py", line 357, in run_from_argv
    self.stderr.write('%s: %s' % (e.__class__.__name__, e))
AttributeError: 'Command' object has no attribute 'stderr'
Last edited 4 months ago by timgraham (previous) (diff)

comment:9 Changed 4 months ago by timgraham

  • Resolution set to fixed
  • Status changed from new to closed

Rather than reopening a 3 year old ticket, please open a new one and include a test case for Django's test suite or a sample project to reproduce the issue. Thanks!

comment:10 Changed 4 months ago by claudep

Mike, my guess is that your command overrode the __init__ method of the command without calling the super __init__.

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