a „oeÆ?ã @sÒdZddlZddlZddlZddlmZmZmZmZm Z m Z ddl m Z m Z mZmZgd¢Ze e efZe ee eeffZe eeefZe ee e ee eefe eeffdffZe ee edfeeeefZeeegefZe dgd ¢¡Zed d œd d „ZGdd„deƒZGdd„dƒZdZ e Z!Gdd „d eƒZ"ee ee#efee eefdœdd„Z$e %d¡Z&eeedœdd„Z'ee edfee eefee eefee eefee eedœdd„Z(dS)zB .. testsetup:: from packaging.version import parse, Version éN)ÚAnyÚCallableÚOptionalÚ SupportsIntÚTupleÚUnioné)ÚInfinityÚ InfinityTypeÚNegativeInfinityÚNegativeInfinityType)ÚVERSION_PATTERNÚparseÚVersionÚInvalidVersion.Ú_Version)ÚepochÚreleaseÚdevÚpreÚpostÚlocalr©ÚversionÚreturncCst|ƒS)z×Parse the given version string. >>> parse('1.0.dev1') :param version: The version string to parse. :raises InvalidVersion: When the version string is not a valid version. )r)r©rúHC:\Program Files\Certbot\pkgs\pkg_resources\_vendor\packaging\version.pyr+s rc@seZdZdZdS)rzÉRaised when a version string is not a valid version. >>> Version("invalid") Traceback (most recent call last): ... packaging.version.InvalidVersion: Invalid version: 'invalid' N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrr7src@sŒeZdZUeedfed<edœdd„Zdedœdd„Z dedœd d „Z e edœd d „Z dedœd d„Z dedœdd„Ze edœdd„ZdS)Ú _BaseVersion.Ú_key©rcCs t|jƒS©N)Úhashr"©ÚselfrrrÚ__hash__Dsz_BaseVersion.__hash__)ÚotherrcCst|tƒstS|j|jkSr$©Ú isinstancer!ÚNotImplementedr"©r'r)rrrÚ__lt__Js z_BaseVersion.__lt__cCst|tƒstS|j|jkSr$r*r-rrrÚ__le__Ps z_BaseVersion.__le__cCst|tƒstS|j|jkSr$r*r-rrrÚ__eq__Vs z_BaseVersion.__eq__cCst|tƒstS|j|jkSr$r*r-rrrÚ__ge__\s z_BaseVersion.__ge__cCst|tƒstS|j|jkSr$r*r-rrrÚ__gt__bs z_BaseVersion.__gt__cCst|tƒstS|j|jkSr$r*r-rrrÚ__ne__hs z_BaseVersion.__ne__N)rrrrrÚ__annotations__Úintr(Úboolr.r/Úobjectr0r1r2r3rrrrr!As r!a— v? (?: (?:(?P[0-9]+)!)? # epoch (?P[0-9]+(?:\.[0-9]+)*) # release segment (?P
                                          # pre-release
            [-_\.]?
            (?P(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P[0-9]+)?
        )?
        (?P                                         # post release
            (?:-(?P[0-9]+))
            |
            (?:
                [-_\.]?
                (?Ppost|rev|r)
                [-_\.]?
                (?P[0-9]+)?
            )
        )?
        (?P                                          # dev release
            [-_\.]?
            (?Pdev)
            [-_\.]?
            (?P[0-9]+)?
        )?
    )
    (?:\+(?P[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
c@s~eZdZUdZe dedejejB¡Z	e
ed<eddœdd„Z
ed	œd
d„Zed	œdd
„Zeed	œdd„ƒZeeedfd	œdd„ƒZeeeeefd	œdd„ƒZeeed	œdd„ƒZeeed	œdd„ƒZeeed	œdd„ƒZeed	œdd„ƒZeed	œdd„ƒZeed	œdd „ƒZeed	œd!d"„ƒZeed	œd#d$„ƒZeed	œd%d&„ƒZ eed	œd'd(„ƒZ!eed	œd)d*„ƒZ"dS)+ra¹This class abstracts handling of a project's versions.

    A :class:`Version` instance is comparison aware and can be compared and
    sorted using the standard Python interfaces.

    >>> v1 = Version("1.0a5")
    >>> v2 = Version("1.0")
    >>> v1
    
    >>> v2
    
    >>> v1 < v2
    True
    >>> v1 == v2
    False
    >>> v1 > v2
    False
    >>> v1 >= v2
    False
    >>> v1 <= v2
    True
    z^\s*z\s*$r"Nrc
Csâ|j |¡}|s td|›d�ƒ‚t| d¡r:t| d¡ƒndtdd„| d¡ d¡Dƒƒt| d	¡| d
¡ƒt| d¡| d¡pˆ| d
¡ƒt| d¡| d¡ƒt	| d¡ƒd�|_
t|j
j|j
j
|j
j|j
j|j
j|j
jƒ|_dS)aCInitialize a Version object.

        :param version:
            The string representation of a version which will be parsed and normalized
            before use.
        :raises InvalidVersion:
            If the ``version`` does not conform to PEP 440 in any way then this
            exception will be raised.
        zInvalid version: 'ú'rrcss|]}t|ƒVqdSr$)r5©Ú.0ÚirrrÚ	Ëóz#Version.__init__..rÚ.Zpre_lZpre_nZpost_lZpost_n1Zpost_n2Zdev_lZdev_nr)rrrrrrN)Ú_regexÚsearchrrÚgroupr5ÚtupleÚsplitÚ_parse_letter_versionÚ_parse_local_versionÚ_versionÚ_cmpkeyrrrrrrr")r'rÚmatchrrrÚ__init__¸s*ÿøúzVersion.__init__r#cCsd|›d�S)z€A representation of the Version that shows all internal state.

        >>> Version('1.0.0')
        
        z
