
    eiP                     j   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m	Z	 d dl
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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d d	l:m;Z;m<Z< d dl=Z=d d
l>m?Z? d dl@mAZAmBZBmCZCmDZD  G d de;e      ZEy)    )futures)AnyDictListcast)UUID)	overridesN)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_segment)CreateCollectionRequestCreateCollectionResponseCreateDatabaseRequestCreateDatabaseResponseCreateSegmentRequestCreateSegmentResponseCreateTenantRequestCreateTenantResponseCountCollectionsRequestCountCollectionsResponseDeleteCollectionRequestDeleteCollectionResponseDeleteSegmentRequestDeleteSegmentResponseGetCollectionsRequestGetCollectionsResponseGetCollectionSizeRequestGetCollectionSizeResponse GetCollectionWithSegmentsRequest!GetCollectionWithSegmentsResponseGetDatabaseRequestGetDatabaseResponseGetSegmentsRequestGetSegmentsResponseGetTenantRequestGetTenantResponseResetStateResponseUpdateCollectionRequestUpdateCollectionResponseUpdateSegmentRequestUpdateSegmentResponse)SysDBServiceradd_SysDBServicer_to_server)Empty)
CollectionMetadataSegmentSegmentScopec                   h    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
   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j2                  d
efd       Z ed      dedej2                  d
efd       Z ed      dedej2                  d
e fd       Z! ed      de"dej2                  d
e#fd       Z$ ed      de%dej2                  d
e&fd       Z'dedej2                  d
e&fdZ( ed      de)dej2                  d
e*fd       Z+ ed      de,dej2                  d
e-fd       Z. ed      de/dej2                  d
e0fd       Z1 ed      de2dej2                  d
e3fd       Z4 ed      de5dej2                  d
e6fd       Z7 ed      de8dej2                  d
e9fd       Z: ed      de;dej2                  d
e<fd        Z= ed      de>dej2                  d
e?fd!       Z@ ed      deAdej2                  d
eBfd"       ZC ed      deDdej2                  d
eEfd#       ZF ed      deGdej2                  d
eHfd$       ZId%eJd&eKj                  d
dfd'ZM xZNS ))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_collection_to_segments$_tenants_to_databases_to_collections_tenants_to_database_to_idsystemc                 b    |j                   j                  d      | _        t        |   |      S )Nchroma_server_grpc_port)settingsrequirer=   super__init__)selfrB   	__class__s     f/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/chromadb/db/impl/grpc/server.pyrH   zGrpcMockSysDB.__init__H   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   ThreadPoolExecutorr<   r4   add_insecure_portr=   startrG   rI   rJ   s    rK   rU   zGrpcMockSysDB.startL   sh    {{7#=#="#MN#D$,,7&&t/@/@.A'BCw}rL   c                 V    | j                   j                  d        t        |          S N)r<   stoprG   rV   s    rK   rY   zGrpcMockSysDB.stopT   s!    $w|~rL   c                    i | _         i | _        i | j                  t        <   i | j                  t           t        <   i | j                  t        <   t        d      | j                  t           t        <   t        |          S )Nr   )int)r>   r@   r   r
   rA   r   rG   reset_staterV   s    rK   r\   zGrpcMockSysDB.reset_stateY   sq    461DF11.AVX11.ABRS:<''7LPUVK''78HIw"$$rL   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namer@   abortrQ   
StatusCode	NOT_FOUNDALREADY_EXISTSr   idrA   r   )rI   r^   r_   rg   databases        rK   CreateDatabasezGrpcMockSysDB.CreateDatabased   s     <<BBBMM$//33wvhj5QRt@@HHMM..)H:_0U GI11&9(C<@WZZ<P''/9%''rL   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 )Nra   rb   rc   )rm   rh   rg   )rn   )rg   rh   r@   ri   rQ   rj   rk   rA   r)   protoDatabaserf   )rI   r^   r_   rg   rn   rm   s         rK   GetDatabasezGrpcMockSysDB.GetDatabaset   s     <<BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV,,V4X>"^^rvvHVL
 	
rL   c                     |j                   }|| j                  v r.|j                  t        j                  j
                  d| d       i | j                  |<   i | j                  |<   t               S )Nra   rd   )rh   r@   ri   rQ   rj   rl   rA   r   rI   r^   r_   rg   s       rK   CreateTenantzGrpcMockSysDB.CreateTenant   sj     T>>>MM..'&0Q =?11&924''/#%%rL   c                     |j                   }|| j                  vr.|j                  t        j                  j
                  d| d       t        t        j                  |            S )Nra   rb   )rh   )rg   )	rh   r@   ri   rQ   rj   rk   r-   rq   Tenantru   s       rK   	GetTenantzGrpcMockSysDB.GetTenant   sU     BBBMM$//33wvhj5QR <<V,
 	
