
    jKj!                     .   d 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 ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl#m%Z%  G d de      Z&y)z!JSONSchema spec accessors module.    N)Hashable)Iterator)Sequence)contextmanager)Any)cast)LookupAccessor)	LookupKey)
LookupNode)LookupValue)Registry)Specification)Resolved)Resolver)DRAFT202012)rebind_resolved)FullPathResolvedCache)default_handlers)CachedPathResolver)SchemaRetriever)ResolverHandlers)Schemac                       e Zd ZdZ	 ddedee   def fdZdede	fdZ
defd	Zeed
ddfdedee   dededz  dedd fd       Zedefd       Zedee   fd       Zdee   defdZdee   deee	f   dz  fdZdee   dee   fdZdee   defdZdee   dedefdZdee   deddfdZ dee   de!fdZ"e#dee   de$e%e      fd       Z&dee   de%e   fdZ' xZ(S )SchemaAccessoru  Resource handle binding a schema document to its resolver.

    Identity contract: a `SchemaAccessor` is its own identity token,
    discriminated by the wrapped node (by reference) and the
    `_path_resolver` instance (by reference). Both are set in
    `__init__` and never reassigned, so equality and hash are stable
    for the accessor's lifetime even though the inner registry
    evolves as `$ref`s are resolved.

    Consequence: two `from_schema(doc, ...)` calls produce non-equal
    accessors even with identical arguments, because each call builds
    its own `_path_resolver`. Build one accessor per schema document
    and reuse it across all derived `SchemaPath`s — see "Identity and
    equality" and "Recommended usage" in the README.
    schemaresolverresolved_cache_maxsizec                     |dk  rt        d      t        | 	  t        t        |             t        |      | _        || _        t        |      | _	        y )Nr   z#resolved_cache_maxsize must be >= 0)maxsize)

ValueErrorsuper__init__r   r   r   _path_resolver_resolved_cache_maxsizer   _resolved_cache)selfr   r   r   	__class__s       j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/jsonschema_path/accessors.pyr"   zSchemaAccessor.__init__/   sW     "A%BCCj&122D3
 (>$6K*7
    otherreturnc                     t        |t              st        S t        |       t        |      u xr2 | j                  |j                  u xr | j
                  |j
                  u S N)
isinstancer   NotImplementedtype_noder#   )r&   r*   s     r(   __eq__zSchemaAccessor.__eq__A   sW    %0!! J$u+% <

ekk)<##u';';;	
r)   c                 |    t        t        |       t        | j                        t        | j                        f      S r-   )hashr0   idr1   r#   r&   s    r(   __hash__zSchemaAccessor.__hash__O   s6     T
4::4&&'
 	
r)    Nr   specificationbase_urihandlersc                     |t         }t        ||      }|j                  |      }t        |      }|j	                  ||      }|j                  |      }	 | ||	|      S )N)retrieve)r:   )r   )r   r   create_resourcer   with_resourcer   )
clsr   r9   r:   r;   r   	retrieverbase_resourceregistryr   s
             r(   from_schemazSchemaAccessor.from_schemaZ   su     'H#Hm<	%55f=%-&
 ))(MB$$h$7#9
 	
r)   c                 B    | j                   j                  j                  S r-   )r#   r   	_base_urir6   s    r(   r:   zSchemaAccessor.base_urir   s    ""++555r)   c                 b    t        j                  dt               | j                  j                  S )NzSchemaAccessor.resolver is deprecated. Use SchemaPath.base_uri to access the base URI and SchemaPath.resolve() to resolve paths.)warningswarnDeprecationWarningr#   r   r6   s    r(   r   zSchemaAccessor.resolverv   s,    5 		
 ""+++r)   partsc                 <    | j                  |      }|j                  S r-   )get_resolvedcontents)r&   rK   resolveds      r(   __getitem__zSchemaAccessor.__getitem__   s    $$U+   r)   c                 V   	 | t        t        t           |         }| j                  |      r!t        |      j                  t        |      dS 	 t        t        t        |            }t        |      j                  |dS # t        t        t
        f$ r Y y w xY w# t
        $ r d }Y ?w xY w)N)r0   length)r   r   r
   KeyError
