
    Zi?                         d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ  G d d	e          Zd
S )    )abstractmethod)OptionalSequenceTuple)UUID)CreateCollectionConfigurationUpdateCollectionConfiguration)Schema)

CollectionCollectionAndSegmentsDatabaseTenantMetadataSegmentSegmentScopeOptionalArgumentUnspecifiedUpdateMetadata)DEFAULT_DATABASEDEFAULT_TENANT	Componentc                      e Zd ZdZeefdedededdfd            Zeefdedede	fd            Z
eefdededdfd	            Zeddefd
ee         dee         dedee	         fd            Zededdfd            Zededefd            Zededdfd            Zedededdfd            Ze	 	 	 d'dedee         dee         dee         dee         f
d            Ze e            fdededeee                  ddfd            Zedddeefdededee         dedee         dee         dee         de dedede!e"e f         fd            Z#eeefdedededdfd             Z$eddeeddfdee         dee         deded
ee         dee         dee"         fd!            Z%eedfdedee         defd"            Z&ed#ede'fd$            Z(e e             e             e             e            fdedee         deee                  deee                  deee)                  ddfd%            Z*ededefd&            Z+dS )(SysDBz+Data interface for Chroma's System databaseidnametenantreturnNc                     dS )zeCreate a new database in the System database. Raises an Error if the Database
        already exists.N )selfr   r   r   s       O/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/db/system.pycreate_databasezSysDB.create_database   s	     	    c                     dS )zZGet a database by name and tenant. Raises an Error if the Database does not
        exist.Nr   r    r   r   s      r!   get_databasezSysDB.get_database#   	     	r#   c                     dS )zDelete a database.Nr   r%   s      r!   delete_databasezSysDB.delete_database)   	     	r#   limitoffsetc                     dS )z List all databases for a tenant.Nr   )r    r+   r,   r   s       r!   list_databaseszSysDB.list_databases.   s	     	r#   c                     dS )zzCreate a new tenant in the System database. The name must be unique.
        Raises an Error if the Tenant already exists.Nr   r    r   s     r!   create_tenantzSysDB.create_tenant8   r'   r#   c                     dS )zCGet a tenant by name. Raises an Error if the Tenant does not exist.Nr   r0   s     r!   
get_tenantzSysDB.get_tenant>   r*   r#   segmentc                     dS )z^Create a new segment in the System database. Raises an Error if the ID
        already exists.Nr   )r    r4   s     r!   create_segmentzSysDB.create_segmentE   r'   r#   
collectionc                     dS )z*Delete a segment from the System database.Nr   )r    r7   r   s      r!   delete_segmentzSysDB.delete_segmentK   r*   r#   typescopec                     dS )z/Find segments by id, type, scope or collection.Nr   )r    r7   r   r:   r;   s        r!   get_segmentszSysDB.get_segmentsP   	     	r#   metadatac                     dS )zUpdate a segment. Unspecified fields will be left unchanged. For the
        metadata, keys with None values will be removed and keys not present in the
        UpdateMetadata dict will be left unchanged.Nr   )r    r7   r   r?   s       r!   update_segmentzSysDB.update_segment[   s	     	r#   Fschemaconfigurationsegments	dimensionget_or_createdatabasec                     dS )a  Create a new collection and associated resources
        in the SysDB. If get_or_create is True, the
        collection will be created if one with the same name does not exist.
        The metadata will be updated using the same protocol as update_collection. If get_or_create
        is False and the collection already exists, an error will be raised.

        Returns a tuple of the created collection and a boolean indicating whether the
        collection was created or not.
        Nr   )r    r   r   rB   rC   rD   r?   rE   rF   r   rG   s              r!   create_collectionzSysDB.create_collectiong   s	    . 	r#   c                     dS )zDelete a collection, all associated segments and any associate resources (log stream)
        from the SysDB and the system at large.Nr   )r    r   r   rG   s       r!   delete_collectionzSysDB.delete_collection   r>   r#   c                     dS )z_Find collections by id or name. If name is provided, tenant and database must also be provided.Nr   )r    r   r   r   rG   r+   r,   s          r!   get_collectionszSysDB.get_collections   s	     	r#   c                     dS )zFGets the number of collections for the (tenant, database) combination.Nr   )r    r   rG   s      r!   count_collectionszSysDB.count_collections   	     	r#   collection_idc                     dS )zGet a consistent snapshot of a collection by id. This will return a collection with segment
        information that matches the collection version and log position.
        Nr   )r    rQ   s     r!   get_collection_with_segmentsz"SysDB.get_collection_with_segments   rP   r#   c                     dS )zUpdate a collection. Unspecified fields will be left unchanged. For metadata,
        keys with None values will be removed and keys not present in the UpdateMetadata
        dict will be left unchanged.Nr   )r    r   r   rE   r?   rC   s         r!   update_collectionzSysDB.update_collection   s	     	r#   c                     dS )z.Returns the number of records in a collection.Nr   )r    r   s     r!   get_collection_sizezSysDB.get_collection_size   r*   r#   )NNN),__name__
__module____qualname____doc__r   r   r   strr"   r   r&   r)   r   intr   r.   r1   r   r3   r   r6   r9   r   r=   r   r   r   rA   r   r
   r   r   boolr   r   rI   rK   rM   rO   r   rS   r	   rU   rW   r   r#   r!   r   r      s       551? !+.	   ^ 4B   c x    ^
 7E  C  $    ^   $ $$	 }  	
 
(	   ^ # $    ^
 s v    ^ g $    ^
  4 D    ^  ""(,  TN sm	
 % 
'	   ^ 
 @K{}}		 		 	 #8N#;<		
 
	 	 	 ^	  (,#'#$(    	
 5 7# 8$ C=    
z4	    ^0  %(	   	
 
   ^  ""$(# $
 
TN
 sm
 	

 
 }
 
 
*	
 
 
 ^
  %"&  3- 
	   ^ !	   ^  '2kmm5@[]]?J{}} KMM  s# $HSM2	
 #8N#;< (23
 
   ^ d s    ^  r#   r   N)abcr   typingr   r   r   uuidr   %chromadb.api.collection_configurationr   r	   chromadb.api.typesr
   chromadb.typesr   r   r   r   r   r   r   r   r   r   chromadb.configr   r   r   r   r   r#   r!   <module>rf      sZ         , , , , , , , , , ,              & % % % % %                        H G G G G G G G G Ge e e e eI e e e e er#   