
    h,                        d Z ddlZddlZddlZddlZddlZddlm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 dd
lmZ 	 ddlZn# e$ r dZY nw xY w G d de          Z G d de          Z G d de          Z G d de          Zedededede
j        j        dediZdZej        Zej         Z!d Z"d Z#d Z$d Z%d Z&d Z'ej(        fdZ)d Z*d  Z+e,d!k    r e+             dS dS )"a@  
Upload a video to Youtube from the command-line.

    $ youtube-upload --title="A.S. Mutter playing"                      --description="Anne Sophie Mutter plays Beethoven"                      --category=Music                      --tags="mutter, beethoven"                      anne_sophie_mutter.flv
    pxzZ-fYjeYs
    N)open)file   )auth)upload_video)
categories)lib)	playlistsc                       e Zd ZdS )InvalidCategoryN__name__
__module____qualname__     m/home/visionen/pythonvenv/lib/python3.11/site-packages/youtube_upload-0.8.0-py3.11.egg/youtube_upload/main.pyr   r   +             r   r   c                       e Zd ZdS )OptionsErrorNr   r   r   r   r   r   .   r   r   r   c                       e Zd ZdS )AuthenticationErrorNr   r   r   r   r   r   1   r   r   r   c                       e Zd ZdS )RequestErrorNr   r   r   r   r   r   4   r   r   r               z$https://www.youtube.com/watch?v={id}c                 .    t          j        |            dS )z)Opens a URL link in the client's browser.N)
webbrowserr   )urls    r   	open_linkr"   F   s    OCr   c                     t          dddg          } t          rt                              t                                          dt                                          dt                                          dt                                          dt                              d          dt                                          dt                                          g          fd}fd	} | ||
          S  | dd 
          S )z5Return a function callback to update the progressbar.ProgressInfocallbackfinish /	max_value)widgetsc                     t          d          s3t          d          r| _        n| _                                                             |           d S )Nnext_updatemaxval)hasattrr-   r)   startupdate)
total_size	completedbars     r   	_callbackz$get_progress_info.<locals>._callbackY   s\    3.. 3)) /!+CJJ$.CM		JJy!!!!!r   c                  P    t           d          r                                 S d S )Nr,   )r.   r&   )r3   s   r   _finishz"get_progress_info.<locals>._finishb   s-    sM** $zz||#$ $r   )r%   r&   Nc                      dS )NTr   r   r   r   <lambda>z#get_progress_info.<locals>.<lambda>h   s    $ r   )	structprogressbarProgressBar
PercentageBarFileTransferSpeedDataSizeTimerAdaptiveETA)progressinfor4   r6   r3   s      @r   get_progress_inforC   K   s   .:x*@AAL @%%""$$""..00%%''k.B.B;.O.O""$$((**/
%  	" 	" 	" 	" 	"	$ 	$ 	$ 	$ 	$ |Yw????|T,,????r   c                    | r| t           j        v rTt           j        |          }t          d                    | |                     t	          t           j        |                    S d                    |           }t          |          dS )z!Return category ID from its name.zUsing category: {0} (id={1})z{0} is not a valid categoryN)r   IDSdebugformatstrr   )category	ncategorymsgs      r   get_category_idrL   k   s     'z~%%"x0I077)LLMMMz~h/000/66x@@C!#&&&' 'r   c                    t           j         |j                  }t           d          d          r& |j        pd                              d          }n|j        }|j        rt          d           fd|j        pd	                    d          D             }t          ||dz   |	          } |j                  }	|dk    r |	j        di |n|}
t                      }t          |j                  }|
||||j        |j        d
|j        |j        rdn|j        |j        |j        dt          j        |j                  |j        dd}t          d                    |                     	 t1          j        | |||j        |j                  }|                                 n# |                                 w xY w|S )z+Upload video with index (for split videos).stringdecode zstring-escapez4Your video will remain private until specified date.c                 J    g | ]} |                                            S r   )strip).0sus     r   
<listcomp>z(upload_youtube_video.<locals>.<listcomp>   s)    BBBQAAaggiiLLBBBr   ,r   )titlentotal)rX   description
categoryIdtagsdefaultLanguagedefaultAudioLanguageprivate)
embeddableprivacyStatus	publishAtlicense)locationrecordingDate)snippetstatusrecordingDetailszStart upload: {0})progress_callback	chunksizer   )r	   to_utf8rX   r.   r[   rO   
publish_atrF   r]   splitdicttitle_templaterG   rC   rL   rI   default_languagedefault_audio_languagera   privacyrd   string_to_dictre   recording_dater   uploadr%   rk   r&   )youtubeoptions
video_pathtotal_videosindexrX   r[   r]   nsrp   complete_titleprogresscategory_idrequest_bodyvideo_idrU   s                  @r   upload_youtube_videor   w   s   AAgmEqq{{H%% *a+1r2299/JJ) FDEEEBBBB7<#52"<"<S"A"ABBBD	EUQYl	;	;	;BQw-..N5AA5E5E+n+11b1115N ""H!'"233K $&%&7$+$B
 
 ",+2+=Rii7? +	
 
 *7+;<<$3
 
# L. 


$
$Z
0
0111&w
'3xGX181BD D D 	Os   9#F1 1Gc                    t           j                            d          }t           j                            |d          }| j        pt           j                            |d          }| j        p|}t          d                    |                     t          d                    |                     | j        rt          j
        j        nt          j        j        }t          j        |||          S )zReturn the API Youtube object.~z .youtube-upload-credentials.jsonz.client_secrets.jsonzUsing client secrets: {0}zUsing credentials file: {0})get_code_callback)ospath
expanduserjoinclient_secretscredentials_filerF   rG   auth_browserr   browserget_codeconsoleget_resource)rx   homedefault_credentialsr   credentialsr   s         r   get_youtube_handlerr      s    7c""D',,t-OPP+Yrw||DBX/Y/YN*A.AK	
%
,
,^
<
<===	
'
.
.{
;
;<<<#0L..6:l6K ^[/@B B B Br   c                     dg}fd|D             }|rK|                                   d                    d                    |                    }t          |          dS )zCheck errors in options.rX   c                 4    g | ]}t          |          |S r   )getattr)rS   optrx   s     r   rV   z'parse_options_error.<locals>.<listcomp>   s(    LLLsggs6K6KLsLLLr   z%Some required option are missing: {0}z, N)print_usagerG   r   r   )parserrx   required_optionsmissingrK   s    `   r   parse_options_errorr      sv    yLLLL.LLLG  5<<TYYw=O=OPP3   r   c           	         t          | |           t          |          }|r&t          |          D ]\  }}t          |||t	          |          |          }t
                              |          }t          d                    |                     |j        rt          |           |j	        r@|
                                                    ||j	                                                   |j        r4t          j        ||t!          j        |j                  |j                   |                    |dz              dS t)          d          )z2Run the main scripts from the parsed options/args.)idzVideo URL: {0})videoId
