File: //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/gdrivebackend.cpython-310.pyc
o
��La�= � @ s~ d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dl ZG dd� dej
j�Zej
�
de� ej
j�dg� dS ) � )�strN)�log)�util)�BackendExceptionc @ s` e Zd ZdZdZdZdd� Zdd� Zdd � Zd
d� Z dd
� Z
dd� Zdd� Zdd� Z
dd� ZdS )�
GDriveBackendz1Connect to remote store using Google Drive API V3�d i P c
C s� t jj�| |� zddlm} ddlm} W n ty* } zt dt
|� ��d }~ww i | _i | _i | _
i | _d | _d|jv rYddi| _d|jd d i| _d d
i| _
dd
i| _n!d|jv rvdd
i| _d d
i| _
dd
i| _|jd d | _nt d��|jd ur�|jd |j }n|j}dtjv r�|�tjd �}|j|kr�t d|j|f ��n�dtjv �rLdtjv �rLddlm} ddlm} d }tj�tjd �r�ttjd d��
} t�| �}W d � n1 s�w Y |r�|j �s<|r�|j!r�|j"r�|�#|� � n!|�$tjd dg�}
|
j%d |k�rt d|
j%d |f ��|
�&� }ttjd d��} t�'|| � W d � n 1 �s7w Y |j(|k�rKt d|j(|f ��nt d��|dd|d�| _)| j�rb| jd }n
| j�rj| j}nd}|j�*d �}|D ]a}
|
�s{�qtd!|
d" | d# }| j)�+� j,d,|d$d%d&�| j�| j�| j
�| j���-� }|�.d'g �}t/|�dk�r�|
d(|gd)�}|�0| j� | j)�+� j1d,|d*d+�| j���-� }n|d }|d* }�qt|| _2i | _3d S )-Nr )�build)�CredentialszpGDrive backend requires Google API client installation.
Please read the manpage for setup details.
Exception: %s�driveID�corpora�drive�driveId�includeItemsFromAllDrivesT�supportsAllDrives�myDriveFolderID�userzVgdrive: backend requires a query paramater should either be driveID or myDriveFolderID�@�GOOGLE_SERVICE_JSON_FILEzGService account email in the JSON file (%s) does not match the URL (%s)�GOOGLE_CLIENT_SECRET_JSON_FILE�GOOGLE_CREDENTIALS_FILE)�InstalledAppFlow)�Request�rbz*https://www.googleapis.com/auth/drive.file� client_idz;Client ID in the JSON file (%s) does not match the URL (%s)�wbzBClient ID in the credentials file (%s) does not match the URL (%s)zxGOOGLE_SERVICE_JSON_FILE or GOOGLE_CLIENT_SECRET_JSON_FILE environment variable not set. Please read the manpage to fix.�v3)�credentials�root�/zname = 'z' and 'zR' in parents and mimeType = 'application/vnd.google-apps.folder' and trashed=false� �files(name,id),nextPageToken)�q�pageSize�fields�filesz"application/vnd.google-apps.folder)�name�mimeType�parents�id)�bodyr# � )4� duplicity�backend�Backend�__init__�googleapiclient.discoveryr �google.oauth2.service_accountr �ImportErrorr r �shared_drive_corpora�shared_drive_id�shared_drive_flags_include�shared_drive_flags_support�shared_root_folder_id�
query_args�username�hostname�os�environ�from_service_account_file�service_account_email�google_auth_oauthlib.flowr �google.auth.transport.requestsr �path�exists�open�pickle�load�valid�expired�
refresh_token�refresh�from_client_secrets_file�
client_config�run_console�dumpr r �splitr$ �list�execute�get�len�update�create�folder�id_cache)�self�
parsed_urlr r �er r r r �token�flow�parent_folder_id�folder_names�folder_namer! �results� file_list�
file_metadatarT r* r* �B/usr/lib/python3/dist-packages/duplicity/backends/gdrivebackend.pyr. % s� ���
�
�����������������������
zGDriveBackend.__init__c
C s� ddl m} t�|�}|| jv rs| j| }z7| j�� jd|dd�| j��� � }|d |krK|d sK|d D ]}|| j
krJt�d||f � | W S q5W n |ye } z
|j
jd kr[� W Y d }~nd }~ww t�d
||f � | j|= d|| j
f }| j�� jd|dd
d�| j�| j�| j�| j��� � }|�dg �} t| �dkr�t�d|f � n"t| �dkr�| d d }| d d | j|<