U nflV@srddlZddlmZmZmZmZmZmZmZm Z ddl m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZmZddlm Z m!Z!e rddl"a"ddl#m$Z$ddl%m&Z&dd l'm(Z(dd l)m*Z*ee*ddfZ+Gd d d e$d dZ,Gddde$d dZ-nda"Gdd d e.Z,ee/e0e1eee/e0e1fee/e1fffZ2ddddddddddddddd d!d"gZ3da4da5da6da7da8d#Z9d$Z:d%Z;d&Zee/d)d*d+Z?ee/d)d,d-Z@ee/d)d.d/ZAee/d)d0d1ZBee/d)d2d3ZCGd4dde/ZDGd5ddeDZEGd6ddeEZFGd7ddeDZGGd8d9d9eDZHGd:ddeHZIGd;ddeDZJGdd d eDZMGd?d!d!eDZNd@dAdBd@d@ddCeOe1e1eOeOee e/eeDdDdEdZPdd)dFdGZQGdHdde/ZRGdIddeZSGdJddeZTGdKddeZUGdLdde ZVeWdMZXdNZYee/ee/e/fdOdPd"ZZdS)QN) IPv4Address IPv4Interface IPv4Network IPv6Address IPv6Interface IPv6Network _BaseAddress _BaseNetwork) TYPE_CHECKINGAny CollectionDict GeneratorListMatchOptionalPatternSetTupleTypeUnioncast no_type_check)errors)Representationupdate_not_none)constr_length_validator str_validator) TypedDict) BaseConfig) ModelField) AnyCallablec@seZdZUeed<eeed<eeed<eeed<eeed<eeed<eeed<eeed<eeed <eeed <d S) Partsschemeuserpasswordipv4ipv6domainportpathqueryfragmentN)__name__ __module__ __qualname__str__annotations__rr2r2B/opt/hc_python/lib/python3.8/site-packages/pydantic/v1/networks.pyr",s         r"F)totalc@sBeZdZUeed<eeed<eeed<eeed<eed<dS) HostPartshosttld host_typer)rebuildN)r-r.r/r0r1rboolr2r2r2r3r58s    r5c@s eZdZdS)r"N)r-r.r/r2r2r2r3r"BsAnyUrl AnyHttpUrlFileUrlHttpUrl stricturlEmailStr NameEmail IPvAnyAddressIPvAnyInterface IPvAnyNetwork PostgresDsn CockroachDsnAmqpDsnRedisDsnMongoDsnKafkaDsnvalidate_emailz(?:(?P(?:\d{1,3}\.){3}\d{1,3})(?=$|[/:#?])|(?P\[[A-F0-9]*:[A-F0-9:]+\])(?=$|[/:#?])|(?P[^\s/:?#]+))?(?::(?P\d+))?z&(?:(?P[a-z][a-z0-9+\-.]+)://)?z3(?:(?P[^\s:/]*)(?::(?P[^\s/]*))?@)?z(?P/[^\s?#]*)?z(?:\?(?P[^\s#]*))?z(?:#(?P[^\s#]*))?returncCs2tdkr.ttttttttj atSN) _url_regex_cacherecompile _scheme_regex_user_info_regex _host_regex _path_regex _query_regex_fragment_regex IGNORECASEr2r2r2r3 url_regexqs rYcCs0tdkr,tttdttttjatS)z Compiled multi host url regex. Additionally to `url_regex` it allows to match multiple hosts. E.g. host1.db.net,host2.db.net Nz(?P([^/]*))) _multi_host_url_regex_cacherPrQrRrSrUrVrWrXr2r2r2r3multi_host_url_regex{s r[cCs2tdkr.d}d}td|d||tjatS)Nz'[_0-9a-z](?:[-_0-9a-z]{0,61}[_0-9a-z])?z(?P\.[a-z]{2,63})?\.?(?:\.)*?)_ascii_domain_regex_cacherPrQrX)Z ascii_chunkZascii_domain_endingr2r2r3ascii_domain_regexsr_cCs2tdkr.d}d}td|d||tjatS)NzB[_0-9a-\U00040000](?:[-_0-9a-\U00040000]{0,61}[_0-9a-\U00040000])?z<(?P(\.[^\W\d_]{2,63})|(\.(?:xn--)[_0-9a-z-]{2,63}))?\.?r\r])_int_domain_regex_cacherPrQrX)Z int_chunkZint_domain_endingr2r2r3int_domain_regexs racCstdkrtttjatSrN)_host_regex_cacherPrQrTrXr2r2r2r3 host_regexs rccs6eZdZUdZdZdZdZeee e d<dZ e e d<dZ e e d<dZe e d <eZee e d <d Zeee ed d dZdddddddddd e e ee ee ee ee e ee ee ee ee dd ddZeddddddde ee ee e ee ee ee ee e e d ddZeee efddddZeddddZeedd dd!d"d#Zeee e d$dd%d&d'Ze e eee d d(d)Z!e ee dd*d+d,Z"ed9d$e d$d-d.d/Z#ed$e$e ee e e fd0d1d2Z%e d$d$d0d3d4Z&ed$d$d0d5d6Z'e dfd7d8 Z(Z)S):r;TNallowed_schemesF tld_required user_required host_required hidden_parts r#r$r%r6r7r8r)r*r+r,urlrMcKs t||dkr|jf|n|SrN)r0__new__build)clsrmkwargsr2r2r3rnszAnyUrl.__new__r() r$r%r6r7r8r)r*r+r,) rmr#r$r%r6r7r8r)r*r+r,rMc CsJt|||_||_||_||_||_||_||_| |_ | |_ | |_ dSrN) r0__init__r#r$r%r6r7r8r)r*r+r,) selfrmr#r$r%r6r7r8r)r*r+r,r2r2r3rrs zAnyUrl.__init__)r$r%r)r*r+r,) r#r$r%r6r)r*r+r,_kwargsrMc Kstf||||||||d| } |d} |r4| |7} |rD| d|7} |sL|rT| d7} | |7} |rd|jks~|| d|kr| d|7} |r| |7} |r| d|7} |r| d|7} | S)N)r#r$r%r6r)r*r+r,z://:@r)?#)r"rjget_default_partsget) rpr#r$r%r6r)r*r+r,rtpartsrmr2r2r3ros:   "   z AnyUrl.build field_schemarMcCst||j|jdddS)Nuri)Z minLengthZ maxLengthformat)r min_length max_lengthrpr}r2r2r3__modify_schema__szAnyUrl.__modify_schema__CallableGeneratorrLccs |jVdSrNvalidaterpr2r2r3__get_validators__szAnyUrl.__get_validators__r r)valuefieldconfigrMcCs|j|kr|St|}|jr$|}ttt|||}||}|sLtdtd| }| |}| |}| t |krtj|| dd||||S)NzURL regex failed unexpectedlyr")extra) __class__rstrip_whitespacestriprr0r _match_urlAssertionError groupdictapply_default_partsvalidate_partsendlenrZ UrlExtraError _build_url)rprrrrmmZoriginal_partsr{r2r2r3r s     zAnyUrl.validater"rrmr{rMc CsT||\}}}}||rdn||d|d|d||||d|d|d|dd S) z Validate hosts and build the AnyUrl object. Split from `validate` so this method can be altered in `MultiHostDsn`. Nr#r$r%r)r*r+r,rk) validate_host)rprrmr{r6r7r8r9r2r2r3r s zAnyUrl._build_urlcCs t|SrN)rYmatchrmr2r2r3r6szAnyUrl._match_url)r)rMcCs |dk rt|dkrtdS)Ni)intrZ UrlPortError)r)r2r2r3_validate_port:szAnyUrl._validate_portr{ validate_portrMcCsp|d}|dkrt|jr<||jkrtn|dkrd}t|}|dkrt|}|dkr~td}|d}|dkr|st|}|dk st|d}d}|dk r|dd}n|jrt |rd}d}| d  d }|dk r| d  d }||||fS) N)NNF)r(r&r'r(FTr7rdZ int_domainidnaascii) rirZ UrlHostErrorr_ fullmatchragrouprrgZUrlHostTldErrorencodedecode) rpr{r7r8r9fr6Zis_internationaldr2r2r3rUsD           zAnyUrl.validate_hostcCsiSrNr2r{r2r2r3ryszAnyUrl.get_default_partscCs,||D]\}}||s|||<q|SrN)ryitems)rpr{keyrr2r2r3rs zAnyUrl.apply_default_partscs:dfddjD}jjdtd|dS)Nz, c3s0|](}t|dk r|dt|VqdS)N=)getattr).0nrsr2r3 sz"AnyUrl.__repr__..())join __slots__rr-super__repr__)rsrrrr3rszAnyUrl.__repr__)T)*r-r.r/rrrrfrr r0r1rgr:rhrirrjrrrobjectrnrr classmethodror r rrrrr staticmethodrrrrrryrr __classcell__r2r2rr3r;s     +")c@seZdZddhZdZdS)r<httphttpsr2N)r-r.r/rfrr2r2r2r3r<sc@s.eZdZdZdZdhZedddddZdS) r>Ti#r)r"rcCsd|ddkrdndiS)Nr)r#r80443r2rr2r2r3ryszHttpUrl.get_default_partsN)r-r.r/rgrrjrryr2r2r2r3r>s c@seZdZdhZdZdZdS)r=fileFr2N)r-r.r/rfrirr2r2r2r3r=scseZdZejdZddeeededfddZe e ee e ddd Z e dd ed d fd d Ze e e e d ddddZZS) MultiHostDsn)hostsNr5)argsrrqcstj||||_dSrN)rrrr)rsrrrqrr2r3rrszMultiHostDsn.__init__rlcCs t|SrN)r[rrr2r2r3rszMultiHostDsn._match_urlTr"rcstj|ddS)NF)r)rr)rpr{rrr2r3rszMultiHostDsn.validate_partsrc Cs g}t}|ddD]N}||}||\}}} } |d} || ||| || | dqt|dkr|t dd|Drdn||d|d |d |d |d |d d|d S|d} || drdn||d|d |d | d| d| d| d|d |d |d d SdS)Nr,r))r6r8r7r9r)rdcSsg|] }|dqS)r9r2)rhpr2r2r3 sz+MultiHostDsn._build_url..r#r$r%r*r+r,)r#r$r%r*r+r,r8rrr9r6r7r8rk) rcrsplitrrrzrappendrany) rprrmr{Z hosts_partsZhost_rer6rr7r8r9r)Z host_partr2r2r3rsR    zMultiHostDsn._build_url)T)r-r.r/r;rr rrrrrr0rrrr:rrrr2r2rr3rs $rc @s*eZdZddddddddd h Zd Zd Zd S) rEpostgres postgresqlzpostgresql+asyncpgzpostgresql+pg8000zpostgresql+psycopgzpostgresql+psycopg2zpostgresql+psycopg2cffizpostgresql+py-postgresqlzpostgresql+pygresqlTr2N)r-r.r/rfrhrr2r2r2r3rEs c@seZdZdddhZdZdS)rFZ cockroachdbzcockroachdb+psycopg2zcockroachdb+asyncpgTN)r-r.r/rfrhr2r2r2r3rFs c@seZdZddhZdZdS)rGZamqpZamqpsFN)r-r.r/rfrir2r2r2r3rGsc@s0eZdZdZddhZdZedddddZd S) rHr2ZredisZredissFr"rcCs |ds|dsdnddddS)Nr&r' localhostZ6379z/0)r(r)r*r2rr2r2r3ry szRedisDsn.get_default_partsN)r-r.r/rrfrirryr2r2r2r3rHs c@s&eZdZdhZedddddZdS)rIZmongodbr"rcCsddiS)Nr)Z27017r2rr2r2r3ryszMongoDsn.get_default_partsNr-r.r/rfrryr2r2r2r3rIsc@s&eZdZdhZedddddZdS)rJZkafkar"rcCs dddS)NrZ9092)r(r)r2rr2r2r3ry"szKafkaDsn.get_default_partsNrr2r2r2r3rJsTrdrerrrrgrirf)rrrrgrirfrMcCs"t||||||d}tdtf|S)NrZUrlValue)dicttyper;)rrrrgrirf namespacer2r2r3r?*s c Cs>z ddlaWn,tk r8}ztd|W5d}~XYnXdS)NrzCemail-validator is not installed, run `pip install pydantic[email]`)email_validator ImportError)er2r2r3import_email_validator?s rc@sReZdZeeeefddddZeddddZee eed d d Z dS) r@Nr|cCs|jddddS)Nstringemailrrupdaterr2r2r3rHszEmailStr.__modify_schema__rrLccsttV|jVdSrN)rrrrr2r2r3rLszEmailStr.__get_validators__rrMcCs t|dS)Nrd)rKrprr2r2r3rTszEmailStr.validate) r-r.r/rr r0r rrrrr2r2r2r3r@Gs c@seZdZdZeedddZeedddZe e eefddd d Z e d d d dZ e eddddZ ed ddZdS)rAnamercCs||_||_dSrNr)rsrrr2r2r3rr\szNameEmail.__init__)otherrMcCs"t|to |j|jf|j|jfkSrN) isinstancerArr)rsrr2r2r3__eq__`szNameEmail.__eq__Nr|cCs|jddddS)Nrz name-emailrrrr2r2r3rcszNameEmail.__modify_schema__rrLccst|jVdSrN)rrrr2r2r3rgszNameEmail.__get_validators__rcCs"|j|kr|St|}|t|SrN)rrrKrr2r2r3rms zNameEmail.validatecCs|jd|jdS)Nz <>rrr2r2r3__str__tszNameEmail.__str__)r-r.r/rr0rrr r:rrr rrrrr2r2r2r3rAYsc@sdeZdZdZeeeefddddZedddd Z ee ee e fe e efd d d ZdS) rBr2Nr|cCs|jddddS)NrZ ipvanyaddressrrrr2r2r3r{szIPvAnyAddress.__modify_schema__rrLccs |jVdSrNrrr2r2r3rsz IPvAnyAddress.__get_validators__rcCsLz t|WStk rYnXz t|WStk rFtYnXdSrN)r ValueErrorrrZIPvAnyAddressErrorrr2r2r3rs  zIPvAnyAddress.validate)r-r.r/rrr r0r rrrbytesrrrrr2r2r2r3rBxsc@sZeZdZdZeeeefddddZedddd Z ee e e e fd d d ZdS) rCr2Nr|cCs|jddddS)NrZipvanyinterfacerrrr2r2r3rsz!IPvAnyInterface.__modify_schema__rrLccs |jVdSrNrrr2r2r3rsz"IPvAnyInterface.__get_validators__rcCsLz t|WStk rYnXz t|WStk rFtYnXdSrN)rrrrZIPvAnyInterfaceErrorrr2r2r3rs  zIPvAnyInterface.validate)r-r.r/rrr r0r rr NetworkTyperrrrr2r2r2r3rCsc@sVeZdZeeeefddddZeddddZee e e e fd d d Z dS) rDNr|cCs|jddddS)NrZ ipvanynetworkrrrr2r2r3rszIPvAnyNetwork.__modify_schema__rrLccs |jVdSrNrrr2r2r3rsz IPvAnyNetwork.__get_validators__rcCsLz t|WStk rYnXz t|WStk rFtYnXdSrN)rrrrZIPvAnyNetworkErrorrr2r2r3rs  zIPvAnyNetwork.validate)r-r.r/rr r0r rrrrrrrr2r2r2r3rDs z([\w ]*?) *<(.*)> *irc Cstdkrtt|tkr"tt|}d}|r@|\}}| }ztj |dd}Wn,tj k r}z tj|W5d}~XYnXt |dr|j }|dk st|p|j}||fS|d}|d|}||d}|p|||fSdS)aH Email address validation using https://pypi.org/project/email-validator/ Notes: * raw ip address (literal) domain parts are not allowed. * "John Doe " style "pretty" email addresses are processed * spaces are striped from the beginning and end of addresses but no error is raised NF)Zcheck_deliverability normalizedrv)rrrMAX_EMAIL_LENGTHrZ EmailErrorpretty_email_regexrgroupsrrKZEmailNotValidErrorhasattrrr local_partindexr) rrrrr{rZat_indexrZ global_partr2r2r3rKs,        )[rP ipaddressrrrrrrrr typingr r r r rrrrrrrrrrrZ pydantic.v1rZpydantic.v1.utilsrrZpydantic.v1.validatorsrrrtyping_extensionsrZpydantic.v1.configrZpydantic.v1.fieldsr Zpydantic.v1.typingr!rr"r5rr0rrr__all__rOrZr^r`rbrTrRrSrUrVrWrYr[r_rarcr;r<r>r=rrErFrGrHrIrJr:r?rr@rArBrCrDrQrrrKr2r2r2r3s( D      *    e @