Ñò
ÈV4Mc        
   @   så   d  d k  l Z d  d k l Z d  d k l Z d  d k l Z d  d k l	 Z	 d  d k
 l Z d  d k l Z d „  Z d	 „  Z d d
 „ Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d e i f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   models(   t   cache(   t   settings(   t
   Permission(   t   ContentType(   t
   iri_to_uri(   t   RelatedManagerc          C   s)   t  i i d d d d d d ƒ d }  |  S(   Nt   namet   pootlet	   app_labelt
   pootle_appt   modelt	   directoryi    (   R   t   objectst   filter(   t   content_type(    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_permission_contenttype   s    %c         C   s"   t  ƒ  } t i i d | d |  ƒ S(   NR   t   codename(   R   R   R   t   get(   R   R   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_pootle_permission#   s    	c         C   s^   t  ƒ  } |  d j	 o t i i d | d |  ƒ } n t i i d | ƒ } t d „  | Dƒ ƒ S(   s3   gets the available rights and their localized namesR   t   codename__inc         s   s"   x |  ] } | i  | f Vq Wd  S(   N(   R   (   t   .0t
   permission(    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pys	   <genexpr>0   s   	 N(   R   t   NoneR   R   R   t   dict(   t	   codenamesR   t   permissions(    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_pootle_permissions)   s
    	c         C   s‘  | i  } t d  | i d ƒ ƒ } t d |  ƒ } t i | h  ƒ } | | j o9y8 t i i d | i	 d t
 ƒ d |  ƒ i d ƒ d } Wn t j
 o d  } n Xt | ƒ d j o“ | d d	 j o‚ | d  j p+ t t d  | i i  i d ƒ ƒ ƒ d
 j  oJ y- d | d } t i i d | d |  ƒ } WqJt i j
 o qJXn | o | i ƒ  | | <n d  | | <t i | | t i ƒ n | | S(   Nt   /s   Permissions:%st   directory__int	   only_dirst   profile__user__usernames   -directory__pootle_pathi    i   t   projectsi   s   /projects/%s/t   directory__pootle_path(   t   pootle_pathR   R   t   splitR   R   R   t   PermissionSetR   t   trailt   Falset   order_byt
   IndexErrort   lenR   t   DoesNotExistt   to_dictt   setR   t   OBJECT_CACHE_TIMEOUT(   t   usernameR   R"   t
   path_partst   keyt   permissions_cachet   permissionsett   project_path(    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_permissions_by_username2   s.    	$8	
c         C   so   |  i  i ƒ  oL t |  i  i | ƒ } | d  j	 o | St d | ƒ } | d  j	 o | Sn t d | ƒ } | S(   Nt   defaultt   nobody(   t   usert   is_authenticatedR4   R.   R   (   t   profileR   R   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_matching_permissionsQ   s    	c         C   s8   |  i  i o t St |  | ƒ } d | j p
 | | j S(   sO   it checks if current user has the permission the perform C{permission_codename}t   administrate(   R7   t   is_superusert   TrueR:   (   R9   t   permission_codenameR   R   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   check_profile_permission^   s    c         C   s/   | i  i o t Sd | i j p |  | i j S(   sO   it checks if current user has the permission the perform C{permission_codename}R;   (   R7   R<   R=   R   (   R>   t   request(    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   check_permissione   s    t   PermissionSetManagerc           B   s   e  Z d  „  Z RS(   c         C   s   |  i  d | d | ƒ S(   NR   R!   (   R   (   t   selfR.   R"   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   get_by_natural_keyl   s    (   t   __name__t
   __module__RD   (    (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyRB   k   s   R$   c           B   sÆ   e  Z e ƒ  Z d  d d „  ƒ  YZ e i d d e ƒZ e i d d e d d ƒZ	 e i
 e d e d d ƒZ e i
 e d e d d	 ƒZ d
 „  Z d d g e _ d „  Z d „  Z d „  Z d „  Z RS(   t   Metac           B   s   e  Z d Z d Z RS(   R9   R   R
   (   s   profiles	   directory(   RE   RF   t   unique_togetherR	   (    (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyRG   q   s   s   pootle_profile.PootleProfilet   db_indexs   pootle_app.Directoryt   related_namet   permission_setst   permission_sets_positivet   editablet   permission_sets_negativec         C   s   |  i  i i |  i i f S(   N(   R9   R7   R.   R   R"   (   RC   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   natural_key|   s    c         C   s   d |  i  i i |  i i f S(   Ns   %s : %s(   R9   R7   R.   R   R"   (   RC   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   __unicode__€   s    c         C   s   t  d „  |  i i ƒ  Dƒ ƒ S(   Nc         s   s"   x |  ] } | i  | f Vq Wd  S(   N(   R   (   R   R   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pys	   <genexpr>„   s   	 (   R   t   positive_permissionst   iterator(   RC   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyR+   ƒ   s    c         O   sC   t  t |  ƒ i | | Ž  t d |  i i i ƒ } t i | ƒ d  S(   Ns   Permissions:%s(	   t   superR$   t   saveR   R9   R7   R.   R   t   delete(   RC   t   argst   kwargsR0   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyRT   †   s    c         O   sC   t  t |  ƒ i | | Ž  t d |  i i i ƒ } t i | ƒ d  S(   Ns   Permissions:%s(   RS   R$   RU   R   R9   R7   R.   R   (   RC   RV   RW   R0   (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyRU   ‹   s    (    (   RE   RF   RB   R   RG   R    t
   ForeignKeyR=   R9   R   t   ManyToManyFieldR   RQ   R&   t   negative_permissionsRO   t   dependenciesRP   R+   RT   RU   (    (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyR$   o   s   					N(   t	   django.dbR    t   django.core.cacheR   t   django.confR   t   django.contrib.auth.modelsR   t"   django.contrib.contenttypes.modelsR   t   django.utils.encodingR   t   pootle_app.lib.utilR   R   R   R   R   R4   R:   R?   RA   RB   t   ModelR$   (    (    (    s;   /var/www/Pootle/local_apps/pootle_app/models/permissions.pyt   <module>   s   							