rr&rrrÚ__repr__ÞszVersion.__repr__cCsÀg}|jdkr | |j›d�¡| d dd„|jDƒ¡¡|jdurb| d dd„|jDƒ¡¡|jdur~| d	|j›�¡|jdurš| d
|j›�¡|jdur¶| d|j›�¡d |¡S)zA string representation of the version that can be rounded-tripped.

        >>> str(Version("1.0a5"))
        '1.0a5'
        rú!r>css|]}t|ƒVqdSr$©Ústr©r:Úxrrrr<ór=z"Version.__str__..NÚcss|]}t|ƒVqdSr$rLrNrrrr<÷r=z.postz.devú+)rÚappendÚjoinrrrrr©r'ÚpartsrrrÚ__str__æs




zVersion.__str__cCs|jj}|S)zThe epoch of the version.

        >>> Version("2.0.0").epoch
        0
        >>> Version("1!2.0.0").epoch
        1
        )rFr)r'Ú_epochrrrrs	z
Version.epoch.cCs|jj}|S)adThe components of the "release" segment of the version.

        >>> Version("1.2.3").release
        (1, 2, 3)
        >>> Version("2.0.0").release
        (2, 0, 0)
        >>> Version("1!2.0.0.post0").release
        (2, 0, 0)

        Includes trailing zeroes but not the epoch or any pre-release / development /
        post-release suffixes.
        )rFr)r'Ú_releaserrrrszVersion.releasecCs|jj}|S)aThe pre-release segment of the version.

        >>> print(Version("1.2.3").pre)
        None
        >>> Version("1.2.3a1").pre
        ('a', 1)
        >>> Version("1.2.3b1").pre
        ('b', 1)
        >>> Version("1.2.3rc1").pre
        ('rc', 1)
        )rFr)r'Ú_prerrrr$s
zVersion.precCs|jjr|jjdSdS)z™The post-release number of the version.

        >>> print(Version("1.2.3").post)
        None
        >>> Version("1.2.3.post1").post
        1
        rN)rFrr&rrrr4s	zVersion.postcCs|jjr|jjdSdS)z•The development number of the version.

        >>> print(Version("1.2.3").dev)
        None
        >>> Version("1.2.3.dev1").dev
        1
        rN)rFrr&rrrr?s	zVersion.devcCs(|jjr d dd„|jjDƒ¡SdSdS)zŸThe local version segment of the version.

        >>> print(Version("1.2.3").local)
        None
        >>> Version("1.2.3+abc").local
        'abc'
        r>css|]}t|ƒVqdSr$rLrNrrrr<Tr=z Version.local..N)rFrrSr&rrrrJs	z
