a
    $ñ»j%I  ã                   @  sš  d dl mZ d dlZd dlmZ ddlmZ ddlmZ ddlm	Z	 eG dd	„ d	ƒƒZ
eG d
d„ dƒƒZeG dd„ dƒƒZeG dd„ dƒƒZeG dd„ dƒƒZeG dd„ dƒƒZeG dd„ dƒƒZd8dddddddœdd„Zd9ddddddœdd„Zd:dddddddd œd!d"„Zdd#œd$d%„Zdd#œd&d'„Zd;dddd(d(dddd)d*d+œ
d,d-„Zd<dddddd.dœd/d0„Zd=ddddd1dœd2d3„Zd>dddd4d5œd6d7„ZdS )?é    )ÚannotationsN)Ú	dataclassé   )ÚT_JSON_DICT)Úruntime)Ústoragec                   @  sL   e Zd ZU dZded< ded< ded< dd	œd
d„Zedd dœdd„ƒZdS )ÚDatabaseWithObjectStoresz(Database with an array of object stores.ÚstrÚnameÚfloatÚversionztyping.List[ObjectStore]Úobject_storesr   ©Úreturnc                 C  s2   t ƒ }| j|d< | j|d< dd„ | jD ƒ|d< |S )Nr
   r   c                 S  s   g | ]}|  ¡ ‘qS © ©Úto_json©Ú.0Úir   r   ú6E:\soccer\ml_env\Lib\site-packages\mycdp/indexed_db.pyÚ
<listcomp>   ó    z4DatabaseWithObjectStores.to_json.<locals>.<listcomp>ÚobjectStores)Údictr
   r   r   ©ÚselfÚjsonr   r   r   r      s
    

z DatabaseWithObjectStores.to_json©r   r   c                 C  s0   | t | d¡ƒt| d¡ƒdd„ |d D ƒd�S )Nr
   r   c                 S  s   g | ]}t  |¡‘qS r   )ÚObjectStoreÚ	from_jsonr   r   r   r   r   '   s   z6DatabaseWithObjectStores.from_json.<locals>.<listcomp>r   )r
   r   r   ©r	   Úgetr   ©Úclsr   r   r   r   r    "   s    ÿýz"DatabaseWithObjectStores.from_jsonN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   Úclassmethodr    r   r   r   r   r      s   
r   c                   @  sT   e Zd ZU dZded< ded< ded< ded	< d
dœdd„Zed
d dœdd„ƒZdS )r   zObject store.r	   r
   ÚKeyPathÚkey_pathÚboolÚauto_incrementztyping.List[ObjectStoreIndex]Úindexesr   r   c                 C  s@   t ƒ }| j|d< | j ¡ |d< | j|d< dd„ | jD ƒ|d< |S )Nr
   ÚkeyPathÚautoIncrementc                 S  s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r   >   r   z'ObjectStore.to_json.<locals>.<listcomp>r0   )r   r
   r-   r   r/   r0   r   r   r   r   r   9   s    

zObjectStore.to_jsonr   c                 C  s>   | t | d¡ƒt | d¡¡t| d¡ƒdd„ |d D ƒd�S )Nr
   r1   r2   c                 S  s   g | ]}t  |¡‘qS r   )ÚObjectStoreIndexr    r   r   r   r   r   G   r   z)ObjectStore.from_json.<locals>.<listcomp>r0   )r
   r-   r/   r0   ©r	   r"   r,   r    r.   r#   r   r   r   r    A   s    üzObjectStore.from_jsonNr%   r   r   r   r   r   -   s   
r   c                   @  sT   e Zd ZU dZded< ded< ded< ded< d	d
œdd„Zed	d dœdd„ƒZdS )r3   zObject store index.r	   r
   r,   r-   r.   ÚuniqueÚmulti_entryr   r   c                 C  s6   t ƒ }| j|d< | j ¡ |d< | j|d< | j|d< |S )Nr
   r1   r5   Ú
multiEntry)r   r
   r-   r   r5   r6   r   r   r   r   r   W   s    


