﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
4826	str.upper() failed in _get_installed_models when syncdb	timchen119@…	Jacob	"Problem:

I'm using django svn-5640

#python manage.py syncdb
Traceback (most recent call last):
  File ""manage.py"", line 11, in ?
    execute_manager(settings)
  File ""/usr/lib/python2.4/site-packages/django/core/management.py"", line 1742, in execute_manager
    execute_from_command_line(action_mapping, argv)
  File ""/usr/lib/python2.4/site-packages/django/core/management.py"", line 1639, in execute_from_command_line
    action_mapping[action](int(options.verbosity), options.interactive)
  File ""/usr/lib/python2.4/site-packages/django/core/management.py"", line 549, in syncdb
    seen_models = _get_installed_models(table_list)
  File ""/usr/lib/python2.4/site-packages/django/core/management.py"", line 71, in _get_installed_models
    return set([m for m in all_models if converter(m._meta.db_table) in map(converter, table_list)])
TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode'

Since some backend (eg:oracle xe) use case insensitive table names, 
django will run str.upper() to make table names unique.
however str.upper() expect for a str type,
and now django trunk version give a unicode type back,
that would cause a problem.

Solution:
Change str.upper() in _get_installed_models at management.py to string.upper() would avoid this problem.

--- /usr/lib/python2.4/site-packages/django/core/management.py.orig     2007-07-10 16:55:07.000000000 +0800
+++ /usr/lib/python2.4/site-packages/django/core/management.py  2007-07-10 16:37:27.000000000 +0800
@@ -65,7 +65,9 @@
         for model in models.get_models(app):
             all_models.append(model)
     if backend.uses_case_insensitive_names:
-        converter = str.upper
+        import string
+        converter = string.upper
     else:
         converter = lambda x: x
     return set([m for m in all_models if converter(m._meta.db_table) in map(converter, table_list)])
"		closed	Uncategorized	dev		duplicate	unicode,oracle,str		Unreviewed	1	0	0	0	0	0
