
    DjJ                    |   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlZddlmZmZmZ ddlmZmZmZmZmZmZmZ dd	lmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# dd
l$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- dZ.dZ/ ej0        d          Z1dd!Z2dd(Z3dd)Z4dd-Z5dd2Z6ddHZ7ddNZ8ddUZ9ddWZ:ddYZ;e1<                    dZ          ddddd[eefdd\            Z=e1<                    d]          ddddd[eefdd^            Z>e1<                    d_          ddddd[eefdd`            Z?e1<                    da           ej@        ddbdc           ej@        dddee.           ej@        d[dfe/           ej@        dgdhdidjk          ddddd[eefddm            ZAe1<                    dn           ejB        dodp           ej@        ddbdq           ej@        d[dfe/           ej@        dddee.          ddddd[eefdds            ZCe1<                    dt           ej@        dddee.           ej@        ddudv           ej@        dwdhdidxk          ddddd[eef
ddz            ZDe1<                    d{           ej@        dddee.          ddddd[eefdd|            ZEe1<                    d}           ejB        dodp           ej@        ddbdq           ej@        d[dfe/           ej@        dddee.           ej@        dod~d           ej@        ddd          ddddd[eefdd            ZFe1<                    d           ej@        dodd[ddd           ej@        ddbd           ej@        dddee.           ej@        ddd[ddd           ej@        ddd           ej@        ddd           ej@        ddd           ej@        dddidk           ej@        dddidk           ej@        d[dd           ej@        d[dd           ej@        ddd           ej@        d[dd           ej@        d[dd           ej@        ddddk           ej@        d[dd           ej@        d[dd           ej@        d[dd          ddddd[eefdd            ZGe1<                    d           ej@        dodd[ddd           ej@        ddbd           ej@        dddee.           ej@        ddd[ddd           ej@        ddd           ej@        ddd           ej@        ddd           ej@        dddidk           ej@        dddidk           ej@        d[dd           ej@        d[dd           ej@        ddd           ej@        d[dd           ej@        d[dd           ej@        ddddk           ej@        d[dd           ej@        d[dd           ej@        d[dd           ej@        dddidk           ej@        dddidk          ddddd[eefdd            ZHdS )zPhotos commands.    )annotationsN)islice)Path)AnyIteratorOptional)CLIAbort	get_stateservice_call)normalize_albumnormalize_photonormalize_photo_changenormalize_photo_detailsnormalize_photo_librarynormalize_photo_sync_resultnormalize_sync_cursor)
DEFAULT_LOG_LEVELDEFAULT_OUTPUT_FORMATHttpProxyOptionHttpsProxyOptionLogLevelOptionNoVerifySslOptionOutputFormatOptionSessionDirOptionUsernameOptionstore_command_options)console_tableprint_json_textto_json_string)PhotosServiceExceptionPhotoSyncOptions)(legacy_shared_stream_unsupported_message(unsupported_shared_library_album_messagezPhoto library key.zUse shared photo stream.z"Browse and download iCloud Photos.)helpctxtyper.Contextusernamer   session_dirr   
http_proxyr   https_proxyr   no_verify_sslr   output_formatr   	log_levelr   c          
        
 t          | |||||||           t          |           }|                                
t          d
fd
j                  }	|
|	fS )Nr'   r(   r)   r*   r+   r,   r-   Photosc                      j         S Nphotos)apis   W/home/thesage/.hermes/venv/lib/python3.11/site-packages/pyicloud/cli/commands/photos.py<lambda>z)_resolve_photos_service.<locals>.<lambda>F   s	    CJ     account_name)r   r
   get_apir   r:   )r%   r'   r(   r)   r*   r+   r,   r-   stater4   r5   s             @r6   _resolve_photos_servicer=   /   s|     ##	 	 	 	 cNNE
--//C($6$6$6$6SEUVVVF#vr8   r5   r   r4   library_keystrreturnc                    t          dfd| j                  }|                    |          }|t          d| d          |S )Nr0   c                      j         S r2   )	librariesr3   s   r6   r7   z(_resolve_photo_library.<locals>.<lambda>M   s
      r8   r9   zNo photo library matched ''.)r   r:   getr	   )r5   r4   r>   rC   librarys    `   r6   _resolve_photo_libraryrG   J   sc        %  I
 mmK((GCKCCCDDDNr8   c                    t          | ||          }t          |dd           }t          |dd           dk    st          |t                    st	          t          |                    |S )Nzone_idscopezshared-stream)rG   getattr
