o
    ib                     @   s  d dl mZ d dl mZ zd dl mZ W n ey#   d dl mZ Y nw dZeddddgd	d
dgd	ddgd	gdeddddgd	gdedddedddedddgd	gde	deddeddedddedddedddeddddde	dedddeddedddde
dedgdeddd	ZG d d! d!eZG d"d# d#eZefd$d%Zd&d' Zd(d) Zd*d+ ZdS ),    )load)	YAMLError)CLoaderLoaderzsettings.yamlTfileclient_config_file)value	attributesettingsclient_configserviceservice_config)typerequireddefault
dependencyFsave_credentials_backend)r   r   r   zclient_secrets.jsonsave_credentials_file)r   r   r   )r   r   z)https://accounts.google.com/o/oauth2/authz*https://accounts.google.com/o/oauth2/tokenzurn:ietf:wg:oauth:2.0:oobN)	client_idclient_secretauth_uri	token_uriredirect_uri
revoke_uri)r   r   struct)client_user_emailclient_service_emailclient_pkcs12_file_pathz%https://www.googleapis.com/auth/drive)r   r   r   r   )	client_config_backendsave_credentialsget_refresh_tokenr   r   r   r   oauth_scoper   c                   @      e Zd ZdZdS )SettingsErrorz#Error while loading/saving settingsN__name__
__module____qualname____doc__ r*   r*   K/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pydrive/settings.pyr$   ~       r$   c                   @   r#   )InvalidConfigErrorz*Error trying to read client configuration.Nr%   r*   r*   r*   r+   r-      r,   r-   c              
   C   sB   zt | d}t|td}W |S  ttfy  } zt|d}~ww )zLoads settings file in yaml format given file name.

  :param filename: path for settings file. 'settings.yaml' by default.
  :type filename: str.
  :raises: SettingsError
  rr   N)openr   r   r   IOErrorr$   )filenamestreamdataer*   r*   r+   LoadSettingsFile   s   
r5   c                 C   s   t | t dS )zValidates if current settings is valid.

  :param data: dictionary containing all settings.
  :type data: dict.
  :raises: InvalidConfigError
  N)_ValidateSettingsStructSETTINGS_STRUCT)r3   r*   r*   r+   ValidateSettings   s   r8   c                 C   s&   |D ]}|| d rt | || qdS )zValidates if provided data fits provided structure.

  :param data: dictionary containing settings.
  :type data: dict.
  :param struct: dictionary containing structure information of settings.
  :type struct: dict.
  :raises: InvalidConfigError
  r   N)_ValidateSettingsElement)r3   r   keyr*   r*   r+   r6      s
   
r6   c           
      C   s  |  |}|| d }|du r*z|| d }W n ty$   td| w || |< nt||ur8td||f |tu rHt| | || d  n!|tu ri| | D ]}t||| d urhtd||| d f qP||  d}|r|D ]}||d	 kr|d
 D ]}	t| ||	 qqtdS dS )aU  Validates if provided element of settings data fits provided structure.

  :param data: dictionary containing settings.
  :type data: dict.
  :param struct: dictionary containing structure information of settings.
  :type struct: dict.
  :param key: key of the settings element to validate.
  :type key: str.
  :raises: InvalidConfigError
  r   Nr   zMissing required setting %szSetting %s should be type %sr   zSetting %s should be list of %sr   r	   r
   )getKeyErrorr-   r   dictr6   listr9   )
r3   r   r:   r	   	data_typer   elementdependenciesr   reqkeyr*   r*   r+   r9      s:   

r9   )yamlr   r   r   r   ImportErrorSETTINGS_FILEstrboolr=   r>   r7   r0   r$   r-   r5   r8   r6   r9   r*   r*   r*   r+   <module>   s    #u
