3 þ:X©ã@s´ddlZddlZddlZddlZddlmZmZmZGdd„deƒZGdd„de ƒZ dd„Z dd d „Z d d „Z dd„Zdd„Zdd„Zdd„Zdd„Ze ƒe ƒfdd„Zdd„ZdS)éN)Ú str_typesÚMutableMappingÚurlsplitc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)ÚURIDictz9 Dictionary which uses normalized URIs as keys. cCs t|ƒjƒS)N)rZgeturl)ÚselfÚuri©rú/usr/lib/python3.6/_utils.pyÚ normalizeszURIDict.normalizecOstƒ|_|jj||ŽdS)N)ÚdictÚstoreÚupdate)rÚargsÚkwargsrrr Ú__init__szURIDict.__init__cCs|j|j|ƒS)N)r r )rrrrr Ú __getitem__szURIDict.__getitem__cCs||j|j|ƒ<dS)N)r r )rrÚvaluerrr Ú __setitem__szURIDict.__setitem__cCs|j|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)ÚUnsetzH An as-of-yet unset attribute or unprovided default parameter. cCsdS)Nzr)rrrr r/szUnset.__repr__N)rrrrrrrrr r)srcCs"tjddj|ƒƒ}tj|jdƒƒS)zD 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_schema3sr(écsdj‡fdd„|jƒDƒƒS)zE A dumb version of :func:`textwrap.indent` from Python 3.3. Ú c3s|]}ddˆ|VqdS)ú éNr)Ú.0Úline)Útimesrr ú Cszindent..)ÚjoinÚ splitlines)Ústringr/r)r/r Úindent=sr4cCs |sdSddjdd„|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 r0Vsz"format_as_index..)r1)Úindicesrrr Úformat_as_indexFsr8ccsP|jdiƒ}dj|jdiƒƒ}x,|D]$}||kr$|rBtj||ƒ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_propertiesYs  r@cCs.t|ƒdkrd}nd}djdd„|Dƒƒ|fS)zA Create an error message for extra items or properties. r)ZwasZwerez, css|]}t|ƒVqdS)N)r)r-Zextrarrr r0wszextras_msg..)rr1)ZextrasZverbrrr Ú extras_msgms rAc Cs^g}xF|D]>}y|jt|dƒƒWq tk rF|jt|ƒƒYq Xq Wd|dj|ƒ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_msgzs  rFcCsPtƒ}t|tƒs|f}x0|D](}t|tƒr:|jt|ƒƒq|j|ƒ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 rMcCs|dkr |S|dkr|S|S)zI A hack to make True and 1 and False and 0 unique for ``uniq``. TFr)ÚelementÚtrueZfalserrr Úunbool²s rPcCsÊyttdd„|Dƒƒƒt|ƒkStk rÄyHtdd„|Dƒƒ}tj|ddƒ}x"t||ƒD]\}}||kr\dSq\WWnHttfk r¾g}x*|D]"}t|ƒ}||kr¬dS|j |ƒ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)rP)r-Úirrr r0Êszuniq..css|]}t|ƒVqdS)N)rP)r-rQrrr r0Ísr)NFT) rrGÚ TypeErrorÚsortedÚ itertoolsÚisliceÚzipÚNotImplementedErrorrPrB)Z containerÚsortZslicedrQÚjÚseenÚerrr Úuniq¿s"   r\)r))rTr#r r<Zjsonschema.compatrrrrÚobjectrr(r4r8r@rArFrJrMrPr\rrrr Ús