isinstancedictr	   r"   )r5   r4   r>   rF   rI   s        r6   _resolve_cloudkit_photo_libraryrN   V   so    $S&+>>Ggy$//Gw&&/99B B9 ?LLMMMNr8   rF   
album_namer	   c                    t          | dd           dk    rt          t          ||                    S t          d| d          S )NrJ   zshared-libraryzNo album named 'z' was found.)rK   r	   r#   )rF   r>   rO   s      r6   _album_lookup_errorrQ   `   sU    w&&*:::4[*MM
 
 	
 ?z???@@@r8   albumOptional[str]shared_streamboolc                  |sBt          | |          t          dfd| j                  }r|t          |          nEr4t          dfd| j                  }|t          j        |          nt          d          |S )a  Resolve album object from either CloudKit library or shared streams.

    Args:
        api: PyiCloudService instance
        photos: Photos service instance
        album: Album name (optional for CloudKit, required for shared streams)
        library: Library key (used only for CloudKit path)
        shared_stream: Whether to use shared streams instead of CloudKit

    Returns:
        Resolved album object

    Raises:
        CLIAbort: If album resolution fails or constraints are violated
    r0   c                 J     rj                                        nj        S r2   )albumsfindall)rR   library_objs   r6   r7   z _resolve_album.<locals>.<lambda>   s$    ePK&++E222 r8   r9   Nc                 8    j                                        S r2   )shared_streamsrY   )rR   r4   s   r6   r7   z _resolve_album.<locals>.<lambda>   s    F)..u55 r8   z4The --shared-stream option requires an --album name.)rN   r   r:   rQ   r]   r	   )r5   r4   rR   rF   rT   	album_objr[   s    ``   @r6   _resolve_albumr_   h   s    .  O5c67KK PPPPP)
 
 
	  	CY&%k7EBBB	 
