%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/duplicity/backends/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/gdocsbackend.cpython-312.pyc

�

�2e�#���ddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZGd�dejj�Z	ejjde�ejj j#dg�y)�N)�__version__)�BackendExceptionc�F�eZdZdZdZdZd�Zd�Zd�Zd�Z	d�Z
dd
�Zd
d�Zy	)�GDocsBackendz>Connect to remote store using Google Google Documents List APIz
folder%3Arootzapplication/binaryc��tjjj||�	ddladdladdladdl	atjjjdt ����|_d|j_d|jj$_|j)|j*�d|j,��|j/��t1j2|j4ddd	�}d}t6j8}|D]�}|j;|d
|�}|��t=|�dk(r|d}nYt=|�dk(rItjj>jAd
|��}|jjC||��}nd}|r|jDjF}��td
|�d���td|�d���||_$y#t$r}tdt|�����d}~wwxYw)Nrz�Google Docs backend requires Google Data APIs Python Client Library
(see http://code.google.com/p/gdata-python-client/).
Exception: �
duplicity )�sourceTF�@��/�folder)�type�title)�
collectionz)Error while creating destination folder 'z'.z)Error while fetching destination folder ')%�	duplicity�backend�Backend�__init__�	atom.data�atom�gdata.client�gdata�gdata.docs.client�gdata.docs.data�ImportErrorr�str�docs�client�
DocsClientr�ssl�http_client�debug�
_authorize�username�hostname�get_password�string�split�pathr�ROOT_FOLDER_ID�_fetch_entries�len�data�Resource�create_resource�resource_id�textr
)	�self�
parsed_url�e�folder_names�
parent_folder�parent_folder_id�folder_name�entriesr
s	         �A/usr/lib/python3/dist-packages/duplicity/backends/gdocsbackend.pyrzGDocsBackend.__init__'s������!�!�*�*�4��<�	�
��$�"��j�j�'�'�2�2�J�{�m�:T�2�U��������(-������%����:�.�.�/�q��1D�1D�0E�F��HY�HY�H[�\��|�|�J�O�O�A�B�$7��=���
�'�6�6��'�	d�K��)�)�*:�H�k�R�G��"��w�<�1�$�$+�A�J�M���\�Q�&�"�Z�Z�_�_�5�5�8�;�5�W�F�$(�K�K�$?�$?��S`�$?�$a�M�$(�M� �'4�'@�'@�'E�'E�$�*�-V�Wb�Vc�ce�+f�g�g�&�)R�S^�R_�_a�'b�c�c�	d� $����C�	�"��!�!�f�X�'��
��	�s�G�	G8�G3�3G8c��|j|�|j�}tjj	|j|t
jtjj|j�tjjjtjjj��}|r�tjjjtjj!|����}|j"j%�j&�d�}|j)||��}|s|t+d|j-��d|j"j.j0�d���t+d	|j-��d|j"j.j0�d���|j3�rJ�y)
N)�
chunk_size�
desired_class)r1)rz?convert=false)�entryzFailed to upload file 'z' to remote folder '�'z%Failed to initialize upload of file ')�_delete�openrr�ResumableUploaderr�BACKUP_DOCUMENT_TYPE�osr)�getsize�name�DEFAULT_CHUNK_SIZErr-r.r�Titler
�get_resumable_create_media_link�href�
UploadFiler�get_filenamerr1�close)r2�source_path�remote_filename�file�uploaderr>�uris       r:�_putzGDocsBackend._putUs������_�%�
���!���<�<�1�1��K�K���-�-��G�G�O�O�D�I�I�&��|�|�5�5�H�H��*�*�/�/�2�2�
2�
����J�J�O�O�,�,�4�9�9�?�?��?�3X�,�Y�E��[�[�@�@�B�G�G�H��W�C��'�'��5�'�9�E��&�-�k�.F�.F�.H�-I�J)�)-���):�):�)?�)?�(@��C���
#�7��8P�8P�8R�7S�T%�%)�[�[�%6�%6�%;�%;�$<�A�?��
��:�:�<���<�c�T�|j|jjjtj
|�}t
|�dk(r,|d}|jj||j�ytd|�d|jjj�d���)NrrzFailed to find file 'z' in remote folder 'r?)r+r
r0r1rrCr,r�DownloadResourcerFrr)r2rO�
local_pathr9r>s     r:�_getzGDocsBackend._getus����%�%��K�K�#�#�(�(��-�-��
��
�w�<�1���A�J�E��K�K�(�(��
���@�"�'��'8�8P�QU�Q\�Q\�Qb�Qb�Qg�Qg�Ph�hi�j��
rTc���|j|jjjtj
�}|D�cgc]}|jj��c}Scc}w�N)r+r
r0r1rrCr)r2r9r>s   r:�_listzGDocsBackend._list�sH���%�%�d�k�k�&=�&=�&B�&B�L�De�De�f��.5�6�U���� � �6�6��6s�A#c��|j|jjjtj
|�}|D]:}|jj|j�j�d�d���<y)Nz?delete=trueT)�force)
r+r
r0r1rrCr�delete�
get_edit_linkrJ)r2�filenamer9r>s    r:r@zGDocsBackend._delete�sm���%�%�d�k�k�&=�&=�&B�&B�L�De�De�go�p���	X�E��K�K���%�"5�"5�"7�"<�"<�!=�\�J�RV��W�	XrTNc��	|jj||dt��d||��y#tjj$r[}td|j���d}|sttd��}|s�|j|||j|�Yd}~yd}~wtjj$rtd��wxYw)Nr�writely)r	�service�
captcha_token�captcha_responsez.A captcha challenge in required. Please visit zAnswer to the challenge? akInvalid user credentials given. Be aware that accounts that use 2-step verification require creating an application specific access code for using this Duplicity backend. Follow the instruction in http://www.google.com/support/accounts/bin/static.py?page=guide.cs&guide=1056283&topic=1056286 and create your application-specific password to run duplicity backups.)
r�client_loginrr�CaptchaChallenge�print�captcha_url�eval�inputr#rd�BadAuthenticationr)r2�email�passwordrdre�	challenge�answers       r:r#zGDocsBackend._authorize�s���	��K�K�$�$���#�K�=�1�!�+�!1�

%�
���|�|�,�,�	N��B�9�CX�CX�BY�Z�[��F���e�$?�@�A����O�O�E�8�Y�-D�-D�f�M�M���|�|�-�-�	�"�Z��
�	�s�(+�C
�2B�;B�,C
c��d|�d�}|dk(r|dz
}n|tjk(r|dz
}n|dz
}|r&|dtjj	|��d�z
}|j
j
|�	�}|�rg}|D�]	}|j�}|r$|dk(r|dk(s|tjk(s�4|dk7s�:|tjk7r�|j�D]{}	|j
j|	jddtjjj�
�}
|
s�Q|
j j"|k(s�k|j%|��}��t'|j��dk(s��|j%|���|S|}|S)Nz/feeds/default/private/full/z	/contentsr
z/-/folder?showfolders=truez?showfolders=falsez?showfolders=truez&title=z&title-exact=true)rR)r=r)rrC�urllib�parse�quoter�get_all_resources�get_resource_typer*�in_collections�	get_entryrJrrr-r.r0r1�appendr,)r2�	folder_idrrrRr9�resultr>�
resource_type�link�folder_entrys           r:r+zGDocsBackend._fetch_entries�s���,�Y�K�y�A���8���/�/�C�
�\�6�6�
6��'�'�C��&�&�C���W�V�\�\�/�/��6�7�7H�I�I�C��+�+�/�/�C�/�8����F� �
-�� %� 7� 7� 9�
����(�]�h�-F��� A� A�A�m�W_�F_� �L�$?�$?�?�$)�$8�$8�$:�5�D�+/�;�;�+@�+@� $�	�	� $� $�.3�j�j�o�o�.F�.F�	,A�,�L� ,��1I�1I�1N�1N�R[�1[� &�
�
�e� 4�5��U�1�1�3�4��9��
�
�e�,�%
-�.�
��F��
rT)NNrZ)
�__name__�
__module__�__qualname__�__doc__r*rCrrSrXr[r@r#r+�rTr:rr!s6��H�$�N�/��,$�\ �@�7�X�
�2*rTrzgdata+gdocs)�os.pathrDr'�urllib.errorrr�urllib.parse�urllib.request�duplicity.backendrr�duplicity.errorsrrrr�register_backend�uses_netloc�extendr�rTr:�<module>r�sr��,�
�����!�-�n�9�$�$�,�,�n�b[�	���"�"�=�,�?�	�����$�$�m�_�5rT

Zerion Mini Shell 1.0