__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# SPDX-License-Identifier: MIT
from functools import total_ordering
from ._funcs import astuple
from ._make import attrib, attrs
@total_ordering
@attrs(eq=False, order=False, slots=True, frozen=True)
class VersionInfo:
"""
A version object that can be compared to tuple of length 1--4:
>>> attr.VersionInfo(19, 1, 0, "final") <= (19, 2)
True
>>> attr.VersionInfo(19, 1, 0, "final") < (19, 1, 1)
True
>>> vi = attr.VersionInfo(19, 2, 0, "final")
>>> vi < (19, 1, 1)
False
>>> vi < (19,)
False
>>> vi == (19, 2,)
True
>>> vi == (19, 2, 1)
False
.. versionadded:: 19.2
"""
year = attrib(type=int)
minor = attrib(type=int)
micro = attrib(type=int)
releaselevel = attrib(type=str)
@classmethod
def _from_version_string(cls, s):
"""
Parse *s* and return a _VersionInfo.
"""
v = s.split(".")
if len(v) == 3:
v.append("final")
return cls(
year=int(v[0]), minor=int(v[1]), micro=int(v[2]), releaselevel=v[3]
)
def _ensure_tuple(self, other):
"""
Ensure *other* is a tuple of a valid length.
Returns a possibly transformed *other* and ourselves as a tuple of
the same length as *other*.
"""
if self.__class__ is other.__class__:
other = astuple(other)
if not isinstance(other, tuple):
raise NotImplementedError
if not (1 <= len(other) <= 4):
raise NotImplementedError
return astuple(self)[: len(other)], other
def __eq__(self, other):
try:
us, them = self._ensure_tuple(other)
except NotImplementedError:
return NotImplemented
return us == them
def __lt__(self, other):
try:
us, them = self._ensure_tuple(other)
except NotImplementedError:
return NotImplemented
# Since alphabetically "dev0" < "final" < "post1" < "post2", we don't
# have to do anything special with releaselevel for now.
return us < them
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 3.23 KB | 0644 |
|
| __init__.pyi | File | 16.58 KB | 0644 |
|
| _cmp.py | File | 3.93 KB | 0644 |
|
| _cmp.pyi | File | 399 B | 0644 |
|
| _compat.py | File | 2.48 KB | 0644 |
|
| _config.py | File | 843 B | 0644 |
|
| _funcs.py | File | 16.77 KB | 0644 |
|
| _make.py | File | 99.53 KB | 0644 |
|
| _next_gen.py | File | 6.06 KB | 0644 |
|
| _typing_compat.pyi | File | 469 B | 0644 |
|
| _version_info.py | File | 2.07 KB | 0644 |
|
| _version_info.pyi | File | 209 B | 0644 |
|
| converters.py | File | 3.54 KB | 0644 |
|
| converters.pyi | File | 406 B | 0644 |
|
| exceptions.py | File | 1.93 KB | 0644 |
|
| exceptions.pyi | File | 539 B | 0644 |
|
| filters.py | File | 1.44 KB | 0644 |
|
| filters.pyi | File | 225 B | 0644 |
|
| py.typed | File | 0 B | 0644 |
|
| setters.py | File | 1.37 KB | 0644 |
|
| setters.pyi | File | 567 B | 0644 |
|
| validators.py | File | 19.21 KB | 0644 |
|
| validators.pyi | File | 2.52 KB | 0644 |
|