;izddlmZddlmZddlZddlmZejrddl Z ej dZ GddZ GddZGd d eje ZGd d Zd dlmZdS)) annotationsN)datetimeTc4eZdZdZd ddZdd Zdd Zdd ZdS)IfRangezVery simple object that represents the `If-Range` header in parsed form. It will either have neither a etag or date or one of either but never both. .. versionadded:: 0.7 Netag str | Nonedatedatetime | Nonec"||_||_dSN)rr )selfrr s QC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\werkzeug/datastructures/range.py__init__zIfRange.__init__s  returnstrc|jtj|jS|jtj|jSdS)-Converts the object back into an HTTP header.N)r http http_dater quote_etagrs r to_headerzIfRange.to_headers; 9 >$),, , 9 ?49-- -rrc*|Sr rrs r__str__zIfRange.__str__$~~rcRdt|jdt|dSN< >type__name__rrs r__repr__zIfRange.__repr__'*74::&77T7777rNN)rr r r rr)r' __module__ __qualname____doc__rrrr(rrrr ss    888888rrcJeZdZdZddZdd ZddZddZddZddZ ddZ dS)RangeaXRepresents a ``Range`` header. All methods only support only bytes as the unit. Stores a list of ranges if given, but the methods only work if only one range is provided. :raise ValueError: If the ranges provided are invalid. .. versionchanged:: 0.15 The ranges passed in are validated. .. versionadded:: 0.7 unitsrranges%cabc.Sequence[tuple[int, int | None]]rNonecz||_||_|D])\}}|| |dks||krt||fd*dS)Nrz is not a valid range.)r2r3 ValueError)rr2r3startends rrzRange.__init__8sj    J JJE3}eaii5C<< UCL!H!H!HIII J Jrlength int | Nonetuple[int, int] | Nonec|jdks|t|jdkrdS|jd\}}| |}|dkr||z }tj|||r|t ||fSdS)zIf the range is for bytes, the length is not None and there is exactly one range and it is satisfiable it returns a ``(start, stop)`` tuple, otherwise `None`. bytesNr)r2lenr3ris_byte_range_validmin)rr:r8r9s rrange_for_lengthzRange.range_for_lengthEs : FNc$+6F6F!6K6K4[^ s ;Cqyy  #E3 7 7 +#c6*** *trContentRange | Nonecz||}|#t|j|d|d|SdS)zCreates a :class:`~werkzeug.datastructures.ContentRange` object from the current range and given content length. Nrr?)rC ContentRanger2)rr:rngs rmake_content_rangezRange.make_content_rangeUs?##F++ ? CFCFFCC Ctrcg}|jD]R\}}|.||dkr|dnt|5||d|dz S|jdd|S)rNr-r?=,)r3appendrr2join)rr3beginr9s rrzRange.to_header^s+ 4 4JE3{ UaZZkkkkSZZHHHH 22q223333*11sxx//111rr cv||}|!|jd|dd|ddz d|SdS)z\Converts the object into `Content-Range` HTTP header, based on given length Nr#rrJr?/)rCr2)rr:ranges rto_content_range_headerzRange.to_content_range_headerhsT%%f--  jEE58EEeAhlEEVEE Etrc*|Sr rrs rrz Range.__str__qrrcRdt|jdt|dSr!r%rs rr(zRange.__repr__tr)rN)r2rr3r4rr5)r:r;rr<)r:r;rrDr+)r:r;rr ) r'r,r-r.rrCrHrrSrr(r/rrr1r1+s   J J J J 2222    888888rr1cjeZdZddZejdd Zejdd ZddZddZdS)_CallbackPropertyownertype[ContentRange]namerrr5cd||_dS)N_)attr)rrXrZs r __set_name__z_CallbackProperty.__set_name__ysJJ rinstancete.SelfcdSr r/rr_rXs r__get__z_CallbackProperty.__get__|s?BsrrFrcdSr r/rbs rrcz_CallbackProperty.__get__~sORsrrDtype[ContentRange] | None te.Self | Tc.||S|j|jSr )__dict__r]rbs rrcz_CallbackProperty.__get__s  K ++rvaluec`||j|j<|j||dSdSr )rhr] on_update)rr_ris r__set__z_CallbackProperty.__set__s<',$)$   )   x ( ( ( ( ( * )rN)rXrYrZrrr5)r_r5rXr5rr`)r_rFrXrYrr)r_rDrXrerrf)r_rFrirrr5)r'r,r-r^toverloadrcrlr/rrrWrWxsZBBBZBZRRRZR,,,,))))))rrWceZdZUdZ ddd ZeZded<eZded<eZ ded<eZ ded< dddZ ddZ ddZ ddZddZddZdS)rFzDRepresents the content range header. .. versionadded:: 0.7 Nr2r r8r;stopr:rk*cabc.Callable[[ContentRange], None] | Nonerr5cD||_|||||dSr )rkset)rr2r8rpr:rks rrzContentRange.__init__s)# fe,,,,,rr>ctj|||s Jd||_||_||_||_|j||dSdS)z#Simple method to update the ranges.zBad range providedN)rrA_units_start_stop_lengthrk)rr8rpr:r2s rrszContentRange.setsl'tV<<RR>RRR<"' "' !% #) > % NN4  & %rc6|ddddS)zcSets the units to `None` which indicates that the header should no longer be used. N)r2)rsrs runsetzContentRange.unsets" t4(((((rrc|jdS|jd}n|j}|j |jd|S|jd|jd|jdz d|S)Nr*z */r#rJr?rQ)rurxrvrw)rr:s rrzContentRange.to_headersq ; 2 <  #FF\F ; k..f.. .+GG GGdj1nGGvGGGrboolc|jduSr )rurs r__bool__zContentRange.__bool__s{$&&rc*|Sr rrs rrzContentRange.__str__rrcRdt|jdt|dSr!r%rs rr(zContentRange.__repr__r)rr*) r2r r8r;rpr;r:r;rkrqrr5)Nr>) r8r;rpr;r:r;r2r rr5)rr5r+)rr})r'r,r-r.rrWr2__annotations__r8rpr:rsrzrrrr(r/rrrFrFs6"@D - - - - -*)++E++++))++E++++)(**D******,,F,,,, "# !!!!! )))) H H H H''''    888888rrF)r) __future__rcollections.abcabccabctypingrmr TYPE_CHECKINGtyping_extensionsteTypeVarrrr1GenericrWrFrrr/rrrs@""""""?#"""" AIcNN88888888