B eð]©ã@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|ƒ ¡S)N)rÚgeturl)ÚselfÚuri©r ú9/tmp/pip-install-b8evvk6i/jsonschema/jsonschema/_utils.pyÚ normalizeszURIDict.normalizecOstƒ|_|jj||ŽdS)N)ÚdictÚstoreÚupdate)rÚargsÚkwargsr r r Ú__init__szURIDict.__init__cCs|j| |¡S)N)r r )rrr r r Ú __getitem__szURIDict.__getitem__cCs||j| |¡<dS)N)r r )rrÚvaluer r r Ú __setitem__szURIDict.__setitem__cCs|j| |¡=dS)N)r r )rrr r r Ú __delitem__szURIDict.__delitem__cCs t|jƒS)N)Úiterr )rr r r Ú__iter__szURIDict.__iter__cCs t|jƒS)N)Úlenr )rr r r Ú__len__"szURIDict.__len__cCs t|jƒS)N)Úreprr )rr r r Ú__repr__%szURIDict.__repr__N) Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrrr r r r r src@seZdZdZdd„ZdS)ÚUnsetzH An as-of-yet unset attribute or unprovided default parameter. cCsdS)Nzr )rr r r r/szUnset.__repr__N)rrrrrr r r r r )sr cCs"t dd |¡¡}t | d¡¡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Údatar r r Ú load_schema3sr)écsd ‡fdd„| ¡Dƒ¡S)zE A dumb version of :func:`textwrap.indent` from Python 3.3. Ú c3s|]}ddˆ|VqdS)ú éNr )Ú.0Úline)Útimesr r ú Cszindent..)ÚjoinÚ splitlines)Ústringr0r )r0r Úindent=sr5cCs |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.Úindexr r r r1Vsz"format_as_index..)r2)Úindicesr r r Úformat_as_indexFsr9ccsP| 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)Úgetr2ÚreÚsearch)ÚinstanceZschemar:ÚpatternsÚpropertyr r r Úfind_additional_propertiesYs  rBcCs.t|ƒdkrd}nd}d dd„|Dƒ¡|fS)zA Create an error message for extra items or properties. r*ÚwasÚwerez, css|]}t|ƒVqdS)N)r)r.Úextrar r r r1wszextras_msg..)rr2)ÚextrasÚverbr r r Ú extras_msgms rHc 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Ú Exceptionr2)r?ÚtypesZreprsÚtyper r r Ú types_msgzs  rMcCsPtƒ}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_isinstancerKÚthingr r r rQŽs    rQcCst|tƒr|gS|S)z^ Wrap ``thing`` in a list if it's a single str. Otherwise, return it unchanged. )rOr)rSr r r Ú ensure_list¥s rTcCs|dkr |S|dkr|S|S)zI A hack to make True and 1 and False and 0 unique for ``uniq``. TFr )ÚelementÚtrueÚfalser r r Úunbool²s rXc 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)rX)r.Úir r r r1Êszuniq..css|]}t|ƒVqdS)N)rX)r.rYr r r r1Ísr*NFT) rrNÚ TypeErrorÚsortedÚ itertoolsÚisliceÚzipÚNotImplementedErrorrXrI)Ú containerÚsortZslicedrYÚjÚseenÚer r r Úuniq¿s"   re)r*)r\r$r!r=Zjsonschema.compatrrrrÚobjectr r)r5r9rBrHrMrQrTrXrer r r r Ús