Django

Code

Changeset 6990

Show
Ignore:
Timestamp:
01/02/08 10:57:53 (6 months ago)
Author:
jbronn
Message:

gis: Merged revisions 6920-6989 via svnmerge from trunk.

Files:

Legend:

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

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

    r6920 r6990  
    131131    Eric Floehr <eric@intellovations.com> 
    132132    Vincent Foley <vfoleybourgon@yahoo.ca> 
     133    Rudolph Froger <rfroger@estrate.nl> 
    133134    Jorge Gajon <gajon@gajon.org> 
    134135    gandalf@owca.info 
     
    301302    Vasiliy Stavenko <stavenko@gmail.com> 
    302303    Thomas Steinacher <http://www.eggdrop.ch/> 
     304    Johan C. Stöver <johan@nilling.nl> 
    303305    nowell strite 
    304306    Thomas Stromberg <tstromberg@google.com> 
     
    328330    Amit Upadhyay 
    329331    Geert Vanderkelen 
     332    I.S. van Oostveen <v.oostveen@idca.nl> 
    330333    viestards.lists@gmail.com 
    331334    George Vilches <gav@thataddress.com> 
  • django/branches/gis/django/conf/__init__.py

    r6920 r6990  
    5353                raise KeyError 
    5454        except KeyError: 
    55             raise ImportError, "Environment variable %s is undefined so settings cannot be imported." % ENVIRONMENT_VARIABLE   # NOTE: This is arguably an EnvironmentError, but that causes problems with Python's interactive help 
     55            # NOTE: This is arguably an EnvironmentError, but that causes 
     56            # problems with Python's interactive help. 
     57            raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) 
    5658 
    5759        self._target = Settings(settings_module) 
  • django/branches/gis/django/conf/locale/nl/LC_MESSAGES/django.po

    r5492 r6990  
    1 # SOME DESCRIPTIVE TITLE. 
    2 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
    3 # This file is distributed under the same license as the django package. 
    4 # Johan C. Stöver <johan@nilling.nl>, 2005. 
    5 # Rudolph Froger <rfroger@estrate.nl>, 2006. 
    6 
     1 
    72#, fuzzy 
    83msgid "" 
     
    116"Report-Msgid-Bugs-To: \n" 
    127"POT-Creation-Date: 2006-12-09 15:51+0100\n" 
    13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
    14 "Last-Translator: Johan C. Stöver <johan@nilling.nl>\n" 
     8"PO-Revision-Date: 2007-12-17 21:14+0100\n" 
     9"Last-Translator: I.S. van Oostveen\n" 
    1510"Language-Team: \n" 
    1611"MIME-Version: 1.0\n" 
     
    7065#: db/models/fields/__init__.py:381 
    7166msgid "This value must be either True or False." 
    72 msgstr "De waarde moet of True (waar) of False (onwaar) zijn." 
     67msgstr "De waarde moet of True (Waar) of False (Onwaar) zijn." 
    7368 
    7469#: db/models/fields/__init__.py:397 
     
    280275#: core/validators.py:139 
    281276msgid "Year must be 1900 or later." 
    282 msgstr "Het jaartal moet 1900 of nieuwer zijn." 
     277msgstr "Het jaartal moet 1900 of later zijn." 
    283278 
    284279#: core/validators.py:143 
     
    297292#: core/validators.py:173 core/validators.py:442 forms/__init__.py:667 
    298293msgid "No file was submitted. Check the encoding type on the form." 
    299 msgstr "Er was geen bestand verstuurd. Controleer de encoding van het formulier." 
     294msgstr "Er was geen bestand verstuurd. Controleer het coderings type van het formulier." 
    300295 
    301296#: core/validators.py:177 
     
    304299"corrupted image." 
    305300msgstr "" 
    306 "Bestand ongeldig. Het bestand dat is gegeven is geen afbeelding of was " 
     301"Bestand ongeldig. Het bestand dat is gegeven is geen afbeelding of is " 
    307302"beschadigd." 
    308303 
     
    310305#, python-format 
    311306msgid "The URL %s does not point to a valid image." 
    312 msgstr "De URL %s wijst niet naar een afbeelding." 
     307msgstr "De URL %s wijst niet naar een geldige afbeelding." 
    313308 
    314309#: core/validators.py:188 
     
    322317#, python-format 
    323318msgid "The URL %s does not point to a valid QuickTime video." 
    324 msgstr "De URL %s wijst niet naar een QuickTime video." 
     319msgstr "De URL %s wijst niet naar een geldige QuickTime video." 
    325320 
    326321#: core/validators.py:200 
     
    350345#, python-format 
    351346msgid "The URL %s is a broken link." 
    352 msgstr "De URL %s is een niet werkende link." 
     347msgstr "De URL %s is niet een werkende link." 
    353348 
    354349#: core/validators.py:251 
    355350msgid "Enter a valid U.S. state abbreviation." 
    356 msgstr "Geef een geldige afkorting van een VS staat." 
     351msgstr "Geef een geldige afkorting van een staat in de VS." 
    357352 
    358353#: core/validators.py:265 
     
    361356msgid_plural "Watch your mouth! The words %s are not allowed here." 
    362357msgstr[0] "Pas op uw taalgebruik! Gebruik van %s niet toegestaan." 
    363 msgstr[1] "Pas op uw taalgebruik! Gebruik van de woorden %s niet toegestaan." 
     358msgstr[1] "Pas op uw taalgebruik! Gebruik van de woorden %s is niet toegestaan." 
    364359 
    365360#: core/validators.py:272 
     
    374369#: core/validators.py:300 core/validators.py:311 
    375370msgid "Please enter both fields or leave them both empty." 
    376 msgstr "Voer waarden in in beide velden of laat beide leeg." 
     371msgstr "Voer waarden in beide velden in of laat beide leeg." 
    377372 
    378373#: core/validators.py:318 
     
    451446#: core/validators.py:453 
    452447msgid "The format for this field is wrong." 
    453 msgstr "Het formaat van dit veld is fout." 
     448msgstr "Het formaat van dit veld is foutief." 
    454449 
    455450#: core/validators.py:468 
     
    537532"required for logging in." 
    538533msgstr "" 
    539 "Het lijkt erop dat uw browser geen cookies accepteerd. Om aan te melden " 
     534"Het lijkt erop dat uw browser geen cookies accepteert. Om aan te melden " 
    540535"moeten cookies worden geaccepteerd." 
    541536 
     
    646641"Designates that this user has all permissions without explicitly assigning " 
    647642"them." 
    648 msgstr "Bepaald dat deze gebruiker alle rechten heeft, zonder deze expliciet toe te wijzen." 
     643msgstr "Bepaalt dat deze gebruiker alle rechten heeft, zonder deze expliciet toe te wijzen." 
    649644 
    650645#: contrib/auth/models.py:98 
     
    686681#: contrib/auth/models.py:113 
    687682msgid "Important dates" 
    688 msgstr "Belangrijke data
     683msgstr "Belangrijke datums
    689684 
    690685#: contrib/auth/models.py:114 
     
    784779"submission has been saved." 
    785780msgstr "" 
    786 "Uw sessie is verlopen, meldt u opnieuw aan. Maakt u geen zorgen: Uw bijdrage " 
     781"Uw sessie is verlopen, meld u opnieuw aan. Maakt u zich geen zorgen: Uw bijdrage " 
    787782"is opgeslagen." 
    788783 
     
    792787"cookies, reload this page, and try again." 
    793788msgstr "" 
    794 "Het lijkt erop dat uw browser geen cookies accepteerd. Zet het gebruik van " 
     789"Het lijkt erop dat uw browser geen cookies accepteert. Zet het gebruik van " 
    795790"cookies aan in uw browser, laad deze pagina nogmaals en probeer het opnieuw." 
    796791 
     
    929924#, python-format 
    930925msgid "the related `%s.%s` object" 
    931 msgstr "the related `%s.%s` object" 
     926msgstr "het gerelateerde `%s.%s` object" 
    932927 
    933928#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 
     
    939934#, python-format 
    940935msgid "related `%s.%s` objects" 
    941 msgstr "related `%s.%s` objects
     936msgstr "de gerelateerde `%s.%s` objecten
    942937 
    943938#: contrib/admin/views/doc.py:219 
     
    949944#, python-format 
    950945msgid "number of %s" 
    951 msgstr "nummer van %s" 
     946msgstr "aantal %s" 
    952947 
    953948#: contrib/admin/views/doc.py:229 
    954949#, python-format 
    955950msgid "Fields on %s objects" 
    956 msgstr "Velden van %s objects
     951msgstr "Velden van %s objecten
    957952 
    958953#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 
     
    11401135msgstr "" 
    11411136"Weet u zeker dat u %(object_name)s \"%(escaped_object)s\" wilt verwijderen? Alle " 
    1142 "volgende opjecten worden verwijderd:" 
     1137"volgende objecten worden verwijderd:" 
    11431138 
    11441139#: contrib/admin/templates/admin/delete_confirmation.html:26 
    11451140msgid "Yes, I'm sure" 
    1146 msgstr "Ja, Ik weet het zeker" 
     1141msgstr "Ja, ik weet het zeker" 
    11471142 
    11481143#: contrib/admin/templates/admin/404.html:4 
     
    11981193#: contrib/admin/templates/admin/submit_line.html:6 
    11991194msgid "Save and continue editing" 
    1200 msgstr "Opslaan en bewerk opnieuw
     1195msgstr "Opslaan en opnieuw bewerken
    12011196 
    12021197#: contrib/admin/templates/admin/submit_line.html:7 
     
    12251220#: contrib/admin/templates/admin/index.html:44 
    12261221msgid "You don't have permission to edit anything." 
    1227 msgstr "U heeft geen rechten om iets te wijzigen
     1222msgstr "U heeft geen rechten om iets te wijzigen.
    12281223 
    12291224#: contrib/admin/templates/admin/index.html:52 
     
    13811376"het soms\n" 
    13821377"noodzakelijk is dat de computer van waaruit de pagina wordt bekeken intern " 
    1383 "is\n" 
     1378"is.\n" 
    13841379"(Raadpleeg uw systeembeheerder of uw computer zich op het interne netwerk " 
    13851380"bevind).<p>\n" 
     
    13941389"that page." 
    13951390msgstr "" 
    1396 "Spring vanuit elke pagina naar de documentatie voor de view die gegenereerd " 
     1391"Springt vanuit elke pagina naar de documentatie voor de view die gegenereerd " 
    13971392"wordt door die pagina" 
    13981393 
     
    14071402msgstr "" 
    14081403"Toont de content-type en unieke ID voor pagina's die een enkel object " 
    1409 "voorsteld." 
     1404"voorstellen." 
    14101405 
    14111406#: contrib/admin/templates/admin_doc/bookmarklets.html:25 
     
    14151410#: contrib/admin/templates/admin_doc/bookmarklets.html:26 
    14161411msgid "Jumps to the admin page for pages that represent a single object." 
    1417 msgstr "Ga naar de beheerpagina voor pagina's die een enkel object weergeven." 
     1412msgstr "Gaat naar de beheerpagina voor pagina's die een enkel object weergeven." 
    14181413 
    14191414#: contrib/admin/templates/admin_doc/bookmarklets.html:28 
     
    15281523msgstr "" 
    15291524"Vanwege de beveiliging moet u uw oude en twee keer een nieuw " 
    1530 "wachtwoordinvoeren, zodat we kunnen controleren of er geen typefouten zijn " 
     1525"wachtwoord invoeren, zodat we kunnen controleren of er geen typefouten zijn " 
    15311526"gemaakt." 
    15321527 
     
    15981593"will use 'flatpages/default.html'." 
    15991594msgstr "" 
    1600 "Voorbeeld: 'flatpages/contact_page'. Als deze niet is opgegeven, dan wordt " 
     1595"Voorbeeld: 'flatpages/contact_page.html'. Als deze niet is opgegeven, dan wordt " 
    16011596"'flatpages/default.html' gebruikt." 
    16021597 
     
    18951890#: contrib/comments/views/comments.py:286 
    18961891msgid "Somebody tampered with the comment form (security violation)" 
    1897 msgstr "Iemand heeft het opmerkingenformulier gewijzigd (Beveilingsinbreuk)" 
     1892msgstr "Iemand heeft het opmerkingenformulier gewijzigd (beveilingsinbreuk)" 
    18981893 
    18991894#: contrib/comments/views/comments.py:206 
  • django/branches/gis/django/contrib/admin/media/js/urlify.js

    r6615 r6990  
    6060} 
    6161 
     62var LATVIAN_MAP = { 
     63    'ā':'a', 'č':'c', 'ē':'e', 'Ä£':'g', 'Ä«':'i', 'Ä·':'k', 'ÄŒ':'l', 'ņ':'n', 
     64    'Å¡':'s', 'Å«':'u', 'ÅŸ':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ä¢':'G', 'Ī':'i', 
     65    'Ķ':'k', 'Ä»':'L', 'Å 
     66':'N', 'Å ':'S', 'Ū':'u', 'Åœ':'Z' 
     67} 
     68 
    6269var ALL_DOWNCODE_MAPS=new Array() 
    6370ALL_DOWNCODE_MAPS[0]=LATIN_MAP 
     
    6976ALL_DOWNCODE_MAPS[6]=CZECH_MAP 
    7077ALL_DOWNCODE_MAPS[7]=POLISH_MAP 
     78ALL_DOWNCODE_MAPS[8]=LATVIAN_MAP 
    7179 
    7280var Downcoder = new Object(); 
  • django/branches/gis/django/contrib/databrowse/datastructures.py

    r6672 r6990  
    1313 
    1414EMPTY_VALUE = '(None)' 
     15DISPLAY_SIZE = 100 
    1516 
    1617class EasyModel(object): 
     
    9495    def __unicode__(self): 
    9596        val = smart_unicode(self.instance) 
    96         if len(val) > 30
    97             return val[:30] + u'...' 
     97        if len(val) > DISPLAY_SIZE
     98            return val[:DISPLAY_SIZE] + u'...' 
    9899        return val 
    99100 
  • django/branches/gis/django/contrib/localflavor/ar/forms.py

    r6394 r6990  
    2525    See http://www.correoargentino.com.ar/consulta_cpa/home.php 
    2626    """ 
     27    default_error_messages = { 
     28        'invalid': ugettext("Enter a postal code in the format NNNN or ANNNNAAA."), 
     29    } 
     30 
    2731    def __init__(self, *args, **kwargs): 
    2832        super(ARPostalCodeField, self).__init__(r'^\d{4}$|^[A-HJ-NP-Za-hj-np-z]\d{4}\D{3}$', 
    29             min_length=4, max_length=8, 
    30             error_message=ugettext("Enter a postal code in the format NNNN or ANNNNAAA."), 
    31                     *args, **kwargs) 
     33            min_length=4, max_length=8, *args, **kwargs) 
    3234 
    3335    def clean(self, value): 
     
    3638            return u'' 
    3739        if len(value) not in (4, 8): 
    38             raise ValidationError(ugettext("Enter a postal code in the format NNNN or ANNNNAAA.")
     40            raise ValidationError(self.error_messages['invalid']
    3941        if len(value) == 8: 
    4042            return u'%s%s%s' % (value[0].upper(), value[1:5], value[5:].upper()) 
     
    4547    A field that validates `Documento Nacional de IdentidadŽ (DNI) numbers. 
    4648    """ 
     49    default_error_messages = { 
     50        'invalid': ugettext("This field requires only numbers."), 
     51        'max_digits': ugettext("This field requires 7 or 8 digits."), 
     52    } 
     53 
    4754    def __init__(self, *args, **kwargs): 
    4855        super(ARDNIField, self).__init__(max_length=10, min_length=7, *args, 
     
    5966            value = value.replace('.', '') 
    6067        if not value.isdigit(): 
    61             raise ValidationError(ugettext("This field requires only numbers.")
     68            raise ValidationError(self.error_messages['invalid']
    6269        if len(value) not in (7, 8): 
    63             raise ValidationError( 
    64                     ugettext("This field requires 7 or 8 digits.")) 
     70            raise ValidationError(self.error_messages['max_digits']) 
    6571 
    6672        return value 
     
    7177    CUIT is of the form XX-XXXXXXXX-V. The last digit is a check digit. 
    7278    """ 
     79    default_error_messages = { 
     80        'invalid': ugettext('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'), 
     81        'checksum': ugettext("Invalid CUIT."), 
     82    } 
     83 
    7384    def __init__(self, *args, **kwargs): 
    7485        super(ARCUITField, self).__init__(r'^\d{2}-?\d{8}-?\d$', 
    75             error_message=ugettext('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'), 
    7686            *args, **kwargs) 
    7787 
     
    8696        value, cd = self._canon(value) 
    8797        if self._calc_cd(value) != cd: 
    88             raise ValidationError(ugettext("Invalid CUIT.")
     98            raise ValidationError(self.error_messages['checksum']
    8999        return self._format(value, cd) 
    90100 
  • django/branches/gis/django/contrib/localflavor/au/forms.py

    r6018 r6990  
    1313class AUPostCodeField(RegexField): 
    1414    """Australian post code field.""" 
     15    default_error_messages = { 
     16        'invalid': ugettext('Enter a 4 digit post code.'), 
     17    } 
     18 
    1519    def __init__(self, *args, **kwargs): 
    1620        super(AUPostCodeField, self).__init__(r'^\d{4}$', 
    17             max_length=None, min_length=None, 
    18             error_message=ugettext('Enter a 4 digit post code.'), 
    19                     *args, **kwargs) 
     21            max_length=None, min_length=None, *args, **kwargs) 
    2022 
    2123class AUPhoneNumberField(Field): 
    2224    """Australian phone number field.""" 
     25    default_error_messages = { 
     26        'invalid': u'Phone numbers must contain 10 digits.', 
     27    } 
     28 
    2329    def clean(self, value): 
    2430        """ 
     
    3238        if phone_match: 
    3339            return u'%s' % phone_match.group(1) 
    34         raise ValidationError(u'Phone numbers must contain 10 digits.'
     40        raise ValidationError(self.error_messages['invalid']
    3541 
    3642class AUStateSelect(Select): 
  • django/branches/gis/django/contrib/localflavor/br/forms.py

    r6394 r6990  
    1818 
    1919class BRZipCodeField(RegexField): 
     20    default_error_messages = { 
     21        'invalid': _('Enter a zip code in the format XXXXX-XXX.'), 
     22    } 
     23 
    2024    def __init__(self, *args, **kwargs): 
    2125        super(BRZipCodeField, self).__init__(r'^\d{5}-\d{3}$', 
    22             max_length=None, min_length=None, 
    23             error_message=_('Enter a zip code in the format XXXXX-XXX.'), 
    24                     *args, **kwargs) 
     26            max_length=None, min_length=None, *args, **kwargs) 
    2527 
    2628class BRPhoneNumberField(Field): 
     29    default_error_messages = { 
     30        'invalid': _('Phone numbers must be in XX-XXXX-XXXX format.'), 
     31    } 
     32 
    2733    def clean(self, value): 
    2834        super(BRPhoneNumberField, self).clean(value) 
     
    3339        if m: 
    3440            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) 
    35         raise ValidationError(_('Phone numbers must be in XX-XXXX-XXXX format.')
     41        raise ValidationError(self.error_messages['invalid']
    3642 
    3743class BRStateSelect(Select): 
     
    4955    """ 
    5056    widget = Select 
     57    default_error_messages = { 
     58        'invalid': _(u'Select a valid brazilian state. That state is not one of the available states.'), 
     59    } 
    5160 
    5261    def __init__(self, required=True, widget=None, label=None, 
     
    6675        valid_values = set([smart_unicode(k) for k, v in self.widget.choices]) 
    6776        if value not in valid_values: 
    68             raise ValidationError(_(u'Select a valid brazilian state.' 
    69                                            u' That state is not one' 
    70                                            u' of the available states.')) 
     77            raise ValidationError(self.error_messages['invalid']) 
    7178        return value 
    7279 
     
    8491    http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas 
    8592    """ 
     93    default_error_messages = { 
     94        'invalid': _("Invalid CPF number."), 
     95        'max_digits': _("This field requires at most 11 digits or 14 characters."), 
     96        'digits_only': _("This field requires only numbers."), 
     97    } 
     98 
    8699    def __init__(self, *args, **kwargs): 
    87100        super(BRCPFField, self).__init__(max_length=14, min_length=11, *args, **kwargs) 
     
    101114            int(value) 
    102115        except ValueError: 
    103             raise ValidationError(_("This field requires only numbers.")
     116            raise ValidationError(self.error_messages['digits_only']
    104117        if len(value) != 11: 
    105             raise ValidationError(_("This field requires at most 11 digits or 14 characters.")
     118            raise ValidationError(self.error_messages['max_digits']
    106119        orig_dv = value[-2:] 
    107120 
     
    113126        value = value[:-1] + str(new_2dv) 
    114127        if value[-2:] != orig_dv: 
    115             raise ValidationError(_("Invalid CPF number.")
     128            raise ValidationError(self.error_messages['invalid']
    116129 
    117130        return orig_value 
    118131 
    119132class BRCNPJField(Field): 
     133    default_error_messages = { 
     134        'invalid': _("Invalid CNPJ number."), 
     135        'digits_only': _("This field requires only numbers."), 
     136        'max_digits': _("This field requires at least 14 digits"), 
     137    } 
     138 
    120139    def clean(self, value): 
    121140        """ 
     
    132151            int(value) 
    133152        except ValueError: 
    134             raise ValidationError("This field requires only numbers."
     153            raise ValidationError(self.error_messages['digits_only']
    135154        if len(value) != 14: 
    136             raise ValidationError( 
    137                 _("This field requires at least 14 digits")) 
     155            raise ValidationError(self.error_messages['max_digits']) 
    138156        orig_dv = value[-2:] 
    139157 
     
    145163        value = value[:-1] + str(new_2dv) 
    146164        if value[-2:] != orig_dv: 
    147             raise ValidationError(_("Invalid CNPJ number.")
     165            raise ValidationError(self.error_messages['invalid']
    148166 
    149167        return orig_value 
    150  
  • django/branches/gis/django/contrib/localflavor/ca/forms.py

    r6394 r6990  
    1 """  
    2 Canada-specific Form helpers  
    3 """  
    4   
    5 from django.newforms import ValidationError  
    6 from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES  
    7 from django.newforms.util import smart_unicode  
     1""" 
     2Canada-specific Form helpers 
     3""" 
     4 
     5from django.newforms import ValidationError 
     6from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES 
     7from django.newforms.util import smart_unicode 
    88from django.utils.translation import gettext, ugettext 
    9 import re  
    10   
     9import re 
     10 
    1111phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$') 
    1212sin_re = re.compile(r"^(\d{3})-(\d{3})-(\d{3})$") 
    13   
    14 class CAPostalCodeField(RegexField):  
    15     """Canadian postal code field."""  
    16     def __init__(self, *args, **kwargs):  
    17         super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXYZ]\d[A-Z] \d[A-Z]\d$',  
    18             max_length=None, min_length=None,  
    19             error_message=gettext(u'Enter a postal code in the format XXX XXX.'),  
    20             *args, **kwargs)  
    21   
    22 class CAPhoneNumberField(Field):  
    23     """Canadian phone number field."""  
    24     def clean(self, value):  
    25         """Validate a phone number.  
    26         """  
    27         super(CAPhoneNumberField, self).clean(value)  
     13 
     14class CAPostalCodeField(RegexField): 
     15    """Canadian postal code field.""" 
     16    default_error_messages = { 
     17        'invalid': gettext(u'Enter a postal code in the format XXX XXX.'), 
     18    } 
     19 
     20    def __init__(self, *args, **kwargs): 
     21        super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXYZ]\d[A-Z] \d[A-Z]\d$', 
     22            max_length=None, min_length=None, *args, **kwargs) 
     23 
     24class CAPhoneNumberField(Field): 
     25    """Canadian phone number field.""" 
     26    default_error_messages = { 
     27        'invalid': u'Phone numbers must be in XXX-XXX-XXXX format.', 
     28    } 
     29 
     30    def clean(self, value): 
     31        """Validate a phone number. 
     32        """ 
     33        super(CAPhoneNumberField, self).clean(value) 
    2834        if value in EMPTY_VALUES: 
    2935            return u'' 
     
    3238        if m: 
    3339            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) 
    34         raise ValidationError(u'Phone numbers must be in XXX-XXX-XXXX format.')  
     40        raise ValidationError(self.error_messages['invalid']) 
    3541 
    3642class CAProvinceField(Field): 
     
    4046    abbreviation for the given province. 
    4147    """ 
     48    default_error_messages = { 
     49        'invalid': u'Enter a Canadian province or territory.', 
     50    } 
     51 
    4252    def clean(self, value): 
    4353        from ca_provinces import PROVINCES_NORMALIZED 
     
    5464            except KeyError: 
    5565                pass 
    56         raise ValidationError(u'Enter a Canadian province or territory.'
    57   
    58 class CAProvinceSelect(Select):  
    59     """  
    60     A Select widget that uses a list of Canadian provinces and  
    61     territories as its choices.  
    62     """  
    63     def __init__(self, attrs=None):  
    64         from ca_provinces import PROVINCE_CHOICES # relative import  
     66        raise ValidationError(self.error_messages['invalid']
     67 
     68class CAProvinceSelect(Select): 
     69    """ 
     70    A Select widget that uses a list of Canadian provinces and 
     71    territories as its choices. 
     72    """ 
     73    def __init__(self, attrs=None): 
     74        from ca_provinces import PROVINCE_CHOICES # relative import 
    6575        super(CAProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES) 
    66              
     76 
    6777class CASocialInsuranceNumberField(Field): 
    6878    """ 
     
    7181    Checks the following rules to determine whether the number is valid: 
    7282 
    73         * Conforms to the XXX-XXX-XXXX format. 
     83        * Conforms to the XXX-XXX-XXX format. 
    7484        * Passes the check digit process "Luhn Algorithm" 
    7585             See: http://en.wikipedia.org/wiki/Social_Insurance_Number 
    7686    """ 
     87    default_error_messages = { 
     88        'invalid': ugettext('Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format.'), 
     89    } 
     90 
    7791    def clean(self, value): 
    7892        super(CASocialInsuranceNumberField, self).clean(value) 
    7993        if value in EMPTY_VALUES: 
    8094            return u'' 
    81         msg = ugettext('Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format.') 
     95 
    8296        match = re.match(sin_re, value) 
    8397        if not match: 
    84             raise ValidationError(msg
    85              
    86         number = u'%s-%s-%s' % (match.group(1), match.group(2), match.group(3))     
     98            raise ValidationError(self.error_messages['invalid']
     99 
     100        number = u'%s-%s-%s' % (match.group(1), match.group(2), match.group(3)) 
    87101        check_number = u'%s%s%s' % (match.group(1), match.group(2), match.group(3)) 
    88102        if not self.luhn_checksum_is_valid(check_number): 
    89             raise ValidationError(msg
     103            raise ValidationError(self.error_messages['invalid']
    90104        return number 
    91          
     105 
    92106    def luhn_checksum_is_valid(self, number): 
    93107        """ 
    94         Checks to make sure that the SIN passes a luhn mod-10 checksum  
     108        Checks to make sure that the SIN passes a luhn mod-10 checksum 
    95109        See: http://en.wikipedia.org/wiki/Luhn_algorithm 
    96110        """ 
  • django/branches/gis/django/contrib/localflavor/ch/forms.py

    r6018 r6990  
    1313 
    1414class CHZipCodeField(RegexField): 
     15    default_error_messages = { 
     16        'invalid': ugettext('Enter a zip code in the format XXXX.'), 
     17    } 
     18 
    1519    def __init__(self, *args, **kwargs): 
    1620        super(CHZipCodeField, self).__init__(r'^\d{4}$', 
    17         max_length=None, min_length=None, 
    18         error_message=ugettext('Enter a zip code in the format XXXX.'), 
    19         *args, **kwargs) 
     21        max_length=None, min_length=None, *args, **kwargs) 
    2022 
    2123class CHPhoneNumberField(Field): 
     
    2628    '0XX XXX XX XX'. 
    2729    """ 
     30    default_error_messages = { 
     31        'invalid': 'Phone numbers must be in 0XX XXX XX XX format.', 
     32    } 
     33 
    2834    def clean(self, value): 
    2935        super(CHPhoneNumberField, self).clean(value) 
     
    3440        if m: 
    3541            return u'%s %s %s %s' % (value[0:3], value[3:6], value[6:8], value[8:10]) 
    36         raise ValidationError('Phone numbers must be in 0XX XXX XX XX format.'
     42        raise ValidationError(self.error_messages['invalid']
    3743 
    3844class CHStateSelect(Select): 
     
    5561    Algorithm is documented at http://adi.kousz.ch/artikel/IDCHE.htm 
    5662    """ 
     63    default_error_messages = { 
     64        'invalid': ugettext('Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.'), 
     65    } 
     66 
    5767    def has_valid_checksum(self, number): 
    5868        given_number, given_checksum = number[:-1], number[-1] 
     
    8898    def clean(self, value): 
    8999        super(CHIdentityCardNumberField, self).clean(value) 
    90         error_msg = ugettext('Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.') 
    91100        if value in EMPTY_VALUES: 
    92101            return u'' 
     
    94103        match = re.match(id_re, value) 
    95104        if not match: 
    96             raise ValidationError(error_msg
     105            raise ValidationError(self.error_messages['invalid']
    97106 
    98107        idnumber, pos9, checksum = match.groupdict()['idnumber'], match.groupdict()['pos9'], match.groupdict()['checksum'] 
     
    100109        if idnumber == '00000000' or \ 
    101110           idnumber == 'A0000000': 
    102             raise ValidationError(error_msg
     111            raise ValidationError(self.error_messages['invalid']
    103112 
    104113        all_digits = "%s%s%s" % (idnumber, pos9, checksum) 
    105114        if not self.has_valid_checksum(all_digits): 
    106             raise ValidationError(error_msg
     115            raise ValidationError(self.error_messages['invalid']
    107116 
    108117        return u'%s%s%s' % (idnumber, pos9, checksum) 
  • django/branches/gis/django/contrib/lo