
    V
hz                     b   S SK J r   S SKJr  S SKJr  S SKJrJr  S SKJ	r	  Sr
S\S\4S	 jrS
 rS\S\R                  S\4S jr    SS\R                  S\S\S\	\   S\	\   S\S\S\4S jjrS\S\R                  S\4S jrS\S\S\R                  S\4S jrS\S\R                  S\4S jrg)    )datetime)DuplicateKeyError)database)
RoleCreate
RoleUpdate)Optionalroles	role_typereturnc                    US:X  a  SOSnUS:X  a  SOSnU S   nUR                  SU05      nUcy  U [           nUS:X  a  SS	0OSS
S	00nUR                  U5      R                  SS5      R	                  S5      nSn	U H  n
U
R                  SS5      n	M     UR                  X)S.5        UR                  SU0SSS00S	S9nUS   nX:  a  [        SU SU S35      eU$ )aH  
Generate the next role_id based on the role type.

For SaaS roles, the counter (_id = "role_id_saas") must not exceed 99.
For Platform roles, the counter (_id = "role_id_platform") must not exceed 999999.
If the counter document is missing, it will be initialized based on the
highest existing role_id in the roles collection.
saasrole_id_saasrole_id_platformc   i?B counters_idis_saas_onlyT$nerole_id   r   )r   sequence_valuez$incr   )return_documentzRole ID for z% roles exceeded the maximum limit of .)	find_oneCOLLECTION_NAMEfindsortlimitget
insert_onefind_one_and_update
ValueError)dbr
   
counter_id	max_limitcounters_collectioncounterroles_collectionquerymax_role_cursorstarting_valueroleupdatednew_role_ids                HC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\saas\roles.pyget_next_role_idr1   	   s3    $-#6<NJ6)vIZ. "**E:+>?Go.*3v*=&NUZ\`TaCb*//6;;IrJPPQRS#D!XXi3N $ 	&&z'\] "55	
	"A&' 6 G
 *+K<	{2WXaWbbcdee    c                 ~    U (       a/  U R                  5        VVs0 s H  u  p[        U5      U_M     snn$ U $ s  snnf )N)itemsstr)permissionskvs      r0   _convert_permissions_keysr9   -   s6    :E+"3"3"56"5$!CFAI"56V;V6s   9r-   r$   c                    U[            nU R                  5       nSU;   a  US   (       a  [        US   5      US'   [        R                  " 5       US'   [        R                  " 5       US'   UR                  S5      (       a  SOSnUR                  S5      (       d  [        X5      US'    UR                  U5        U$ ! [         a    [        S5      ef = f)	Nr6   created_dateupdated_dater   r   platformr   z%A role with this name already exists.)
r   dictr9   r   utcnowr    r1   r!   r   r#   )r-   r$   r)   	role_datar
   s        r0   create_role_servicerA   1   s    /*		I 	!i&>#<Y}=U#V	-  ( 1In ( 1In $--77ZI==##/>	)B##I.   B@AABs   *B= =CNskipr   
account_idsearchis_system_defaultr   c                    U [            nSU0nU(       a  X8S'   OSSS00SS0SS 0/US'   U(       a  USS.US	'   U(       a  U(       d  S
S0US'   UR                  U5      R                  U5      R                  U5      n	/ n
U	 HT  nUR	                  S5      US'   US   R                  5       US'   US   R                  5       US'   U
R                  U5        MV     UR                  U5      nXS.$ )NrE   rC   z$existsF z$ori)z$regexz$optionsnamer   Tr   r   idr;   r<   )total_countr	   )r   r   rB   r   r    	isoformatappendcount_documents)r$   rB   r   rC   rD   rE   r   r)   r*   roles_cursorr	   r-   rK   s                r0   list_roles_servicerP   H   s    /* "34E(l%	5'9:\2<NQ]_cPdee#)s;f !&n#((/44T:@@GLEXXi(T
#N3==?^#N3==?^T	  #2259K&77r2   r   c                     U[            nUR                  SU 05      nU(       a@  UR                  S5      US'   US   R                  5       US'   US   R                  5       US'   U$ Nr   rJ   r;   r<   )r   r   r    rL   r   r$   r)   r-   s       r0   get_role_servicerT   m   sl    /*$$i%9:DXXi(T
#N3==?^#N3==?^Kr2   role_updatec                    U[            nUR                  SS9nSU;   a  US   (       a  [        US   5      US'   [        R                  " 5       US'   UR                  SU 0SU05      nUR                  S:X  a  g UR                  SU 05      nU(       a@  UR                  S5      US'   US	   R                  5       US	'   US   R                  5       US'   U$ )
NT)exclude_unsetr6   r<   r   z$setr   rJ   r;   )
r   r>   r9   r   r?   
update_onematched_countr   r    rL   )r   rU   r$   r)   update_dataresultr-   s          r0   update_role_servicer\   w   s    /*"""6K #M(B%>{=?Y%ZM""*//"3K(()W)=?TUFq $$i%9:DXXi(T
#N3==?^#N3==?^Kr2   c                     U[            nUR                  SU 05      nU(       d  g UR                  SU 05        UR                  S5      US'   US   R	                  5       US'   US   R	                  5       US'   U$ rR   )r   r   
delete_oner    rL   rS   s       r0   delete_role_servicer_      s    /*$$i%9:DG 45)$DJ/99;D/99;DKr2   )NNFF)r   pymongo.errorsr   app.dbr   app.v1.models.saas.rolemodelr   r   typingr   r   r5   intr1   r9   MongoDBr>   rA   boolrP   rT   r\   r_    r2   r0   <module>rh      s)    ,  ? "C "C "HWj h.>.> 4 6 !% ##8#8
#8 #8 	#8
 SM#8 #8 #8 
#8Jc x'7'7 D  : 8CSCS X\ *	 	(*:*: 	t 	r2   