O 55555)
 
 
	
 %f&;WeLLL  MNNNr8   	directoryr   	state_dirOptional[Path]Optional[list[str]]sizelive_photo_sizefolder_structurerecentOptional[int]until_foundskip_videosskip_live_photos	align_rawxmp_sidecarset_exif_datetimekeep_icloud_recent_daysonly_print_filenamesdry_runauto_deleter!   c                    t          di d| d|d|dt          |pd          d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|S )z@Build one canonical sync options object for sync-style commands.r`   ra   rF   rX    rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   )r!   tuple)r`   ra   rF   rR   rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   s                     r6   _build_photo_sync_optionsrv      s   .    ))  U[b!!!	
 T ( *) v  K  K *) )  K ,+ !8 7  21!" #$  K% r8   r<   payloaddict[str, Any]titleNonec                  | j                             t          |ddgd|d         fd|d         fd|d         fd	d
                    |d                   pdfd|d         pdfd|d         fd|d         fd|d         fd|d         fd|d         fg
                     |d         D ]:}|d         dk    r| j                             |d          d|d                     ;dS ) z*Render one photo sync result in text mode.MetricValue	Directoryr`   z
State Path
state_pathLibraryrF   Albumsz, rX   z(all photos)Sync Cursorsync_cursor zShort Circuitedshort_circuited
Downloadeddownloaded_countSkippedskipped_countDeleteddeleted_countListedlisted_countitemsactionskippedz: pathN)consoleprintr   join)r<   rw   ry   items       r6   _render_photo_sync_resultr      s:   
 
Mwgk23w|45GI./499WX%677I>J 6 <"="G,=$>?w'9:;GO45GO457>23	
 	
  $   A A>Y&&tH~??f??@@@@A Ar8   optionsinterval_secondsint
iterations
int | NoneIterator[dict[str, Any]]c              #     K   t          dfd| j                  d}	 	 t          dfd| j                  }n# t          $ r Y dS w xY w|dz  }t          |          }||d	<   |V  K)
z7Yield normalized sync payloads from the watch iterator.r0   c                 4                                    S )N)r   r   )watch)r   r   r   r4   s   r6   r7   z+_iter_photo_watch_results.<locals>.<lambda>   s#    -!  
 
 r8   r9   r   Tc                 "    t                     S r2   )next)
watch_iters   r6   r7   z+_iter_photo_watch_results.<locals>.<lambda>   s    Z(( r8   N   	iteration)r   r:   StopIterationr   )	r5   r4   r   r   r   
run_numbersync_resultrw   r   s	    ````   @r6   _iter_photo_watch_resultsr      s       	
 	
 	
 	
 	
 	
 	

 %  J J	&(((( -  KK
  	 	 	FF	a
-k::)s   A 
AAr   c          	         |#| j                             d| d| d           dS | j                             d| d| d| d           dS )zGPrint a lightweight progress message before one watch iteration starts.NzStarting photo watch run z (poll interval zs)... of r   r   )r<   r   r   r   s       r6   _print_photo_watch_startr     s     Z	ZZCSZZZ	
 	
 	
 		M	N	N 	N$	N 	N6F	N 	N 	N    r8   next_iterationc          	         |#| j                             d| d| d           dS | j                             d| d| d| d           dS )z<Print a progress message between completed watch iterations.NzWaiting zs before photo watch run z...r   r   )r<   r   r   r   s       r6   _print_photo_watch_waitr     s     U'UU.UUU	
 	
 	
 		M	Z	Z 	Z6D	Z 	ZJT	Z 	Z 	Z    r8   rX   Fc           
     ,   t          | |||||||          \  }}	d t          dfd|	j                  D             }
|j        r|                    |
           dS |j                            t          dg dd	 |
D                                  dS )
zList photo albums.r/   c                ,    g | ]}t          |          S rt   r   .0rR   s     r6   
<listcomp>z!photos_albums.<locals>.<listcomp>D  0        	  r8   r0   c                 ,    t           j                  S r2   )listrX   r3   s   r6   r7   zphotos_albums.<locals>.<lambda>H  s    D'' r8   r9   NzPhoto AlbumsNamez	Full NameCountc                <    g | ]}|d          |d         |d         fS name	full_namecountrt   r   s     r6   r   z!photos_albums.<locals>.<listcomp>S  ,    VVVUeFmU;/w@VVVr8   r=   r   r:   json_output
write_jsonr   r   r   r%   r'   r(   r)   r*   r+   r,   r-   r<   r5   rw   r4   s              @r6   photos_albumsr   .  s     1##	 	 	E3 !'''')
 
 
  G  !!!	M***VVgVVV	
 	
    r8   zshared-streamsc           
     ,   t          | |||||||          \  }}	d t          dfd|	j                  D             }
|j        r|                    |
           dS |j                            t          dg dd	 |
D                                  dS )
zList shared photo streams.r/   c                ,    g | ]}t          |          S rt   r   r   s     r6   r   z)photos_shared_streams.<locals>.<listcomp>n  r   r8   r0   c                 ,    t           j                  S r2   )r   r]   r3   s   r6   r7   z'photos_shared_streams.<locals>.<lambda>r  s    D.// r8   r9   NzShared Photo Streamsr   c                <    g | ]}|d          |d         |d         fS r   rt   r   s     r6   r   z)photos_shared_streams.<locals>.<listcomp>}  r   r8   r   r   s              @r6   photos_shared_streamsr   X  s     1##	 	 	E3 !////)
 
 
  G  !!!	M"***VVgVVV	
 	
    r8   rC   c           
     ,   t          | |||||||          \  }}	d t          dfd|	j                  D             }
|j        r|                    |
           dS |j                            t          dg dd	 |
D                                  dS )
z0List available photo libraries and sync cursors.r/   c                4    g | ]\  }}t          ||          S rt   )r   )r   keyrF   s      r6   r   z$photos_libraries.<locals>.<listcomp>  s6       C 	 W--  r8   r0   c                 6     j                                         S r2   )rC   r   r3   s   r6   r7   z"photos_libraries.<locals>.<lambda>  s    F$**,, r8   r9   NzPhoto Libraries)KeyScopeZoneIndexingr   c                X    g | ]'}|d          |d         |d         |d         |d         f(S )r   rJ   	zone_nameindexing_stater   rt   r   r   s     r6   r   z$photos_libraries.<locals>.<listcomp>  sS     	 	 	  KM%)*'	 	 	r8   r   r   s              @r6   photos_librariesr     s     1##	 	 	E3 (,,,,)
 
 
  G  !!!	M???	 	 $	 	 		
 	
    r8   r   z--albumz#Album name. Defaults to all photos.rootz	--libraryz--shared-stream2   z--limitr   zMaximum photos to show.)minr$   limitc           
     p   t          | |||||	|
|          \  }}}t          ||||          d t          dfd|j                  D             }|j        r|                    |           dS |j                            t          dg drd	d
gng z   fd|D                                  dS )zList photo assets.r/   rR   rF   rT   c                ,    g | ]}t          |          S rt   )r   r   s     r6   r   zphotos_list.<locals>.<listcomp>  s0        	  r8   r0   c                 H    t          t           j                            S r2   )r   r   r4   )r^   r   s   r6   r7   zphotos_list.<locals>.<lambda>  s    D	 0%8899 r8   r9   N)IDFilenameTypeCreatedSizeLikedz
Like Countc                    g | ]<}|d          |d         |d         |d         |d         fr|d         |d         fndz   =S )idfilename	item_typecreatedrd   liked
like_countrt   rt   )r   photorT   s     r6   r   zphotos_list.<locals>.<listcomp>  sw     
 
 
  $K*%+&)$&M =JQE'NE,$788rS
 
 
r8   )	r=   r_   r   r:   r   r   r   r   r   )r%   rR   rF   rT   r   r'   r(   r)   r*   r+   r,   r-   r<   r5   r4   rw   r^   s      ``           @r6   photos_listr     sG   ( 1##	 	 	E3 #  I  99999)
 
 
  G  !!!	M999*7?&&RA
 
 
 
 %
 
 
		
 	
    r8   rE   .zPhoto asset id.z7Album name to search before falling back to all photos.photo_idc           
     v   t          | |||||	|
|          \  }}t          ||||          	 t          dfd|j                  }n&# t          $ r}t          d d          |d}~ww xY wt          |          }|j        r|                    |           dS t          |j
        |           dS )	z0Show detailed metadata for a single photo asset.r/   r   r0   c                 &      nj                  S r2   rZ   r^   r   r4   s   r6   r7   zphotos_get.<locals>.<lambda>(      )"7YYVZR r8   r9   No photo matched 'rD   N)r=   r_   r   r:   KeyErrorr	   r   r   r   r   r   )r%   r   rR   rT   rF   r'   r(   r)   r*   r+   r,   r-   r<   r5   r   errrw   r^   r4   s    `               @@r6   
