B ÉpSe0ã@s¼ddlZddlZddlZddlZddlmZmZmZGdd„deƒZGdd„de ƒZ dd„Z dd d „Z d d „Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Ze ƒe ƒfdd„Zdd„ZdS)éN)ÚMutableMappingÚ str_typesÚurlsplitc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)ÚURIDictz8 Dictionary which uses normalized URIs as keys. cCs t|ƒ ¡S)N)rZgeturl)ÚselfÚuri©rúB/opt/alt/python37/lib/python3.7/site-packages/jsonschema/_utils.pyÚ normalizeszURIDict.normalizecOstƒ|_|jj||ŽdS)N)ÚdictÚstoreÚupdate)rÚargsÚkwargsrrr Ú__init__szURIDict.__init__cCs|j| |¡S)N)r r )rrrrr Ú __getitem__szURIDict.__getitem__cCs||j| |¡<dS)N)r r )rrÚvaluerrr Ú __setitem__szURIDict.__setitem__cCs|j| |¡=dS)N)r r )rrrrr Ú __delitem__szURIDict.__delitem__cCs t|jƒS)N)Úiterr )rrrr Ú__iter__szURIDict.__iter__cCs t|jƒS)N)Úlenr )rrrr Ú__len__!szURIDict.__len__cCs t|jƒS)N)Úreprr )rrrr Ú__repr__$szURIDict.__repr__N) Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrrrrrr r src@seZdZdZdd„ZdS)ÚUnsetzG An as-of-yet unset attribute or unprovided default parameter. cCsdS)Nzr)rrrr r-szUnset.__repr__N)rrrrrrrrr r(srcCs"t dd |¡¡}t | d¡¡S)zC Load a schema from ./schemas/``name``.json and return it. Z jsonschemazschemas/{0}.jsonzutf-8)ÚpkgutilÚget_dataÚformatÚjsonÚloadsÚdecode)ÚnameÚdatarrr Ú load_schema1sr(écsd ‡fdd„| ¡Dƒ¡S)z> A dumb version of `textwrap.indent` from Python 3.3. Ú c3s|]}ddˆ|VqdS)ú éNr)Ú.0Úline)Útimesrr ú ?szindent..)ÚjoinÚ splitlines)Ústringr/r)r/r Úindent:sr4cCs |sdSdd dd„|Dƒ¡S)zÕ Construct a single string containing indexing operations for the indices. For example, [1, 2, "foo"] -> [1][2]["foo"] Arguments: indices (sequence): The indices to format. Úz[%s]z][css|]}t|ƒVqdS)N)r)r-Úindexrrr r0Qsz"format_as_index..)r1)Úindicesrrr Úformat_as_indexBs r8ccsP| di¡}d | di¡¡}x,|D]$}||kr$|rBt ||¡rBq$|Vq$WdS)zí Return the set of additional properties for the given ``instance``. Weeds out properties that should have been validated by ``properties`` and / or ``patternProperties``. Assumes ``instance`` is dict-like already. Ú propertiesú|ZpatternPropertiesN)Úgetr1ÚreÚsearch)ÚinstanceZschemar9ZpatternsÚpropertyrrr Úfind_additional_propertiesTs  r@cCs.t|ƒdkrd}nd}d dd„|Dƒ¡|fS)z@ Create an error message for extra items or properties. r)ZwasZwerez, css|]}t|ƒVqdS)N)r)r-Zextrarrr r0pszextras_msg..)rr1)ZextrasZverbrrr Ú extras_msggs rAc Cs^g}xF|D]>}y| t|dƒ¡Wq tk rF| t|ƒ¡Yq Xq Wd|d |¡fS)a+ Create an error message for a failure to match the given types. If the ``instance`` is an object and contains a ``name`` property, it will be considered to be a description of that object and used as its type. Otherwise the message is simply the reprs of the given ``types``. r&z%r is not of type %sz, )ÚappendrÚ Exceptionr1)r>ÚtypesZreprsÚtyperrr Ú types_msgss  rFcCsPtƒ}t|tƒs|f}x0|D](}t|tƒr:| t|ƒ¡q| |¡qWt|ƒS)zâ isinstance() can accept a bunch of really annoying different types: * a single type * a tuple of types * an arbitrary nested tree of tuples Return a flattened tuple of the given argument. )ÚsetÚ isinstanceÚtupler ÚflattenÚadd)Zsuitable_for_isinstancerDÚthingrrr rJ†s    rJcCst|tƒr|gS|S)z] Wrap ``thing`` in a list if it's a single str. Otherwise, return it unchanged. )rHr)rLrrr Ú ensure_listœs rMcCst|ƒt|ƒkS)zQ Check if two things are equal, but evade booleans and ints being equal. )Úunbool)ZoneZtworrr Úequal¨srOcCs|dkr |S|dkr|S|S)zH A hack to make True and 1 and False and 0 unique for ``uniq``. TFr)ÚelementÚtrueÚfalserrr rN¯s rNc CsÊyttdd„|Dƒƒƒt|ƒkStk rÄyHtdd„|Dƒƒ}t |dd¡}x"t||ƒD]\}}||kr\dSq\WWnHttfk r¾g}x*|D]"}t|ƒ}||kr¬dS|  |¡q”WYnXYnXdS)zÙ Check if all of a container's elements are unique. Successively tries first to rely that the elements are hashable, then falls back on them being sortable, and finally falls back on brute force. css|]}t|ƒVqdS)N)rN)r-Úirrr r0Åszuniq..css|]}t|ƒVqdS)N)rN)r-rSrrr r0Èsr)NFT) rrGÚ TypeErrorÚsortedÚ itertoolsÚisliceÚzipÚNotImplementedErrorrNrB)Z containerÚsortZslicedrSÚjÚseenÚerrr Úuniq»s"   r^)r))rVr#r r<Zjsonschema.compatrrrrÚobjectrr(r4r8r@rArFrJrMrOrNr^rrrr Ús"