Version.localcCst|ƒ dd¡dS)zÕThe public portion of the version.

        >>> Version("1.2.3").public
        '1.2.3'
        >>> Version("1.2.3+abc").public
        '1.2.3'
        >>> Version("1.2.3+abc.dev1").public
        '1.2.3'
        rQrr)rMrCr&rrrÚpublicXszVersion.publiccCsFg}|jdkr | |j›d�¡| d dd„|jDƒ¡¡d |¡S)a]The "base version" of the version.

        >>> Version("1.2.3").base_version
        '1.2.3'
        >>> Version("1.2.3+abc").base_version
        '1.2.3'
        >>> Version("1!1.2.3+abc.dev1").base_version
        '1!1.2.3'

        The "base version" is the public version of the project without any pre or post
        release markers.
        rrKr>css|]}t|ƒVqdSr$rLrNrrrr<zr=z'Version.base_version..rP)rrRrSrrTrrrÚbase_versiones

zVersion.base_versioncCs|jdup|jduS)aTWhether this version is a pre-release.

        >>> Version("1.2.3").is_prerelease
        False
        >>> Version("1.2.3a1").is_prerelease
        True
        >>> Version("1.2.3b1").is_prerelease
        True
        >>> Version("1.2.3rc1").is_prerelease
        True
        >>> Version("1.2.3dev1").is_prerelease
        True
        N)rrr&rrrÚ
is_prerelease~szVersion.is_prereleasecCs
|jduS)zªWhether this version is a post-release.

        >>> Version("1.2.3").is_postrelease
        False
        >>> Version("1.2.3.post1").is_postrelease
        True
        N)rr&rrrÚis_postrelease�s	zVersion.is_postreleasecCs
|jduS)z®Whether this version is a development release.

        >>> Version("1.2.3").is_devrelease
        False
        >>> Version("1.2.3.dev1").is_devrelease
        True
        N)rr&rrrÚ
is_devreleasešs	zVersion.is_devreleasecCst|jƒdkr|jdSdS)zqThe first item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").major
        1
        rr©Úlenrr&rrrÚmajor¥sz
Version.majorcCst|jƒdkr|jdSdS)z›The second item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").minor
        2
        >>> Version("1").minor
        0
        érrr_r&rrrÚminor®s	z
Version.minorcCst|jƒdkr|jdSdS)zšThe third item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").micro
        3
        >>> Version("1").micro
        0
        érbrr_r&rrrÚmicro¹s	z
Version.micro)#rrrr ÚreÚcompiler
ÚVERBOSEÚ
IGNORECASEr?ÚCmpKeyr4rMrIrJrVÚpropertyr5rrrrrrrrrZr[r6r\r]r^rarcrerrrrr�sD
&!





)ÚletterÚnumberrcCsv|rZ|durd}| ¡}|dkr&d}n(|dkr4d}n|dvrBd}n|dvrNd	}|t|ƒfS|sr|rrd	}|t|ƒfSdS)
NrZalphaÚaZbetaÚb)ÚcrZpreviewÚrc)ZrevÚrr)Úlowerr5)rlrmrrrrDÅs"rDz[\._-])rrcCs$|dur tdd„t |¡DƒƒSdS)zR
    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
    Ncss&|]}| ¡s| ¡nt|ƒVqdSr$)Úisdigitrsr5)r:Úpartrrrr<ñsÿz'_parse_local_version..)rBÚ_local_version_separatorsrC)rrrrrEìs
þrE)rrrrrrrcCs¤tttt dd„t|ƒ¡ƒƒƒ}|dur>|dur>|dur>t}n|durLt}n|}|dur^t}n|}|durpt}	n|}	|dur‚t}
ntdd„|Dƒƒ}
|||||	|
fS)NcSs|dkS)Nrr)rOrrrÚr=z_cmpkey..css(|] }t|tƒr|dfnt|fVqdS)rPN)r+r5rr9rrrr<0sz_cmpkey..)rBÚreversedÚlistÚ	itertoolsÚ	dropwhilerr	)rrrrrrrXrYZ_postZ_devÚ_localrrrrGøs(ÿ	ÿrG))r ÚcollectionsrzrfÚtypingrrrrrrZ_structuresr	r
rrÚ__all__Z
InfiniteTypesrMr5ZPrePostDevTypeZSubLocalTypeZ	LocalTyperjr6ZVersionComparisonMethodÚ
namedtuplerrÚ
ValueErrorrr!Z_VERSION_PATTERNr
rÚbytesrDrgrvrErGrrrrÚsf 

þÿûÿÿÿÿÿ
0
+þ$



ù