
    IgC                     N   d dl mZ d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZmZmZmZmZ d dlmc 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d d
l4m5Z5m6Z6 d dl7Z7d dl8m9Z9 d dl:m;Z;m<Z<m=Z=  G d de5e      Z>y)    )futures)AnyDictcast)UUID)	overrides)CollectionConfigurationInternal)DEFAULT_DATABASEDEFAULT_TENANT	ComponentSystem)from_proto_metadatafrom_proto_update_metadatafrom_proto_segmentfrom_proto_segment_scopeto_proto_collectionto_proto_segmentN)CreateCollectionRequestCreateCollectionResponseCreateDatabaseRequestCreateDatabaseResponseCreateSegmentRequestCreateSegmentResponseCreateTenantRequestCreateTenantResponseDeleteCollectionRequestDeleteCollectionResponseDeleteSegmentRequestDeleteSegmentResponseGetCollectionsRequestGetCollectionsResponseGetDatabaseRequestGetDatabaseResponseGetSegmentsRequestGetSegmentsResponseGetTenantRequestGetTenantResponseResetStateResponseUpdateCollectionRequestUpdateCollectionResponseUpdateSegmentRequestUpdateSegmentResponse)SysDBServiceradd_SysDBServicer_to_server)Empty)
CollectionMetadataSegmentc                       e Zd ZU dZej
                  ed<   eed<   i Ze	e
ef   ed<   i Ze	e
e	e
e	e
ef   f   f   ed<   i Ze	e
e	e
ef   f   ed<   def fdZed$ fd       Zed$ fd       Zed$ fd       Z ed      dedej.                  d	efd       Z ed      dedej.                  d	efd       Z ed      dedej.                  d	efd       Z ed      de dej.                  d	e!fd       Z" ed      de#dej.                  d	e$fd       Z%dedej.                  d	e$fdZ& ed      de'dej.                  d	e(fd       Z) ed      de*dej.                  d	e+fd       Z, ed      de-dej.                  d	e.fd       Z/ ed      de0dej.                  d	e1fd       Z2 ed      de3dej.                  d	e4fd       Z5 ed      de6dej.                  d	e7fd       Z8 ed      de9dej.                  d	e:fd       Z; ed      de<dej.                  d	e=fd        Z>d!e?d"e@j                  d	d
fd#ZB xZCS )%GrpcMockSysDBzA mock sysdb implementation that can be used for testing the grpc client. It stores
    state in simple python data structures instead of a database._server_server_port	_segments$_tenants_to_databases_to_collections_tenants_to_database_to_idsystemc                 b    |j                   j                  d      | _        t        |   |      S )Nchroma_server_grpc_port)settingsrequirer6   super__init__)selfr:   	__class__s     Y/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/db/impl/grpc/server.pyr@   zGrpcMockSysDB.__init__@   s+    "OO334MNw''    returnNc                 ,   t        j                  t        j                  d            | _        t        | | j                         | j                  j                  d| j                          | j                  j                          t        | !         S )N
   )max_workersz[::]:)
grpcserverr   ThreadPoolExecutorr5   r.   add_insecure_portr6   startr?   rA   rB   s    rC   rM   zGrpcMockSysDB.startD   sh    {{7#=#="#MN#D$,,7&&t/@/@.A'BCw}rD   c                 V    | j                   j                  d        t        |          S N)r5   stopr?   rN   s    rC   rQ   zGrpcMockSysDB.stopL   s!    $w|~rD   c                    i | _         i | _        i | j                  t        <   i | j                  t           t        <   i | j                  t        <   t        d      | j                  t           t        <   t        |          S )Nr   )int)r7   r8   r   r
   r9   r   r?   reset_staterN   s    rC   rT   zGrpcMockSysDB.reset_stateQ   sq    461DF11.AVX11.ABRS:<''7LPUVK''78HIw"$$rD   F)check_signaturerequestcontextc                    |j                   }|j                  }|| j                  vr.|j                  t        j
                  j                  d| d       || j                  |   v r.|j                  t        j
                  j                  d| d       i | j                  |   |<   t        |j                        | j                  |   |<   t               S )NTenant 
 not found	Database  already existshex)tenantnamer8   abortrI   
