a kiÅ]«-ã @sœddlZddlZddlZddlZddlmZddlmZGdd„deƒZ e ƒZ e ƒZ e ƒZ e ƒZ ee e e e d�ZdTdd „Zed d �ed d �d d„ƒƒZe d¡Zeddddd�dd„ƒZeedƒràedejejefd�dd„ƒZe d¡Zeddddd�dd„ƒZz ddlZWne�y"Yn0edejd�d d!„ƒZz ddlZWnbe�y¨zdd"l m!Z!Wne�yzYn*0ed#d �d$d%„ƒZ"ed&d&ed'�d(d)„ƒZ#YnT0ed*ed�d+d,„ƒZ$ed-ed�d.d/„ƒZ%ed#ed�d0d%„ƒZ"ed&d&ed'�d1d)„ƒZ#zdd2l&m'Z'Wn>e�yJzdd2l(m'Z'Wne�yDdZ'Yn0Yn0e'�rved3d �d4d5„ƒZ)ed6d7�d8d9„ƒZ*ed:ejd�d;d<„ƒZ+ed=d=ed>�d?d@„ƒZ,ed6edA�dBdC„ƒZ-z ddl.Z.Wne�yÖYn*0dDdE„Z/edFee0fdA�dGdH„ƒZ1dIdJ„Z2z ddl3Z3Wne�y Yn00edKdKe3j4d'�dLdM„ƒZ5edNe3j4d�dOdP„ƒZ6z ddl7Z8Wne�ypYn(0edQdQe8j9j:d'�e8 ;¡ <¡fdRdS„ƒZ=dS)UéN)Ú str_types)Ú FormatErrorc@sHeZdZdZiZddd„Zdd„Zddd „ZeeƒZ d d „Z d d „Z dS)Ú FormatCheckeraê A ``format`` property checker. JSON Schema does not mandate that the ``format`` property actually do any validation. If validation is desired however, instances of this class can be hooked into validators to enable format validation. `FormatChecker` objects always return ``True`` when asked about formats that they do not know how to validate. To check a custom format using a function that takes an instance and returns a ``bool``, use the `FormatChecker.checks` or `FormatChecker.cls_checks` decorators. Arguments: formats (~collections.Iterable): The known formats to validate. This argument can be used to limit which formats will be used during validation. Ncs2|durˆj ¡ˆ_nt‡fdd„|Dƒƒˆ_dS)Nc3s|]}|ˆj|fVqdS©N©Úcheckers)Ú.0Úk©Úself©ú6/usr/lib/python3.9/site-packages/jsonschema/_format.pyÚ 'óz)FormatChecker.__init__..)rÚcopyÚdict)r Úformatsr r r Ú__init__#szFormatChecker.__init__cCsd t|jƒ¡S)Nz)ÚformatÚsortedrr r r r Ú__repr__)szFormatChecker.__repr__r cs‡‡‡fdd„}|S)a Register a decorated function as validating a new format. Arguments: format (str): The format that the decorated function will check. raises (Exception): The exception(s) raised by the decorated function when an invalid instance is found. The exception object will be accessible as the `jsonschema.exceptions.ValidationError.cause` attribute of the resulting validation error. cs|ˆfˆjˆ<|Srr©Úfunc©rÚraisesr r r Ú_checks@sz%FormatChecker.checks.._checksr )r rrrr rr Úchecks,szFormatChecker.checksc Csv||jvrdS|j|\}}d\}}z ||ƒ}Wn(|yX}z|}WYd}~n d}~00|srtd||f|d�‚dS)a} Check whether the instance conforms to the given format. Arguments: instance (*any primitive type*, i.e. str, number, bool): The instance to check format (str): The format that instance should conform to Raises: FormatError: if the instance does not conform to ``format`` N)NNz%r is not a %r)Úcause)rr)r ÚinstancerrrÚresultrÚer r r ÚcheckGs   ÿzFormatChecker.checkcCs.z| ||¡Wnty$YdS0dSdS)a\ Check whether the instance conforms to the given format. Arguments: instance (*any primitive type*, i.e. str, number, bool): The instance to check format (str): The format that instance should conform to Returns: bool: whether it conformed FTN)r!r)r rrr r r Úconformsis  zFormatChecker.conforms)N)r ) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrÚ classmethodÚ cls_checksr!r"r r r r r s  "r)Údraft3Údraft4Údraft6Údraft7r cs8ˆp|‰ˆp|‰ˆp|‰ˆp|‰‡‡‡‡‡fdd„}|S)Ncs€ˆrtd ˆˆ¡|ƒ}ˆr0td ˆˆ¡|ƒ}ˆrHtd ˆˆ¡|ƒ}ˆr`td ˆˆ¡|ƒ}t ˆprˆprˆprˆˆ¡|ƒ|S)Nr)r*r+r,)Ú_draft_checkersrrr(r©r)r*r+r,rr r ÚwrapŸsÿz_checks_drafts..wrapr )Únamer)r*r+r,rr/r r.r Ú_checks_drafts’s r1z idn-email)r0ZemailcCst|tƒsdSd|vS)NTú@)Ú isinstancer©rr r r Úis_email³s r5z$^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$z ip-addressZipv4cCs4t|tƒsdSt |¡sdStdd„| d¡DƒƒS)NTFcss*|]"}dt|ƒkodknVqdS)réÿN)Úint)rÚ componentr r r rÆrzis_ipv4..Ú.)r3rÚ_ipv4_reÚmatchÚallÚsplitr4r r r Úis_ipv4¾s   r>Ú inet_ptonZipv6)r0rcCst|tƒsdSt tj|¡S©NT)r3rÚsocketr?ZAF_INET6r4r r r Úis_ipv6Ìs rBz#^[A-Za-z0-9][A-Za-z0-9\.\-]{1,255}$z host-nameÚhostnamecCsFt|tƒsdSt |¡sdS| d¡}|D]}t|ƒdkr*dSq*dS)NTFr9é?)r3rÚ _host_name_rer;r=Úlen)rÚ componentsr8r r r Ú is_host_nameØs    rHz idn-hostname)r,rcCst|tƒsdSt |¡dSr@)r3rÚidnaÚencoder4r r r Úis_idn_host_nameðs  rK)Úvalidate_rfc3986ZuricCst|tƒsdSt|dd�S©NTZURI©Zrule©r3rrLr4r r r Úis_uris rPz uri-reference)r+r,rcCst|tƒsdSt|dd�S©NTZ URI_referencerNrOr4r r r Úis_uri_references rRZiricCst|tƒsdStj|dd�S)NTZIRIrN©r3rÚrfc3987Úparser4r r r Úis_iris rVz iri-referencecCst|tƒsdStj|dd�S)NTZ IRI_referencerNrSr4r r r Úis_iri_references rWcCst|tƒsdStj|dd�SrMrSr4r r r rPs cCst|tƒsdStj|dd�SrQrSr4r r r rR#s )Úvalidate_rfc3339z date-timecCst|tƒsdSt|ƒSr@)r3rrXr4r r r Ú is_datetime7s rYÚtime)r,cCst|tƒsdStd|ƒS)NTz 1970-01-01T)r3rrYr4r r r Úis_time=s r[ZregexcCst|tƒsdSt |¡Sr@)r3rÚreÚcompiler4r r r Úis_regexDs r^Údate)r)r,rcCst|tƒsdStj |d¡S)NTz%Y-%m-%d©r3rÚdatetimeÚstrptimer4r r r Úis_dateKs rc)r)rcCst|tƒsdStj |d¡S)NTz%H:%M:%Sr`r4r r r Úis_draft3_timeRs rdcCs t |¡Sr)Ú webcolorsZ normalize_hexr4r r r Úis_css_color_code^srfZcolorcCs$t|tƒr| ¡tjvrdSt|ƒSr@)r3rÚlowerreZcss21_names_to_hexrfr4r r r Úis_css21_coloras ÿ þrhcCs| ¡tjvrdSt|ƒSr@)rgreZcss3_names_to_hexrfr4r r r Ú is_css3_colorjsriz json-pointercCst|tƒsdSt |¡Sr@)r3rÚ jsonpointerÚ JsonPointerr4r r r Úis_json_pointerus rlzrelative-json-pointercCsjt|tƒsdSgd}}t|ƒD]6\}}| ¡r<| |¡q |sFdS||d…}qXq |dkpht |¡S)NTÚFú#)r3rÚ enumerateÚisdigitÚappendrjrk)rZnon_negative_integerÚrestÚiÚ characterr r r Úis_relative_json_pointerƒs    ruz uri-templatecCst |¡}| |¡Sr)Ú uritemplateZ URITemplateZvalidate)rZtemplate_validatorÚtemplater r r Úis_uri_templateŸs rx)NNNNNr )>rar\rAÚstructZjsonschema.compatrZjsonschema.exceptionsrÚobjectrZdraft3_format_checkerZdraft4_format_checkerZdraft6_format_checkerZdraft7_format_checkerrr-r1r5r]r:r>ÚhasattrÚerrorÚ ValueErrorrBrErHrIÚ ImportErrorZ IDNAErrorrKrTZrfc3986_validatorrLrPrRrVrWZstrict_rfc3339rXZrfc3339_validatorrYr[r^rcrdrerfÚ TypeErrorrhrirjZJsonPointerExceptionrlruZuritemplate.exceptionsrvÚ exceptionsZInvalidTemplateZ ValidatorZforce_balanced_bracesrxr r r r Ús  zü ú !  ÿ  ÿ  ü      ý      ý            ý þ  ý þ