Django

Code

Changeset 3580

Show
Ignore:
Timestamp:
08/13/06 19:32:07 (2 years ago)
Author:
utrebec
Message:

[full-history] Trunk merge from [3577]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/full-history/AUTHORS

    r3519 r3580  
    6161    ChaosKCW 
    6262    Ian Clelland <clelland@gmail.com> 
     63    crankycoder@gmail.com 
    6364    Matt Croydon <http://www.postneo.com/> 
    6465    Jonathan Daugherty (cygnus) <http://www.cprogrammer.org/> 
     
    7273    Baishampayan Ghose 
    7374    martin.glueck@gmail.com 
     75    Simon Greenhill <dev@simon.net.nz> 
    7476    Espen Grindhaug <http://grindhaug.org/> 
    7577    Brant Harris 
     
    125127    David Schein 
    126128    sopel 
     129    Thomas Steinacher <tom@eggdrop.ch> 
    127130    Radek Å varz <http://www.svarz.cz/translate/> 
    128131    Swaroop C H <http://www.swaroopch.info> 
     
    131134    Tom Insam 
    132135    Joe Topjian <http://joe.terrarum.net/geek/code/python/django/> 
     136    Karen Tracey <graybark@bellsouth.net> 
    133137    Amit Upadhyay 
    134138    Geert Vanderkelen 
  • django/branches/full-history/django/bin/compile-messages.py

    r3426 r3580  
    1515        sys.exit(1) 
    1616 
    17     for (dirpath, dirnames, filenames) in os.walk(basedir): 
     17    for dirpath, dirnames, filenames in os.walk(basedir): 
    1818        for f in filenames: 
    1919            if f.endswith('.po'): 
  • django/branches/full-history/django/conf/global_settings.py

    r3426 r3580  
    253253SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Age of cookie, in seconds (default: 2 weeks). 
    254254SESSION_COOKIE_DOMAIN = None              # A string like ".lawrence.com", or None for standard domain cookie. 
     255SESSION_COOKIE_SECURE = False             # Whether the session cookie should be secure (https:// only). 
    255256SESSION_SAVE_EVERY_REQUEST = False        # Whether to save the session data on every request. 
    256257SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # Whether sessions expire when a user closes his browser. 
  • django/branches/full-history/django/conf/locale/ru/LC_MESSAGES/django.po

    r3151 r3580  
    142142 
    143143#: contrib/comments/models.py:237 
     144#, fuzzy 
    144145msgid "karma score" 
    145146msgstr "КарЌа счёт" 
     
    744745#, python-format 
    745746msgid "Models available in the %(name)s application." 
    746 msgstr "МПЎелО ЎПступМы в %(name)s прОлПжеМОО." 
     747msgstr "МПЎелО ЎПступМы в %(name) прОлПжеМОО." 
    747748 
    748749#: contrib/admin/templates/admin/index.html:28 
  • django/branches/full-history/django/conf/project_template/settings.py

    r2980 r3580  
    6161 
    6262TEMPLATE_DIRS = ( 
    63     # Put strings here, like "/home/html/django_templates"
     63    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates"
    6464    # Always use forward slashes, even on Windows. 
     65    # Don't forget to use absolute paths, not relative paths. 
    6566) 
    6667 
  • django/branches/full-history/django/contrib/admin/media/js/admin/RelatedObjectLookups.js

    r3066 r3580  
    1212        href = triggeringLink.href + '?pop=1'; 
    1313    } 
    14     var win = window.open(href, name, 'height=500,width=740,resizable=yes,scrollbars=yes'); 
     14    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 
    1515    win.focus(); 
    1616    return false; 
  • django/branches/full-history/django/contrib/admin/templates/admin/change_form.html

    r3426 r3580  
    2222  </ul> 
    2323{% endif %}{% endif %} 
    24 <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post">{% block form_top %}{% endblock %} 
     24<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %} 
    2525<div> 
    2626{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %} 
  • django/branches/full-history/django/contrib/admin/templates/admin/edit_inline_tabular.html

    r3426 r3580  
    88      {% endif %} 
    99   {% endfor %} 
     10   </tr></thead> 
    1011   {% for fcw in bound_related_object.form_field_collection_wrappers %} 
    1112      {% if change %}{% if original_row_needed %} 
  • django/branches/full-history/django/contrib/admin/urls.py

    r3247 r3580  
    2222    ('^doc/filters/$', 'django.contrib.admin.views.doc.template_filter_index'), 
    2323    ('^doc/views/$', 'django.contrib.admin.views.doc.view_index'), 
    24     ('^doc/views/jump/$', 'django.contrib.admin.views.doc.jump_to_view'), 
    2524    ('^doc/views/(?P<view>[^/]+)/$', 'django.contrib.admin.views.doc.view_detail'), 
    2625    ('^doc/models/$', 'django.contrib.admin.views.doc.model_index'), 
     
    2827#    ('^doc/templates/$', 'django.views.admin.doc.template_index'), 
    2928    ('^doc/templates/(?P<template>.*)/$', 'django.contrib.admin.views.doc.template_detail'), 
     29 
     30    # "Add user" -- a special-case view 
     31    ('^auth/user/add/$', 'django.contrib.admin.views.auth.user_add_stage'), 
    3032 
    3133    # Add/change/delete/history 
  • django/branches/full-history/django/contrib/admin/views/doc.py

    r3426 r3580  
    4444            title, body, metadata = utils.parse_docstring(tag_func.__doc__) 
    4545            if title: 
    46                 title = utils.parse_rst(title, 'tag', 'tag:' + tag_name) 
     46                title = utils.parse_rst(title, 'tag', _('tag:') + tag_name) 
    4747            if body: 
    48                 body = utils.parse_rst(body, 'tag', 'tag:' + tag_name) 
     48                body = utils.parse_rst(body, 'tag', _('tag:') + tag_name) 
    4949            for key in metadata: 
    50                 metadata[key] = utils.parse_rst(metadata[key], 'tag', 'tag:' + tag_name) 
     50                metadata[key] = utils.parse_rst(metadata[key], 'tag', _('tag:') + tag_name) 
    5151            if library in template.builtins: 
    5252                tag_library = None 
     
    7575            title, body, metadata = utils.parse_docstring(filter_func.__doc__) 
    7676            if title: 
    77                 title = utils.parse_rst(title, 'filter', 'filter:' + filter_name) 
     77                title = utils.parse_rst(title, 'filter', _('filter:') + filter_name) 
    7878            if body: 
    79                 body = utils.parse_rst(body, 'filter', 'filter:' + filter_name) 
     79                body = utils.parse_rst(body, 'filter', _('filter:') + filter_name) 
    8080            for key in metadata: 
    81                 metadata[key] = utils.parse_rst(metadata[key], 'filter', 'filter:' + filter_name) 
     81                metadata[key] = utils.parse_rst(metadata[key], 'filter', _('filter:') + filter_name) 
    8282            if library in template.builtins: 
    8383                tag_library = None 
     
    133133    title, body, metadata = utils.parse_docstring(view_func.__doc__) 
    134134    if title: 
    135         title = utils.parse_rst(title, 'view', 'view:' + view) 
     135        title = utils.parse_rst(title, 'view', _('view:') + view) 
    136136    if body: 
    137         body = utils.parse_rst(body, 'view', 'view:' + view) 
     137        body = utils.parse_rst(body, 'view', _('view:') + view) 
    138138    for key in metadata: 
    139         metadata[key] = utils.parse_rst(metadata[key], 'model', 'view:' + view) 
     139        metadata[key] = utils.parse_rst(metadata[key], 'model', _('view:') + view) 
    140140    return render_to_response('admin_doc/view_detail.html', { 
    141141        'name': view, 
     
    162162        app_mod = models.get_app(app_label) 
    163163    except ImproperlyConfigured: 
    164         raise Http404, "App %r not found" % app_label 
     164        raise Http404, _("App %r not found") % app_label 
    165165    model = None 
    166166    for m in models.get_models(app_mod): 
     
    169169            break 
    170170    if model is None: 
    171         raise Http404, "Model %r not found in app %r" % (model_name, app_label) 
     171        raise Http404, _("Model %r not found in app %r") % (model_name, app_label) 
    172172 
    173173    opts = model._meta 
     
    181181            data_type = related_object_name = field.rel.to.__name__ 
    182182            app_label = field.rel.to._meta.app_label 
    183             verbose = utils.parse_rst(("the related `%s.%s` object"  % (app_label, data_type)), 'model', 'model:' + data_type) 
     183            verbose = utils.parse_rst((_("the related `%s.%s` object")  % (app_label, data_type)), 'model', _('model:') + data_type) 
    184184        else: 
    185185            data_type = get_readable_field_data_type(field) 
     
    203203            verbose = func.__doc__ 
    204204            if verbose: 
    205                 verbose = utils.parse_rst(utils.trim_docstring(verbose), 'model', 'model:' + opts.module_name) 
     205                verbose = utils.parse_rst(utils.trim_docstring(verbose), 'model', _('model:') + opts.module_name) 
    206206            fields.append({ 
    207207                'name': func_name, 
     
    212212    # Gather related objects 
    213213    for rel in opts.get_all_related_objects(): 
    214         verbose = "related `%s.%s` objects" % (rel.opts.app_label, rel.opts.object_name) 
     214        verbose = _("related `%s.%s` objects") % (rel.opts.app_label, rel.opts.object_name) 
    215215        accessor = rel.get_accessor_name() 
    216216        fields.append({ 
    217217            'name'      : "%s.all" % accessor, 
    218218            'data_type' : 'List', 
    219             'verbose'   : utils.parse_rst("all " + verbose , 'model', 'model:' + opts.module_name), 
     219            'verbose'   : utils.parse_rst(_("all %s") % verbose , 'model', _('model:') + opts.module_name), 
    220220        }) 
    221221        fields.append({ 
    222222            'name'      : "%s.count" % accessor, 
    223223            'data_type' : 'Integer', 
    224             'verbose'   : utils.parse_rst("number of " + verbose , 'model', 'model:' + opts.module_name), 
     224            'verbose'   : utils.parse_rst(_("number of %s") % verbose , 'model', _('model:') + opts.module_name), 
    225225        }) 
    226226 
     
    337337            views.extend(extract_views_from_urlpatterns(p.url_patterns, base + p.regex.pattern)) 
    338338        else: 
    339             raise TypeError, "%s does not appear to be a urlpattern object" % p 
     339            raise TypeError, _("%s does not appear to be a urlpattern object") % p 
    340340    return views 
    341341 
  • django/branches/full-history/django/contrib/admin/views/main.py

    r3426 r3580  
    264264                return HttpResponseRedirect(post_url_continue % pk_value) 
    265265            if request.POST.has_key("_popup"): 
    266                 return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %s, "%s");</script>' % \ 
     266                return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %r, "%s");</script>' % \ 
    267267                    (pk_value, str(new_object).replace('"', '\\"'))) 
    268268            elif request.POST.has_key("_addanother"): 
  • django/branches/full-history/django/contrib/auth/forms.py

    r3519 r3580  
    55from django.core import validators 
    66from django import forms 
     7 
     8class UserCreationForm(forms.Manipulator): 
     9    "A form that creates a user, with no privileges, from the given username and password." 
     10    def __init__(self): 
     11        self.fields = ( 
     12            forms.TextField(field_name='username', length=30, maxlength=30, is_required=True, 
     13                validator_list=[validators.isAlphaNumeric, self.isValidUsername]), 
     14            forms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True), 
     15            forms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True, 
     16                validator_list=[validators.AlwaysMatchesOtherField('password1', "The two password fields didn't match.")]), 
     17        ) 
     18 
     19    def isValidUsername(self, field_data, all_data): 
     20        try: 
     21            User.objects.get(username=field_data) 
     22        except User.DoesNotExist: 
     23            return 
     24        raise validators.ValidationError, 'A user with that username already exists.' 
     25 
     26    def save(self, new_data): 
     27        "Creates the user." 
     28        return User.objects.create_user(new_data['username'], '', new_data['password1']) 
    729 
    830class AuthenticationForm(forms.Manipulator): 
  • django/branches/full-history/django/contrib/flatpages/README.TXT

    r1189 r3580  
    33For full documentation, see either of these: 
    44 
    5     * The file django/docs/flatpages.txt in the Django distribution 
     5    * The file docs/flatpages.txt in the Django distribution 
    66    * http://www.djangoproject.com/documentation/flatpages/ on the Web 
    77 
  • django/branches/full-history/django/contrib/sessions/middleware.py

    r3113 r3580  
    8989                    datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)) 
    9090                response.set_cookie(settings.SESSION_COOKIE_NAME, session_key, 
    91                     max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN) 
     91                    max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, 
     92                    secure=settings.SESSION_COOKIE_SECURE or None) 
    9293        return response 
  • django/branches/full-history/django/core/management.py

    r3519 r3580  
    9595        sys.exit(1) 
    9696 
    97     # Get installed models, so we generate REFERENCES right 
     97    # Get installed models, so we generate REFERENCES right. 
     98    # We trim models from the current app so that the sqlreset command does not 
     99    # generate invalid SQL (leaving models out of known_models is harmless, so 
     100    # we can be conservative). 
     101    app_models = models.get_models(app) 
    98102    final_output = [] 
    99     known_models = set(_get_installed_models(_get_table_list())
     103    known_models = set([model for model in _get_installed_models(_get_table_list()) if model not in app_models]
    100104    pending_references = {} 
    101105 
    102     app_models = models.get_models(app) 
    103106 
    104107    for model in app_models: 
     
    119122    not_installed_models = set(pending_references.keys()) 
    120123    if not_installed_models: 
    121         final_output.append('-- The following references should be added but depend on non-existant tables:') 
     124        alter_sql = [] 
    122125        for model in not_installed_models: 
    123             final_output.extend(['-- ' + sql for sql in 
     126            alter_sql.extend(['-- ' + sql for sql in 
    124127                _get_sql_for_pending_references(model, pending_references)]) 
     128        if alter_sql: 
     129            final_output.append('-- The following references should be added but depend on non-existent tables:') 
     130            final_output.extend(alter_sql) 
    125131 
    126132    return final_output 
     
    296302                        style.SQL_TABLE(backend.quote_name(table)), 
    297303                        style.SQL_KEYWORD(backend.get_drop_foreignkey_sql()), 
    298                         style.SQL_FIELD(backend.quote_name("%s_referencing_%s_%s" % (col, r_table, r_col))))) 
     304                        style.SQL_FIELD(backend.quote_name('%s_refs_%s_%x' % (col, r_col, abs(hash((table, r_table)))))))) 
    299305                del references_to_delete[model] 
    300306 
     
    693699    introspection_module = get_introspection_module() 
    694700 
    695     def table2model(table_name): 
    696         object_name = table_name.title().replace('_', '') 
    697         return object_name.endswith('s') and object_name[:-1] or object_name 
     701    table2model = lambda table_name: table_name.title().replace('_', '') 
    698702 
    699703    cursor = connection.cursor() 
     
    724728            extra_params = {}  # Holds Field parameters such as 'db_column'. 
    725729 
     730            if ' ' in att_name: 
     731                extra_params['db_column'] = att_name 
     732                att_name = att_name.replace(' ', '') 
     733                comment_notes.append('Field renamed to remove spaces.') 
    726734            if keyword.iskeyword(att_name): 
    727735                extra_params['db_column'] = att_name 
     
    954962                        except models.FieldDoesNotExist: 
    955963                            e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) 
     964                # date_hierarchy 
     965                if opts.admin.date_hierarchy: 
     966                    try: 
     967                        f = opts.get_field(opts.admin.date_hierarchy) 
     968                    except models.FieldDoesNotExist: 
     969                        e.add(opts, '"admin.date_hierarchy" refers to %r, which isn\'t a field.' % opts.admin.date_hierarchy) 
    956970 
    957971        # Check ordering attribute. 
     
    11291143 
    11301144def runfcgi(args): 
    1131     """Run this project as a FastCGI application. requires flup.""" 
     1145    "Runs this project as a FastCGI application. Requires flup." 
     1146    from django.conf import settings 
     1147    from django.utils import translation 
     1148    # Activate the current language, because it won't get activated later. 
     1149    try: 
     1150        translation.activate(settings.LANGUAGE_CODE) 
     1151    except AttributeError: 
     1152        pass 
    11321153    from django.core.servers.fastcgi import runfastcgi 
    11331154    runfastcgi(args) 
     
    12861307            print style.SQL_KEYWORD("COMMIT;") 
    12871308 
    1288 def execute_manager(settings_mod, argv=None): 
     1309def setup_environ(settings_mod): 
     1310    """ 
     1311    Configure the runtime environment. This can also be used by external 
     1312    scripts wanting to set up a similar environment to manage.py. 
     1313    """ 
    12891314    # Add this project to sys.path so that it's importable in the conventional 
    12901315    # way. For example, if this file (manage.py) lives in a directory 
     
    12981323    # Set DJANGO_SETTINGS_MODULE appropriately. 
    12991324    os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name 
    1300  
     1325    return project_directory 
     1326 
     1327def execute_manager(settings_mod, argv=None): 
     1328    project_directory = setup_environ(settings_mod) 
    13011329    action_mapping = DEFAULT_ACTION_MAPPING.copy() 
    13021330 
  • django/branches/full-history/django/core/servers/basehttp.py

    r3426 r3580  
    548548        env['PATH_INFO'] = urllib.unquote(path) 
    549549        env['QUERY_STRING'] = query 
    550  
    551         host = self.address_string() 
    552         if host != self.client_address[0]: 
    553             env['REMOTE_HOST'] = host 
    554550        env['REMOTE_ADDR'] = self.client_address[0] 
    555551 
  • django/branches/full-history/django/core/urlresolvers.py

    r3519 r3580  
    8787    def __init__(self, regex, callback, default_args=None): 
    8888        # regex is a string representing a regular expression. 
    89         # callback is something like 'foo.views.news.stories.story_detail', 
    90         # which represents the path to a module and a view function name. 
     89        # callback is either a string like 'foo.views.news.stories.story_detail' 
     90        # which represents the path to a module and a view function name, or a 
     91        # callable object (view). 
    9192        self.regex = re.compile(regex) 
    92         self.callback = callback 
     93        if callable(callback): 
     94            self._callback = callback 
     95        else: 
     96            self._callback = None 
     97            self._callback_str = callback 
    9398        self.default_args = default_args or {} 
    9499 
     
    107112            kwargs.update(self.default_args) 
    108113 
    109             try: # Lazily load self.func. 
    110                 return self.func, args, kwargs 
    111             except AttributeError: 
    112                 self.func = self.get_callback() 
    113             return self.func, args, kwargs 
    114  
    115     def get_callback(self): 
    116         mod_name, func_name = get_mod_func(self.callback) 
    117         try: 
    118             return getattr(__import__(mod_name, '', '', ['']), func_name) 
     114            return self.callback, args, kwargs 
     115 
     116    def _get_callback(self): 
     117        if self._callback is not None: 
     118            return self._callback 
     119        mod_name, func_name = get_mod_func(self._callback_str) 
     120        try: 
     121            self._callback = getattr(__import__(mod_name, '', '', ['']), func_name) 
    119122        except ImportError, e: 
    120123            raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e)) 
    121124        except AttributeError, e: 
    122125            raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e)) 
     126        return self._callback 
     127    callback = property(_get_callback) 
    123128 
    124129    def reverse(self, viewname, *args, **kwargs): 
    125         if viewname != self.callback: 
     130        mod_name, func_name = get_mod_func(viewname) 
     131        try: 
     132            lookup_view = getattr(__import__(mod_name, '', '', ['']), func_name) 
     133        except (ImportError, AttributeError): 
     134            raise NoReverseMatch 
     135        if lookup_view != self.callback: 
    126136            raise NoReverseMatch 
    127137        return self.reverse_helper(*args, **kwargs) 
     
    186196        return self._resolve_special('500') 
    187197 
    188     def reverse(self, viewname, *args, **kwargs): 
     198    def reverse(self, lookup_view, *args, **kwargs): 
     199        if not callable(lookup_view): 
     200            mod_name, func_name = get_mod_func(lookup_view) 
     201            try: 
     202                lookup_view = getattr(__import__(mod_name, '', '', ['']), func_name) 
     203            except (ImportError, AttributeError): 
     204                raise NoReverseMatch 
    189205        for pattern in self.urlconf_module.urlpatterns: 
    190206            if isinstance(pattern, RegexURLResolver): 
    191207                try: 
    192                     return pattern.reverse_helper(viewname, *args, **kwargs) 
     208                    return pattern.reverse_helper(lookup_view, *args, **kwargs) 
    193209                except NoReverseMatch: 
    194210                    continue 
    195             elif pattern.callback == viewname
     211            elif pattern.callback == lookup_view
    196212                try: 
    197213                    return pattern.reverse_helper(*args, **kwargs) 
     
    200216        raise NoReverseMatch 
    201217 
    202     def reverse_helper(self, viewname, *args, **kwargs): 
    203         sub_match = self.reverse(viewname, *args, **kwargs) 
     218    def reverse_helper(self, lookup_view, *args, **kwargs): 
     219        sub_match = self.reverse(lookup_view, *args, **kwargs) 
    204220        result = reverse_helper(self.regex, *args, **kwargs) 
    205221        return result + sub_match 
  • django/branches/full-history/django/db/backends/postgresql_psycopg2/base.py

    r3115 r3580  
    1111    from django.core.exceptions import ImproperlyConfigured 
    1212    raise ImproperlyConfigured, "Error loading psycopg2 module: %s" % e 
     13 
     14# Register Unicode conversions 
     15import psycopg2.extensions 
     16psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 
    1317 
    1418DatabaseError = Database.DatabaseError 
  • django/branches/full-history/django/db/models/base.py

    r3519 r3580  
    177177            if cursor.fetchone(): 
    178178                db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks] 
    179                 cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \ 
    180                     (backend.quote_name(self._meta.db_table), 
    181                     ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]), 
    182                     backend.quote_name(self._meta.pk.column)), 
    183                     db_values + [pk_val]) 
     179                if db_values: 
     180                    cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \ 
     181                        (backend.quote_name(self._meta.db_table), 
     182                        ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]), 
     183                        backend.quote_name(self._meta.pk.column)), 
     184                        db_values + [pk_val]) 
    184185            else: 
    185186                record_exists = False 
  • django/branches/full-history/django/db/models/fields/__init__.py

    r3519 r3580  
    2121 
    2222# prepares a value for use in a LIKE query 
    23 prep_for_like_query = lambda x: str(x).replace("%", "\%").replace("_", "\_") 
     23prep_for_like_query = lambda x: str(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_") 
    2424 
    2525# returns the <ul> class for a given radio_admin value 
  • django/branches/full-history/django/db/models/__init__.py

    r3519 r3580  
    2626        bits = func(*args, **kwargs) 
    2727        viewname = bits[0] 
    28         return reverse(bits[0], None, *bits[1:2]) 
     28        return reverse(bits[0], None, *bits[1:3]) 
    2929    return inner 
    3030 
     
    4848 
    4949    def __get_value__(self): 
    50         return datetime.datetime.now() + self.delta 
     50        return (datetime.datetime.now() + self.delta).date() 
    5151 
    5252    def __getattr__(self, attr): 
  • django/branches/full-history/django/db/models/loading.py

    r3519 r3580  
    3333    return _app_list 
    3434 
    35 def get_app(app_label, emptyOK = False): 
     35def get_app(app_label, emptyOK=False): 
    3636    "Returns the module containing the models for the given app_label. If the app has no models in it and 'emptyOK' is True, returns None." 
    3737    get_apps() # Run get_apps() to populate the _app_list cache. Slightly hackish. 
     
    7676        return model_list 
    7777 
    78 def get_model(app_label, model_name, seed_cache = True): 
     78def get_model(app_label, model_name, seed_cache=True): 
    7979    """ 
    8080    Returns the model matching the given app_label and case-insensitive 
  • django/branches/full-history/django/db/models/manipulators.py

    r3426 r3580  
    139139 
    140140            if child_follow: 
    141                 obj_list = expanded_data[related.var_name].items() 
     141                obj_list = expanded_data.get(related.var_name, {}).items() 
    142142                if not obj_list: 
    143143                    continue 
  • django/branches/full-history/django/http/__init__.py

    r3426 r3580  
    3939    def get_full_path(self): 
    4040        return '' 
    41          
     41 
    4242    def is_secure(self): 
    4343        return os.environ.get("HTTPS") == "on" 
     
    204204                self.cookies[key][var.replace('_', '-')] = val 
    205205 
    206     def delete_cookie(self, key): 
    207         try: 
    208             self.cookies[key]['max_age'] = 0 
    209         except KeyError: 
    210             pass 
     206    def delete_cookie(self, key, path='/', domain=None): 
     207        self.cookies[key] = '' 
     208        if path is not None: 
     209            self.cookies[key]['path'] = path 
     210        if domain is not None: 
     211            self.cookies[key]['domain'] = path 
     212        self.cookies[key]['expires'] = 0 
     213        self.cookies[key]['max-age'] = 0 
    211214 
    212215    def _get_content(self): 
  • django/branches/full-history/django/template/defaultfilters.py

    r3426 r3580  
    340340    "Formats a time according to the given format" 
    341341    from django.utils.dateformat import time_format 
    342     if not value
     342    if value in (None, '')
    343343        return '' 
    344344    if arg is None: 
     
    438438    the comma is used for the singular case. 
    439439    """ 
    440     if not ',' in arg:  
     440    if not ',' in arg: 
    441441        arg = ',' + arg 
    442442    bits = arg.split(',') 
  • django/branches/full-history/django/template/loaders/filesystem.py

    r2809 r3580  
    1818        except IOError: 
    1919            tried.append(filepath) 
    20     if template_dirs
     20    if tried
    2121        error_msg = "Tried %s" % tried 
    2222    else: 
  • django/branches/full-history/django/views/generic/create_update.py

    r3426 r3580  
    77from django.http import Http404, HttpResponse, HttpResponseRedirect 
    88from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured 
     9from django.utils.translation import gettext 
    910 
    1011def create_object(request, model, template_name=None, 
     
    4041 
    4142            if request.user.is_authenticated(): 
    42                 request.user.message_set.create(message="The %s was created successfully." % model._meta.verbose_name
     43                request.user.message_set.create(message=gettext("The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name}
    4344 
    4445            # Redirect to the new object: first by trying post_save_redirect, 
     
    114115 
    115116            if request.user.is_authenticated(): 
    116                 request.user.message_set.create(message="The %s was updated successfully." % model._meta.verbose_name
     117                request.user.message_set.create(message=gettext("The %(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name}
    117118 
    118119            # Do a post-after-redirect so that reload works, etc. 
     
    181182        object.delete() 
    182183        if request.user.is_authenticated(): 
    183             request.user.message_set.create(message="The %s was deleted." % model._meta.verbose_name
     184            request.user.message_set.create(message=gettext("The %(verbose_name)s was deleted.") % {"verbose_name": model._meta.verbose_name}
    184185        return HttpResponseRedirect(post_delete_redirect) 
    185186    else: 
  • django/branches/full-history/docs/db-api.txt

    r3519