zObjectStoreIndex.to_jsonr   c                 C  s:   | t | d¡ƒt | d¡¡t| d¡ƒt| d¡ƒd�S )Nr
   r1   r5   r7   )r
   r-   r5   r6   r4   r#   r   r   r   r    _   s    üzObjectStoreIndex.from_jsonNr%   r   r   r   r   r3   K   s   
r3   c                   @  sl   e Zd ZU dZded< dZded< dZded< dZded	< dZd
ed< ddœdd„Z	e
dd dœdd„ƒZdS )ÚKeyzKey.r	   Útype_Nztyping.Optional[float]Únumberútyping.Optional[str]ÚstringÚdatez!typing.Optional[typing.List[Key]]Úarrayr   r   c                 C  sn   t ƒ }| j|d< | jd ur$| j|d< | jd ur8| j|d< | jd urL| j|d< | jd urjdd„ | jD ƒ|d< |S )NÚtyper:   r<   r=   c                 S  s   g | ]}|  ¡ ‘qS r   r   r   r   r   r   r   �   r   zKey.to_json.<locals>.<listcomp>r>   )r   r9   r:   r<   r=   r>   r   r   r   r   r   w   s    







zKey.to_jsonr   c              	   C  s˜   | t | d¡ƒ| dd ¡d ur,t| d¡ƒnd | dd ¡d urLt | d¡ƒnd | dd ¡d urlt| d¡ƒnd | dd ¡d ur�dd„ |d D ƒnd d�S )	Nr?   r:   r<   r=   r>   c                 S  s   g | ]}t  |¡‘qS r   )r8   r    r   r   r   r   r   ˜   r   z!Key.from_json.<locals>.<listcomp>)r9   r:   r<   r=   r>   r!   r#   r   r   r   r    „   s    ÿÿÿÿìzKey.from_json)r&   r'   r(   r)   r*   r:   r<   r=   r>   r   r+   r    r   r   r   r   r8   i   s   
r8   c                   @  s\   e Zd ZU dZded< ded< dZded< dZded< d	d
œdd„Zed	d dœdd„ƒZ	dS )ÚKeyRangez
Key range.r.   Ú
lower_openÚ
upper_openNztyping.Optional[Key]ÚlowerÚupperr   r   c                 C  sN   t ƒ }| j|d< | j|d< | jd ur2| j ¡ |d< | jd urJ| j ¡ |d< |S )NÚ	lowerOpenÚ	upperOpenrC   rD   )r   rA   rB   rC   r   rD   r   r   r   r   r   «   s    



zKeyRange.to_jsonr   c              	   C  sd   | t | d¡ƒt | d¡ƒ| dd ¡d ur:t | d¡¡nd | dd ¡d ur\t | d¡¡nd d�S )NrE   rF   rC   rD   )rA   rB   rC   rD   )r.   r"   r8   r    r#   r   r   r   r    µ   s    ÿÿõzKeyRange.from_json)
r&   r'   r(   r)   r*   rC   rD   r   r+   r    r   r   r   r   r@   Ÿ   s   

r@   c                   @  sL   e Zd ZU dZded< ded< ded< ddœdd	„Zedd d
œdd„ƒZdS )Ú	DataEntryzData entry.zruntime.RemoteObjectÚkeyÚprimary_keyÚvaluer   r   c                 C  s4   t ƒ }| j ¡ |d< | j ¡ |d< | j ¡ |d< |S )NrH   Ú
primaryKeyrJ   )r   rH   r   rI   rJ   r   r   r   r   r   Ñ   s
    zDataEntry.to_jsonr   c                 C  s8   | t j | d¡¡t j | d¡¡t j | d¡¡d�S )NrH   rK   rJ   )rH   rI   rJ   )r   ZRemoteObjectr    r"   r#   r   r   r   r    Ø   s
    ýzDataEntry.from_jsonNr%   r   r   r   r   rG   Ç   s   