photos_getr     s    , 1##	 	 	E3 #  ICRRRRRR)
 
 

  C C C8H88899sBC%e,,G !!!EM7+++++s   A 
A4A//A4changesz--sincez#Sync cursor to fetch changes after.d   zMaximum changes to show.sincec           
     V   t          | ||||||	|
          \  }}}t          |||          d t          dfd|j                  D             }|j        r|                    |           dS |j                            t          dg dd	 |D                                  dS )
z%List incremental photo change events.r/   c                ,    g | ]}t          |          S rt   )r   )r   changes     r6   r   z"photos_changes.<locals>.<listcomp>P  s0        	v&&  r8   r0   c                 f    t          t                                                             S )N)r   )r   r   iter_changes)r[   r   r   s   r6   r7   z photos_changes.<locals>.<lambda>T  s*    D 8 8u 8 E EuMMNN r8   r9   NzPhoto Changes)KindRecordr   r   Modifiedc                X    g | ]'}|d          |d         |d         |d         |d         f(S )kindrecord_namerecord_typedeletedmodifiedrt   r   s     r6   r   z"photos_changes.<locals>.<listcomp>_  sR     	 	 	  L''O$	 	 	r8   )	r=   rN   r   r:   r   r   r   r   r   )r%   rF   r   r   r'   r(   r)   r*   r+   r,   r-   r<   r5   r4   rw   r[   s     ``           @r6   photos_changesr  4  s   " 1##	 	 	E3 2#vwGGK "NNNNNN)
 
 
  G  !!!	M===	 	 $	 	 		
 	
    r8   zsync-cursorc	           
     l   t          | |||||||          \  }	}
}t          |
||          t          d          st          d| d          t	          dfd|
j                  }t          ||          }|	j        r|	                    |           d	S |	j	        
                    |           d	S )
