Django

Code

Changeset 7176

Show
Ignore:
Timestamp:
02/28/08 15:24:51 (4 months ago)
Author:
jbronn
Message:

gis: Merged revisions 7105-7168 via svnmerge from trunk.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/gis

    • Property svnmerge-integrated changed from /django/trunk:1-7102 to /django/trunk:1-7175
  • django/branches/gis/AUTHORS

    r7103 r7176  
    5757    Jökull Sólberg Auðunsson <jokullsolberg@gmail.com> 
    5858    Arthur <avandorp@gmail.com> 
     59    David Avsajanishvili <avsd05@gmail.com> 
    5960    axiak@mit.edu 
    6061    Jiri Barton 
     
    7172    Andrew Brehaut <http://brehaut.net/blog> 
    7273    brut.alll@gmail.com 
     74    btoll@bestweb.net 
    7375    Jonathan Buchanan <jonathan.buchanan@gmail.com> 
    7476    Can Burak Çilingir <canburak@cs.bilgi.edu.tr> 
     
    169171    Jason Huggins <http://www.jrandolph.com/blog/> 
    170172    Hyun Mi Ae 
     173    Ibon <ibonso@gmail.com> 
    171174    Tom Insam 
    172175    Baurzhan Ismagulov <ibr@radix50.net> 
  • django/branches/gis/django/conf/global_settings.py

    r7103 r7176  
    4949    ('es', gettext_noop('Spanish')), 
    5050    ('es-ar', gettext_noop('Argentinean Spanish')), 
     51    ('eu', gettext_noop('Basque')), 
    5152    ('fa', gettext_noop('Persian')), 
    5253    ('fi', gettext_noop('Finnish')), 
    5354    ('fr', gettext_noop('French')), 
    54     ('ga', gettext_noop('Gaeilge')), 
     55    ('ga', gettext_noop('Irish')), 
    5556    ('gl', gettext_noop('Galician')), 
    5657    ('hu', gettext_noop('Hungarian')), 
     
    6061    ('it', gettext_noop('Italian')), 
    6162    ('ja', gettext_noop('Japanese')), 
     63    ('ka', gettext_noop('Georgian')), 
    6264    ('ko', gettext_noop('Korean')), 
    6365    ('km', gettext_noop('Khmer')), 
  • django/branches/gis/django/conf/locale/eu/LC_MESSAGES/djangojs.mo

    • Property svn:mime-type set to application/octet-stream
  • django/branches/gis/django/conf/locale/eu/LC_MESSAGES/django.mo

    • Property svn:mime-type set to application/octet-stream
  • django/branches/gis/django/contrib/admin/views/decorators.py

    r6672 r7176  
     1import base64 
     2import md5 
     3import cPickle as pickle 
     4try: 
     5    from functools import wraps 
     6except ImportError: 
     7    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback. 
     8 
    19from django import http, template 
    210from django.conf import settings 
     
    614from django.utils.translation import ugettext_lazy, ugettext as _ 
    715from django.utils.safestring import mark_safe 
    8 import base64, datetime, md5 
    9 import cPickle as pickle 
    1016 
    1117ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.") 
     
    105111                return _display_login_form(request, ERROR_MESSAGE) 
    106112 
    107     return _checklogin 
     113    return wraps(view_func)(_checklogin) 
  • django/branches/gis/django/contrib/auth/decorators.py

    r6672 r7176  
     1try: 
     2    from functools import wraps, update_wrapper 
     3except ImportError: 
     4    from django.utils.functional import wraps, update_wrapper  # Python 2.3, 2.4 fallback. 
     5 
    16from django.contrib.auth import REDIRECT_FIELD_NAME 
    27from django.http import HttpResponseRedirect 
     
    5257        self.login_url = login_url 
    5358        self.redirect_field_name = redirect_field_name 
    54         self.__name__ = view_func.__name__ 
     59        update_wrapper(self, view_func) 
    5560         
    5661    def __get__(self, obj, cls=None): 
  • django/branches/gis/django/contrib/databrowse/plugins/calendars.py

    r6672 r7176  
    99from django.utils.safestring import mark_safe 
    1010from django.views.generic import date_based 
    11 import datetime 
    12 import time 
    1311 
    1412class CalendarPlugin(DatabrowsePlugin): 
  • django/branches/gis/django/contrib/databrowse/plugins/fieldchoices.py

    r6672 r7176  
    88from django.utils.safestring import mark_safe 
    99from django.views.generic import date_based 
    10 import datetime 
    11 import time 
    1210import urllib 
    1311 
  • django/branches/gis/django/contrib/databrowse/views.py

    r5492 r7176  
    33from django.shortcuts import render_to_response 
    44from django.contrib.databrowse.datastructures import EasyModel, EasyChoice 
    5 import datetime 
    6 import time 
    75 
    86########### 
  • django/branches/gis/django/contrib/formtools/preview.py

    r6815 r7176  
    44 
    55from django.conf import settings 
    6 from django.core.exceptions import ImproperlyConfigured 
    76from django.http import Http404 
    87from django.shortcuts import render_to_response 
  • django/branches/gis/django/contrib/formtools/tests.py

    r6815 r7176  
    44from django.conf import settings 
    55from django.test import TestCase 
    6 from django.test.client import Client 
    7  
    86 
    97success_string = "Done was called!" 
     
    8987        self.assertEqual(response.content, success_string) 
    9088 
    91  
    92 if __name__ == '__main__': 
    93     unittest.main() 
  • django/branches/gis/django/contrib/humanize/templatetags/humanize.py

    r6672 r7176  
    33from django import template 
    44from django.template import defaultfilters 
    5 from django.conf import settings 
    6 from datetime import date, timedelta 
     5from datetime import date 
    76import re 
    87 
  • django/branches/gis/django/contrib/localflavor/ar/forms.py

    r7103 r7176  
    88from django.utils.encoding import smart_unicode 
    99from django.utils.translation import ugettext 
    10 import re 
    1110 
    1211class ARProvinceSelect(Select): 
  • django/branches/gis/django/contrib/localflavor/jp/forms.py

    r6990 r7176  
    77from django.utils.translation import ugettext 
    88from django.newforms.fields import RegexField, Select 
    9  
    10 import re 
    119 
    1210class JPPostalCodeField(RegexField): 
  • django/branches/gis/django/contrib/sessions/models.py

    r6920 r7176  
    1 import os 
    2 import sys 
    3 import time 
    4 import datetime 
    51import base64 
    62import md5 
    7 import random 
    83import cPickle as pickle 
    94 
  • django/branches/gis/django/contrib/webdesign/tests.py

    r6394 r7176  
    1515 
    1616from django.contrib.webdesign.lorem_ipsum import * 
    17 import datetime 
    1817 
    1918if __name__ == '__main__': 
  • django/branches/gis/django/core/handlers/base.py

    r7103 r7176  
    110110            return http.HttpResponseForbidden('<h1>Permission denied</h1>') 
    111111        except SystemExit: 
    112             pass # See http://code.djangoproject.com/ticket/1023 
     112            # Allow sys.exit() to actually exit. See tickets #1023 and #4701 
     113            raise 
    113114        except: # Handle everything else, including SuspiciousOperation, etc. 
    114115            # Get the exception info now, in case another exception is thrown later. 
  • django/branches/gis/django/core/management/commands/loaddata.py

    r7044 r7176  
    3131 
    3232        # Keep a count of the installed objects and fixtures 
    33         count = [0, 0] 
     33        fixture_count = 0 
     34        object_count = 0 
    3435        models = set() 
    3536 
     
    6667                    print "Skipping fixture '%s': %s is not a known serialization format" % (fixture_name, format) 
    6768 
    68             for fixture_dir in app_fixtures + list(settings.FIXTURE_DIRS) + ['']: 
     69            if os.path.isabs(fixture_name): 
     70                fixture_dirs = [fixture_name] 
     71            else: 
     72                fixture_dirs = app_fixtures + list(settings.FIXTURE_DIRS) + [''] 
     73 
     74            for fixture_dir in fixture_dirs: 
    6975                if verbosity > 1: 
    7076                    print "Checking %s for fixtures..." % humanize(fixture_dir) 
     
    8793                            return 
    8894                        else: 
    89                             count[1] += 1 
     95                            fixture_count += 1 
    9096                            if verbosity > 0: 
    9197                                print "Installing %s fixture '%s' from %s." % \ 
     
    94100                                objects = serializers.deserialize(format, fixture) 
    95101                                for obj in objects: 
    96                                     count[0] += 1 
     102                                    object_count += 1 
    97103                                    models.add(obj.object.__class__) 
    98104                                    obj.save() 
     
    114120                                (format, fixture_name, humanize(fixture_dir)) 
    115121 
    116         if count[0] > 0: 
     122        if object_count > 0: 
    117123            sequence_sql = connection.ops.sequence_reset_sql(self.style, models) 
    118124            if sequence_sql: 
     
    125131        transaction.leave_transaction_management() 
    126132 
    127         if count[0] == 0: 
     133        if object_count == 0: 
    128134            if verbosity >= 2: 
    129135                print "No fixtures found." 
    130136        else: 
    131137            if verbosity > 0: 
    132                 print "Installed %d object(s) from %d fixture(s)" % tuple(count) 
     138                print "Installed %d object(s) from %d fixture(s)" % (object_count, fixture_count) 
  • django/branches/gis/django/core/management/commands/sqlall.py

    r6018 r7176  
    22 
    33class Command(AppCommand): 
    4     help = "Prints the CREATE TABLE, initial-data and CREATE INDEX SQL statements for the given model module name(s)." 
     4    help = "Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s)." 
    55 
    66    output_transaction = True 
  • django/branches/gis/django/core/serializers/json.py

    r6990 r7176  
    55import datetime 
    66from django.utils import simplejson 
    7 from django.utils.simplejson import decoder 
    87from django.core.serializers.python import Serializer as PythonSerializer 
    98from django.core.serializers.python import Deserializer as PythonDeserializer 
  • django/branches/gis/django/core/serializers/pyyaml.py

    r6990 r7176  
    55""" 
    66 
    7 import datetime 
    87from django.db import models 
    98from django.core.serializers.python import Serializer as PythonSerializer 
  • django/branches/gis/django/db/backends/mysql/base.py

    r6672 r7176  
    2222from MySQLdb.converters import conversions 
    2323from MySQLdb.constants import FIELD_TYPE 
    24 import types 
    2524import re 
    2625 
  • django/branches/gis/django/db/backends/postgresql/operations.py

    r6525 r7176  
    2727    def deferrable_sql(self): 
    2828        return " DEFERRABLE INITIALLY DEFERRED" 
     29 
     30    def field_cast_sql(self, db_type): 
     31        if db_type == 'inet': 
     32            return 'HOST(%s)' 
     33        return '%s' 
    2934 
    3035    def last_insert_id(self, cursor, table_name, pk_name): 
  • django/branches/gis/django/db/models/base.py

    r7103 r7176  
    4242        # Build complete list of parents 
    4343        for base in parents: 
    44             if base is not Model: 
     44            # Things without _meta aren't functional models, so they're 
     45            # uninteresting parents. 
     46            if hasattr(base, '_meta'): 
    4547                new_class._meta.parents.append(base) 
    4648                new_class._meta.parents.extend(base._meta.parents) 
     
    134136        return not self.__eq__(other) 
    135137 
     138    def __hash__(self): 
     139        return hash(self._get_pk_val()) 
     140 
    136141    def __init__(self, *args, **kwargs): 
    137142        dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs) 
     
    140145        # overrides it. It should be one or the other; don't duplicate the work 
    141146        # The reason for the kwargs check is that standard iterator passes in by 
    142         # args, and nstantiation for iteration is 33% faster. 
     147        # args, and instantiation for iteration is 33% faster. 
    143148        args_len = len(args) 
    144149        if args_len > len(self._meta.fields): 
  • django/branches/gis/django/db/models/fields/__init__.py

    r7044 r7176  
    229229            except ValueError: 
    230230                raise ValueError("The __year lookup type requires an integer argument") 
    231             return ['%s-01-01 00:00:00' % value, '%s-12-31 23:59:59.999999' % value] 
     231            if settings.DATABASE_ENGINE == 'sqlite3': 
     232                first = '%s-01-01' 
     233            else: 
     234                first = '%s-01-01 00:00:00' 
     235            return [first % value, '%s-12-31 23:59:59.999999' % value] 
    232236        raise TypeError("Field has invalid lookup: %s" % lookup_type) 
    233237 
     
    452456        Field.__init__(self, *args, **kwargs) 
    453457 
     458    def get_internal_type(self): 
     459        return "BooleanField" 
     460 
    454461    def to_python(self, value): 
    455462        if value in (True, False): return value 
     
    469476    def get_manipulator_field_objs(self): 
    470477        return [oldforms.TextField] 
     478 
     479    def get_internal_type(self): 
     480        return "CharField" 
    471481 
    472482    def to_python(self, value): 
     
    499509            kwargs['blank'] = True 
    500510        Field.__init__(self, verbose_name, name, **kwargs) 
     511 
     512    def get_internal_type(self): 
     513        return "DateField" 
    501514 
    502515    def to_python(self, value): 
     
    569582 
    570583class DateTimeField(DateField): 
     584    def get_internal_type(self): 
     585        return "DateTimeField" 
     586 
    571587    def to_python(self, value): 
    572588        if value is None: 
     
    639655        Field.__init__(self, verbose_name, name, **kwargs) 
    640656 
     657    def get_internal_type(self): 
     658        return "DecimalField" 
     659 
    641660    def to_python(self, value): 
    642661        if value is None: 
     
    698717        CharField.__init__(self, *args, **kwargs) 
    699718 
    700     def get_internal_type(self): 
    701         return "CharField" 
    702  
    703719    def get_manipulator_field_objs(self): 
    704720        return [oldforms.EmailField] 
     
    717733        kwargs['max_length'] = kwargs.get('max_length', 100) 
    718734        Field.__init__(self, verbose_name, name, **kwargs) 
     735 
     736    def get_internal_type(self): 
     737        return "FileField" 
    719738 
    720739    def get_db_prep_save(self, value): 
     
    827846        return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)] 
    828847 
     848    def get_internal_type(self): 
     849        return "FilePathField" 
     850 
    829851class FloatField(Field): 
    830852    empty_strings_allowed = False 
     
    832854    def get_manipulator_field_objs(self): 
    833855        return [oldforms.FloatField] 
     856 
     857    def get_internal_type(self): 
     858        return "FloatField" 
    834859 
    835860    def formfield(self, **kwargs): 
     
    854879        if not self.height_field: 
    855880            setattr(cls, 'get_%s_height' % self.name, curry(cls._get_FIELD_height, field=self)) 
     881 
     882    def get_internal_type(self): 
     883        return "ImageField" 
    856884 
    857885    def save_file(self, new_data, new_object, original_object, change, rel, save=True): 
     
    877905        return [oldforms.IntegerField] 
    878906 
     907    def get_internal_type(self): 
     908        return "IntegerField" 
     909 
    879910    def formfield(self, **kwargs): 
    880911        defaults = {'form_class': forms.IntegerField} 
     
    891922        return [oldforms.IPAddressField] 
    892923 
     924    def get_internal_type(self): 
     925        return "IPAddressField" 
     926 
    893927    def validate(self, field_data, all_data): 
    894928        validators.isValidIPAddress4(field_data, None) 
     
    904938        kwargs['null'] = True 
    905939        Field.__init__(self, *args, **kwargs) 
     940 
     941    def get_internal_type(self): 
     942        return "NullBooleanField" 
    906943 
    907944    def to_python(self, value): 
     
    924961        return [oldforms.PhoneNumberField] 
    925962 
     963    def get_internal_type(self): 
     964        return "PhoneNumberField" 
     965 
    926966    def validate(self, field_data, all_data): 
    927967        validators.isValidPhone(field_data, all_data) 
     
    937977        return [oldforms.PositiveIntegerField] 
    938978 
     979    def get_internal_type(self): 
     980        return "PositiveIntegerField" 
     981 
    939982    def formfield(self, **kwargs): 
    940983        defaults = {'min_value': 0} 
     
    945988    def get_manipulator_field_objs(self): 
    946989        return [oldforms.PositiveSmallIntegerField] 
     990 
     991    def get_internal_type(self): 
     992        return "PositiveSmallIntegerField" 
    947993 
    948994    def formfield(self, **kwargs): 
     
    9601006        super(SlugField, self).__init__(*args, **kwargs) 
    9611007 
     1008    def get_internal_type(self): 
     1009        return "SlugField" 
     1010 
    9621011class SmallIntegerField(IntegerField): 
    9631012    def get_manipulator_field_objs(self): 
    9641013        return [oldforms.SmallIntegerField] 
    9651014 
     1015    def get_internal_type(self): 
     1016        return "SmallIntegerField" 
     1017 
    9661018class TextField(Field): 
    9671019    def get_manipulator_field_objs(self): 
    9681020        return [oldforms.LargeTextField] 
     1021 
     1022    def get_internal_type(self): 
     1023        return "TextField" 
    9691024 
    9701025    def formfield(self, **kwargs): 
     
    9801035            kwargs['editable'] = False 
    9811036        Field.__init__(self, verbose_name, name, **kwargs) 
     1037 
     1038    def get_internal_type(self): 
     1039        return "TimeField" 
    9821040 
    9831041    def get_db_prep_lookup(self, lookup_type, value): 
     
    10451103        return [oldforms.URLField] 
    10461104 
    1047     def get_internal_type(self): 
    1048         return "CharField" 
    1049  
    10501105    def formfield(self, **kwargs): 
    10511106        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists} 
     
    10561111    def get_manipulator_field_objs(self): 
    10571112        return [oldforms.USStateField] 
     1113 
     1114    def get_internal_type(self): 
     1115        return "USStateField" 
    10581116 
    10591117    def formfield(self, **kwargs): 
     
    10671125        self.schema_path = schema_path 
    10681126        Field.__init__(self, verbose_name, name, **kwargs) 
    1069  
    1070     def get_internal_type(self): 
    1071         return "TextField" 
    10721127 
    10731128    def get_manipulator_field_objs(self): 
     
    10811136        IntegerField.__init__(self, **kwargs ) 
    10821137 
    1083     def get_internal_type(self): 
    1084         return "IntegerField" 
    1085  
    10861138    def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True): 
    10871139        return [oldforms.HiddenField(name_prefix + self.name)] 
  • django/branches/gis/django/db/models/fields/related.py

    r6018 r7176  
    2424pending_lookups = {} 
    2525 
    26 def add_lookup(rel_cls, field): 
    27     name = field.rel.to 
    28     module = rel_cls.__module__ 
    29     key = (module, name) 
    30     # Has the model already been loaded? 
    31     # If so, resolve the string reference right away 
    32     model = get_model(rel_cls._meta.app_label, field.rel.to, False) 
     26def add_lazy_relation(cls, field, relation): 
     27    """ 
     28    Adds a lookup on ``cls`` when a related field is defined using a string, 
     29    i.e.:: 
     30     
     31        class MyModel(Model): 
     32            fk = ForeignKey("AnotherModel") 
     33             
     34    This string can be: 
     35     
     36        * RECURSIVE_RELATIONSHIP_CONSTANT (i.e. "self") to indicate a recursive 
     37          relation. 
     38           
     39        * The name of a model (i.e "AnotherModel") to indicate another model in 
     40          the same app. 
     41           
     42        * An app-label and model name (i.e. "someapp.AnotherModel") to indicate 
     43          another model in a different app. 
     44           
     45    If the other model hasn't yet been loaded -- almost a given if you're using 
     46    lazy relationships -- then the relation won't be set up until the 
     47    class_prepared signal fires at the end of model initialization. 
     48    """ 
     49    # Check for recursive relations 
     50    if relation == RECURSIVE_RELATIONSHIP_CONSTANT: 
     51        app_label = cls._meta.app_label 
     52        model_name = cls.__name__ 
     53     
     54    else: 
     55        # Look for an "app.Model" relation 
     56        try: 
     57            app_label, model_name = relation.split(".") 
     58        except ValueError: 
     59            # If we can't split, assume a model in current app 
     60            app_label = cls._meta.app_label 
     61            model_name = relation 
     62     
     63    # Try to look up the related model, and if it's already loaded resolve the 
     64    # string right away. If get_model returns None, it means that the related 
     65    # model isn't loaded yet, so we need to pend the relation until the class  
     66    # is prepared. 
     67    model = get_model(app_label, model_name, False) 
    3368    if model: 
    3469        field.rel.to = model 
    35         field.do_related_class(model, rel_cls) 
     70        field.do_related_class(model, cls) 
    3671    else: 
    37         # Mark the related field for later lookup 
    38         pending_lookups.setdefault(key, []).append((rel_cls, field)) 
    39  
     72        key = (app_label, model_name) 
     73        value = (cls, field) 
     74        pending_lookups.setdefault(key, []).append(value) 
     75     
    4076def do_pending_lookups(sender): 
    41     other_cls = sender 
    42     key = (other_cls.__module__, other_cls.__name__) 
    43     for rel_cls, field in pending_lookups.setdefault(key, []): 
    44         field.rel.to = other_cls 
    45         field.do_related_class(other_cls, rel_cls) 
     77    """ 
     78    Handle any pending relations to the sending model. Sent from class_prepared. 
     79    """ 
     80    key = (sender._meta.app_label, sender.__name__) 
     81    for cls, field in pending_lookups.pop(key, []): 
     82        field.rel.to = sender 
     83        field.do_related_class(sender, cls) 
    4684 
    4785dispatcher.connect(do_pending_lookups, signal=signals.class_prepared) 
     
    67105        other = self.rel.to 
    68106        if isinstance(other, basestring): 
    69             if other == RECURSIVE_RELATIONSHIP_CONSTANT: 
    70                 self.rel.to = cls.__name__ 
    71             add_lookup(cls, self) 
     107            add_lazy_relation(cls, self, other) 
    72108        else: 
    73109            self.do_related_class(other, cls) 
  • django/branches/gis/django/http/__init__.py

    r6990 r7176  
    172172        return result 
    173173 
    174     def __deepcopy__(self, memo={}): 
     174    def __deepcopy__(self, memo): 
    175175        import copy 
    176176        result = self.__class__('', mutable=True) 
     
    224224    def copy(self): 
    225225        "Returns a mutable copy of this object." 
    226         return self.__deepcopy__(
     226        return self.__deepcopy__({}
    227227 
    228228    def urlencode(self): 
  • django/branches/gis/django/newforms/forms.py

    r7044 r7176  
    2222    name = name[0].upper() + name[1:] 
    2323    return name.replace('_', ' ') 
     24 
     25def get_declared_fields(bases, attrs, with_base_fields=True): 
     26    """ 
     27    Create a list of form field instances from the passed in 'attrs', p