File: //opt/cppython/lib/python3.8/site-packages/oauth2client/__pycache__/_helpers.cpython-38.pyc
U
KD�gd* � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl m
Z
e�e�Z
dZdZdZeeeeg�ZeZdZdZd Zd
d� Zdd
� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd%dd�Z dd � Z!d!d"� Z"d#d$� Z#dS )&z-Helper functions for commonly used utilities.� N)�urllib�WARNINGZ EXCEPTIONZIGNOREzFile: {0}: Is a symbolic link.z{0}: Is a directoryz,Cannot access {0}: No such file or directoryc sJ � fdd�}t � tj�r|S t�� �\}}}}tt|�t|� �� �S dS )a� A decorator to declare that only the first N arguments my be positional.
This decorator makes it easy to support Python 3 style keyword-only
parameters. For example, in Python 3 it is possible to write::
def fn(pos1, *, kwonly1=None, kwonly1=None):
...
All named parameters after ``*`` must be a keyword::
fn(10, 'kw1', 'kw2') # Raises exception.
fn(10, kwonly1='kw1') # Ok.
Example
^^^^^^^
To define a function like above, do::
@positional(1)
def fn(pos1, kwonly1=None, kwonly2=None):
...
If no default value is provided to a keyword argument, it becomes a
required keyword argument::
@positional(0)
def fn(required_kw):
...
This must be called with the keyword parameter::
fn() # Raises exception.
fn(10) # Raises exception.
fn(required_kw=10) # Ok.
When defining instance or class methods always remember to account for
``self`` and ``cls``::
class MyClass(object):
@positional(2)
def my_method(self, pos1, kwonly1=None):
...
@classmethod
@positional(2)
def my_method(cls, pos1, kwonly1=None):
...
The positional decorator behavior is controlled by
``_helpers.positional_parameters_enforcement``, which may be set to
``POSITIONAL_EXCEPTION``, ``POSITIONAL_WARNING`` or
``POSITIONAL_IGNORE`` to raise an exception, log a warning, or do
nothing, respectively, if a declaration is violated.
Args:
max_positional_arguments: Maximum number of positional arguments. All
parameters after the this index must be
keyword only.
Returns:
A decorator that prevents using arguments after max_positional_args
from being used as positional parameters.
Raises:
TypeError: if a key-word only argument is provided as a positional
parameter, but only if
_helpers.positional_parameters_enforcement is set to
POSITIONAL_EXCEPTION.
c s t �� ��� fdd��}|S )Nc sb t | �� krXd}� dkrd}dj�j� t | �|d�}ttkrFt|��nttkrXt�|� �| |�S )N� � �szV{function}() takes at most {args_max} positional argument{plural} ({args_given} given))�functionZargs_maxZ
args_given�plural) �len�format�__name__�!positional_parameters_enforcement�POSITIONAL_EXCEPTION� TypeError�POSITIONAL_WARNING�logger�warning)�args�kwargsZplural_s�message)�max_positional_args�wrapped� �B/opt/cppython/lib/python3.8/site-packages/oauth2client/_helpers.py�positional_wrapperu s �
zDpositional.<locals>.positional_decorator.<locals>.positional_wrapper)� functools�wraps)r r �r )r r �positional_decoratort s z(positional.<locals>.positional_decoratorN)�
isinstance�six�
integer_types�inspect�
getargspec�
positionalr )r r r �_�defaultsr r r r# , s
Hr# c C s t | tj�r| S d�| �S dS )a_ Converts scope value to a string.
If scopes is a string then it is simply passed through. If scopes is an
iterable then a string is returned that is all the individual scopes
concatenated with spaces.
Args:
scopes: string or iterable of strings, the scopes.
Returns:
The scopes formatted as a single string.
� N)r r �string_types�join�Zscopesr r r �scopes_to_string� s
r* c C s&