rL   c                 P    t        |j                        }| j                  ||      S rX   )r   segmentCreateSegmentHelper)rI   r^   r_   r{   s       rK   CreateSegmentzGrpcMockSysDB.CreateSegment   s%     %W__5''99rL   r{   c                     |d   j                   | j                  v r1|j                  t        j                  j
                  d|d    d       || j                  |d   j                   <   t               S )Nrm   Segment rd   )rf   r>   ri   rQ   rj   rl   r   )rI   r{   r_   s      rK   r|   z!GrpcMockSysDB.CreateSegmentHelper   sf     4=.MM..74=/9 -4wt}(()$&&rL   c                     |j                   }|| j                  v r| j                  |= t               S |j                  t        j
                  j                  d| d       y )Nr   rb   )rm   r>   r!   ri   rQ   rj   rk   )rI   r^   r_   id_to_deletes       rK   DeleteSegmentzGrpcMockSysDB.DeleteSegment   sR     zz4>>)|,(**MM))Xl^:+NrL   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 )Nrm   re   typescope
collection)segments)HasFieldr   rm   r   r   r   r   r>   valuesappendr+   r   )	rI   r^   r_   	target_idtarget_typetarget_scopetarget_collectionfound_segmentsr{   s	            rK   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 )Nr   rb   metadatareset_metadata)r   rm   rf   r>   ri   rQ   rj   rk   r   r   r   strr   _merge_metadatar   r   r2   )rI   r^   r_   id_to_updater{   targets         rK   UpdateSegmentzGrpcMockSysDB.UpdateSegment   s     GJJ'4>>1MM))Xl^:+N nn\%5%56G
+d38ngj.AB:&.*,GJ'$$VW-=-=> 01g6L6L&(
#(**rL   c                 h   |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                   |d t+        |j,                        |j.                  ||d		      }g }|j0                  D ]  }t3        |      }|d   j4                  | j6                  v rT|D ]  }| j9                  t;        |      |         |j	                  t
        j                  j                  d|d    d       | j=                  ||       |j?                  |d   j4                          ||
|j                  <   | d| d|j                   }|| j@                  |<   t        t        |      d      S c c}w )Nra   rb   rc   Collection z already exists in tenant z
 database rh      r   F)r   createdrd   re   )	rm   rh   configuration_jsonserialized_schemar   	dimensionrn   rg   versionrm   )rm   r   :T)!rh   rg   rn   r@   ri   rQ   rj   rk   itemsrm   rl   get_or_creater   lenr   r   jsonloadsconfiguration_json_strr   r6   r   r   r   r   r   rf   r>   r   r    r|   r   r?   )rI   r^   r_   collection_namerg   rn   search_tenant	databasessearch_databasesearch_collectionscollectionscmatchesexisting_collectionr   rm   new_collectionsegments_addedsegment_protor{   scollection_unique_keys                         rK   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>
 "ZZ(F(FGgjj!#1"()9)9:''

 $-- 	5M(7Gt}  DNN2' LA&&';q'A7KLOO22wt}o_= $$Wg6!!'$-"3"34	5 #1GJJ#)(!H:Qwzzl C>L$$%:;'*>:
 	
c Ts   3N/N/c                 B   |j                   }|j                  }|j                  }|| j                  vr.|j	                  t
        j                  j                  d| d       || j                  |   vr.|j	                  t
        j                  j                  d| d       | j                  |   |   }||v r<||= | d| d| }| j                  |   }|r|D ]  }	| j                  |	=  t               S |j	                  t
        j                  j                  d| d       y )Nra   rb   rc   r   r   )rm   rg   rn   r@   ri   rQ   rj   rk   r?   r>   r   )
rI   r^   r_   collection_idrg   rn   r   r   segment_ids
segment_ids
             rK   DeleteCollectionzGrpcMockSysDB.DeleteCollectionH  s     

##BBBMM$//33wvhj5QR4DDVLLMM$//33y
*5UV??GQK'M*'-haz=/$J!667LMK"- 3Jz23+--MM))[z+RrL   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 )	Nrm   re   rh    Tenant: , Database: , Collections: )r   )r   r   rm   rh   r@   r   rg   rn   updateprintr   r   r#   r   )rI   r^   r_   r   target_nameallCollectionsrg   r   rn   r   found_collectionsr   s               rK   GetCollectionszGrpcMockSysDB.GetCollectionsa  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                  |j                        }| j                  ||      }t	        t        |j                              S )N)rg   rn   )count)r"   rg   rn   r   r   r   r   )rI   r^   r_   r   s       rK   CountCollectionszGrpcMockSysDB.CountCollections  sH     (>>%%
 ))'7;'c+2I2I.JKKrL   c                     t        d      S )Nr   )total_records_post_compaction)r%   rI   r^   r_   s      rK   GetCollectionSizezGrpcMockSysDB.GetCollectionSize  s     )*+
 	
