ó
ø¢TQc           @@ s:  d  Z  d d l m Z m Z d d l Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z m Z m Z m Z d d l m Z d d	 l m Z e j d
 ƒ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   u   
BR-specific Form helpers
i    (   t   absolute_importt   unicode_literalsN(   t   STATE_CHOICES(   t   EMPTY_VALUES(   t   ValidationError(   t   Fieldt
   RegexFieldt	   CharFieldt   Select(   t
   smart_text(   t   ugettext_lazyu#   ^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$t   BRZipCodeFieldc           B@ s*   e  Z i e d  ƒ d 6Z d d d „ Z RS(   u)   Enter a zip code in the format XXXXX-XXX.u   invalidc         O@ s&   t  t |  ƒ j d | | | | Ž d  S(   Nu   ^\d{5}-\d{3}$(   t   superR   t   __init__(   t   selft
   max_lengtht
   min_lengtht   argst   kwargs(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR      s    N(   t   __name__t
   __module__t   _t   default_error_messagest   NoneR   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR      s   t   BRPhoneNumberFieldc           B@ s$   e  Z i e d  ƒ d 6Z d „  Z RS(   u-   Phone numbers must be in XX-XXXX-XXXX format.u   invalidc         C@ s™   t  t |  ƒ j | ƒ | t k r& d St j d d t | ƒ ƒ } t j | ƒ } | r‚ d | j	 d ƒ | j	 d ƒ | j	 d ƒ f St
 |  j d ƒ ‚ d  S(   Nu    u   (\(|\)|\s+)u   %s-%s-%si   i   i   u   invalid(   R   R   t   cleanR   t   ret   subR	   t   phone_digits_ret   searcht   groupR   t   error_messages(   R   t   valuet   m(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   "   s    ,(   R   R   R   R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR      s   t   BRStateSelectc           B@ s   e  Z d  Z d d „ Z RS(   u^   
    A Select widget that uses a list of Brazilian states/territories
    as its choices.
    c         C@ s    t  t |  ƒ j | d t ƒd  S(   Nt   choices(   R   R"   R   R   (   R   t   attrs(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   1   s    N(   R   R   t   __doc__R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR"   ,   s   t   BRStateChoiceFieldc           B@ sH   e  Z d  Z e Z i e d ƒ d 6Z e d d d d d „ Z	 d „  Z
 RS(   uM   
    A choice field that uses a list of Brazilian states as its choices.
    uN   Select a valid brazilian state. That state is not one of the available states.u   invalidc         C@ s2   t  t |  ƒ j | | | | | ƒ t |  j _ d  S(   N(   R   R&   R   R   t   widgetR#   (   R   t   requiredR'   t   labelt   initialt	   help_text(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   =   s    
c         C@ s    t  t |  ƒ j | ƒ } | t k r- d } n  t | ƒ } | d k rI | St g  |  j j D] \ } } t | ƒ ^ qY ƒ } | | k rœ t |  j	 d ƒ ‚ n  | S(   Nu    u   invalid(
   R   R&   R   R   R	   t   setR'   R#   R   R   (   R   R    t   kt   vt   valid_values(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   C   s    	1N(   R   R   R%   R   R'   R   R   t   TrueR   R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR&   4   s   	c         C@ s   |  d k r d |  Sd S(   Ni   i   i    (    (   R.   (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyt   DV_makerO   s    t
   BRCPFFieldc           B@ sS   e  Z d  Z i e d ƒ d 6e d ƒ d 6e d ƒ d 6Z d d d	 „ Z d
 „  Z RS(   uì   
    This field validate a CPF number or a CPF string. A CPF number is
    compounded by XXX.XXX.XXX-VD. The two last digits are check digits.

    More information:
    http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas
    u   Invalid CPF number.u   invalidu7   This field requires at most 11 digits or 14 characters.u
   max_digitsu!   This field requires only numbers.u   digits_onlyi   i   c         O@ s#   t  t |  ƒ j | | | | Ž d  S(   N(   R   R2   R   (   R   R   R   R   R   (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   b   s    c         C@ s¾  t  t |  ƒ j | ƒ } | t k r( d S| } | j ƒ  sS t j d d | ƒ } n  y t | ƒ Wn$ t k
 r‡ t	 |  j
 d ƒ ‚ n Xt | ƒ d k r° t	 |  j
 d ƒ ‚ n  | d } t g  t t d d d	 ƒ ƒ D]  \ } } | t | | ƒ ^ qÖ ƒ } t | d ƒ } | d  t | ƒ | d	 } t g  t t d d d	 ƒ ƒ D]  \ } } | t | | ƒ ^ qGƒ } t | d ƒ } | d	  t | ƒ } | d | k rºt	 |  j
 d
 ƒ ‚ n  | S(   uj   
        Value can be either a string in the format XXX.XXX.XXX-XX or an
        11-digit number.
        u    u   [-\.]u   digits_onlyi   u
   max_digitsiþÿÿÿi
   i   iÿÿÿÿu   invalid(   R   R2   R   R   t   isdigitR   R   t   intt
   ValueErrorR   R   t   lent   sumt	   enumeratet   rangeR1   t   str(   R   R    t
   orig_valuet   orig_dvt   idxt   it   new_1dvt   new_2dv(    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   e   s,    
EE(   R   R   R%   R   R   R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR2   T   s   t   BRCNPJFieldc           B@ s>   e  Z i e d  ƒ d 6e d ƒ d 6e d ƒ d 6Z d „  Z RS(   u   Invalid CNPJ number.u   invalidu!   This field requires only numbers.u   digits_onlyu&   This field requires at least 14 digitsu
   max_digitsc      	   C@ sö  t  t |  ƒ j | ƒ } | t k r( d S| } | j ƒ  sS t j d d | ƒ } n  y t | ƒ Wn$ t k
 r‡ t	 |  j
 d ƒ ‚ n Xt | ƒ d k r° t	 |  j
 d ƒ ‚ n  | d } t g  t t t d d d	 ƒ ƒ t t d
 d d	 ƒ ƒ ƒ D]  \ } } | t | | ƒ ^ qò ƒ } t | d ƒ } | d  t | ƒ | d	 } t g  t t t d d d	 ƒ ƒ t t d
 d d	 ƒ ƒ ƒ D]  \ } } | t | | ƒ ^ qƒ } t | d ƒ } | d	  t | ƒ } | d | k ròt	 |  j
 d ƒ ‚ n  | S(   ut   
        Value can be either a string in the format XX.XXX.XXX/XXXX-XX or a
        group of 14 characters.
        u    u   [-/\.]u   digits_onlyi   u
   max_digitsiþÿÿÿi   i   iÿÿÿÿi	   i   i   u   invalid(   R   RA   R   R   R3   R   R   R4   R5   R   R   R6   R7   R8   t   listR9   R1   R:   (   R   R    R;   R<   R=   R>   R?   R@   (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyR   Š   s,    
aa(   R   R   R   R   R   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyRA   ƒ   s
   (   R%   t
   __future__R    R   R   t'   django.contrib.localflavor.br.br_statesR   t   django.core.validatorsR   t   django.formsR   t   django.forms.fieldsR   R   R   R   t   django.utils.encodingR	   t   django.utils.translationR
   R   t   compileR   R   R   R"   R&   R1   R2   RA   (    (    (    s<   ../Django//lib/python/django/contrib/localflavor/br/forms.pyt   <module>   s    "		/