StatusCode	NOT_FOUNDALREADY_EXISTSr   idr9   r   )rA   rV   rW   r_   databases        rC   CreateDatabasezGrpcMockSysDB.CreateDatabase\   s     <<BBBMM$//33wvhj5QRt@@HHMM..)H:_0U GI11&9(C<@WZZ<P''/9%''rD   c                    |j                   }|j                  }|| j                  vr.|j                  t        j
                  j                  d| d       || j                  |   vr.|j                  t        j
                  j                  d| d       | j                  |   |   }t        t        j                  |j                  ||            S )NrY   rZ   r[   )re   r`   r_   )rf   )r_   r`   r8   ra   rI   rb   rc   r9   r#   protoDatabaser^   )rA   rV   rW   r_   rf   re   s         rC   GetDatabasezGrpcMockSysDB.GetDatabasel   s     <<BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV,,V4X>"^^rvvHVL
 	
rD   c                     |j                   }|| j                  v r.|j                  t        j                  j
                  d| d       i | j                  |<   i | j                  |<   t               S )NrY   r\   )r`   r8   ra   rI   rb   rd   r9   r   rA   rV   rW   r_   s       rC   CreateTenantzGrpcMockSysDB.CreateTenant{   sj     T>>>MM..'&0Q =?11&924''/#%%rD   c                     |j                   }|| j                  vr.|j                  t        j                  j
                  d| d       t        t        j                  |            S )NrY   rZ   )r`   )r_   )	r`   r8   ra   rI   rb   rc   r'   ri   Tenantrm   s       rC   	GetTenantzGrpcMockSysDB.GetTenant   sU     BBBMM$//33wvhj5QR <<V,
 	
rD   c                 P    t        |j                        }| j                  ||      S rP   )r   segmentCreateSegmentHelper)rA   rV   rW   rs   s       rC   CreateSegmentzGrpcMockSysDB.CreateSegment   s%     %W__5''99rD   rs   c                     |d   j                   | j                  v r1|j                  t        j                  j
                  d|d    d       || j                  |d   j                   <   t               S )Nre   Segment r\   )r^   r7   ra   rI   rb   rd   r   )rA   rs   rW   s      rC   rt   z!GrpcMockSysDB.CreateSegmentHelper   sd    4=.MM..74=/9 -4wt}(()$&&rD   c                     |j                   }|| j                  v r| j                  |= t               S |j                  t        j
                  j                  d| d       y )Nrw   rZ   )re   r7   r   ra   rI   rb   rc   )rA   rV   rW   id_to_deletes       rC   DeleteSegmentzGrpcMockSysDB.DeleteSegment   sR     zz4>>)|,(**MM))Xl^:+NrD   c                    |j                  d      rt        |j                        nd }|j                  d      r|j                  nd }|j                  d      rt	        |j
                        nd }t        |j                        }g }| j                  j                         D ]?  }|r	|d   |k7  r|r	|d   |k7  r|r	|d   |k7  r$|r	|d   |k7  r/|j                  |       A t        |D cg c]  }t        |       c}      S c c}w )Nre   r]   typescope
collection)segments)HasFieldr   re   r|   r   r}   r~   r7   valuesappendr%   r   )	rA   rV   rW   	target_idtarget_typetarget_scopetarget_collectionfound_segmentsrs   s	            rC   GetSegmentszGrpcMockSysDB.GetSegments   s    -4,<,<T,BDWZZ(	&-&6&6v&>gllD ( %W]]3 	
 !W%7%78~~,,. 		+GWT]i7wv+= 0L @ W\%:>O%O!!'*		+ #?MNG&w/N
 	
Ns   .Dc                    t        |j                        }|j                  | j                  vr/|j	                  t
        j                  j                  d| d       y | j                  |j                     }|j                  d      rFt        t        t        t        f   |d         }|d   i |d<   | j                  ||j                         |j                  d      r|j                  ri |d<   t!               S )Nrw   rZ   metadatareset_metadata)r   re   r^   r7   ra   rI   rb   rc   r   r   r   strr   _merge_metadatar   r   r,   )rA   rV   rW   id_to_updaters   targets         rC   UpdateSegmentzGrpcMockSysDB.UpdateSegment   s     GJJ'4>>1MM))Xl^:+N nn\%5%56G
+d38ngj.AB:&.*,GJ'$$VW-=-=> 01g6L6L&(
#(**rD   c                    |j                   }|j                  }|j                  }|| j                  vr.|j	                  t
        j                  j                  d| d       || j                  |   vr.|j	                  t
        j                  j                  d| d       | j                  j                         D ]  \  }}|j                         D ]  \  }}	|j                  |	v s||j                  k7  s||j                  k7  r>|j	                  t
        j                  j                  d|j                   d| d|        q|j                  r~|j	                  t
        j                  j                  d|j                   d| d|          | j                  |   |   }
|
j                         D cg c]  }|d   |k(  s| }}t        |      dk  sJ t        |      d	kD  rU|j                  r|d	   }t        t        |      d
      S |j	                  t
        j                  j                  d| d       t!        j"                  |j$                        }t'        |j                        }t)        ||j                   |t+        |j,                        |j.                  ||d	      }||
|j                  <   |j0                  D ]  }t3        |      }| j5                  ||       ! t        t        |      d      S c c}w )NrY   rZ   r[   Collection z already exists in tenant z
 database r`      r   F)r~   createdr\   r]   )re   r`   configurationr   	dimensionrf   r_   versionT)r`   r_   rf   r8   ra   rI   rb   rc   itemsre   rd   get_or_creater   lenr   r   r	   from_json_strconfiguration_json_strr   r0   r   r   r   r   r   rt   )rA   rV   rW   collection_namer_   rf   search_tenant	databasessearch_databasesearch_collectionscollectionscmatchesexisting_collectionr   re   new_collectionsegment_protors   s                      rC   CreateCollectionzGrpcMockSysDB.CreateCollection   s    ",,##BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV 66<<>	 
