Changeset 6382
- Timestamp:
- 09/19/07 20:55:53 (1 year ago)
- Files:
-
- django/branches/queryset-refactor/AUTHORS (modified) (6 diffs)
- django/branches/queryset-refactor/django/bin/compile-messages.py (modified) (2 diffs)
- django/branches/queryset-refactor/django/contrib/admin/views/main.py (modified) (1 diff)
- django/branches/queryset-refactor/django/contrib/auth/backends.py (modified) (2 diffs)
- django/branches/queryset-refactor/django/contrib/auth/models.py (modified) (4 diffs)
- django/branches/queryset-refactor/django/contrib/sessions/backends/base.py (modified) (1 diff)
- django/branches/queryset-refactor/django/contrib/sessions/backends/file.py (modified) (1 diff)
- django/branches/queryset-refactor/django/core/context_processors.py (modified) (1 diff)
- django/branches/queryset-refactor/django/core/handlers/modpython.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/backends/ado_mssql/creation.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/backends/mysql/creation.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/backends/mysql_old/creation.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/backends/oracle/creation.py (modified) (2 diffs)
- django/branches/queryset-refactor/django/db/backends/postgresql/creation.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/backends/sqlite3/creation.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/models/base.py (modified) (1 diff)
- django/branches/queryset-refactor/django/db/models/fields/__init__.py (modified) (4 diffs)
- django/branches/queryset-refactor/django/middleware/http.py (modified) (1 diff)
- django/branches/queryset-refactor/django/newforms/fields.py (modified) (2 diffs)
- django/branches/queryset-refactor/django/newforms/forms.py (modified) (3 diffs)
- django/branches/queryset-refactor/django/oldforms/__init__.py (modified) (3 diffs)
- django/branches/queryset-refactor/django/utils/datastructures.py (modified) (2 diffs)
- django/branches/queryset-refactor/django/utils/dateformat.py (modified) (1 diff)
- django/branches/queryset-refactor/django/utils/timesince.py (modified) (3 diffs)
- django/branches/queryset-refactor/docs/apache_auth.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/authentication.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/django-admin.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/email.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/i18n.txt (modified) (2 diffs)
- django/branches/queryset-refactor/docs/install.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/model-api.txt (modified) (4 diffs)
- django/branches/queryset-refactor/docs/newforms.txt (modified) (3 diffs)
- django/branches/queryset-refactor/docs/sessions.txt (modified) (6 diffs)
- django/branches/queryset-refactor/docs/settings.txt (modified) (1 diff)
- django/branches/queryset-refactor/docs/templates.txt (modified) (2 diffs)
- django/branches/queryset-refactor/tests/modeltests/basic/models.py (modified) (1 diff)
- django/branches/queryset-refactor/tests/modeltests/custom_pk/models.py (modified) (1 diff)
- django/branches/queryset-refactor/tests/modeltests/fixtures/models.py (modified) (3 diffs)
- django/branches/queryset-refactor/tests/regressiontests/auth_backends (copied) (copied from django/trunk/tests/regressiontests/auth_backends)
- django/branches/queryset-refactor/tests/regressiontests/auth_backends/__init__.py (copied) (copied from django/trunk/tests/regressiontests/auth_backends/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/auth_backends/models.py (copied) (copied from django/trunk/tests/regressiontests/auth_backends/models.py)
- django/branches/queryset-refactor/tests/regressiontests/auth_backends/tests.py (copied) (copied from django/trunk/tests/regressiontests/auth_backends/tests.py)
- django/branches/queryset-refactor/tests/regressiontests/backends/models.py (modified) (3 diffs)
- django/branches/queryset-refactor/tests/regressiontests/forms/extra.py (copied) (copied from django/trunk/tests/regressiontests/forms/extra.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/fields.py (copied) (copied from django/trunk/tests/regressiontests/forms/fields.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/forms.py (copied) (copied from django/trunk/tests/regressiontests/forms/forms.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/ar.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/ar.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/au.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/au.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/br.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/br.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/ca.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/ca.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/ch.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/ch.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/cl.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/cl.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/de.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/de.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/fi.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/fi.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/fr.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/fr.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/generic.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/generic.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/__init__.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/is_.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/is_.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/it.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/it.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/jp.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/jp.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/nl.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/nl.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/pl.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/pl.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor.py (deleted)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/sk.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/sk.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/uk.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/uk.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/localflavor/us.py (copied) (copied from django/trunk/tests/regressiontests/forms/localflavor/us.py)
- django/branches/queryset-refactor/tests/regressiontests/forms/regressions.py (modified) (1 diff)
- django/branches/queryset-refactor/tests/regressiontests/forms/tests.py (modified) (1 diff)
- django/branches/queryset-refactor/tests/regressiontests/forms/util.py (modified) (1 diff)
- django/branches/queryset-refactor/tests/regressiontests/forms/widgets.py (copied) (copied from django/trunk/tests/regressiontests/forms/widgets.py)
- django/branches/queryset-refactor/tests/regressiontests/max_lengths (copied) (copied from django/trunk/tests/regressiontests/max_lengths)
- django/branches/queryset-refactor/tests/regressiontests/max_lengths/__init__.py (copied) (copied from django/trunk/tests/regressiontests/max_lengths/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/max_lengths/models.py (copied) (copied from django/trunk/tests/regressiontests/max_lengths/models.py)
- django/branches/queryset-refactor/tests/regressiontests/max_lengths/tests.py (copied) (copied from django/trunk/tests/regressiontests/max_lengths/tests.py)
- django/branches/queryset-refactor/tests/regressiontests/templates/tests.py (modified) (2 diffs)
- django/branches/queryset-refactor/tests/regressiontests/utils/tests.py (modified) (2 diffs)
- django/branches/queryset-refactor/tests/regressiontests/utils/timesince.py (copied) (copied from django/trunk/tests/regressiontests/utils/timesince.py)
- django/branches/queryset-refactor/tests/regressiontests/views (copied) (copied from django/trunk/tests/regressiontests/views)
- django/branches/queryset-refactor/tests/regressiontests/views/fixtures (copied) (copied from django/trunk/tests/regressiontests/views/fixtures)
- django/branches/queryset-refactor/tests/regressiontests/views/fixtures/testdata.json (copied) (copied from django/trunk/tests/regressiontests/views/fixtures/testdata.json)
- django/branches/queryset-refactor/tests/regressiontests/views/__init__.py (copied) (copied from django/trunk/tests/regressiontests/views/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/views/locale (copied) (copied from django/trunk/tests/regressiontests/views/locale)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/en (copied) (copied from django/trunk/tests/regressiontests/views/locale/en)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/en/LC_MESSAGES (copied) (copied from django/trunk/tests/regressiontests/views/locale/en/LC_MESSAGES)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/en/LC_MESSAGES/djangojs.mo (copied) (copied from django/trunk/tests/regressiontests/views/locale/en/LC_MESSAGES/djangojs.mo)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/en/LC_MESSAGES/djangojs.po (copied) (copied from django/trunk/tests/regressiontests/views/locale/en/LC_MESSAGES/djangojs.po)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/es (copied) (copied from django/trunk/tests/regressiontests/views/locale/es)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/es/LC_MESSAGES (copied) (copied from django/trunk/tests/regressiontests/views/locale/es/LC_MESSAGES)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo (copied) (copied from django/trunk/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po (copied) (copied from django/trunk/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/fr (copied) (copied from django/trunk/tests/regressiontests/views/locale/fr)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/fr/LC_MESSAGES (copied) (copied from django/trunk/tests/regressiontests/views/locale/fr/LC_MESSAGES)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo (copied) (copied from django/trunk/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo)
- django/branches/queryset-refactor/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po (copied) (copied from django/trunk/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po)
- django/branches/queryset-refactor/tests/regressiontests/views/media (copied) (copied from django/trunk/tests/regressiontests/views/media)
- django/branches/queryset-refactor/tests/regressiontests/views/media/file.txt (copied) (copied from django/trunk/tests/regressiontests/views/media/file.txt)
- django/branches/queryset-refactor/tests/regressiontests/views/models.py (copied) (copied from django/trunk/tests/regressiontests/views/models.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests (copied) (copied from django/trunk/tests/regressiontests/views/tests)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/defaults.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/defaults.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/generic (copied) (copied from django/trunk/tests/regressiontests/views/tests/generic)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/generic/date_based.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/generic/date_based.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/generic/__init__.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/generic/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/i18n.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/i18n.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/__init__.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/__init__.py)
- django/branches/queryset-refactor/tests/regressiontests/views/tests/static.py (copied) (copied from django/trunk/tests/regressiontests/views/tests/static.py)
- django/branches/queryset-refactor/tests/regressiontests/views/urls.py (copied) (copied from django/trunk/tests/regressiontests/views/urls.py)
- django/branches/queryset-refactor/tests/regressiontests/views/views.py (copied) (copied from django/trunk/tests/regressiontests/views/views.py)
- django/branches/queryset-refactor/tests/templates/views (copied) (copied from django/trunk/tests/templates/views)
- django/branches/queryset-refactor/tests/templates/views/article_archive_month.html (copied) (copied from django/trunk/tests/templates/views/article_archive_month.html)
- django/branches/queryset-refactor/tests/templates/views/article_detail.html (copied) (copied from django/trunk/tests/templates/views/article_detail.html)
- django/branches/queryset-refactor/tests/urls.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/queryset-refactor/AUTHORS
r6341 r6382 50 50 Fabrice Aneche <akh@nobugware.com> 51 51 ant9000@netwise.it 52 Florian Apolloner 52 53 David Ascher <http://ascher.ca/> 53 54 david@kazserve.org … … 84 85 colin@owlfish.com 85 86 crankycoder@gmail.com 87 Paul Collier <paul@paul-collier.com> 86 88 Pete Crosier <pete.crosier@gmail.com> 87 89 Matt Croydon <http://www.postneo.com/> … … 122 124 Matthew Flanagan <http://wadofstuff.blogspot.com> 123 125 Eric Floehr <eric@intellovations.com> 126 Vincent Foley <vfoleybourgon@yahoo.ca> 124 127 Jorge Gajon <gajon@gajon.org> 125 128 gandalf@owca.info … … 195 198 limodou 196 199 Philip Lindborg <philip.lindborg@gmail.com> 200 msaelices <msaelices@gmail.com> 197 201 Matt McClanahan <http://mmcc.cx/> 198 202 Martin Maney <http://www.chipy.org/Martin_Maney> … … 258 262 Oliver Rutherfurd <http://rutherfurd.net/> 259 263 ryankanno 264 Manuel Saelices <msaelices@yaco.es> 260 265 Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/> 261 266 Vinay Sajip <vinay_sajip@yahoo.co.uk> … … 272 277 Leo Soto <leo.soto@gmail.com> 273 278 Wiliam Alves de Souza <wiliamsouza83@gmail.com> 279 Don Spaulding <donspauldingii@gmail.com> 274 280 Bjørn Stabell <bjorn@exoweb.net> 275 281 Georgi Stanojevski <glisha@gmail.com> django/branches/queryset-refactor/django/bin/compile-messages.py
r4934 r6382 5 5 import sys 6 6 7 try: 8 set 9 except NameError: 10 from sets import Set as set # For Python 2.3 11 12 7 13 def compile_messages(locale=None): 8 basedir = None 14 basedirs = [os.path.join('conf', 'locale'), 'locale'] 15 if os.environ.get('DJANGO_SETTINGS_MODULE'): 16 from django.conf import settings 17 basedirs += settings.LOCALE_PATHS 9 18 10 if os.path.isdir(os.path.join('conf', 'locale')): 11 basedir = os.path.abspath(os.path.join('conf', 'locale')) 12 elif os.path.isdir('locale'): 13 basedir = os.path.abspath('locale') 14 else: 15 print "This script should be run from the Django SVN tree or your project or app tree." 19 # Gather existing directories. 20 basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs))) 21 22 if not basedirs: 23 print "This script should be run from the Django SVN tree or your project or app tree, or with the settings module specified." 16 24 sys.exit(1) 17 25 18 if locale is not None: 19 basedir = os.path.join(basedir, locale, 'LC_MESSAGES') 26 for basedir in basedirs: 27 if locale: 28 basedir = os.path.join(basedir, locale, 'LC_MESSAGES') 29 compile_messages_in_dir(basedir) 20 30 31 def compile_messages_in_dir(basedir): 21 32 for dirpath, dirnames, filenames in os.walk(basedir): 22 33 for f in filenames: … … 41 52 parser.add_option('-l', '--locale', dest='locale', 42 53 help="The locale to process. Default is to process all.") 54 parser.add_option('--settings', 55 help='Python path to settings module, e.g. "myproject.settings". If provided, all LOCALE_PATHS will be processed. If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be checked as well.') 43 56 options, args = parser.parse_args() 44 57 if len(args): 45 58 parser.error("This program takes no arguments") 59 if options.settings: 60 os.environ['DJANGO_SETTINGS_MODULE'] = options.settings 46 61 compile_messages(options.locale) 47 62 django/branches/queryset-refactor/django/contrib/admin/views/main.py
r5799 r6382 141 141 def original_value(self): 142 142 if self.original: 143 return self.original.__dict__[self.field. column]143 return self.original.__dict__[self.field.attname] 144 144 145 145 def existing_display(self): django/branches/queryset-refactor/django/contrib/auth/backends.py
r4265 r6382 1 from django.db import connection 1 2 from django.contrib.auth.models import User 2 3 … … 15 16 return None 16 17 18 def get_group_permissions(self, user_obj): 19 "Returns a list of permission strings that this user has through his/her groups." 20 if not hasattr(user_obj, '_group_perm_cache'): 21 cursor = connection.cursor() 22 # The SQL below works out to the following, after DB quoting: 23 # cursor.execute(""" 24 # SELECT ct."app_label", p."codename" 25 # FROM "auth_permission" p, "auth_group_permissions" gp, "auth_user_groups" ug, "django_content_type" ct 26 # WHERE p."id" = gp."permission_id" 27 # AND gp."group_id" = ug."group_id" 28 # AND ct."id" = p."content_type_id" 29 # AND ug."user_id" = %s, [self.id]) 30 qn = connection.ops.quote_name 31 sql = """ 32 SELECT ct.%s, p.%s 33 FROM %s p, %s gp, %s ug, %s ct 34 WHERE p.%s = gp.%s 35 AND gp.%s = ug.%s 36 AND ct.%s = p.%s 37 AND ug.%s = %%s""" % ( 38 qn('app_label'), qn('codename'), 39 qn('auth_permission'), qn('auth_group_permissions'), 40 qn('auth_user_groups'), qn('django_content_type'), 41 qn('id'), qn('permission_id'), 42 qn('group_id'), qn('group_id'), 43 qn('id'), qn('content_type_id'), 44 qn('user_id'),) 45 cursor.execute(sql, [user_obj.id]) 46 user_obj._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) 47 return user_obj._group_perm_cache 48 49 def get_all_permissions(self, user_obj): 50 if not hasattr(user_obj, '_perm_cache'): 51 user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()]) 52 user_obj._perm_cache.update(self.get_group_permissions(user_obj)) 53 return user_obj._perm_cache 54 55 def has_perm(self, user_obj, perm): 56 return perm in self.get_all_permissions(user_obj) 57 58 def has_module_perms(self, user_obj, app_label): 59 return bool(len([p for p in self.get_all_permissions(user_obj) if p[:p.index('.')] == app_label])) 60 17 61 def get_user(self, user_id): 18 62 try: django/branches/queryset-refactor/django/contrib/auth/models.py
r6341 r6382 1 from django.contrib import auth 1 2 from django.core import validators 2 3 from django.core.exceptions import ImproperlyConfigured 3 from django.db import connection,models4 from django.db import models 4 5 from django.db.models.manager import EmptyManager 5 6 from django.contrib.contenttypes.models import ContentType … … 211 212 212 213 def get_group_permissions(self): 213 "Returns a list of permission strings that this user has through his/her groups." 214 if not hasattr(self, '_group_perm_cache'): 215 cursor = connection.cursor() 216 # The SQL below works out to the following, after DB quoting: 217 # cursor.execute(""" 218 # SELECT ct."app_label", p."codename" 219 # FROM "auth_permission" p, "auth_group_permissions" gp, "auth_user_groups" ug, "django_content_type" ct 220 # WHERE p."id" = gp."permission_id" 221 # AND gp."group_id" = ug."group_id" 222 # AND ct."id" = p."content_type_id" 223 # AND ug."user_id" = %s, [self.id]) 224 qn = connection.ops.quote_name 225 sql = """ 226 SELECT ct.%s, p.%s 227 FROM %s p, %s gp, %s ug, %s ct 228 WHERE p.%s = gp.%s 229 AND gp.%s = ug.%s 230 AND ct.%s = p.%s 231 AND ug.%s = %%s""" % ( 232 qn('app_label'), qn('codename'), 233 qn('auth_permission'), qn('auth_group_permissions'), 234 qn('auth_user_groups'), qn('django_content_type'), 235 qn('id'), qn('permission_id'), 236 qn('group_id'), qn('group_id'), 237 qn('id'), qn('content_type_id'), 238 qn('user_id'),) 239 cursor.execute(sql, [self.id]) 240 self._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) 241 return self._group_perm_cache 214 """ 215 Returns a list of permission strings that this user has through 216 his/her groups. This method queries all available auth backends. 217 """ 218 permissions = set() 219 for backend in auth.get_backends(): 220 if hasattr(backend, "get_group_permissions"): 221 permissions.update(backend.get_group_permissions(self)) 222 return permissions 242 223 243 224 def get_all_permissions(self): 244 if not hasattr(self, '_perm_cache'): 245 self._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in self.user_permissions.select_related()]) 246 self._perm_cache.update(self.get_group_permissions()) 247 return self._perm_cache 225 permissions = set() 226 for backend in auth.get_backends(): 227 if hasattr(backend, "get_all_permissions"): 228 permissions.update(backend.get_all_permissions(self)) 229 return permissions 248 230 249 231 def has_perm(self, perm): 250 "Returns True if the user has the specified permission." 232 """ 233 Returns True if the user has the specified permission. This method 234 queries all available auth backends, but returns immediately if any 235 backend returns True. Thus, a user who has permission from a single 236 auth backend is assumed to have permission in general. 237 """ 238 # Inactive users have no permissions. 251 239 if not self.is_active: 252 240 return False 241 242 # Superusers have all permissions. 253 243 if self.is_superuser: 254 244 return True 255 return perm in self.get_all_permissions() 245 246 # Otherwise we need to check the backends. 247 for backend in auth.get_backends(): 248 if hasattr(backend, "has_perm"): 249 if backend.has_perm(self, perm): 250 return True 251 return False 256 252 257 253 def has_perms(self, perm_list): 258 " Returns True if the user has each of the specified permissions."254 """Returns True if the user has each of the specified permissions.""" 259 255 for perm in perm_list: 260 256 if not self.has_perm(perm): … … 263 259 264 260 def has_module_perms(self, app_label): 265 "Returns True if the user has any permissions in the given app label." 261 """ 262 Returns True if the user has any permissions in the given app 263 label. Uses pretty much the same logic as has_perm, above. 264 """ 266 265 if not self.is_active: 267 266 return False 267 268 268 if self.is_superuser: 269 269 return True 270 return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == app_label])) 270 271 for backend in auth.get_backends(): 272 if hasattr(backend, "has_module_perms"): 273 if backend.has_module_perms(self, app_label): 274 return True 275 return False 271 276 272 277 def get_and_delete_messages(self): … … 301 306 class Message(models.Model): 302 307 """ 303 The message system is a lightweight way to queue messages for given users. A message is associated with a User instance (so it is only applicable for registered users). There's no concept of expiration or timestamps. Messages are created by the Django admin after successful actions. For example, "The poll Foo was created successfully." is a message. 308 The message system is a lightweight way to queue messages for given 309 users. A message is associated with a User instance (so it is only 310 applicable for registered users). There's no concept of expiration or 311 timestamps. Messages are created by the Django admin after successful 312 actions. For example, "The poll Foo was created successfully." is a 313 message. 304 314 """ 305 315 user = models.ForeignKey(User) django/branches/queryset-refactor/django/contrib/sessions/backends/base.py
r6341 r6382 108 108 return self._session_cache 109 109 except AttributeError: 110 if self. session_key is None:110 if self._session_key is None: 111 111 self._session_cache = {} 112 112 else: django/branches/queryset-refactor/django/contrib/sessions/backends/file.py
r6341 r6382 32 32 session_file = open(self._key_to_file(), "rb") 33 33 try: 34 session_data = self.decode(session_file.read()) 35 except(EOFError, SuspiciousOperation): 36 self._session_key = self._get_new_session_key() 37 self._session_cache = {} 38 self.save() 34 try: 35 session_data = self.decode(session_file.read()) 36 except(EOFError, SuspiciousOperation): 37 self._session_key = self._get_new_session_key() 38 self._session_cache = {} 39 self.save() 39 40 finally: 40 41 session_file.close() django/branches/queryset-refactor/django/core/context_processors.py
r5379 r6382 14 14 Returns context variables required by apps that use Django's authentication 15 15 system. 16 17 If there is no 'user' attribute in the request, uses AnonymousUser (from 18 django.contrib.auth). 16 19 """ 20 if hasattr(request, 'user'): 21 user = request.user 22 else: 23 from django.contrib.auth.models import AnonymousUser 24 user = AnonymousUser() 17 25 return { 18 'user': request.user,19 'messages': request.user.get_and_delete_messages(),20 'perms': PermWrapper( request.user),26 'user': user, 27 'messages': user.get_and_delete_messages(), 28 'perms': PermWrapper(user), 21 29 } 22 30 django/branches/queryset-refactor/django/core/handlers/modpython.py
r6339 r6382 43 43 44 44 def is_secure(self): 45 # Note: modpython 3.2.10+ has req.is_https(), but we need to support previous versions 46 return 'HTTPS' in self._req.subprocess_env and self._req.subprocess_env['HTTPS'] == 'on' 45 try: 46 return self._req.is_https() 47 except AttributeError: 48 # mod_python < 3.2.10 doesn't have req.is_https(). 49 return self._req.subprocess_env.get('HTTPS', '').lower() in ('on', '1') 47 50 48 51 def _load_post_and_files(self): django/branches/queryset-refactor/django/db/backends/ado_mssql/creation.py
r5803 r6382 7 7 'DateTimeField': 'smalldatetime', 8 8 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 9 'FileField': 'varchar( 100)',10 'FilePathField': 'varchar( 100)',9 'FileField': 'varchar(%(max_length)s)', 10 'FilePathField': 'varchar(%(max_length)s)', 11 11 'FloatField': 'double precision', 12 'ImageField': 'varchar( 100)',12 'ImageField': 'varchar(%(max_length)s)', 13 13 'IntegerField': 'int', 14 14 'IPAddressField': 'char(15)', django/branches/queryset-refactor/django/db/backends/mysql/creation.py
r5803 r6382 11 11 'DateTimeField': 'datetime', 12 12 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 13 'FileField': 'varchar( 100)',14 'FilePathField': 'varchar( 100)',13 'FileField': 'varchar(%(max_length)s)', 14 'FilePathField': 'varchar(%(max_length)s)', 15 15 'FloatField': 'double precision', 16 'ImageField': 'varchar( 100)',16 'ImageField': 'varchar(%(max_length)s)', 17 17 'IntegerField': 'integer', 18 18 'IPAddressField': 'char(15)', django/branches/queryset-refactor/django/db/backends/mysql_old/creation.py
r5876 r6382 11 11 'DateTimeField': 'datetime', 12 12 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 13 'FileField': 'varchar( 100)',14 'FilePathField': 'varchar( 100)',13 'FileField': 'varchar(%(max_length)s)', 14 'FilePathField': 'varchar(%(max_length)s)', 15 15 'FloatField': 'double precision', 16 'ImageField': 'varchar( 100)',16 'ImageField': 'varchar(%(max_length)s)', 17 17 'IntegerField': 'integer', 18 18 'IPAddressField': 'char(15)', django/branches/queryset-refactor/django/db/backends/oracle/creation.py
r5981 r6382 14 14 'DateTimeField': 'TIMESTAMP', 15 15 'DecimalField': 'NUMBER(%(max_digits)s, %(decimal_places)s)', 16 'FileField': 'NVARCHAR2( 100)',17 'FilePathField': 'NVARCHAR2( 100)',16 'FileField': 'NVARCHAR2(%(max_length)s)', 17 'FilePathField': 'NVARCHAR2(%(max_length)s)', 18 18 'FloatField': 'DOUBLE PRECISION', 19 'ImageField': 'NVARCHAR2( 100)',19 'ImageField': 'NVARCHAR2(%(max_length)s)', 20 20 'IntegerField': 'NUMBER(11)', 21 21 'IPAddressField': 'VARCHAR2(15)', … … 29 29 'TextField': 'NCLOB', 30 30 'TimeField': 'TIMESTAMP', 31 'URLField': 'VARCHAR2( 200)',31 'URLField': 'VARCHAR2(%(max_length)s)', 32 32 'USStateField': 'CHAR(2)', 33 33 } django/branches/queryset-refactor/django/db/backends/postgresql/creation.py
r5803 r6382 11 11 'DateTimeField': 'timestamp with time zone', 12 12 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 13 'FileField': 'varchar( 100)',14 'FilePathField': 'varchar( 100)',13 'FileField': 'varchar(%(max_length)s)', 14 'FilePathField': 'varchar(%(max_length)s)', 15 15 'FloatField': 'double precision', 16 'ImageField': 'varchar( 100)',16 'ImageField': 'varchar(%(max_length)s)', 17 17 'IntegerField': 'integer', 18 18 'IPAddressField': 'inet', django/branches/queryset-refactor/django/db/backends/sqlite3/creation.py
r5803 r6382 10 10 'DateTimeField': 'datetime', 11 11 'DecimalField': 'decimal', 12 'FileField': 'varchar( 100)',13 'FilePathField': 'varchar( 100)',12 'FileField': 'varchar(%(max_length)s)', 13 'FilePathField': 'varchar(%(max_length)s)',
