
    #h                     L    d dl mZ d dlmZmZ d dl d dlmZ  G d de      Zy)    )deque)datetimetimezone)*)CmfEvagitRoleAssignc                   |     e Zd Z fdZ fdZ fdZddZd Zd Zd Z	e
d        Ze
d	        Ze
d
        Z xZS )r   c                 *    t         |          g dz   S )Ngit_role.perm_push	namespacemembertree_parentexpiration_date)supersave_preload_fields)self	__class__s    1./modules/evagit/models/cmf_evagit_role_assign.pyr   z'CmfEvagitRoleAssign.save_preload_fields   s    w*,/~~~    c                 
   | j                   r| j                  j                  j                  dk(  r+t        j
                  j                  d| j                         n*t        j
                  j                  d| j                         | j                          | j                  j                   rJ| j                  r>| j                  t        j                  t        j                        k  rt        dd       t        | <  |i |S )NCmfEvagitRepoperm_setup_repo_accessperm_setup_group_access)tzuk   Дата истечения срока действия роли не может быть в прошломT)abort)
is_changedr   value
class_namemodelsCmfEvagitRolecheck_role_permissionadd_ssh_key_permsr   r   nowr   utc	cmf_alertr   saver   argskwargsr   s      r   r&   zCmfEvagitRoleAssign.save   s    ??~~##../A$$::;SUYUcUcd$$::;TVZVdVde""$**t/C/C##hllhll&CC  H  PT  Uw|T,V,,r   c                 X   | j                  g d       | j                  j                  j                  dk(  r+t        j
                  j                  d| j                         n*t        j
                  j                  d| j                         | j                          t        | $  |i |S )N)r   r   znamespace.tree_parentr   r   r   r   r   )
load_fieldsr   r   r   r   r    r!   del_ssh_key_permsr   deleter'   s      r   r-   zCmfEvagitRoleAssign.delete   s    no>>**o=  667OQUQ_Q_`  667PRVR`R`a w~t.v..r   c                    | j                  g d       |xs* t        j                  j                  | j                        }| j                         }|r|sy i }|D ]Q  }| j                  j                  rdnd| j                  rt        | j                        nd d|d|j                   d<   S |D ]  }|j                  |        y )	Nr
   parentrwr)allowr   /.git)	additions)r+   r   	CmfSshKeylistr    _calc_child_repos_without_assigngit_role	perm_pushr   strurlupdate_key_file)r   ssh_keysreposdatarepossh_keys         r   r"   z%CmfEvagitRoleAssign.add_ssh_key_perms&   s    hiHv//44DKK4H557U 	D"&--"9"9$sAEAUAUC(<(<$=[_(D1TXXJd#$	   	4G##d#3	4r   c           	         | j                  g d       t        j                  j                  | j                  j
                  | j                        }|r|j                          y t        j                  j                  | j                        }| j                         }|r|sy |D ]0  }|j                  |D cg c]  }d|j                   d c}       2 y c c}w )Nr
   r/   r4   r5   )	deletions)r+   r   r   calc_parent_role_assignr   r   r   r"   r7   r8   r9   r>   r=   )r   new_role_assignr?   r@   rC   rB   s         r   r,   z%CmfEvagitRoleAssign.del_ssh_key_perms9   s    hi 44LLT^^MgMgimititu--/'',,DKK,@H99;E# Z''RW2X$Qtxxj3E2X'YZ2Xs   8C
c                 l   | j                   j                  j                  dk(  r3| j                   j                  j	                          | j                   g}|S | j                  | j                         | j                   gz   }t        j                  j                  dd|gdd| j                  ggdg      }|S )Nr   r   INrole_assigns.member!=r=   filterfields)
r   r   r   r=   load!_calc_child_groups_without_assignr   r   r8   r   )r   r@   child_groupss      r   r9   z4CmfEvagitRoleAssign._calc_child_repos_without_assignI   s    >>**o=NN##%^^&E   AA$..QUYUcUcTffL((--&l;>SUY[_[f[f=ghw . E r   c                     t         j                  j                  dd|gdd| j                  gg      }|D ]"  }|j	                  | j                  |             $ |S )Nr   ==rJ   rK   rM   )r   CmfEvagitGroupr8   r   extendrP   )r   noderQ   child_groups       r   rP   z5CmfEvagitRoleAssign._calc_child_groups_without_assignU   sl    ,,11"D$/2Gt{{1[\ 2  ( 	UK F F{ ST	U r   c                    |j                   j                  dk7  rot        j                  j	                  dd|gdd|ggddg      }|r|S |j
                  j                          |j
                  }|j                   j                  dk7  roy )NCmfRegistryr   rS   r   r:   r   rL   )r   r   r   r   getr   rO   )clsrW   r   role_assigns       r   rF   z+CmfEvagitRoleAssign.calc_parent_role_assign^   s    jj##}4 4488$dD1HdF3KL"$56 9 K ""!!###D jj##}4 r   c                 F   |j                  dg       g |j                  D cg c]  }|j                   }}}|j                  }|j                  j
                  dk7  r|j                  j                          |j                  t        j                  j                  dd|gdd|gg             |j                  |D cg c]  }|j                   c}       |j                  j                          |j                  }|j                  j
                  dk7  r|S c c}w c c}w )Nrole_assignsrZ   r   rS   r   zNOT INrT   )r+   r_   r   r   r   r   rO   rV   r   r   r8   )r\   rB   r]   r_   membersrW   s         r   _calc_role_assigns_to_updatez0CmfEvagitRoleAssign._calc_role_assigns_to_updatel   s   .)* "4K\K\$]K[%7%7$]g$]jj##}4""$ : : ? ?$dD1Hh3PQ !@ !  NN,O;K..OP!!###D jj##}4  %^ Ps   D=Dc                     |j                  g d       t        j                  j                  |      D ]  }|j	                           y )N)r_   rJ   r   )r+   r   r   ra   r"   )r\   rB   r]   s      r   calc_repo_ssh_key_permsz+CmfEvagitRoleAssign.calc_repo_ssh_key_perms   s>    OP!55RRSWX 	,K))+	,r   )N)__name__
__module____qualname__r   r&   r-   r"   r,   r9   rP   classmethodrF   ra   rc   __classcell__)r   s   @r   r   r      sd    -
/4&Z 
    $ , ,r   r   N)collectionsr   r   r   cmf.include,modules.evagit.fields.cmf_evagit_role_assignr    r   r   <module>rm      s      '  L|,- |,r   