Ñò
(·vLc        	   @   s´   d  d k  l Z d  d k l Z l Z l Z l Z d  d k l Z l	 Z	 d  d k
 l Z l Z d  d k l Z d  d k l Z d e i f d „  ƒ  YZ d	 e i f d
 „  ƒ  YZ d S(   iÿÿÿÿ(   t   models(   t   empty_quickstatst   empty_completestatst   statssumt   completestatssum(   t
   Suggestiont   Unit(   t   getfromcachet   dictsum(   t
   max_column(   t   lt   DirectoryManagerc           B   s;   e  Z d  „  Z d „  Z e e ƒ Z d „  Z e e ƒ Z RS(   c         C   s   t  t |  ƒ i ƒ  i d ƒ S(   Nt   parent(   t   superR   t   get_query_sett   select_related(   t   self(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyR       s    c         C   s   |  i  d d ƒ S(   Nt   pootle_patht   /(   t   get(   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt	   _get_root%   s    c         C   s   |  i  d d ƒ S(   NR   s
   /projects/(   R   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   _get_projects)   s    (   t   __name__t
   __module__R   R   t   propertyt   rootR   t   projects(    (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyR      s
   			t	   Directoryc           B   sA  e  Z d  d d „  ƒ  YZ e Z e i d d d e ƒ Z e i	 d d d d e d e ƒZ
 e i d d d e d e ƒ Z e ƒ  Z d	 „  Z d
 „  Z e d „  ƒ Z d „  Z e e ƒ Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „ Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z  d „  Z! RS(   t   Metac           B   s   e  Z d  g Z d Z RS(   t   namet
   pootle_app(   R   R   t   orderingt	   app_label(    (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyR   .   s   	t
   max_lengthiÿ   t   nullR   t   related_namet
   child_dirst   db_indexc         O   sT   |  i  d  j	 o |  i  i |  i d |  _ n
 d |  _ t t |  ƒ i | | Ž  d  S(   NR   (   R   t   NoneR   R   R   R   t   save(   R   t   argst   kwargs(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyR'   :   s    	c         C   s¤   d d k  l } | d j o d |  i | f } y t i i d | ƒ SWq  t i j
 o? } y | i i d | ƒ SWq˜ | i j
 o | ‚ q˜ Xq  Xn |  Sd S(   sî   Given a path of the form a/b/c, where the path is relative
        to this directory, recurse the path and return the object
        (either a Directory or a Store) named 'c'.

        This does not currently deal with .. path components.iÿÿÿÿ(   t   Storet    s   %s%sR   N(   NR+   (   t   pootle_store.modelsR*   R&   R   R   t   objectsR   t   DoesNotExist(   R   t   pathR*   R   t   e(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   get_relativeB   s    c         C   s"   t  t i i d |  i ƒ d d  ƒ S(   Nt   store__pootle_path__startswitht   mtime(   R	   R   R-   t   filterR   R&   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt	   get_mtimeW   s    c         C   s&   d d k  l } | i i d |  i ƒ S(   s#   queryset with all descending storesiÿÿÿÿ(   R*   t   pootle_path__startswith(   R,   R*   t   objectR4   R   (   R   R*   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   _get_stores[   s    c         C   s%   t  i i d | d |  ƒ \ } } | S(   NR   R   (   R   R-   t   get_or_create(   R   t
   child_namet	   child_dirt   created(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   get_or_make_subdirb   s    !c         C   s   |  i  S(   N(   R   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   __unicode__f   s    c         C   s   t  |  i ƒ S(   N(   R
   R   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   get_absolute_urli   s    c         C   sL   |  i  o t St |  i i ƒ  ƒ } t |  i i ƒ  ƒ } t | | ƒ } | S(   sd   calculate aggregate stats for all directory based on stats
        of all descenging stores and dirs(   t   is_template_projectR   R   t   child_storest   iteratorR$   R   (   R   t   file_resultt
   dir_resultt   stats(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   getquickstatsl   s    
c         C   sL   |  i  o t St |  i i ƒ  ƒ } t |  i i ƒ  ƒ } t | | ƒ } | S(   N(   R@   R   R   RA   RB   R$   R   (   R   RC   RD   RE   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   getcompletestats|   s    
c         C   s¤   |  i  i d ƒ } g  } | o
 d } n d } xA t | t | ƒ ƒ D]* } d i | |  ƒ d } | i | ƒ qE W| o t i i d | ƒ i	 d ƒ St i i
 ƒ  S(   sJ   return list of ancestor directories excluding TranslationProject and aboveR   i   i   t   pootle_path__inR   (   R   t   splitt   xranget   lent   joint   appendR   R-   R4   t   order_byt   none(   R   t	   only_dirst
   path_partst   parentst   startt   iR/   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   trail‡   s    
 c         C   s"   t  i i d |  i ƒ i ƒ  d j S(   s(   check if any child store has suggestionst$   unit__store__pootle_path__startswithi    (   R   R-   R4   R   t   count(   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   has_suggestions˜   s    c         C   s   |  i  i d ƒ d j S(   s'   does this directory point at a languageR   i   (   R   RW   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   is_languageœ   s    c         C   s)   |  i  i d ƒ o |  i  i d ƒ d j S(   Ns
   /projects/R   i   (   R   t
   startswithRW   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt
   is_project    s    c         C   s*   |  i  i d ƒ d j o |  i  i d ƒ S(   s2   does this directory point at a translation projectR   i   s
   /projects/(   R   RW   RZ   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   is_translationproject£   s    c         C   s   |  i  i d  ƒ S(   s   /templates/(   R   RZ   (   R   (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   <lambda>§   s    c         C   st   |  i  ƒ  p |  i ƒ  o d S|  i ƒ  o |  i S|  } x, | i ƒ  o | i d j	 o | i } q= W| i Sd S(   s<   returns the translation project belonging to this directory.N(   RY   R[   R&   R\   t   translationprojectR   (   R   t   aux_dir(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   get_translationproject©   s     c         C   sm   |  i  ƒ  o |  i i S|  i ƒ  } |  i ƒ  o | i S| o) |  i t | i ƒ d d !} | i | Sd S(   s&   physical filesystem path for directoryi   iÿÿÿÿN(   R[   t   projectt   codeR`   R\   t	   real_pathR   RK   (   R   t   translation_projectt   path_prefix(    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   get_real_path¸   s    (    ("   R   R   R   t   Truet   is_dirR    t	   CharFieldt   FalseR   t
   ForeignKeyR   R   R   R-   R'   R1   R   R5   R8   R   t   storesR=   R>   R?   RF   RG   RU   RX   RY   R[   R\   R@   R`   Rf   (    (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyR   -   s0   !												N(   t	   django.dbR    t   pootle_store.utilR   R   R   R   R,   R   R   t   pootle_misc.utilR   R   t   pootle_misc.aggregateR	   t   pootle_misc.baseurlR
   t   ManagerR   t   ModelR   (    (    (    s9   /var/www/Pootle/local_apps/pootle_app/models/directory.pyt   <module>   s   "