
    j                       U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZmZ eeef   Zej@                  ejB                  z  ejD                  z  Z#de$d<    edd       G d d             Z% edd       G d d             Z& edd       G d d             Z'd"dZ(d#dZ)d$dZ*d$dZ+e	ddd%d       Z,d&dZ-d'dZ.e	d(d        Z/e	ddd)d!       Z0y)*zDDescriptor-relative flat files beneath the dedicated authority root.    )annotationsN)	Generator)contextmanager)	dataclass)Final)CustomerIdentityDigestWeeklyOperationsCorruption)WeeklyOperationsAuthorityRoot)HistoryValidation)customer_data_namecustomer_lock_namecustomer_storage_digest)WeeklyOperationsRepairBindingvalidate_bound_repair_lockvalidate_bound_repair_payloadr   _FILE_FLAGST)frozenslotsc                  n    e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   edd       ZddZy)SidecarDirectoryr
   	authorityint	directorystrcustomer_digestr   customer_identity	data_name	lock_nameboolallow_torn_tailc                    | j                   S N)r   selfs    /home/cube/projects/richard/traning coach/task-12-independent-verification-r9/build/hermes-full/dualcoach/profile/checkin_cli/weekly_operations_fs.pyplanszSidecarDirectory.plans!   s    ~~    c                    | j                   r&| j                  j                  | j                         y | j                  j	                          y r"   )r    r   verify_for_repairr   verify_lockedr#   s    r%   verifyzSidecarDirectory.verify%   s3    NN,,T-C-CDNN((*r'   N)returnr   )r,   None)__name__
__module____qualname____annotations__propertyr&   r+    r'   r%   r   r      s@    ,,N--NN +r'   r   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded	<   y
)LockedRepairr   r   r   lock_descriptordata_descriptorbytespayloadr   
validationNr.   r/   r0   r1   r3   r'   r%   r5   r5   ,   s    N!!r'   r5   c                  ,    e Zd ZU ded<   ded<   ded<   y)
OpenedFiler   
descriptorFileIdentityidentityr   createdNr;   r3   r'   r%   r=   r=   5   s    OMr'   r=   c                2    | j                   | j                  fS r"   )st_devst_ino)infos    r%   	_identityrF   <   s    ;;##r'   c                p   t        j                  || d      }t        |      }t        j                  |j                        xrV |j
                  t        j                         k(  xr3 |j                  dk(  xr" t        j                  |j                        dk(  }|r|t        |      k7  rt        d      |S )NF)dir_fdfollow_symlinks     z*authority child file is unsafe or replaced)
osstatrF   S_ISREGst_modest_uidgeteuidst_nlinkS_IMODEr	   )r   nameopenednamedr@   safes         r%   verify_filerX   @   s    GGDEBE H<<'  MFMMRZZ\,I  MfooabNb  Mgkgsgstz  uC  uC  hD  HM  hMD8y//()UVVOr'   c           
         t        j                  ||t        z  |       }	 t        |t	        | |t        j
                  |            d      S # t        t        f$ r t        j                  |        w xY w)NrH   F)	rL   openr   r=   rX   fstatOSErrorr	   closer   rT   flagsr>   s       r%   open_existing_filera   I   sd    u{29EJ*k)T288JCW&XZ_``/0 
s   *A &A2c           
     j   	 t        j                  ||t        z  t         j                  z  t         j                  z  d|       }	 t        |t        | |t        j                  |            d      S # t
        $ r t        | ||      cY S w xY w# t        t        f$ r t        j                  |        w xY w)NrK   rZ   T)rL   r[   r   O_CREATO_EXCLFileExistsErrorra   r=   rX   r\   r]   r	   r^   r_   s       r%   open_or_create_filerf   R   s    :WWT5;#6#Cbii#OQV_hi
*k)T288JCW&XZ^__  :!)T599: /0 
s   AA0 *B 0B	B	&B2Fr    c             #    K   | j                   j                         5  	 |r| j                  |       n| j                          t	        |      }t        | | j                  ||t        |      t        |      |      }|j                          | 	 ddd       y# t        $ r}t        d      |d}~ww xY w# 1 sw Y   yxY ww)z:Derive one flat file pair under the locked authority root.z"authority child boundary is unsafeN)parentlockedr)   r*   r   r   r>   r   r   r+   r]   r	   )r   r   r    digestboundaryerrors         r%   secure_sidecar_directoryrn   ^   s      
			 	 	"
	^++,=>''),->?F'	93G3GQbdv  xI  eJ  L^  _p  Lq  sB  CHOON 
