Ñò
äj>Kc        	   @   s  d  Z  d d k l Z d d k l Z d d k l Z d d k l Z l	 Z	 l
 Z
 d d k l Z d d k l Z d Z d	 Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   s–   
These classes are light wrappers around Django's database API that provide
convenience functionality and permalink functions for the databrowse app.
iÿÿÿÿ(   t   models(   t   formats(   t   capfirst(   t   smart_unicodet	   smart_strt
   iri_to_uri(   t	   mark_safe(   t   QuerySets   (None)id   t	   EasyModelc           B   sb   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   c         C   sF   | |  _  | |  _ | i i ƒ  |  _ | i i |  _ | i i |  _ d  S(   N(   t   sitet   modelt   registryt   keyst
   model_listt   _metat   verbose_namet   verbose_name_plural(   t   selfR	   R
   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   __init__   s
    		c         C   s   d t  |  i i i ƒ S(   Ns   <EasyModel for %s>(   R   R
   R   t   object_name(   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   __repr__   s    c         C   s   |  i  i |  i S(   s1   Returns the ModelDatabrowse class for this model.(   R	   R   R
   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   model_databrowse   s    c         C   s/   t  d |  i i |  i i i |  i i i f ƒ S(   Ns   %s%s/%s/(   R   R	   t   root_urlR
   R   t	   app_labelt   module_name(   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   url   s    c         K   s   |  i  ƒ  i |   S(   N(   t   get_query_sett   filter(   R   t   kwargs(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   objects"   s    c         C   s+   |  i  i i ƒ  i d t ƒ } |  | _ | S(   Nt   klass(   R
   t   _default_managerR   t   _clonet   EasyQuerySett
   _easymodel(   R   t   easy_qs(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   %   s    	c         C   s   t  |  |  i i i d | ƒ ƒ S(   Nt   pk(   t   EasyInstanceR
   R   t   get(   R   R$   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   object_by_pk*   s    c         c   s3   x, |  i  i i ƒ  d  D] } t |  | ƒ Vq Wd  S(   Ni   (   R
   R   t   allR%   (   R   t   obj(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   sample_objects-   s     c         C   s@   y |  i  i i | ƒ } Wn t i j
 o d  SXt |  | ƒ S(   N(   R
   R   t	   get_fieldR    t   FieldDoesNotExistt   Nonet	   EasyField(   R   t   namet   f(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   field1   s
    c         C   s>   g  } |  i  i i |  i  i i D] } | t |  | ƒ q! ~ S(   N(   R
   R   t   fieldst   many_to_manyR.   (   R   t   _[1]R0   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR2   8   s    (   t   __name__t
   __module__R   R   R   R   R   R   R'   R*   R1   R2   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR      s   									R.   c           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | | |  _  |  _ d  S(   N(   R
   R1   (   R   t
   easy_modelR1   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   <   s    c         C   s&   t  d |  i i i i |  i i f ƒ S(   Nu   <EasyField for %s.%s>(   R   R
   R   R   R1   R/   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   ?   s    c         c   s8   x1 |  i  i D]# \ } } t |  i |  | | ƒ Vq Wd  S(   N(   R1   t   choicest
   EasyChoiceR
   (   R   t   valuet   label(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR8   B   s     c         C   s™   |  i  i oB t d |  i i i |  i i i i |  i i i i |  i  i	 f ƒ S|  i  i
 o9 t d |  i i i |  i i i i |  i i i i f ƒ Sd  S(   Ns   %s%s/%s/%s/s   %s%s/%s/(   R1   R8   R   R
   R	   R   R   R   R   R/   t   rel(   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   F   s    B(   R5   R6   R   R   R8   R   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR.   ;   s   			R9   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s*   | | |  _  |  _ | | |  _ |  _ d  S(   N(   R
   R1   R:   R;   (   R   R7   R1   R:   R;   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   M   s    c         C   s&   t  d |  i i i i |  i i f ƒ S(   Nu   <EasyChoice for %s.%s>(   R   R
   R   R   R1   R/   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   Q   s    c         C   sP   t  d |  i i i |  i i i i |  i i i i |  i i i t	 |  i
 ƒ f ƒ S(   Ns   %s%s/%s/%s/%s/(   R   R
   R	   R   R   R   R   R1   R/   R   R:   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   T   s    (   R5   R6   R   R   R   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR9   L   s   		R%   c           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s   | | |  _  |  _ d  S(   N(   R
   t   instance(   R   R7   R=   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   X   s    c         C   s)   t  d |  i i i i |  i i ƒ  f ƒ S(   Nu   <EasyInstance for %s (%s)>(   R   R
   R   R   R=   t   _get_pk_val(   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   [   s    c         C   s3   t  |  i ƒ } t | ƒ t j o | t  d S| S(   Nu   ...(   R   R=   t   lent   DISPLAY_SIZE(   R   t   val(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   __unicode__^   s    c         C   s   |  i  ƒ  i d ƒ S(   Ns   utf-8(   RB   t   encode(   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   __str__d   s    c         C   s   |  i  i ƒ  S(   N(   R=   R>   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR$   g   s    c         C   sG   t  d |  i i i |  i i i i |  i i i i t |  i ƒ  ƒ f ƒ S(   Ns   %s%s/%s/objects/%s/(	   R   R
   R	   R   R   R   R   R   R$   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   j   s    c         c   sE   x> |  i  i  i i |  i  i  i i D] } t |  i  |  | ƒ Vq# Wd S(   so   
        Generator that yields EasyInstanceFields for each field in this
        EasyInstance's model.
        N(   R
   R   R2   R3   t   EasyInstanceField(   R   R0   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR2   m   s    # c         c   sÈ   xÁ |  i  i  i i ƒ  |  i  i  i i ƒ  D]— } | i  |  i  i j o q) n t |  i  i | i  ƒ } h | d 6| i i d 6g  } t	 |  i
 | i ƒ  ƒ i ƒ  D] } | t | | ƒ qž ~ d 6Vq) Wd S(   s¿   
        Generator that yields dictionaries of all models that have this
        EasyInstance's model as a ForeignKey or ManyToManyField, along with
        lists of related objects.
        R
   t   related_fieldt   object_listN(   R
   R   t   get_all_related_objectst$   get_all_related_many_to_many_objectsR   R   R	   R1   R   t   getattrR=   t   get_accessor_nameR(   R%   (   R   t
   rel_objectt   emR4   t   i(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   related_objectsu   s    ) (
   R5   R6   R   R   RB   RD   R$   R   R2   RO   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR%   W   s   							RE   c           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s9   | | | |  _  |  _ |  _ t | i | i ƒ |  _ d  S(   N(   R
   R1   R=   RJ   R/   t	   raw_value(   R   R7   R=   R1   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   †   s    c         C   s&   t  d |  i i i i |  i i f ƒ S(   Nu   <EasyInstanceField for %s.%s>(   R   R
   R   R   R1   R/   (   R   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR   Š   s    c         C   så  |  i  i o{ t |  i  i t i ƒ o t |  i i |  i  i ƒ } qÞt |  i  i t i ƒ o& t	 t |  i i |  i  i ƒ i
 ƒ  ƒ SnW|  i  i o% t |  i  i ƒ i |  i t ƒ } n%t |  i  t i ƒ p t |  i  t i ƒ o |  i o‰ t |  i  t i ƒ o t t i |  i d ƒ ƒ } qt |  i  t i ƒ o t t i |  i d ƒ ƒ } qt t i |  i d ƒ ƒ } qÞt } n\ t |  i  t i ƒ p t |  i  t i ƒ o& h d t 6d t 6d d 6|  i } n
 |  i } | g S(   sŠ   
        Returns a list of values for this field for this instance. It's a list
        so we can accomodate many-to-many fields.
        t   DATETIME_FORMATt   TIME_FORMATt   DATE_FORMATt   Yest   Not   UnknownN(   R1   R<   t
   isinstanceR    t   ManyToOneRelRJ   R=   R/   t   ManyToManyRelt   listR(   R8   t   dictR&   RP   t   EMPTY_VALUEt	   DateFieldt	   TimeFieldt   DateTimeFieldR   R   t   date_formatt   time_formatt   BooleanFieldt   NullBooleanFieldt   Truet   FalseR-   (   R   t   objs(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   values   s&    *%,

,&	c         C   sO  g  } xe |  i  i ƒ  i i ƒ  D]K \ } } | i | |  ƒ } | d j	 o  |  i ƒ  } t |  i ƒ  | ƒ Sq W|  i i	 oè t
 |  i  i |  i i	 i ƒ } |  i i	 i |  i  i j o} g  } x¡ |  i ƒ  D]b } t d |  i  i i | i  i i | i  i i t | i ƒ  ƒ f ƒ }	 | i t | ƒ |	 f ƒ qÈ WqKg  }
 |  i ƒ  D] } |
 | d f qC~
 } né |  i i oƒ g  } xÒ |  i ƒ  D]h } t d |  i  i i |  i  i  i i |  i  i  i i |  i i t |  i ƒ f ƒ }	 | i | |	 f ƒ qƒWnY t |  i t i ƒ o) |  i ƒ  d } | t | ƒ f g } n |  i ƒ  d d f g } | S(   s&   Returns a list of (value, URL) tuples.s   %s%s/%s/objects/%s/s   %s%s/%s/fields/%s/%s/i    N(   R
   R   t   pluginst   itemst   urlsR-   Rg   t   zipR1   R<   R   R	   t   toR   R   R   R   R   R   R   R>   t   appendR   R8   R/   RP   RW   R    t   URLField(   R   t   plugin_urlst   plugin_namet   pluginRj   Rg   t   mt   lstR:   R   R4   RA   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyRj   ¬   s6      C!1 O(   R5   R6   R   R   Rg   Rj   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyRE   …   s   			R!   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s…   
    When creating (or cloning to) an `EasyQuerySet`, make sure to set the
    `_easymodel` variable to the related `EasyModel`.
    c         o   s;   x4 t  t |  ƒ i | | Ž  D] } t |  i | ƒ Vq Wd  S(   N(   t   superR!   t   iteratorR%   R"   (   R   t   argsR   R)   (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyRu   Ð   s     c         O   s+   t  t |  ƒ i | | Ž  } |  i | _ | S(   N(   Rt   R!   R    R"   (   R   Rv   R   t   c(    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR    Ô   s    (   R5   R6   t   __doc__Ru   R    (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyR!   Ë   s   	N(   Rx   t	   django.dbR    t   django.utilsR   t   django.utils.textR   t   django.utils.encodingR   R   R   t   django.utils.safestringR   t   django.db.models.queryR   R\   R@   t   objectR   R.   R9   R%   RE   R!   (    (    (    sR   /usr/local/lib/python2.6/dist-packages/django/contrib/databrowse/datastructures.pyt   <module>   s   +.F