From owner-freebsd-ports-bugs@FreeBSD.ORG Thu Jan 10 12:00:00 2013 Return-Path: Delivered-To: freebsd-ports-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id B6EB6747 for ; Thu, 10 Jan 2013 12:00:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 9B3D889A for ; Thu, 10 Jan 2013 12:00:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r0AC003Q007403 for ; Thu, 10 Jan 2013 12:00:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r0AC00j9007402; Thu, 10 Jan 2013 12:00:00 GMT (envelope-from gnats) Resent-Date: Thu, 10 Jan 2013 12:00:00 GMT Resent-Message-Id: <201301101200.r0AC00j9007402@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Gunther Stengl Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id EF785735 for ; Thu, 10 Jan 2013 11:58:59 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id D2C3188D for ; Thu, 10 Jan 2013 11:58:59 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.5/8.14.5) with ESMTP id r0ABwxdS055584 for ; Thu, 10 Jan 2013 11:58:59 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.5/8.14.5/Submit) id r0ABwxul055583; Thu, 10 Jan 2013 11:58:59 GMT (envelope-from nobody) Message-Id: <201301101158.r0ABwxul055583@red.freebsd.org> Date: Thu, 10 Jan 2013 11:58:59 GMT From: Gunther Stengl To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: ports/175178: www/py27-django: python manage.py syncdb fails if no locale is set X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Jan 2013 12:00:00 -0000 >Number: 175178 >Category: ports >Synopsis: www/py27-django: python manage.py syncdb fails if no locale is set >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jan 10 12:00:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Gunther Stengl >Release: 9.1-RELEASE i386 >Organization: >Environment: FreeBSD fbsd.local.lan 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243826: Tue Dec 4 06:55:39 UTC 2012 root@obrian.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 >Description: Django (py27-django-1.4.3) fails to create the db-superuser when doing a "python mange.py syncdb" AND "LC_ALL" is unset. "LC_ALL=" causes the locale.getdefaultlocale() to return "(None, None)" which is not a String, as needed by decode(). If LC_ALL is set correctly, the scripts runs as expected. >How-To-Repeat: unset LC_ALL python manage.py syncdb --> Script bails out after "You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes" See attached logfile at "Problem situation" >Fix: e.g. (bash): export LC_ALL=de_DE.UTF-8 Corrections for django, manage.py: Check if locale.getdefaultlocale() returns something!=None. Fallback to just using "getpass.getuser()" or issuing a warning ("Set your locale correctly") and terminating gracefully. See attached logfile at "Testing and solution" Patch attached with submission follows: Problem situation ================= Script started on Thu Jan 10 12:21:15 2013 [gunhed@fbsd ~/bin/test]$ django-admin.py startproject testproj [gunhed@fbsd ~/bin/test]$ cd testproj [gunhed@fbsd ~/bin/test/testproj]$ ls -l total 8 -rwxr-xr-x 1 gunhed gunhed 251 Jan 10 12:21 manage.py drwxr-xr-x 2 gunhed gunhed 512 Jan 10 12:21 testproj [gunhed@fbsd ~/bin/test/testproj]$ cd testproj/ [gunhed@fbsd ~/bin/test/testproj/testproj]$ cp settings.py settings.py.orig [gunhed@fbsd ~/bin/test/testproj/testproj]$ vi settings.py [gunhed@fbsd ~/bin/test/testproj/testproj]$ diff settings.py.orig settings.py 14,15c14,15 < 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. < 'NAME': '', # Or path to database file if using sqlite3. --- > 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. > 'NAME': 'test.sqlite3', # Or path to database file if using sqlite3. [gunhed@fbsd ~/bin/test/testproj/testproj]$ cd .. [gunhed@fbsd ~/bin/test/testproj]$ python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Traceback (most recent call last): File "manage.py", line 10, in execute_from_command_line(sys.argv) File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line utility.execute() File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv self.execute(*args, **options.__dict__) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle return self.handle_noargs(**options) File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs emit_post_sync_signal(created_models, verbosity, interactive, db) File "/usr/local/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal interactive=interactive, db=db) File "/usr/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send response = receiver(signal=self, sender=sender, **named) File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 73, in create_superuser call_command("createsuperuser", interactive=True, database=db) File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command return klass.execute(*args, **defaults) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 70, in handle default_username = get_default_username() File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 105, in get_default_username default_username = get_system_username() File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 85, in get_system_username return getpass.getuser().decode(locale.getdefaultlocale()[1]) TypeError: decode() argument 1 must be string, not None [gunhed@fbsd ~/bin/test/testproj]$ ipython Python 2.7.3 (default, Jan 8 2013, 14:31:16) Type "copyright", "credits" or "license" for more information. IPython 0.13.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import os In [2]: import getpass In [3]: import locale In [4]: getpass.getuser() Out[4]: 'gunhed' In [5]: getpass.getuser().decode(locale.getdefaultlocale()[1]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 getpass.getuser().decode(locale.getdefaultlocale()[1]) TypeError: decode() argument 1 must be string, not None In [6]: locale.getdefaultlocale() Out[6]: (None, None) In [7]: Do you really want to exit ([y]/n)? [gunhed@fbsd ~/bin/test/testproj]$ exit Script done on Thu Jan 10 12:27:10 2013 Testing and solution ==================== Proving assumption ------------------ Script started on Thu Jan 10 12:32:36 2013 [gunhed@fbsd ~]$ locale LANG= LC_CTYPE="C" LC_COLLATE="C" LC_TIME="C" LC_NUMERIC="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL= [gunhed@fbsd ~]$ ipython Python 2.7.3 (default, Jan 8 2013, 14:31:16) Type "copyright", "credits" or "license" for more information. IPython 0.13.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import getpass In [2]: import locale In [3]: getpass.getuser() Out[3]: 'gunhed' In [4]: locale.getdefaultlocale() Out[4]: (None, None) In [5]: # so, the following must fail ... In [6]: getpass.getuser().decode(locale.getdefaultlocale()[1]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 getpass.getuser().decode(locale.getdefaultlocale()[1]) TypeError: decode() argument 1 must be string, not None In [7]: exit Solution proposal ----------------- [gunhed@fbsd ~]$ export LC_ALL=de_DE.UTF-8 [gunhed@fbsd ~]$ locale LANG= LC_CTYPE="de_DE.UTF-8" LC_COLLATE="de_DE.UTF-8" LC_TIME="de_DE.UTF-8" LC_NUMERIC="de_DE.UTF-8" LC_MONETARY="de_DE.UTF-8" LC_MESSAGES="de_DE.UTF-8" LC_ALL=de_DE.UTF-8 [gunhed@fbsd ~]$ ipython Python 2.7.3 (default, Jan 8 2013, 14:31:16) Type "copyright", "credits" or "license" for more information. IPython 0.13.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import getpass In [2]: import locale In [3]: getpass.getuser() Out[3]: 'gunhed' In [4]: locale.getdefaultlocale() Out[4]: ('de_DE', 'UTF-8') In [5]: # now let's see what happens ... In [6]: getpass.getuser().decode(locale.getdefaultlocale()[1]) Out[6]: u'gunhed' In [7]: exit [gunhed@fbsd ~]$ exit Script done on Thu Jan 10 12:34:57 2013 >Release-Note: >Audit-Trail: >Unformatted: