
    yi9                     v   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	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m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	Z ej<                  d
      Zde de fdZ!de de fdZ"dejF                  de dz  fdZ$dejF                  de j                   dz  fdZ%de dz  de&de de'ejP                  e f   fdZ)	 	 	 	 	 	 	 	 	 	 	 	 	 d"de dz  de ez  dz  de&de dz  de*dz  de&de&e z  de dz  de&de dz  de dz  de+e e f   dz  d ee,e,dz  gdf   dz  de ez  fd!Z-y)#    N)Callable)MozillaCookieJar)BinaryIO   )DownloadError)FileURLRetrievalError)	parse_urli   ~contentsreturnc                 ^   d}| j                         D ]	  }t        j                  d|      }|r+d|j                         d   z   }|j	                  dd      } nt        j                  |d      }|j                  d	      }||d
   }t        |t              sJ |j	                  dd      }t        j                  j                  |      }t        j                  j                  |j                        }|j                  dddi      D ]6  }	|	d   }
|	d   }t        |
t              sJ t        |t              sJ |g||
<   8 t        j                  j!                  |d      }t        j                  j#                  |j%                  |            } nt        j                  d|      }|r9|j                         d   }|j	                  dd      }|j	                  dd      } n9t        j                  d|      }|s|j                         d   }t'        |       |st'        d      |S )N z"href="(\/uc\?export=download[^"]+)zhttps://docs.google.comr   z&amp;&zhtml.parser)featuresz#download-formactioninputtypehidden)attrsnamevalueT)doseq)queryz"downloadUrl":"([^"]+)z\u003d=z\u0026z'<p class="uc-error-subcaption">(.*)</p>zCannot retrieve the public link of the file. You may need to change the permission to 'Anyone with the link', or have had many accesses. Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.)
splitlinesresearchgroupsreplacebs4BeautifulSoup
select_one
isinstancestrurllibparseurlsplitparse_qsr   find_all	urlencode
urlunsplit_replacer   )r   urllinemsoupformr   url_componentsquery_paramsparam
param_nameparam_valuer   errors                 B/home/ubuntu/.local/lib/python3.12/site-packages/gdown/download.py get_url_from_gdrive_confirmationr9      s   
C##%  /II;TB+ahhjm;C++gs+C  >/0(^Ffc***..#.C#\\2237N!<<001E1EFLwvx6HI 9"6]
#Gn!*c222!+s333,7=Z(9 LL**<t*DE,,)).*A*A*A*NOCII.5((*Q-C++i-C++i-CII?FHHJqME'..A /B #U
 	
 J    filenamec                     | j                  dd      } | j                  dd      j                  dd      j                         } | dv ry| S )N r   /_\)r   .z..)r   stripr;   s    r8   _sanitize_filenamerD   J   sL    +HS)11$<BBDH?"Or:   responsec                 0   t         j                  j                  | j                  d         }t	        j
                  d|      }|rt        |j                         d         S t	        j
                  d|      }|rt        |j                         d         S y )NContent-Dispositionzfilename\*=UTF-8''(.*)r   rC   zattachment; filename="(.*?)")r%   r&   unquoteheadersr   r   rD   r   )rE   content_dispositionr/   s      r8   _get_filename_from_responserK   R   sz     ,,..x/?/?@U/VW
		+-@AA!188:a=99
		02EFA!188:a=99r:   c                     d| j                   vry | j                   d   }|y t        j                  j                  |      S )NzLast-Modified)rI   emailutilsparsedate_to_datetime)rE   raws     r8    _get_modified_time_from_responserQ   `   sB     h...


?
+C
{;;,,S11r:   proxyuse_cookies
user_agentc                     t        j                         }|j                  j                  d|i       | &| | d|_        t        d| t        j                         t        j                  t        d      }|rPt        j                  |      r;t        |      }	 |j                          |j                  j                  |       ||fS ||fS # t        $ r*}t!        j"                  d| d| d	       Y d }~||fS d }~ww xY w)
Nz
User-Agent)httphttpszUsing proxy:filez.cache/gdown/cookies.txtzFailed to load cookies from z:    )
stacklevel)requestssessionrI   updateproxiesprintsysstderrospjoinhomeexistsr   loadcookiesOSErrorwarningswarn)rR   rS   rT   sesscookies_file
cookie_jares          r8   _get_sessionrp   m   s    
 DLLz23 %6ne#**588D"<=Lszz,/%l3
	OOLL
+ 4  	MM.|nBqcB 
 	s   +C
 
	C=C88C=r-   outputquietspeedverifyidresumeformatlog_messagesprogressc                    |du | du z  st        d      |d| } | J |
d}
|i }| }t        |||
      \  }}t        |       \  }}|r	d| } | }d}	 |j                  | d|      }|r|sn| |k(  r|j                  d	k(  rd
| } 5|j
                  d   j                  d      rd|j                  v r&d|j                  vrdj                  ||	dn|	      } d|j                  v r&d|j                  vrdj                  ||	dn|	      } d|j                  v rod|j                  vradj                  ||	dn|	      } d|j
                  v r;|j
                  d   j                  d      r|	dvrdj                  ||	dn|	      } 8|r=t        |      }|j                  D ]  }|j                  |        |j                          d|j
                  v rn	 t        |j                        } d}d}|r|rt-        |      }t/        |      }|t1        t3        j4                  |             }||}t7        |t*              rf|j                  d       st3        j8                  |      r@t3        j:                  |      st=        j>                  |       t3        j&                  ||      }t7        |t*              r|rAt<        j@                  jC                  |      r"|stE        d!| tF        jH                  "       |S g }t=        jJ                  t3        jL                  |      xs d#      D ]q  }|j                  t3        j4                  |            s(|j                  d$      s:|jO                  t3        j&                  t3        jL                  |      |             s |rq|rotQ        |      d%k7  r[d&d'g}|D ]  }|jO                  d|         |jO                  d'       |jO                  d(       tS        dj'                  |            |d)   }n]d*}tU        jV                  d$t3        j4                  |      t3        jL                  |      d*+      }|jX                  }|j[                          t]        |d,      }nd}|}|A|j_                         d)k7  r.|j_                         }d-d.| d/i} |j                  | | d|0      }nd)}|stE        |j                  d1d2      tF        jH                  d'3       |rtE        d4|tF        jH                  "       || k7  r9tE        d5|tF        jH                  "       tE        d6| tF        jH                  "       ntE        d7| tF        jH                  "       tE        |j                  d8d9t7        |t*              rt3        j`                  |      n| d      tF        jH                  d'3       	 |j
                  j                  d:      }!|!tc        |!      |z   }!|ste        jd                  |!d;|d<      }"tg        jf                         }#d)}$|ji                  tj        =      D ]  }%|jm                  |%       |$tQ        |%      z  }$|s"jo                  tQ        |%             | ||$|z   |!       |O|$|z  }&tg        jf                         |#z
  }'|'|&k  sqtg        jp                  |&|'z
          |s"j[                          |r8|j[                          t7        |t*              sJ ts        jt                  ||       t7        |t*              r*|r(|jw                         }(t=        jx                  ||(|(f       |j[                          |S # t         $ rb}dj                  t#        j$                  dj'                  t#        j(                  t+        |                  d      |      }t!        |      d}~ww xY w# |j[                          w xY w)>a  Download file from URL.

    Parameters
    ----------
    url:
        URL. Google Drive URL is also supported.
    output:
        Output filename/directory. Default is basename of URL.
        If output is an existing directory or ends with a path separator,
        the basename will be appended automatically.
    quiet:
        Suppress terminal output. Default is False.
    proxy:
        Proxy.
    speed:
        Download byte size per second (e.g., 256KB/s = 256 * 1024).
    use_cookies:
        Flag to use cookies. Default is True.
    verify:
        Either a bool, in which case it controls whether the server's TLS
        certificate is verified, or a string, in which case it must be a path
        to a CA bundle to use. Default is True.
    id:
        Google Drive's file ID.
    resume:
        Resume interrupted downloads while skipping completed ones.
        Default is False.
    format:
        Format of Google Docs, Spreadsheets and Slides. Default is:
            - Google Docs: 'docx'
            - Google Spreadsheet: 'xlsx'
            - Google Slides: 'pptx'
    user_agent:
        User-agent to use in the HTTP request.
    log_messages:
        Log messages to customize. Currently it supports:
        - 'start': the message to show the start of the download
        - 'output': the message to show the output filename
    progress:
        Callback called after each chunk: ``progress(bytes_so_far, bytes_total)``.
        *bytes_total* is None when Content-Length is unavailable.
        Raise any exception from the callback to abort the download.

    Returns
    -------
    output:
        Output filename.

    Raises
    ------
    ValueError
        If neither url nor id is specified, or both are specified.
    FileURLRetrievalError
        If the file URL cannot be retrieved from Google Drive.
    DownloadError
        If the download fails (e.g., multiple temporary files exist during
        resume).
    Nz$Either url or id has to be specifiedzhttps://drive.google.com/uc?id=zxMozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36)rR   rS   rT   )r-   T)streamrt   i  z!https://drive.google.com/open?id=zContent-Typez	text/htmlz
/document/z/exportz>https://docs.google.com/document/d/{id}/export?format={format}docx)ru   rw   z/spreadsheets/zBhttps://docs.google.com/spreadsheets/d/{id}/export?format={format}xlsxz/presentation/zBhttps://docs.google.com/presentation/d/{id}/export?format={format}pptxrG   >   Nr~   zFailed to retrieve file url:

{}

You may still be able to access the file from the browser:

	{}

but Gdown can't. Please check connections and permissions.
	)prefix)rE   rC   )r>   r@   z!Skipping already downloaded file rX   rA   z.partr   z-There are multiple temporary files to resume:r   z4Please remove them except one to resume downloading.r   F)suffixr   dirdeleteabRangezbytes=-)rI   r{   rt   startzDownloading...
)rY   endzResume:zFrom (original):zFrom (redirected):zFrom:rq   zTo: zContent-LengthB)totalunitinitial
unit_scale)
chunk_size)=
ValueErrorrp   r	   getstatus_coderI   
startswithr-   rw   endswithr   rh   
set_cookiesaver9   textr   textwrapindentrd   wrapr$   rK   rQ   rD   rc   basenamer#   isdirrf   osmakedirspathisfiler`   ra   rb   listdirdirnameappendlenr   tempfileNamedTemporaryFiler   closeopentellabspathinttqdmtimeiter_content
CHUNK_SIZEwriter^   sleepshutilmove	timestamputime))r-   rq   rr   rR   rs   rS   rt   ru   rv   rw   rT   rx   ry   
url_originrl   rm   gdrive_file_idis_gdrive_download_linkresrn   cookiero   messagefilename_from_urllast_modified_timeexisting_tmp_filesrY   linestmp_filetmp_file_objf
start_sizerI   r   pbart_start
downloadedchunkelapsed_time_expectedelapsed_timemtimes)                                            r8   downloadr      s]   R $J3$;'?@@	~/t4?? P
J%D, /8C.@+N+//?@
"&
hhs4h7#:*C!75n5EFC;;~&11+>sww&9CGG+C''-v))/vV (. (  !SWW,#''1I''-v))/vV (. (  !SWW,#''1I''-v))/vV (. (  !S[[012;;FCn,##)6%%+^6 $* $  ),7J,, .%%f-.OO CKK/	12388<CC \ 17E=sK .S8IJ~"&#FOOK$@CIIfDUzz&!KK&"34&#bggnnV,9&BTMJJs{{629c: 	ODs||F34w9O"))#((3;;v3F*MN	O (%&!+H"M. .DLL2dV-.R ST#DIIe$455)!,HF#66||F+KK'	L $((H 4 AVVX
fZL23hhsGDhH
lw(:;#**RTU)XCJJ7$jszzB&#**='3SZZ0j.Es{{6*6RRTU 	
 01J+E995sJSWXD))+
%%%< 	EEGGEN#e*$JCJ'#j0%8 (2U(:%#yy{W4"77JJ4|CD	E JJLGGIfc***KK&)fc"'9&002EHHVeU^,

Mq % 
	1M f		(--A*? @N  (00
	1l 	

s3   ] C _	 !_	 )B _	 	_$A__	_)NNFNNTTNFNNNN).datetimeemail.utilsrM   r   os.pathr   rc   r   r   ra   r   r   r   urllib.parser%   rj   collections.abcr   http.cookiejarr   typingr   r    r\   r   
exceptionsr   r   r	   r   
expanduserre   r$   r9   rD   ResponserK   rQ   booltupleSessionrp   floatdictr   r    r:   r8   <module>r      s     	  	  
      $ +  
   % -  
s~~c*s *s *Z  (*;*; d
 
2
2
2:  8S !	: $(!*.9=]	t](NT!] ] :	]
 4<] ] 3J] 	d
] ] $J] d
] sCx.4'] S4Z($./$6] 	8^]r:   