z1Show the current sync cursor for a photo library.r/   r   zPhoto library 'z ' does not support sync cursors.r0   c                 ,                                      S r2   )r   )r[   s   r6   r7   z$photos_sync_cursor.<locals>.<lambda>  s    '')) r8   r9   )rF   N)r=   rN   hasattrr	   r   r:   r   r   r   r   r   )r%   rF   r'   r(   r)   r*   r+   r,   r-   r<   r5   r4   cursorrw   r[   s                 @r6   photos_sync_cursorr  m  s     1##	 	 	E3 2#vwGGK;.. TRRRRSSS))))%  F
 $FG<<<G !!!	Mr8   downloadz--outputzDestination file path.originalz	--versionzPhoto version to download.outputversionc           
     \   t          | |||	|
|||          \  }}t          ||||          	 t          dfd|j                  n&# t          $ r}t          d d          |d}~ww xY wt          dfd	|j                  }|t          d
          |j                            dd           |                    |           |j	        r(|
                    t          |          d           dS |j                            t          |                     dS )zDownload a photo asset.r/   r   r0   c                 &      nj                  S r2   r   r   s   r6   r7   z!photos_download.<locals>.<lambda>  r   r8   r9   r   rD   Nc                 0                                    S )N)r  )r  )r   r  s   r6   r7   z!photos_download.<locals>.<lambda>  s    w// r8   z,No data was returned for that photo version.T)parentsexist_ok)r   r   r  )r=   r_   r   r:   r   r	   parentmkdirwrite_bytesr   r   r?   r   r   )r%   r   rR   rT   rF   r  r  r'   r(   r)   r*   r+   r,   r-   r<   r5   r   datar^   r   r4   s    `    `           @@@r6   photos_downloadr    s   4 1##	 	 	E3 #  ICRRRRRR)
 
 

  C C C8H88899sBC /////%  D
 |EFFF
Mt444
t !3v;;7KK	
 	
 	
 		MF$$$$$s   A 
A6A11A6syncz--directoryTz(Destination directory for synced photos.)	file_okaydir_okayresolve_pathr$   z3Album name to sync. Repeat to sync multiple albums.z--state-dirzMDirectory for persistent sync state. Defaults to <directory>/.pyicloud-state.z--sizez7Primary photo size to sync: original, medium, or thumb.z--live-photo-sizez:Live photo video size to sync: original, medium, or thumb.nonez--folder-structurezODatetime folder layout, for example '{:%Y/%m}', or 'none' for a flat directory.z--recentz.Only sync photos added within the last N days.z--until-foundz/Stop after N consecutive already-current files.z--skip-videosz7Skip standalone videos and live photo video companions.z--skip-live-photosz Skip live photo assets entirely.zas-isz--align-rawz9Treat RAW+JPEG pairs as: as-is, original, or alternative.z--xmp-sidecarzAExport generated XMP sidecars next to synced primary photo files.z--set-exif-datetimezJSet JPEG EXIF created timestamps when the file does not already have them.z--keep-icloud-recent-dayszSDelete remote assets after local confirmation unless they were taken within N days.z--only-print-filenamesz4Print the target filenames without downloading them.z	--dry-runz4Preview sync actions without writing files or state.z--auto-deletezLDelete local files that are no longer present remotely for this sync target.c           
     4   ! t          | |||||||          \  }}!t          di d|d|d|d|d|d|d|d	|d