#	"  	^,-QRX]]	^ 
#	"s:   CB6A0B	C	B3"B..B33B66B?;Cc                    	 t        | j                  | j                  t        j                        }t        j                  |j                         |j                  S # t
        $ r Y y w xY wr"   )	ra   r   r   rL   O_RDONLYFileNotFoundErrorr^   r>   r@   )r   rU   s     r%   _preflight_datarr   o   sW    #I$7$79L9LbkkZ HHV??  s   /A 	A('A(c                    t        j                  | dt         j                        }g }t        j                  | d      x}r*|j	                  |       t        j                  | d      x}r*dj                  |      S )Nr   i   r'   )rL   lseekSEEK_SETreadappendjoin)r>   _chunkschunks       r%   _read_descriptorr|   x   sf    
Q,AF77:u-
-%
-e 77:u-
-%
-88Fr'   c              #    K   t        | |d      5 }	 t        |j                  |j                  t        j
                        }	 t        |t	        j                  |j                        t        |j                               t        j                  |j                  t        j                         |j                          t        |t	        j                  |j                        t        |j                               	 t        |j                  |j                   t        j"                        }	 t        |j                        }t%        |t	        j                  |j                        |      }t'        ||j                  |j                  ||       t	        j(                  |j                         	 t        j                  |j                  t        j*                         t	        j(                  |j                         	 ddd       y# t        $ r}t        d      |d}~ww xY w# t        $ r}t        d      |d}~ww xY w# t	        j(                  |j                         w xY w# t        j                  |j                  t        j*                         t	        j(                  |j                         w xY w# 1 sw Y   yxY ww)z?Open only the pre-existing bound lock and data file for repair.Trg   z%repair requires an existing safe lockNz$repair data file is absent or unsafe)rn   ra   r   r   rL   O_RDWRr]   r	   r   r\   r>   r|   fcntlflockLOCK_EXr+   r   rp   r   r5   r^   LOCK_UN)	r   r   bindingr   lockrm   datar9   r:   s	            r%   locked_repair_sidecarr      s     
")->PT	UYb	a%i&9&99;N;NPRPYPYZD	&&w0IK[\`\k\kKlmKK7&w0IK[\`\k\kKlmd))*=*=y?R?RTVT_T_`**4??;:7BHHT__D]_fg
"9dootPWYcdd)KK7HHT__%- 
V	U  	a,-TU[``	a  d01WX^ccd )KK7HHT__%- 
V	Us   KJ7/HB8I%</H$,A$II%0AJ7>	K	H!HH!!J7$	H>-H99H>>I%!I""I%%AJ44J77K <Kc             #    K   t        | ||      5 }t        |      }|j                          t        |j                  |j
                  t        j                        }	 t        j                  |j                  |rt        j                  nt        j                         |j                          t        |j                  |j
                  t        j                  |j                              }|t        |      |k7  rt        d      | 	 t        j                  |j                  t        j"                         t        j$                  |j                         	 ddd       y# t         $ r}t        d      |d}~ww xY w# t        j                  |j                  t        j"                         t        j$                  |j                         w xY w# 1 sw Y   yxY ww)zEHold one validated flat-customer lock under the authority descriptor.rg   Nz3authority data was replaced during lock acquisitionz!authority lock boundary is unsafe)rn   rr   r+   rf   r   r   rL   r~   r   r   r>   r   LOCK_SHrX   r\   r	   r]   r   r^   )	r   r   	exclusiver    r   data_identityr   ry   rm   s	            r%   locked_sidecarr      sL     
")->P_	`dm'	2"9#6#6	8K8KRYYW	&KK)WI//1D1DbhhtF_`A(_Y-G=-X01fggO KK7HHT__% 
a	`  	],-PQW\\	] KK7HHT__% 
a	`sP   GAGB-E"AG	G"	E<+E77E<<E??AGGGG)rE   os.stat_resultr,   r?   )r   r   rT   r   rU   r   r,   r?   )r   r   rT   r   r`   r   r,   r=   )r   r
   r   r   r    r   r,   Generator[SidecarDirectory])r   r   r,   zFileIdentity | None)r>   r   r,   r8   )r   r
   r   r   r   r   r,   zGenerator[LockedRepair])
r   r
   r   r   r   r   r    r   r,   r   )1__doc__
__future__r   r   rL   rM   collections.abcr   
contextlibr   dataclassesr   typingr   checkin_cli.weekly_operationsr   r	   'checkin_cli.weekly_operations_authorityr
   %checkin_cli.weekly_operations_historyr   $checkin_cli.weekly_operations_layoutr   r   r   $checkin_cli.weekly_operations_repairr   r   r   tupler   r?   
O_NOFOLLOW	O_CLOEXEC
O_NONBLOCKr   r1   r   r5   r=   rF   rX   ra   rf   rn   rr   r|   r   r   r3   r'   r%   <module>r      s2   J "  	  % % !  \ Q C p p J  JS#X]]R\\1BMMAU A $d#+ + $+( $d#" " $" $d#  $$	  NS ^ ^  & &6  UZ & &r'   