IndexError	TypeError_is_traversable_noder0   __name__lenr   )r&   rK   noderR   s       r(   statzSchemaAccessor.stat   s    	Xi0%89D $$T*T
++d) 	c4)F
 J''
 	
 *i0 		  	F	s#   B  B  BBB('B(c                    | |   }t        |t              r%t        t        t           |j                               S t        |t              r)t        t        t           t        t        |                  S |rt        |d         t        N)
r.   dictr   r   r
   keyslistrangerX   rS   r&   rK   rY   s      r(   r_   zSchemaAccessor.keys   sk    E{dD!+TYY[99dD!+U3t9-=>> 59%%r)   c                 z    | |   }t        |t        t        f      rt        |      S |rt	        |d         t        r\   )r.   r^   r`   rX   rS   rb   s      r(   rX   zSchemaAccessor.len   s:    E{dT4L)t959%%r)   keyc                     	 | |   }t        |t              r||v S t        |t
              r+t        |t              xr d|cxk  xr t        |      k  S c S y# t         t        t        f$ r Y yw xY w)NFr   )rS   rT   rU   r.   r^   r`   intrX   r&   rK   rd   rY   s       r(   containszSchemaAccessor.contains   st    	;D dD!$;dD!c3'@A,@s4y,@@,@@ *i0 		s   A A.-A.c                     | |   }t        |t              r||vrt        |      y t        |t              r<t        |t              r d|cxk  rt        |      k  st        |       t        |      y t        |      )Nr   )r.   r^   rS   r`   rf   rX   rg   s       r(   require_childzSchemaAccessor.require_child   sv     E{dD!$sm#dD!sC(Q#-AD	-Asm# .Bsm#smr)   c                 .    | |   }| j                  |      S r-   )
_read_noderb   s      r(   readzSchemaAccessor.read   s    E{t$$r)   c              #   >   K   	 | j                  |       y # w xY wwr-   )rM   )r&   rK   s     r(   resolvezSchemaAccessor.resolve   s"     	##E**Ds    c                    | j                   j                  |      }|y| j                  j                  j                  }|j                  j                  |u r|S t        t        t           t        ||            }| j                   j                  ||       |S | j                  j                  | j                  |      }| j                   j                  ||j                         |j                  S r-   )r%   getr#   r   	_registryr   r   r   r   setro   rY   rO   )r&   rK   cached_resolvedcurrent_registryreboundresults         r(   rM   zSchemaAccessor.get_resolved   s    ..2259&  $22;;EE''115EE&& $1ABG   $$UG4N$$,,TYY>  8r)   )   ))rW   
__module____qualname____doc__r   r   rf   r"   objectr   r2   r7   classmethodr   r   strr   rD   propertyr:   r   r   r
   r   rP   r   r^   rZ   r_   rX   boolrh   rj   r   rm   r   r   r   ro   rM   __classcell__)r'   s   @r(   r   r      s   ( '*	

 6"
 !$	
$
F 
s 
	
# 	
  0;,0&'

 %V,
 	

 #T)
 !$
 

 
. 6# 6 6 ,(6* , ,!)!4 ! !
(8, 
c3h$1F 
*(9- (92E ),  
hy1 
	 
d 
i(/8	"%(9- %+ % i(	(:&	' (9"5 (::N r)   r   )'r{   rH   collections.abcr   r   r   
contextlibr   typingr   r   pathable.accessorsr	   pathable.typesr
   r   r   referencingr   r   referencing._corer   r   referencing.jsonschemar   #jsonschema_path._referencing_compatr   jsonschema_path.cachesr   jsonschema_path.handlersr   jsonschema_path.resolversr   jsonschema_path.retrieversr   jsonschema_path.typingr   r   r    r)   r(   <module>r      s[    '  $ $ $ %   - $ % &   % & & . ? 8 5 8 6 3 )T^ Tr)   