7@7H 3!3::!33%7*g.>.>> OO::)'**5OP]^hixhyz %22   OO::)'**5OP]^hixhyz		. ??GQ)002Sai?6R1SS7|q   w<!$$&-aj#/23FG!  MM..o.o>
 8EE**
 gjj!#'()9)9:''	
 #1GJJ %-- 	7M(7G$$Wg6	7 (*>:
 	
I Ts   3K<K<c                    |j                   }|j                  }|j                  }|| j                  vr.|j	                  t
        j                  j                  d| d       || j                  |   vr.|j	                  t
        j                  j                  d| d       | j                  |   |   }||v r||= t               S |j	                  t
        j                  j                  d| d       y )NrY   rZ   r[   r   )	re   r_   rf   r8   ra   rI   rb   rc   r   )rA   rV   rW   collection_idr_   rf   r   s          rC   DeleteCollectionzGrpcMockSysDB.DeleteCollection1  s      

##BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV??GQK'M*+--MM))[z+RrD   c           
         |j                  d      rt        |j                        nd }|j                  d      r|j                  nd }i }| j                  j                         D ]  \  }}|j                         D ]h  \  }}	|j                  dk7  r||j                  k7  r%|j                  dk7  r||j                  k7  rD|j                  |	       t        d| d| d|	        j  g }