rG   c                   @  sT   e Zd ZU dZded< dZded< dZded< d	d
œdd„Zed	d dœdd„ƒZ	dS )r,   z	Key path.r	   r9   Nr;   r<   z!typing.Optional[typing.List[str]]r>   r   r   c                 C  sF   t ƒ }| j|d< | jd ur$| j|d< | jd urBdd„ | jD ƒ|d< |S )Nr?   r<   c                 S  s   g | ]}|‘qS r   r   r   r   r   r   r   ñ   r   z#KeyPath.to_json.<locals>.<listcomp>r>   )r   r9   r<   r>   r   r   r   r   r   ë   s    



zKeyPath.to_jsonr   c                 C  sX   | t | d¡ƒ| dd ¡d ur,t | d¡ƒnd | dd ¡d urPdd„ |d D ƒnd d�S )Nr?   r<   r>   c                 S  s   g | ]}t |ƒ‘qS r   ©r	   r   r   r   r   r   þ   r   z%KeyPath.from_json.<locals>.<listcomp>)r9   r<   r>   )r	   r"   r#   r   r   r   r    ô   s    ÿÿözKeyPath.from_json)
r&   r'   r(   r)   r*   r<   r>   r   r+   r    r   r   r   r   r,   á   s   
	r,   r	   r;   z&typing.Optional[storage.StorageBucket]z0typing.Generator[T_JSON_DICT, T_JSON_DICT, None])Údatabase_nameÚobject_store_nameÚsecurity_originÚstorage_keyÚstorage_bucketr   c                 c  s^   t ƒ }|dur||d< |dur&||d< |dur:| ¡ |d< | |d< ||d< d|dœ}|V }dS )	aÉ  
    Clears all entries from an object store.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)*
     Storage bucket. If not specified, it uses the default bucket.
    :param database_name: Database name.
    :param object_store_name: Object store name.
    NÚsecurityOriginÚ
storageKeyÚstorageBucketÚdatabaseNameÚobjectStoreNamezIndexedDB.clearObjectStore©ÚmethodÚparams©r   r   ©rM   rN   rO   rP   rQ   rY   Úcmd_dictr   r   r   r   Úclear_object_store  s    þr]   )rM   rO   rP   rQ   r   c                 c  sV   t ƒ }|dur||d< |dur&||d< |dur:| ¡ |d< | |d< d|dœ}|V }dS )aƒ  
    Deletes a database.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)*
     Storage bucket. If not specified, it uses the default bucket.
    :param database_name: Database name.
    NrR   rS   rT   rU   zIndexedDB.deleteDatabaserW   rZ   ©rM   rO   rP   rQ   rY   r\   r   r   r   r   Údelete_database'  s    þr_   )rM   rN   Ú	key_rangerO   rP   rQ   r   c           	      c  sj   t ƒ }|dur||d< |dur&||d< |dur:| ¡ |d< | |d< ||d< | ¡ |d< d|d	œ}|V }dS )
aá  
    Delete a range of entries from an object store
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)*
     Storage bucket. If not specified, it uses the default bucket.
    :param database_name:
    :param object_store_name:
    :param key_range: Range of entry keys to delete
    NrR   rS   rT   rU   rV   ÚkeyRangez"IndexedDB.deleteObjectStoreEntriesrW   rZ   )	rM   rN   r`   rO   rP   rQ   rY   r\   r   r   r   r   Údelete_object_store_entriesF  s    þrb   r   c                  c  s   ddi} | V }dS )zDisables events from backend.rX   zIndexedDB.disableNr   ©r\   r   r   r   r   Údisablek  s    ÿrd   c                  c  s   ddi} | V }dS )zEnables events from backend.rX   zIndexedDB.enableNr   rc   r   r   r   Úenables  s    ÿre   Úintztyping.Optional[KeyRange]zVtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[typing.List[DataEntry], bool]])