|	d|
d|d|d|d|d|d|d|d| 	 t          d !fd|j                  }n/# t          $ r"}t          t          |                    |d}~ww xY wt          |          }|j        r|	                    |           dS |r-|d         D ]"}|j
                            |d                    #dS t          ||d           dS )z3Synchronize photo resources into a local directory.r/   r`   ra   rF   rR   rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   r0   c                 .                                    S r2   r  r   r4   s   r6   r7   zphotos_sync.<locals>.<lambda>f  s    FKK(( r8   r9   Nr   r   z
Photo Syncry   rt   )r=   rv   r   r:   r    r	   r?   r   r   r   r   r   r   )"r%   r`   rR   rF   ra   rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   r'   r(   r)   r*   r+   r,   r-   r<   r5   r   r   rw   r   r   r4   s"                                   @@r6   photos_syncr)    s   V 1##	 	 	E3 (   ))  e	
 T ( *) v  K  K *) )  K ,+ !8 7  21!" #$  K%G(*"((((()
 
 

 " * * *s3xx  c)*)+66G !!! G$ 	. 	.DMV----eWLAAAAAAs   A; ;
B'B""B'r   i,  z
--intervalz+Poll interval in seconds between sync runs.z--iterationsz?Stop after N sync runs. Defaults to watching until interrupted.intervalc           
       %& t          | |||||||          \  }}&t          d%i d|d|d|d|d|d|d|d	|d
|	d|
d|d|d|d|d|d|d|d|%	 |j        rz|@t          |&%||          D ])}|j                            t          |                     *dS t          t          |&%||                    }|                    |           dS d} || |k     r| dz   }!| dk    r@t          |||!|           t          j        |           |j                                         t          ||!||           t          d%&fd|j                  }"| dz  } t          |"          }| |d<   |rY||r)|dk    r#|j                            d|d                     |d         D ]"}#|j                            |#d                     #nt!          ||d!|d          "           || |k     dS dS # t"          $ r"}$t%          t'          |$                    |$d}$~$wt(          $ r}$t+          j        d#$          |$d}$~$ww xY w)&z;Watch a photo sync target and rerun it on a fixed interval.r/   r`   ra   rF   rR   rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   N)r5   r4   r   r   r   r   r   )r   r   r   )r   r   r   r0   c                 .                                    S r2   r&  r'  s   r6   r7   zphotos_watch.<locals>.<lambda>8  s    G,, r8   r9   r   zrun r   r   zPhoto Watch Run r(     )codert   )r=   rv   r   r   r   r   r   r   r   r   timesleepr   r   r:   r   r   r    r	   r?   KeyboardInterrupttyperExit)'r%   r`   rR   rF   ra   rd   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   r*  r   r'   r(   r)   r*   r+   r,   r-   r<   r5   rw   payloadscompleted_iterationsr   r   r   r   r   r4   s'                                        @@r6   photos_watchr6  v  s   p 1##	 	 	E3 (   ))  e	
 T ( *) v  K  K *) )  K ,+ !8 7  21!" #$  K%G(@, 	!8!#%-)      A AG M''w(?(?@@@@)!#%-)   H X&&&F  $8:$E$E1A5N#a'''%-#1)	    
8$$$##%%%$(!)%	    ',,,,, -  K
 !A% 1+>>G#7GK # 