|j                         D ])  }|r	|d   |k7  r|r	|d   |k7  r|
j                  |       + t        |
D cg c]  }t        |       c}      S c c}w )	Nre   r]   r`    zTenant: z, Database: z, Collections: )r   )r   r   re   r`   r8   r   r_   rf   updateprintr   r   r!   r   )rA   rV   rW   r   target_nameallCollectionsr_   r   rf   r   found_collectionsr~   s               rC   GetCollectionszGrpcMockSysDB.GetCollectionsE  s_    -4,<,<T,BDWZZ(	&-&6&6v&>gllD!%!J!J!P!P!R 		FI)2): %+>>R'Fgnn,D##r)h':J:J.J%%k2vhl8*OK=Y		 (//1 	1JZ-:z&1[@$$Z0	1 &BS4>#J/
 	
s   /E	c                    t        |j                        }i }| j                  j                         D ].  \  }}|j                         D ]  \  }}|j                  |v s|} 0 |j                  |vr/|j                  t        j                  j                  d| d       y ||j                     }	|j                  d      r|j                  |	d<   |j                  d      r|j                  |	d<   |j                  d      rJt        |j                        }
d }|
"i }|
j                         D ]  \  }}|	|||<    ||	d<   t               S |j                  d      r|j                  ri |	d<   t               S )Nr   rZ   r`   r   r   r   )r   re   r8   r   r^   ra   rI   rb   rc   r   r`   r   r   r   r   r*   )rA   rV   rW   r   r   r_   r   rf   maybe_collectionsr~   update_metadatacleaned_metadatakeyvalues                 rC   UpdateCollectionzGrpcMockSysDB.UpdateCollectiond  s    GJJ'!%!J!J!P!P!R 	4FI/8/@ 4++##'88"3K4	4
 ;.MM))[j+Q %\%5%56J'%,\\
6",*1*;*;
;'
+
 #=W=M=M"N#' ".')$&5&;&;&= :
U ,49,S1: *:
:&
 ,--	 !!"23))-/Jz*+--rD   c                 6    | j                          t               S rP   )rT   r(   )rA   rV   rW   s      rC   
ResetStatezGrpcMockSysDB.ResetState  s     	!##rD   r   sourcec                     t        t        t        t        f   |      }t        t        t        t        f   t	        |            }|j                  |       |j                         D ]  \  }}|	||v s||=  y rP   )r   r   r   r   r   r   r   )rA   r   r   target_metadatasource_metadatar   r   s          rC   r   zGrpcMockSysDB._merge_metadata  sm    tCH~v6tCH~/I&/QR/)//1 	)JC}#C(	)rD   )rE   N)D__name__
__module____qualname____doc__rI   Server__annotations__rS   r7   r   r   r2   r8   r0   r9   r   r   r@   r   rM   rQ   rT   r   ServicerContextr   rg   r"   r#   rk   r   r   rn   r&   r'   rq   r   r   ru   rt   r   r   rz   r$   r%   r   r+   r,   r   r   r   r   r   r   r   r    r!   r   r)   r*   r   r/   r(   r   r1   ri   UpdateMetadatar   __classcell__)rB   s   @rC   r4   r4   4   s   E [[$&ItCL!& 	 )$T#tCO,,--+  >@S$sDy/%9 :?(v (     % % u%(,(7;7K7K(	( &( u%
)
484H4H
	
 &
 u%
&*
&595I5I
&	
& &
& u%
'
262F2F
	
 &
 u%:+:6:6J6J:	: &:'7 'T=Q=Q 'Vk ' u%
+
6:6J6J
	
 &
 u%
)
484H4H
	
 &
6 u%+++6:6J6J+	+ &+& u%K
.K
9=9M9MK
	!K
 &K
Z u%.9=9M9M	! && u%
,
7;7K7K
	
 &
< u%'..'.9=9M9M'.	!'. &'.R u%$$'+';';$	$ &$)h )8L8L )QU )rD   r4   )?
concurrentr   typingr   r   r   uuidr   r   chromadb.api.configurationr	   chromadb.configr
   r   r   r   chromadb.proto.convertr   r   r   r   r   r   chromadb.proto.chroma_pb2ri   
chroma_pb2chromadb.proto.coordinator_pb2r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   #chromadb.proto.coordinator_pb2_grpcr-   r.   rI   google.protobuf.empty_pb2r/   chromadb.typesr0   r1   r2   r4    rD   rC   <module>r      su     " "   F O O  * )      6  + 8 8h)M9 h)rD   