Application Programming Interface (API)
Please see below examples and use the python help command to learn about the API.
Example
❯ python
Python 3.12.4 (main, Jun 23 2024, 15:04:49) [Clang 18.1.7 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import json, logging
>>> import versioalueet.api as vers
>>> version_ranges = vers.VersionRanges('vers:pypi/42')
>>> version_ranges
VersionRanges('vers:pypi/42')
>>> str(version_ranges)
'vers:pypi/42'
>>> print(json.dumps(version_ranges.model, indent=2))
{
"received": "vers:pypi/42",
"uri-scheme": "vers",
"versioning-scheme": "pypi",
"version-constraint-pairs": [
[
"42",
"="
]
],
"vc-unequal-pairs": [],
"vc-other-pairs": [
[
"42",
"="
]
],
"version-constraints": [
"=42"
],
"version-constraints-string-compressed": "42",
"version-range": "vers:pypi/42"
}
>>> version_ranges.normalize('wrong')
2025-01-08T05:56:23.309204+00:00 ERROR [VERSIOALUEET]: version range must start with the URI scheme vers
'ERROR:<version range must start with the URI scheme vers>'
>>> vers.log.setLevel(logging.CRITICAL)
>>> version_ranges.normalize('wrong')
'ERROR:<version range must start with the URI scheme vers>'
>>> print(json.dumps(version_ranges.model, indent=2))
{
"received": "wrong",
"error": "version range must start with the URI scheme vers"
}
>>> version_ranges.normalize('vers:golang/>v0|>=v1|v2|<v3|v4|<v5|>=v6')
'vers:golang/>v0|<v5|>=v6'
>>> print(json.dumps(version_ranges.model, indent=2))
{
"received": "vers:golang/>v0|>=v1|v2|<v3|v4|<v5|>=v6",
"uri-scheme": "vers",
"versioning-scheme": "golang",
"version-constraint-pairs": [
[
"v0",
">"
],
[
"v5",
"<"
],
[
"v6",
">="
]
],
"vc-unequal-pairs": [],
"vc-other-pairs": [
[
"v0",
">"
],
[
"v1",
">="
],
[
"v2",
"="
],
[
"v3",
"<"
],
[
"v4",
"="
],
[
"v5",
"<"
],
[
"v6",
">="
],
[
"v6",
">="
]
],
"version-constraints": [
">v0",
"<v5",
">=v6"
],
"version-constraints-string-compressed": ">v0|<v5|>=v6",
"version-range": "vers:golang/>v0|<v5|>=v6"
}
Another example using the help function on the above imported name vers
in that session:
>>> help(vers)
Help on module versioalueet.api in versioalueet:
NAME
versioalueet.api - Provide the class VersionRanges for operations on version ranges
DESCRIPTION
Use case example:
>>> version_ranges = VersionRanges('vers:pypi/|1.2.3|||||')
>>> assert version_ranges.normalize() == 'vers:pypi/1.2.3'
CLASSES
builtins.object
VersionRanges
class VersionRanges(builtins.object)
| VersionRanges(version_range: str) -> None
|
| Provide operations on version ranges.
|
| Usage examples:
|
| >>> lc_url_encoded = '1%3e2%3c3%3d4%215%2a6%7c7'
| >>> uc_url_encoded = '1%3E2%3C3%3D4%215%2A6%7C7'
| >>> version_decoded = '1>2<3=4!5*6|7'
| >>> triplicated = '|'.join((lc_url_encoded, uc_url_encoded, version_decoded))
| >>> version_ranges = VersionRanges(f'vers:pypi/{triplicated}')
| >>> assert 'unique' in version_ranges.model.get('error', '')
|
| Methods defined here:
|
| __eq__(self, other: object) -> bool
| We define equality per the version ranges.
|
| __hash__(self) -> int
| We define our identity per the version range.
|
| __init__(self, version_range: str) -> None
| Later alligator.
|
| Usage examples:
|
| >>> hidden_emopty_version = 'vers:pypi/|1.2.3|>||||'
| >>> version_ranges = VersionRanges(hidden_emopty_version)
| >>> assert 'empty version detected' in version_ranges.model.get('error', '')
|
| __repr__(self) -> str
| The version ranges string wrapped in constructor.
|
| Usage examples:
|
| >>> maybe_43 = 'vers:pypi/<44|>42'
| >>> version_ranges = VersionRanges(maybe_43)
| >>> assert "VersionRanges('vers:pypi/>42|<44')" == repr(version_ranges)
|
| __str__(self) -> str
| The version ranges string is what we are.
|
| Usage examples:
|
| >>> maybe_43 = 'vers:pypi/<44|>42'
| >>> version_ranges = VersionRanges(maybe_43)
| >>> assert 'vers:pypi/>42|<44' == str(version_ranges)
|
| normalize(self, version_range: Optional[str] = None) -> str
| Normalize version range.
|
| Usage examples:
|
| >>> a_version = 'vers:pypi/|1.2.3||||'
| >>> version_ranges = VersionRanges(a_version)
| >>> assert not version_ranges.model.get('error', '')
| >>> version_ranges.normalize()
| 'vers:pypi/1.2.3'
|
| >>> hidden_emopty_version = 'vers:pypi/|1.2.3|>||||'
| >>> vr = VersionRanges('vers:abc/42')
| >>> vr.normalize(hidden_emopty_version)
| 'ERROR:<empty version detected>'
|
| parse(self, version_range: str) -> tuple[bool, dict[str, typing.Union[str, list[str], list[tuple[str, str]]]]]
| Poor person parser for bootstrap.
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables
|
| __weakref__
| list of weak references to the object
FUNCTIONS
fail(message: str, model: Optional[dict[str, Union[str, list[str], list[tuple[str, str]]]]] = None, debug: bool = False) -> bool
DRY.
Usage examples:
>>> model = {'received': 'no:thing'}
>>> fail('some problem', model=model)
True
>>> model = {'received': 'no:thing'}
>>> fail('some problem', model=model, debug=True)
True
main(options: argparse.Namespace) -> int
DATA
ASTERISK = '*'
COLON = ':'
EQ = '='
GE = '>='
GT = '>'
LE = '<='
LT = '<'
ModelType = dict[str, typing.Union[str, list[str], list[tuple[str, str...
NE = '!='
NOT = '!'
PERCENT = '%'
PIPE = '|'
SLASH = '/'
Union = typing.Union
Union type; Union[X, Y] means either X or Y.
On Python 3.10 and higher, the | operator
can also be used to denote unions;
X | Y means the same thing to the type checker as Union[X, Y].
To define a union, use e.g. Union[int, str]. Details:
- The arguments must be types and there must be at least one.
- None as an argument is a special case and is replaced by
type(None).
- Unions of unions are flattened, e.g.::
assert Union[Union[int, str], float] == Union[int, str, float]
- Unions of a single argument vanish, e.g.::
assert Union[int] == int # The constructor actually returns int
- Redundant arguments are skipped, e.g.::
assert Union[int, str, int] == Union[int, str]
- When comparing unions, the argument order is ignored, e.g.::
assert Union[int, str] == Union[str, int]
- You cannot subclass or instantiate a union.
- You can use Optional[X] as a shorthand for Union[X, None].
VCPairsType = list[tuple[str, str]]
log = <Logger VERSIOALUEET (CRITICAL)>
FILE
/some/install/site-packages/versioalueet/api.py