rM   rN   Ú
index_nameÚ
skip_countÚ	page_sizerO   rP   rQ   r`   r   c	                 c  s¦   t ƒ }	|dur||	d< |dur&||	d< |dur:| ¡ |	d< | |	d< ||	d< ||	d< ||	d< ||	d	< |durv| ¡ |	d
< d|	dœ}
|
V }dd„ |d D ƒt| d¡ƒfS )aˆ  
    Requests data from object store or index.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)* Storage bucket.
     If not specified, it uses the default bucket.
    :param database_name: Database name.
    :param object_store_name: Object store name.
    :param index_name: Index name, empty string for object store data requests.
    :param skip_count: Number of records to skip.
    :param page_size: Number of records to fetch.
    :param key_range: *(Optional)* Key range.
    :returns: A tuple with the following items:
        0. **objectStoreDataEntries** - Array of object store data entries.
        1. **hasMore** -
          If true, there are more entries to fetch in the given range.
    NrR   rS   rT   rU   rV   Z	indexNameZ	skipCountZpageSizera   zIndexedDB.requestDatarW   c                 S  s   g | ]}t  |¡‘qS r   )rG   r    r   r   r   r   r   ¯  r   z request_data.<locals>.<listcomp>ZobjectStoreDataEntriesZhasMore)r   r   r.   r"   )rM   rN   rg   rh   ri   rO   rP   rQ   r`   rY   r\   r   r   r   r   Úrequest_data{  s*     þþrj   zFtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[float, float]]c                 c  sv   t ƒ }|dur||d< |dur&||d< |dur:| ¡ |d< | |d< ||d< d|dœ}|V }t| d	¡ƒt| d
¡ƒfS )aÞ  
    Gets metadata of an object store.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)*
     Storage bucket. If not specified, it uses the default bucket.
    :param database_name: Database name.
    :param object_store_name: Object store name.
    :returns: A tuple with the following items:
        0. **entriesCount** - the entries count
        1. **keyGeneratorValue** - the current value of key generator,
         to become the next inserted key into the object store.
         Valid if objectStore.autoIncrement is true.
    NrR   rS   rT   rU   rV   zIndexedDB.getMetadatarW   ZentriesCountZkeyGeneratorValue)r   r   r   r"   r[   r   r   r   Úget_metadata´  s     þþrk   zDtyping.Generator[T_JSON_DICT, T_JSON_DICT, DatabaseWithObjectStores]c                 c  sb   t ƒ }|dur||d< |dur&||d< |dur:| ¡ |d< | |d< d|dœ}|V }t | d¡¡S )	aØ  
    Requests database with given name in given frame.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)*
     Storage bucket. If not specified, it uses the default bucket.
    :param database_name: Database name.
    :returns: Database with an array of object stores.
    NrR   rS   rT   rU   zIndexedDB.requestDatabaserW   ZdatabaseWithObjectStores)r   r   r   r    r"   r^   r   r   r   Úrequest_databaseß  s    þÿrl   z<typing.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[str]])rO   rP   rQ   r   c                 c  s\   t ƒ }| dur| |d< |dur&||d< |dur:| ¡ |d< d|dœ}|V }dd„ |d	 D ƒS )
a¢  
    Requests database names for given security origin.
    :param security_origin: *(Optional)*
     At least and at most one of securityOrigin, storageKey,
     or storageBucket must be specified. Security origin.
    :param storage_key: *(Optional)* Storage key.
    :param storage_bucket: *(Optional)* Storage bucket.
     If not specified, it uses the default bucket.
    :returns: Database names for origin.
    NrR   rS   rT   zIndexedDB.requestDatabaseNamesrW   c                 S  s   g | ]}t |ƒ‘qS r   rL   r   r   r   r   r     r   z*request_database_names.<locals>.<listcomp>ZdatabaseNamesrZ   )rO   rP   rQ   rY   r\   r   r   r   r   Úrequest_database_names  s    þrm   )NNN)NNN)NNN)NNNN)NNN)NNN)NNN)Ú
__future__r   ÚtypingÚdataclassesr   Úutilr   Ú r   r   r   r   r3   r8   r@   rG   r,   r]   r_   rb   rd   re   rj   rk   rl   rm   r   r   r   r   Ú<module>   sd   5'&   û$   ü#   ú%    ÷"<   û-   ü$   ý