%*%aM''(Ew{/C(E(EFFF#G, 6 6DM''V55556 *CW[-ACC   ?  $8:$E$E$E$E$E$EH " * * *s3xx  c) , , ,jc"""+,s2   AH (6H  DH 
IH((I5II)r%   r&   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   )r5   r   r4   r   r>   r?   r@   r   )rF   r   r>   r?   rO   r?   r@   r	   )r5   r   r4   r   rR   rS   rF   r?   rT   rU   r@   r   )&r`   r   ra   rb   rF   r?   rR   rc   rd   r?   re   r?   rf   r?   rg   rh   ri   rh   rj   rU   rk   rU   rl   r?   rm   rU   rn   rU   ro   rh   rp   rU   rq   rU   rr   rU   r@   r!   )r<   r   rw   rx   ry   r?   r@   rz   )r5   r   r4   r   r   r!   r   r   r   r   r@   r   )
r<   r   r   r   r   r   r   r   r@   rz   )
r<   r   r   r   r   r   r   r   r@   rz   )r%   r&   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )r%   r&   rR   rS   rF   r?   rT   rU   r   r   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )r%   r&   r   r?   rR   rS   rT   rU   rF   r?   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )r%   r&   rF   r?   r   rS   r   r   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )r%   r&   rF   r?   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )r%   r&   r   r?   rR   rS   rT   rU   rF   r?   r  r   r  r?   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )6r%   r&   r`   r   rR   rc   rF   r?   ra   rb   rd   r?   re   r?   rf   r?   rg   rh   ri   rh   rj   rU   rk   rU   rl   r?   rm   rU   rn   rU   ro   rh   rp   rU   rq   rU   rr   rU   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   ):r%   r&   r`   r   rR   rc   rF   r?   ra   rb   rd   r?   re   r?   rf   r?   rg   rh   ri   rh   rj   rU   rk   rU   rl   r?   rm   rU   rn   rU   ro   rh   rp   rU   rq   rU   rr   rU   r*  r   r   rh   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r-   r   r@   rz   )I__doc__
__future__r   r/  	itertoolsr   pathlibr   typingr   r   r   r2  pyicloud.cli.contextr	   r
   r   pyicloud.cli.normalizer   r   r   r   r   r   r   pyicloud.cli.optionsr   r   r   r   r   r   r   r   r   r   pyicloud.cli.outputr   r   r   pyicloud.services.photosr    r!   +pyicloud.services.photos_cloudkit.constantsr"   r#   _PHOTO_LIBRARY_KEY_HELP_PHOTO_SHARED_STREAM_HELPTyperappr=   rG   rN   rQ   r_   rv   r   r   r   r   commandr   r   r   Optionr   Argumentr   r  r  r  r)  r6  rt   r8   r6   <module>rI     s     " " " " " "              * * * * * * * * * *  B B B B B B B B B B                                         O N N N N N N N N N M M M M M M M M       
 / 6 ek;<<<   6	 	 	 	   A A A A. . . .b* * * *ZA A A A:       F   (   ( X  $$("&$(',(= 1& & & & &R   $$("&$(',(= 1& & & & &R [  $$("&$(',(= 1/ / / / /d V (5<iC    5<:QRRR&%, '@   b)9RSSS#$("&$(',(= 1!C C C C CL U #EN3->???'5<F  
 '%, '@    5<:QRRR#$("&$(',(= 1%4, 4, 4, 4, 4,n Y  5<:QRRR'5<iC   c9!:TUUU#$("&$(',(= 15 5 5 5 5p ]  5<:QRRR#$("&$(',(= 1"  "  "  "  " J Z #EN3->???'5<F  
 '%, '@    5<:QRRR5<Z6NOOO5<K&B    $$("&$(',(= 1-C% C% C% C% C%L V #el7   ".B" " "
  5<:QRRR ,\! ! ! F  
 (5<I  
 )EL^  
 )EL=	   ".>	" " " %F  
 *U\/  
 "U\H  
 %P  
 +elY  
 .:U\#b	. . . ". C" " "
 !ELC  
 %[  
  $$("&$(',(= 1OXB XB XB XB XBv W #el7   ".B" " "
  5<:QRRR ,\! ! ! F  
 (5<I  
 )EL^  
 )EL=	   ".>	" " " %F  
 *U\/  
 "U\H  
 %P  
 +elY  
 .:U\#b	. . . ". C" " "
 !ELC  
 %[  
 !EL:	   !-N	! ! !  $$("&$(',(= 1gU, U, U, U, U, U, U,r8   