§ x<ˆj>Hãóô—dZddlZddlmZmZddlmZmZmZddlm Z m Z m Z Gd„d¦«Z d.d „Z Gd „d ¦«ZGd „d ¦«ZGd„de ¦«ZGd„de ¦«ZGd„de ¦«ZGd„de ¦«ZGd„de¦«Zeee¦«eeeddd¬¦«Ze ¦«eeeddd¬¦«Ze ¦«eeedd d!¬¦«Ze ¦«ed"ed#d$d%¬¦«Ze ¦«ed&ed'd(d)¬¦«Ze ¦«ed*ed+d,d-¬¦«Ze ¦«dS)/z1Implementation of the Range type and adaptation éN)ÚProgrammingErrorÚInterfaceError)Ú ISQLQuoteÚadaptÚregister_adapter)Únew_typeÚnew_array_typeÚ register_typecó—eZdZdZdZdd„Zd„Zd„Zed „¦«Z ed „¦«Z ed „¦«Z ed „¦«Z ed „¦«Z ed„¦«Zed„¦«Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZdS)ÚRangea…Python representation for a PostgreSQL |range|_ type. :param lower: lower bound for the range. `!None` means unbound :param upper: upper bound for the range. `!None` means unbound :param bounds: one of the literal strings ``()``, ``[)``, ``(]``, ``[]``, representing whether the lower or upper bounds are included :param empty: if `!True`, the range is empty ©Ú_lowerÚ_upperÚ_boundsNú[)FcóŽ—|s-|dvrtd|›�¦«‚||_||_||_dSdx|_x|_|_dS)N)rz(]z()z[]zbound flags not valid: )Ú ValueErrorrrr)ÚselfÚlowerÚupperÚboundsÚemptys úc/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/psycopg2/_range.pyÚ__init__zRange.__init__/s_€Øð <ØÐ5Ð5Ð5Ý Ð!E¸6Ð!EÐ!EÑFÔFÐFàˆDŒK؈DŒKØ!ˆDŒLˆLˆLà7;Ð ;ˆDŒKÐ ;˜$œ+¨¬ ¨ ¨ ócó�—|j€|jj›d�Sd |jj|j|j|j¦«S)Nz (empty=True)z{}({!r}, {!r}, {!r}))rÚ __class__Ú__name__Úformatrr©rs rÚ__repr__zRange.__repr__:sJ€Ø Œ<Ð Ø”nÔ-Ð;Ð;Ð;Ð ;à)×0Ò0°´Ô1HØ” ˜Tœ[¨$¬,ñ8ô8ð 8rcóÀ—|j€dS|jdt|j¦«dt|j¦«|jdg}d |¦«S)Nrrz, éÚ)rÚstrrrÚjoin)rÚitemss rÚ__str__z Range.__str__AsY€Ø Œ<Ð Ø�7ð ŒL˜ŒOÝ �” Ñ Ô Ø Ý �” Ñ Ô Ø ŒL˜ŒOð  ˆð�wŠw�u‰~Œ~Ðrcó—|jS)z:The lower bound of the range. `!None` if empty or unbound.)rr s rrz Range.lowerNó €ðŒ{Ðrcó—|jS)z:The upper bound of the range. `!None` if empty or unbound.)rr s rrz Range.upperSr*rcó—|jduS)z`!True` if the range is empty.N©rr s rÚisemptyz Range.isemptyXs€ðŒ|˜tÐ#Ð#rcó&—|j€dS|jduS)z0`!True` if the range doesn't have a lower bound.NF©rrr s rÚ lower_infzRange.lower_inf]ó€ð Œ<Ð Ø�5ØŒ{˜dÐ"Ð"rcó&—|j€dS|jduS)z1`!True` if the range doesn't have an upper bound.NF©rrr s rÚ upper_infzRange.upper_infdr2rcóD—|j�|j€dS|jddkS)z4`!True` if the lower bound is included in the range.NFrú[r0r s rÚ lower_inczRange.lower_inckó)€ð Œ<Ð  4¤;Ð#6Ø�5ØŒ|˜AŒ #Ò%Ð%rcóD—|j�|j€dS|jddkS)z4`!True` if the upper bound is included in the range.NFr#ú]r4r s rÚ upper_inczRange.upper_incrr9rcóä—|j€dS|j�,|jddkr||jkrdSn ||jkrdS|j�,|jddkr||jkrdSn ||jkrdSdS)NFrr7r#r;T)rrr)rÚxs rÚ __contains__zRange.__contains__ys˜€Ø Œ<Ð Ø�5à Œ;Ð "ØŒ|˜AŒ #Ò%Ð%Ø�t”{’?�?Ø ˜5ð#𘜠Ò#Ð#Ø ˜5à Œ;Ð "ØŒ|˜AŒ #Ò%Ð%Ø�t”{’?�?Ø ˜5ð#𘜠Ò#Ð#Ø ˜5àˆtrcó—|jduS©Nr-r s rÚ__bool__zRange.__bool__�s€ØŒ| 4Ð'Ð'rcó�—t|t¦«sdS|j|jko|j|jko|j|jkS)NF)Ú isinstancer rrr©rÚothers rÚ__eq__z Range.__eq__’sL€Ý˜%¥Ñ'Ô'ð Ø�5Ø” ˜uœ|Ò+ð.Ø” ˜uœ|Ò+ð.à”  ¤ Ò-ð /rcó.—| |¦« SrA)rGrEs rÚ__ne__z Range.__ne__™s€Ø—;’;˜uÑ%Ô%Ð%Ð%rcóD—t|j|j|jf¦«SrA)Úhashrrrr s rÚ__hash__zRange.__hash__œs€Ý�T”[ $¤+¨t¬|Ð<Ñ=Ô=Ð=rcó¸—t|t¦«stSdD]:}t||¦«}t||¦«}||krŒ)|€dS|€dS||kcSdS)Nr TF)rDr ÚNotImplementedÚgetattr)rrFÚattrÚ self_valueÚ other_values rÚ__lt__z Range.__lt__£s…€Ý˜%¥Ñ'Ô'ð "Ý!Ð !Ø3ð 0ð 0ˆDÝ   tÑ,Ô,ˆJÝ! %¨Ñ.Ô.ˆKؘ[Ò(Ð(ØØÐ#Ø�t�tØÐ$Ø�u�uà! KÒ/Ð/Ð/Ð/؈urcó<—||krdS| |¦«S©NT)rSrEs rÚ__le__z Range.__le__³ó"€Ø �5Š=ˆ=Ø�4à—;’;˜uÑ%Ô%Ð %rcód—t|t¦«r| |¦«StSrA)rDr rSrNrEs rÚ__gt__z Range.__gt__¹s,€Ý �e�UÑ #Ô #ð "Ø—<’< Ñ%Ô%Ð %å!Ð !rcó<—||krdS| |¦«SrU)rYrEs rÚ__ge__z Range.__ge__¿rWrcó*‡—ˆfd„‰jD¦«S)NcóR•—i|]#}t‰|¦«¯|t‰|¦«“Œ$S©)ÚhasattrrO)Ú.0Úslotrs €rú z&Range.__getstate__..ÆsCø€ð?ð?ð?Ø­'°$¸Ñ*=Ô*=ð?�•g˜d DÑ)Ô)ð?ð?ð?r)Ú __slots__r s`rÚ __getstate__zRange.__getstate__Ås0ø€ð?ð?ð?ð?Øœð?ñ?ô?ð ?rcó\—| ¦«D]\}}t|||¦«ŒdSrA)r'Úsetattr)rÚstateraÚvalues rÚ __setstate__zRange.__setstate__És<€Ø Ÿ;š;™=œ=ð 'ð '‰KˆD�%Ý �D˜$ Ñ &Ô &Ð &Ð &ð 'ð 'r)NNrF)rÚ __module__Ú __qualname__Ú__doc__rcrr!r(Úpropertyrrr.r1r5r8r<r?rBrGrIrLrSrVrYr[rdrir^rrr r #s¹€€€€€ððð0€Ið <ð <ð <ð <ð8ð8ð8ð ð ð ðððñ„Xððððñ„Xððð$ð$ñ„Xð$ðð#ð#ñ„Xð#ð ð#ð#ñ„Xð#ð ð&ð&ñ„Xð&ð ð&ð&ñ„Xð&ð ððð,(ð(ð(ð/ð/ð/ð&ð&ð&ð>ð>ð>ðððð &ð&ð&ð "ð"ð"ð &ð&ð&ð ?ð?ð?ð'ð'ð'ð'ð'rr Fcór—t |||¦«}| | r|pd¦«|S)aéCreate and register an adapter and the typecasters to convert between a PostgreSQL |range|_ type and a PostgreSQL `Range` subclass. :param pgrange: the name of the PostgreSQL |range| type. Can be schema-qualified :param pyrange: a `Range` strict subclass, or just a name to give to a new class :param conn_or_curs: a connection or cursor used to find the oid of the range and its subtype; the typecaster is registered in a scope limited to this object, unless *globally* is set to `!True` :param globally: if `!False` (default) register the typecaster only on *conn_or_curs*, otherwise register it globally :return: `RangeCaster` instance responsible for the conversion If a string is passed to *pyrange*, a new `Range` subclass is created with such name and will be available as the `~RangeCaster.range` attribute of the returned `RangeCaster` object. The function queries the database on *conn_or_curs* to inspect the *pgrange* type and raises `~psycopg2.ProgrammingError` if the type is not found. If querying the database is not advisable, use directly the `RangeCaster` class and register the adapter and typecasters using the provided functions. N)Ú RangeCasterÚ_from_dbÚ _register)ÚpgrangeÚpyrangeÚ conn_or_cursÚgloballyÚcasters rÚregister_rangerwÎs@€õ4× !Ò ! '¨7°LÑ AÔ A€FØ ×Ò˜�\Ð2 lÐ:°dÑ;Ô;Ð;Ø €Mrcó.—eZdZdZdZd„Zd„Zd„Zd„ZdS)Ú RangeAdapterz¢`ISQLQuote` adapter for `Range` subclasses. This is an abstract class: concrete classes must set a `name` class attribute or override `getquoted()`. Ncó—||_dSrA)Úadapted)rr{s rrzRangeAdapter.__init__õs €ØˆŒ ˆ ˆ rcó&—|jtur|SdSrA)Ú_protor)rÚprotos rÚ __conform__zRangeAdapter.__conform__øs€Ø Œ;�)Ð #Ð #؈Kð $Ð #rcó—||_dSrA)Ú_conn)rÚconns rÚpreparezRangeAdapter.prepareüs €ØˆŒ ˆ ˆ rcó‚—|j€td¦«‚|j}|jrd|j d¦«zS|j�St |j¦«}t|d¦«r| |j ¦«|  ¦«}nd}|j �St |j ¦«}t|d¦«r| |j ¦«|  ¦«}nd}|j d¦«dz|zdz|zdz|j  d¦«zd zS) NzMRangeAdapter must be subclassed overriding its name or the getquoted() methods 'empty'::Úutf8rƒsNULLó(s, s, 's')) ÚnameÚNotImplementedErrorr{r.Úencoderrr_rƒr�Ú getquotedrr)rÚrÚarrs rrŠzRangeAdapter.getquotedÿsA€Ø Œ9Ð Ý%ð,ñ-ô-ð -ð ŒLˆØ Œ9ð ;Ø $¤)×"2Ò"2°6Ñ":Ô":Ñ:Ð :à Œ7Ð Ý�a”g‘”ˆAÝ�q˜)Ñ$Ô$ð &Ø— ’ ˜$œ*Ñ%Ô%Ð%Ø—K’K‘M”MˆEˆEàˆEà Œ7Ð Ý�a”g‘”ˆAÝ�q˜)Ñ$Ô$ð &Ø— ’ ˜$œ*Ñ%Ô%Ð%Ø—K’K‘M”MˆEˆEàˆEàŒy×Ò Ñ'Ô'¨$Ñ.°Ñ6¸Ñ>ÀÑFØñØ”y×'Ò'¨Ñ/Ô/ñ0Ø27ñ8ð 8r) rrjrkrlr‡rrrƒrŠr^rrryryísa€€€€€ððð €Dðððððððððð8ð8ð8ð8ð8rrycó’—eZdZdZd d„Zd„Zed„¦«Zej dej ¦«Z ej d¦«Z d d„Z d d „ZdS) roa Helper class to convert between `Range` and PostgreSQL range types. Objects of this class are usually created by `register_range()`. Manual creation could be useful if querying the database is not advisable: in this case the oids must be provided. Ncó—||_| ||¦«|jjp|jjj}t |f||j¦«|_|�!t|f|dz|j¦«|_ dSd|_ dS)NÚARRAY) Ú subtype_oidÚ_create_rangesÚadapterr‡rrrÚparseÚ typecasterr Úarray_typecaster)rrrrsÚoidr�Ú array_oidr‡s rrzRangeCaster.__init__$s‹€Ø&ˆÔØ ×Ò˜G WÑ-Ô-Ð-àŒ|Ô ÐC D¤LÔ$:Ô$Cˆå" C 6¨4°´Ñ<Ô<ˆŒà Ð Ý$2Ø� ˜d W™n¨d¬oñ%?ô%?ˆDÔ !Ð !Ð !ð%)ˆDÔ !Ð !Ð !rcó4—d|_t|t¦«r)t|tfi¦«|_||j_n7 t |t¦«r|tur||_n#t$rYnwxYw|j€td¦«‚d|_ t|t¦«rt|tfi¦«|_t |t¦«r|tur||_n#t$rYnwxYw|j€td¦«‚dS)z0Create Range and RangeAdapter classes if needed.Nz:pgrange must be a string or a RangeAdapter strict subclassz1pyrange must be a type or a Range strict subclass) r’rDr%Útyperyr‡Ú issubclassÚ TypeErrorÚranger )rrrrss rr‘zRangeCaster._create_ranges2sN€ð ˆŒ Ý �g�sÑ #Ô #ð Ý ­,¨¸"Ñ=Ô=ˆDŒLØ 'ˆDŒLÔ Ð ð ݘg¥|Ñ4Ô4ð+Ø#­<Ð7Ð7Ø#*�D”LøøÝð ð ð Ø�ð øøøð Œ<Ð ÝØLñNôNð NðˆŒ ð ݘ'¥3Ñ'Ô'ð 9Ý! '­E¨8°RÑ8Ô8�” ݘ'¥5Ñ)Ô)ð %¨g½UÐ.BÐ.BØ$�” øøÝð ð ð Ø ˆDð øøøð Œ:Ð ÝØCñEôEð Eð Ð s%Á%A-Á- A:Á9A:ÂAC2Ã2 C?Ã>C?có6—ddlm}ddlm}||¦«\}}|jjdkrt d|jjz¦«‚|j}d|vr| dd¦«\} } n|} d} |  d | | f¦«|  ¦«} | s¥ d } |j|kr|  d ¦«d } |  d |f¦«|  ¦«} | r | dd…\} } n#t $rYnwxYw| r|  d¦«n#| r|  d¦«wwxYw||kr|j s|  ¦«| st d|›d�¦«‚| dd…\} }}t||| ||¬¦«S)z|Return a `RangeCaster` instance for the type *pgrange*. Raise `ProgrammingError` if the type is not found. r)ÚSTATUS_IN_TRANSACTION)Ú_solve_conn_cursiX`z'range types not available in version %sú.r#Úpublicz¯select rngtypid, rngsubtype, typarray from pg_range r join pg_type t on t.oid = rngtypid join pg_namespace ns on ns.oid = typnamespace where typname = %s and ns.nspname = %s; FzSAVEPOINT register_typeTz³SELECT rngtypid, rngsubtype, typarray, typname, nspname from pg_range r join pg_type t on t.oid = rngtypid join pg_namespace ns on ns.oid = typnamespace WHERE t.oid = %s::regtype éNz#ROLLBACK TO SAVEPOINT register_typezPostgreSQL range 'z ' not found©r–r�r—)Úpsycopg2.extensionsržÚpsycopg2.extrasrŸÚinfoÚserver_versionrÚstatusÚsplitÚexecuteÚfetchoneÚ autocommitÚrollbackro)rr‡rsrtržrŸr‚ÚcursÚ conn_statusÚschemaÚtnameÚrecÚ savepointr™ÚsubtypeÚarrays rrpzRangeCaster._from_dbUsO€ð >Ð=Ð=Ð=Ð=Ð=Ø4Ð4Ð4Ð4Ð4Ð4Ø%Ð% lÑ3Ô3‰ ˆˆdà Œ9Ô # eÒ +Ð +Ý"Ð#LØ”)Ô*ñ$+ñ,ô,ð ,ð”kˆ ð �$ˆ;ˆ;Ø ŸJšJ s¨AÑ.Ô.‰MˆF�E�EàˆE؈Fð � Š ðð  ˆV€_ñ  ô ð ð�mŠm‰oŒoˆàð Hð HØ!� ð”;Ð"7Ò7Ð7Ø—L’LÐ!:Ñ;Ô;Ð;Ø $�Ià— ’ ðð  €Xñ ôðð—m’m‘o”o�Øð,Ø$'¨¨¨¤G‘M�E˜6øøõ $ð ð ð Ø�ð øøøððHØ—L’LÐ!FÑGÔGÐGøøððHØ—L’LÐ!FÑGÔGÐGÐGðHøøøð Ð/Ò /Ð /¸¼Ð /Ø �MŠM‰OŒOˆOàð 8Ý"Ø6 TÐ6Ð6Ð6ñ8ô8ð 8ð # 2 A 2œwшˆg�uå˜4 Ø '°Uð<ñ<ô<ð Ã$D&Ã> D ÄD&Ä D Ä D&Ä&Ea] ( \(|\[ ) # lower bound flag (?: # lower bound: " ( (?: [^"] | "")* ) " # - a quoted string | ( [^",]+ ) # - or an unquoted string )? # - or empty (not catched) , (?: # upper bound: " ( (?: [^"] | "")* ) " # - a quoted string | ( [^"\)\]]+ ) # - or an unquoted string )? # - or empty (not catched) ( \)|\] ) # upper bound flag z (["\\])\1có¸—|€dS|dkr| d¬¦«S|j |¦«}|€td|›d�¦«‚| d¦«}|€2| d¦«}|�|j d|¦«}| d ¦«}|€2| d ¦«}|�|j d|¦«}|�6| |j|¦«}| |j|¦«}| d ¦«| d ¦«z}| |||¦«S) NrT)rzfailed to parse range: 'ú'r¢éz\1éér#é) rœÚ _re_rangeÚmatchrÚgroupÚ _re_undoubleÚsubÚcastr�)rÚsÚcurÚmrrrs rr“zRangeCaster.parse²sD€Ø ˆ9Ø�4à �Š<ˆ<Ø—:’: D�:Ñ)Ô)Ð )à ŒN× Ò  Ñ #Ô #ˆØ ˆ9Ý Ð!@¸AÐ!@Ð!@Ð!@ÑAÔAÐ Aà—’˜‘ ” ˆØ ˆ=Ø—G’G˜A‘J”JˆEØÐ ØÔ)×-Ò-¨e°UÑ;Ô;�à—’˜‘ ” ˆØ ˆ=Ø—G’G˜A‘J”JˆEØÐ ØÔ)×-Ò-¨e°UÑ;Ô;�à ˆ?Ø—H’H˜TÔ-¨uÑ5Ô5ˆEØ—H’H˜TÔ-¨uÑ5Ô5ˆEà—’˜‘”˜aŸgšg a™jœjÑ(ˆà�zŠz˜% ¨Ñ/Ô/Ð/rcóœ—t|j|¦«|j�t|j|¦«t|j|j¦«dSrA)r r”r•rrœr’)rÚscopes rrqzRangeCaster._registerÑsJ€Ý�d”o uÑ-Ô-Ð-Ø Ô Ð ,Ý ˜$Ô/°Ñ 7Ô 7Ð 7嘜 T¤\Ñ2Ô2Ð2Ð2Ð2rrA)rrjrkrlrr‘Ú classmethodrpÚreÚcompileÚVERBOSEr¼r¿r“rqr^rrrorosÀ€€€€€ððð )ð )ð )ð )ð!Eð!Eð!EðFðJ<ðJ<ñ„[ðJ<ðX�” ð  ðŒZñ ô €Ið�2”:˜lÑ+Ô+€Lð0ð0ð0ð0ð>3ð3ð3ð3ð3ð3rrocó—eZdZdZdS)Ú NumericRangezÄA `Range` suitable to pass Python numeric types to a PostgreSQL range. PostgreSQL types :sql:`int4range`, :sql:`int8range`, :sql:`numrange` are casted into `!NumericRange` instances. N©rrjrkrlr^rrrÌrÌÙs€€€€€ððð  €DrrÌcó—eZdZdZdS)Ú DateRangez#Represents :sql:`daterange` values.NrÍr^rrrÏrÏâó€€€€€Ø-Ð-Ø€DrrÏcó—eZdZdZdS)Ú DateTimeRangez!Represents :sql:`tsrange` values.NrÍr^rrrÒrÒçs€€€€€Ø+Ð+Ø€DrrÒcó—eZdZdZdS)ÚDateTimeTZRangez#Represents :sql:`tstzrange` values.NrÍr^rrrÔrÔìrÐrrÔcó—eZdZdZd„ZdS)ÚNumberRangeAdapterz1Adapt a range if the subtype doesn't need quotes.cóš—|j}|jrdS|js:t|j¦« ¦« d¦«}nd}|js:t|j¦« ¦« d¦«}nd}d|j d›|›d|›|j d›d�  d¦«S)Ns'empty'Úasciir$r·rú,r#) r{r.r1rrrŠÚdecoder5rrr‰)rr‹rrs rrŠzNumberRangeAdapter.getquotedøsÇ€Ø ŒLˆØ Œ9ð Ø�:àŒ{ð õ ˜!œ'‘N”N×,Ò,Ñ.Ô.×5Ò5°gÑ>Ô>ˆEˆEàˆEàŒ{ð ݘ!œ'‘N”N×,Ò,Ñ.Ô.×5Ò5°gÑ>Ô>ˆEˆEàˆEà@�A”I˜a”LÐ@ %Ð@Ð@¨%Ð@°´¸1´Ð@Ð@Ð@×HÒHÈÑQÔQÐQrN)rrjrkrlrŠr^rrrÖrÖös.€€€€€Ø;Ð;ðRðRðRðRðRrrÖi@éiAr£iVéiWiBi¤iCÚ daterangeiHi:iIÚtsrangeiDiZiEÚ tstzrangeiFi iG)F)rlrÈÚpsycopg2._psycopgrrr¤rrrrr r r rwryrorÌrÏrÒrÔrÖÚint4range_casterrqÚint8range_casterÚnumrange_casterÚdaterange_casterÚtsrange_casterÚtstzrange_casterr^rrúrçs>ðððð6 € € € à>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØBÐBÐBÐBÐBÐBÐBÐBÐBÐBØGÐGÐGÐGÐGÐGÐGÐGÐGÐGðh'ðh'ðh'ðh'ðh'ñh'ôh'ðh'ðVðððð>-8ð-8ð-8ð-8ð-8ñ-8ô-8ð-8ð`y3ðy3ðy3ðy3ðy3ñy3ôy3ðy3ðx ð ð ð ð �5ñ ô ð ð ð ð ð ð �ñ ô ð ð  ð ð ð ð �Eñ ô ð ð  ð ð ð ð �eñ ô ð ðRðRðRðRðR˜ñRôRðRð2Ð�Ð1Ñ2Ô2Ð2ð �;Ð1°<Ø ˜"¨ð.ñ.ô.Ðà×ÒÑÔÐà�;Ð1°<Ø ˜"¨ð.ñ.ô.Ðà×ÒÑÔÐà�+Ð0°,Ø ˜$¨$ð0ñ0ô0€à×ÒÑÔÐà�;˜{¨IØ ˜$¨$ð0ñ0ô0Ðà×ÒÑÔÐà�˜Y¨ Ø ˜$¨$ð0ñ0ô0€à×ÒÑÔÐà�;˜{¨OØ ˜$¨$ð0ñ0ô0Ðà×ÒÑÔÐÐÐr