media_body)rX   rs   
zCannot get youtube resourceN)r   r   	enumerater   lenWATCH_VIDEO_URLrG   rF   r"   thumb
thumbnailssetexecuteplaylistr
   add_video_to_playlistr	   rl   rs   writer   )	r   rx   argsoutputrw   r{   ry   r   	video_urls	            r   run_mainr      s`   (((!'**G A!*4 	* 	*E:+GWj#d))UZ[[H'..(.;;I")))44555  %)$$$} _""$$((gm(TT\\^^^ n/69k'BR6S6S]d]ln n n nLLD))))	* 	* ""?@@@r   c           	         d}t          j        |          }|                    ddddd           |                    dd	d
dd           |                    ddddd           |                    dddddd           |                    ddddd           |                    dddddd           |                    ddd d!dd"           |                    dd#d$dd%d&d'(           |                    dd)d*ddd+d,-           |                    dd.d/d!dd0           |                    dd1d2dddd3-           |                    dd4d5dddd6-           |                    dd7d8dd9d:;           |                    dd<d=dd>           |                    dd?d@ddAddB-           |                    ddCdDdEdFG           |                    ddHdIddJ           |                    ddKdLddM           |                    ddNdOdPdQR           |                    ddSdTdUdVdWX           |                    ddYdZdPd[R           |                    |           \  }}|j        ft
          j                            |j                  rBt          |j        d\]          5 } |j	                    |_
        ddd           n# 1 swxY w Y   	 t          |||           dS # t          j        j        $ rk}t                              |j        t%          j                    ]                                          }t+          d^                    |                    d}~ww xY w)_zUpload videos to Youtube.zHUsage: %prog [OPTIONS] VIDEO [VIDEO2 ...]

    Upload videos to Youtube.z-tz--titlerX   rN   zVideo title)desttypehelpz-cz
--categoryrI   zName of video categoryz-dz--descriptionr[   zVideo descriptionrP   z--description-filedescription_filezVideo description fileN)r   r   r   defaultz--tagsr]   z2Video tags (separated by commas: "tag1, tag2,...")z	--privacyrs   STRINGpublicz,Privacy status (public | unlisted | private))r   metavarr   r   z--publish-atrm   datetimez/Publish date (ISO 8601): YYYY-MM-DDThh:mm:ss.sZz	--licenserd   )rw   creativeCommonrw   zILicense for the video, either "youtube" (the default) or "creativeCommon")r   r   choicesr   r   z
--locationre   z)latitude=VAL,longitude=VAL[,altitude=VAL]zVideo location")r   r   r   r   r   z--recording-dateru   z1Recording date (ISO 8601): YYYY-MM-DDThh:mm:ss.sZz--default-languagerq   z0Default language (ISO 639-1: en | fr | de | ...)z--default-audio-languagerr   z6Default audio language (ISO 639-1: en | fr | de | ...)z--thumbnailr   FILEz2Image file to use as video thumbnail (JPEG or PNG))r   r   r   r   z
--playlistr   z9Playlist title (if it does not exist, it will be created)z--title-templaterp   z{title} [{n}/{total}]z=Template for multiple videos (default: {title} [{n}/{total}])z--embeddablera   TzVideo is embeddable)r   r   r   z--client-secretsr   zClient secrets JSON filez--credentials-filer   zCredentials JSON filez--auth-browserr   
store_truez.Open a GUI browser to authenticate if required)r   actionr   z--chunksizerk   inti   zUpdate file chunksize)r   r   r   r   z--open-linkr"   z:Opens a url in a web browser to display the uploaded videozutf-8)encodingzServer response: {0})optparseOptionParser
add_option
parse_argsr   r   r   existsr   readr[   r   googleapiclienterrors	HttpErrorbytesrO   contentr	   get_encodingrR   r   rG   )	argumentsusager   rx   r   r   errorresponses           r   mainr      s    !E "5))F dIG((  * * *
dLz3  5 5 5
dO-h.  0 0 0
b.5Gh3T  C C C
b(hO  Q Q Q
b+Ix&-[  ] ] ]
b.|Z")Z  \ \ \
b+Ix;Yf  h h h b,Zh",W,  . . . b,3CZ")\  ^ ^ ^
b.5Gh"HM  O O O b4;SZb"HS  U U U b-gHfO  Q Q Q
b,ZhV  X X X
b,3C#-DhZ  \ \ \ b.|T0  2 2 2 b,3C#*D  F F F
b.5G#*A  C C C
b*K  M M M b-k-4K  M M M
b-k,W  Y Y Y %%i00MGT+w?W0X0X+'*W=== 	."+$)++G	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.E$'''''!+ E E E<<8H8J8J<KKQQSS299(CCDDDEs+   "KK
KK" "M!6A&MM!c            	          t          j        t          j        t          t
          t           j        dd                               d S )Nr   )sysexitr	   catch_exceptions
EXIT_CODESr   argvr   r   r   runr   !  s1    HS!*dCHQRRLAABBBBBr   __main__)-__doc__r   r   r   collectionsr    ior   googleapiclient.errorsr   oauth2clientr   rP   r   r   r   r	   r
   progressbar2ImportErrorr:   	Exceptionr   r   r   r   clientFlowExchangeErrorNotImplementedErrorr   r   rF   
namedtupler9   r"   rC   rL   r   r   r   stdoutr   r   r   r   r   r   r   <module>r      s  	 	 
			 



                                                              KKK ' & & & &i & & & $ # # # #9 # # # + * * * *) * * * $ # # # #9 # # # !Q!)1
 9			  
@ @ @@	' 	' 	'/ / /dB B B      ,/: A A A A.FE FE FERC C C zCEEEEE s   
A AA