o
    ri                     @  st   U d dl mZ d dlZd dlZd dlmZ d dlmZ i Z	de
d< G dd deZejG d	d
 d
ZdddZdS )    )annotationsN)ABCMeta)ConfigurationErrorzdict[str, StorageRegistry]SCHEMESc                      s   e Zd Zd
 fdd	Z  ZS )StorageRegistrynamestrbasestuple[type, ...]dctdict[str, str | list[str]]returnc                   sN   | dd }t | |||}|r%t|tr|g}n|}|D ]}|t|< q|S )NSTORAGE_SCHEME)getsuper__new__
isinstancer   r   )mcsr   r	   r   storage_schemeclsschemesscheme	__class__ U/var/www/html/pca-backend/venv/lib/python3.10/site-packages/limits/_storage_scheme.pyr      s   

zStorageRegistry.__new__)r   r   r	   r
   r   r   r   r   )__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   c                   @  sL   e Zd ZU ded< ded< ded< ded< ded< d	ed
< edddZdS )StorageURIOptionsr   r   z
str | Noneusernamepasswordzlist[tuple[str, int]]	locationspathzdict[str, list[str]]queryr   boolc                 C  s,   t | jdu o| jdu o| jp| jp| j S )z
        whether this is just a scheme:// uri without any information
        that might be useful when constructing the actual storage
        instance
        N)r&   r!   r"   r#   r$   r%   )selfr   r   r   empty(   s   
zStorageURIOptions.emptyN)r   r&   )r   r   r   __annotations__propertyr(   r   r   r   r   r       s   
 r    urir   r   c           	   
   C  s   t j| }|jdd }g }z>|j|d  rM|j|d  dD ]*}t jd|  }|j|j}}|d u s>|d u rEt	d| |
||f q"W n tyb } zt	d|  |d }~ww t|j|j|j||jt j|jS )N@   ,zfake://z!Missing host or port in location zUnable to parse storage uri )urllibparseurlparsenetlocfindsplitstriphostnameportr   append
ValueErrorr    r   r!   r"   r$   parse_qsr%   )	r+   parsedsepr#   locsubr6   r7   errr   r   r   parse_storage_uri6   s0   r@   )r+   r   r   r    )
__future__r   dataclassesurllib.parser/   abcr   limits.errorsr   r   r)   r   	dataclassr    r@   r   r   r   r   <module>   s    