rL   c           
      p   i }| j                   j                         D ]B  \  }}|j                         D ]*  \  }}|j                  |       t        d| d| d|        , D |j	                  |j
                  d       }|8|j                  t        j                  j                  d|j
                   d       |j                   d|j                   d|j
                   }	| j                  |	   D 
cg c]  }
| j                  |
    }}
|D ch c]  }|d   	 c}t        j                  t        j                   t        j"                  hk7  r0|j                  t        j                  j$                  d| d	|        t'        t)        |      |D cg c]  }t+        |       c}
      S c c}
w c c}w c c}w )Nr   r   r   zCollection with id rb   r   r   z#Incomplete segments for collection z: )r   r   )r@   r   r   r   getrm   ri   rQ   rj   rk   rg   rn   r?   r>   r9   METADATARECORDVECTORINTERNALr'   r   r   )rI   r^   r_   r   rg   r   rn   r   r   r   rm   r   r{   s                rK   GetCollectionWithSegmentsz'GrpcMockSysDB.GetCollectionWithSegments  s    !%!J!J!P!P!R 	FI)2): %+%%k2vhl8*OK=Y	 $''

D9
MM))-@J+W   !:#6#6"7qE 	
 223HI
 NN2
 
 -55GG5!!:
 

 MM((5j\H:N
 1*:6?GHG&w/H
 	

 6 Is   1F)F.F3
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   rb   rh   r   r   r   )r   rm   r@   r   rf   ri   rQ   rj   rk   r   rh   r   r   r   r   r0   )rI   r^   r_   r   r   rg   r   rn   maybe_collectionsr   update_metadatacleaned_metadatakeyvalues                 rK   UpdateCollectionzGrpcMockSysDB.UpdateCollection  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*+--rL   c                 6    | j                          t               S rX   )r\   r.   r   s      rK   
ResetStatezGrpcMockSysDB.ResetState  s     	!##rL   r   sourcec                     t        t        t        t        f   |      }t        t        t        t        f   t	        |            }|j                  |       |j                         D ]  \  }}|	||v s||=  y rX   )r   r   r   r   r   r   r   )rI   r   r   target_metadatasource_metadatar   r   s          rK   r   zGrpcMockSysDB._merge_metadata  sm    tCH~v6tCH~/I&/QR/)//1 	)JC}#C(	)rL   )rM   N)O__name__
__module____qualname____doc__rQ   Server__annotations__r[   r>   r   r   r8   r?   r   r@   r6   rA   r   r   rH   r	   rU   rY   r\   r   ServicerContextr   ro   r(   r)   rs   r   r   rv   r,   r-   ry   r   r   r}   r|   r    r!   r   r*   r+   r   r1   r2   r   r   r   r   r   r   r   r"   r#   r   r   r   r   r$   r%   r   r&   r'   r   r/   r0   r   r5   r.   r   r7   rq   UpdateMetadatar   __classcell__)rJ   s   @rK   r;   r;   ;   s   E [[$&ItCL!&46T#tCy.16 	 )$T#tCO,,--+  >@S$sDy/%9 :?(v (     % % u%(,(7;7K7K(	( &( u%
)
484H4H
	
 &
 u%
&*
&595I5I
&	
& &
& u%
'
262F2F
	
 &
 u%:+:6:6J6J:	: &:	'	')-)=)=	'		' u%
+
6:6J6J
	
 &
 u%
)
484H4H
	
 &
6 u%+++6:6J6J+	+ &+& u%X
.X
9=9M9MX
	!X
 &X
t u%.9=9M9M	! &0 u%
,
7;7K7K
	
 &
< u%L.L9=9M9ML	!L &L u%
/
:>:N:N
	"
 &
 u%#
7#
BFBVBV#
	*#
 &#
J u%'..'.9=9M9M'.	!'. &'.R u%$$'+';';$	$ &$)h )8L8L )QU )rL   r;   )F
concurrentr   typingr   r   r   r   uuidr   r	   r   chromadb.configr
   r   r   r   chromadb.proto.convertr   r   r   r   r   r   chromadb.proto.chroma_pb2rq   
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,   r-   r.   r/   r0   r1   r2   #chromadb.proto.coordinator_pb2_grpcr3   r4   rQ   google.protobuf.empty_pb2r5   chromadb.typesr6   r7   r8   r9   r;    rL   rK   <module>r      s     ( (    O O  * )                 B  + F Fv)M9 v)rL   