VULN_CHECK_I913V6Ë €% g ãó¶—dZddlmZddlmZddlmZmZmZddl Z ddl m Z er ddl m Z mZmZed«Zde j"e j$f d d „Zy) z2 Helpers related to (dynamic) resource retrieval. é)Ú annotations©Ú lru_cache)Ú TYPE_CHECKINGÚCallableÚTypeVarN)ÚResource)ÚURIÚDÚRetrieveÚ_Tcó8‡‡‡—‰€ td¬«Šdˆˆˆfd„ }|S)aG Create a retriever which caches its return values from a simpler callable. Takes a function which returns things like serialized JSON (strings) and returns something suitable for passing to `Registry` as a retrieve function. This decorator both reduces a small bit of boilerplate for a common case (deserializing JSON from strings and creating `Resource` objects from the result) as well as makes the probable need for caching a bit easier. Retrievers which otherwise do expensive operations (like hitting the network) might otherwise be called repeatedly. Examples -------- .. testcode:: from referencing import Registry from referencing.typing import URI import referencing.retrieval @referencing.retrieval.to_cached_resource() def retrieve(uri: URI): print(f"Retrieved {uri}") # Normally, go get some expensive JSON from the network, a file ... return ''' { "$schema": "https://json-schema.org/draft/2020-12/schema", "foo": "bar" } ''' one = Registry(retrieve=retrieve).get_or_retrieve("urn:example:foo") print(one.value.contents["foo"]) # Retrieving the same URI again reuses the same value (and thus doesn't # print another retrieval message here) two = Registry(retrieve=retrieve).get_or_retrieve("urn:example:foo") print(two.value.contents["foo"]) .. testoutput:: Retrieved urn:example:foo bar bar N)Úmaxsizecó$•‡—‰dˆˆˆfd„ «}|S)Ncó4•—‰|«}‰|«}‰|«S)N©)ÚuriÚresponseÚcontentsÚ from_contentsÚloadsÚretrieves €€€ú:/usr/lib/python3.12/site-packages/referencing/retrieval.pyÚcached_retrievez>to_cached_resource..decorator..cached_retrieveNs ø€á “}ˆHÙ˜X“ˆHÙ  Ó*Ð *ó)rr r)rrÚcacherrs` €€€rÚ decoratorz%to_cached_resource..decoratorMsù€Ø ö +ó ð +ð Ðr)rzCallable[[URI], _T]r)rrrrs``` rÚto_cached_resourcers"ú€ðn €}Ü $Ô'ˆ÷ð Ðr)rz+Callable[[Retrieve[D]], Retrieve[D]] | NonerzCallable[[_T], D]rzCallable[[D], Resource[D]]Úreturnz,Callable[[Callable[[URI], _T]], Retrieve[D]])Ú__doc__Ú __future__rÚ functoolsrÚtypingrrrÚjsonÚ referencingr Úreferencing.typingr r r r rrrrrrúr'suðñõ#åß3Ñ3Û å áß3Ñ3ñ ˆTƒ]€ð:>Ø#Ÿz™zØ08×0FÑ0FðCØ 6ðCà ðCð.ðCð2ô Cr