o
    !gi                     @  s   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	 ddl
mZ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 ddlmZ eddG dd dZh dZd!ddZd"ddZd#d$ddZd S )%    )annotations)	dataclass)Path)List)sync_playwright   )create_run_dirshot)launch_browser_context)log_steppause)ensure_logged_in)run)users_select_user_by_email)users_upload_documentsT)frozenc                   @  s.   e Zd ZU ded< dZded< dZded< dS )DocSpecr   file strcommentfilterN)__name__
__module____qualname____annotations__r   r    r   r   e/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation/commands/users_upload_documents.pyr      s   
 r   >   Show AllShow ClientInternal OnlyShow ContractorInternal Admin Only (Legacy)(Internal Admin and Manager Only (Legacy)sr   returnc           	      C  s   dd |  dD }i }|D ]}d|vrtd|| dd\}}| ||  < q|ds:td| t|d   }|d	d
}|dd
}|rb|tvrbtd|dt	t t
|||dS )Nc                 S  s   g | ]
}|  r|  qS r   )strip).0pr   r   r   
<listcomp>&   s    z#_parse_doc_spec.<locals>.<listcomp>;=z*Invalid --doc chunk (expected key=value):    r   z --doc missing required 'file=': r   r   r   zInvalid filter in --doc: . Allowed: r   r   r   )split
ValueErrorr&   lowergetr   
expanduserresolve_ALLOWED_FILTERSsortedr   )	r$   partskvpartkvfcfltr   r   r   _parse_doc_spec$   s   
r?   List[DocSpec]c                 C  s  t t| dg pg }|rdd |D }|S t t| dg pg }|s%tdt t| dg p-g }t t| dg p7g }g }t|D ]@\}}t|  }|t|k rU|| nd}	|t|k ra|| nd}
|
ru|
tvrutd	|
d
t	t |
t||	|
d q?|S )N	user_docsc                 S  s   g | ]}t |qS r   )r?   )r'   r$   r   r   r   r)   ?   s    z_build_docs.<locals>.<listcomp>
user_fileszCMissing files. Use one or more --doc ... OR --file /path/to/doc.pdfuser_commentsuser_filtersr   zInvalid --filter: r-   r.   )listgetattr
SystemExit	enumerater   r3   r4   lenr5   r6   appendr   )cfg	doc_specsdocsfilescommentsfiltersir<   fpr=   r>   r   r   r   _build_docs;   s$   rS   r   mfa_codeintc              	   C  s  t | d}t| dd stdt| }|D ]}|j s&td|j qt }t|| t	| j
d\}}| }tt| dd}	t|| |||	d	 t||d
 td
| t| d t|| | | j }
t||
|dddd}|jst||d td| td|
 t||d td| t| d t||| |dd}dd |D }dd |D }td td tdt|  |D ]
}td|j  qtdt|  |D ]}td|j d|j  qt||d td| z|jt	| j
d  W n
 ty   Y nw z|  W n
 ty   Y nw z|  W n
 ty(   Y nw W d    n	1 s4w   Y  t|d!krBd!S d"S )#Nzusers-upload-docs
user_emailr   z Missing --user-email (required).zUpload file does not exist: )storage_statepause_on_mfaF)rT   	allow_mfazusers-upload-00-auth-okz+Authenticated OK, starting Users navigation   i@  T)emailrun_dir	max_pages
timeout_msscreenshot_on_failzusers-upload-user-not-foundzUser not found by email: zusers-upload-01-user-selectedz.User profile opened. Ready to upload documentsiȯ  )rM   rK   r\   r^   c                 S  s   g | ]}|j r|qS r   okr'   rr   r   r   r)          z.cmd_users_upload_documents.<locals>.<listcomp>c                 S  s   g | ]}|j s|qS r   r`   rb   r   r   r   r)      rd   zUPLOAD SUMMARYz-------------zOK: z  - zFAILED: z :: zusers-upload-99-done)pathr   r   )r   rF   r&   rG   rS   r   existsr   r
   r   
state_filenew_pageboolr   r	   r   r   users_nav_flow_runrV   r   foundRuntimeErrorr   printrI   filenamereasonrW   	Exceptionclose)rK   rT   r\   rM   dr(   browsercontextpagerY   r[   resultupload_resultsra   badrc   r   r   r   cmd_users_upload_documentsV   s   









Hry   N)r$   r   r%   r   )r%   r@   )r   )rT   r   r%   rU   ) 
__future__r   dataclassesr   pathlibr   typingr   playwright.sync_apir   core.artifactsr   r	   core.browserr
   core.logr   r   auth.sessionr   flows.users_navr   rj   flows.users_select_userr   flows.users_upload_documentsr   r   r5   r?   rS   ry   r   r   r   r   <module>   s$   


