pax_global_header00006660000000000000000000000064150160477710014522gustar00rootroot0000000000000052 comment=7bfe430c2ad577054d2c5ed5d4c00bdc5196a52d awesomeversion-25.5.0/000077500000000000000000000000001501604777100146615ustar00rootroot00000000000000awesomeversion-25.5.0/.codecov.yml000066400000000000000000000004171501604777100171060ustar00rootroot00000000000000comment: false codecov: branch: main coverage: precision: 2 status: patch: off project: default: target: 100% parsers: gcov: branch_detection: conditional: yes loop: yes method: no macro: no ignore: - "tests"awesomeversion-25.5.0/.devcontainer.json000066400000000000000000000020561501604777100203160ustar00rootroot00000000000000{ "name": "AwesomeVersion", "image": "mcr.microsoft.com/vscode/devcontainers/python:0-3.11", "postCreateCommand": "make requirements", "customizations": { "vscode": { "settings": { "python.defaultInterpreterPath": "/usr/local/bin/python", "python.linting.enabled": true, "python.linting.pylintEnabled": true, "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", "python.formatting.blackPath": "/usr/local/py-utils/bin/black", "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint" }, "extensions": [ "ms-python.python", "ms-python.vscode-pylance", "GitHub.copilot" ] } } } awesomeversion-25.5.0/.gitattributes000066400000000000000000000000221501604777100175460ustar00rootroot00000000000000* text=auto eol=lfawesomeversion-25.5.0/.github/000077500000000000000000000000001501604777100162215ustar00rootroot00000000000000awesomeversion-25.5.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001501604777100204045ustar00rootroot00000000000000awesomeversion-25.5.0/.github/ISSUE_TEMPLATE/bug.yml000066400000000000000000000021321501604777100217020ustar00rootroot00000000000000name: "Report a bug with AwesomeVersion" description: Report an issue with AwesomeVersion labels: "bug" body: - type: textarea attributes: label: The problem placeholder: >- Describe the issue you are experiencing here to communicate to the maintainers. Tell us what you were trying to do and what happened. validations: required: true - type: markdown attributes: value: | ## Environment - type: input attributes: label: Operating system validations: required: true - type: dropdown validations: required: true attributes: label: Python version options: - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" - type: textarea validations: required: true attributes: label: Problem-relevant code description: >- A minimal example to reproduce the bug render: python - type: textarea attributes: label: Traceback/Error logs description: >- If you come across any trace or error logs, please provide them. render: txt - type: textarea attributes: label: Additional informationawesomeversion-25.5.0/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000000331501604777100223700ustar00rootroot00000000000000blank_issues_enabled: falseawesomeversion-25.5.0/.github/ISSUE_TEMPLATE/feature_request.yml000066400000000000000000000012241501604777100243310ustar00rootroot00000000000000name: "Feature request for AwesomeVersion" description: Suggest a feature/change to be added to AwesomeVersion labels: "enhancement" body: - type: textarea validations: required: true attributes: label: The idea description: > A good description of what you are suggesting. - type: textarea validations: required: true attributes: label: Implementation description: > How do you see this being implemented? - type: textarea attributes: label: Alternatives description: > Are there any alternative solutions or features you've considered? - type: textarea attributes: label: Additional contextawesomeversion-25.5.0/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000033531501604777100220260ustar00rootroot00000000000000 ## Proposed change ## Type of change - [ ] Dependency upgrade - [ ] Bugfix (non-breaking change which fixes an issue) - [ ] New feature (which adds functionalit) - [ ] Breaking change (fix/feature causing existing functionality to break) - [ ] Code quality improvements to existing code or addition of tests ## Additional information - This PR fixes or closes issue: fixes # - This PR is related to issue: - Link to documentation pull request: ## Checklist - [ ] The code change is tested and works locally. - [ ] Local tests pass. - [ ] There is no commented out code in this PR. - [ ] The code has been formatted using Black (`make lint`) - [ ] Tests have been added to verify that the new code works. awesomeversion-25.5.0/.github/dependabot.yml000066400000000000000000000005341501604777100210530ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: pip directory: "/" schedule: interval: daily time: "06:00" open-pull-requests-limit: 10 - package-ecosystem: "github-actions" directory: "/" schedule: interval: daily time: "06:00" open-pull-requests-limit: 10 groups: artifacts: patterns: - "actions/*-artifact"awesomeversion-25.5.0/.github/release.yml000066400000000000000000000001271501604777100203640ustar00rootroot00000000000000changelog: exclude: labels: - dependencies - repository - test awesomeversion-25.5.0/.github/workflows/000077500000000000000000000000001501604777100202565ustar00rootroot00000000000000awesomeversion-25.5.0/.github/workflows/actions.yml000066400000000000000000000040651501604777100224460ustar00rootroot00000000000000name: Actions on: pull_request: branches: - main push: branches: - main permissions: {} jobs: lint: name: Lint runs-on: ubuntu-latest steps: - name: πŸ“₯ Checkout the repository uses: actions/checkout@v4.2.2 - name: πŸ›  Set up Python 3 uses: actions/setup-python@v5 id: python with: python-version: 3.x - name: πŸ“¦ Install dependencies run: make requirements - name: πŸ–€ Lint with Black run: make black-check - name: 🐍 Lint with mypy run: make mypy - name: ✨ Lint with pylint run: make pylint - name: πŸ”€ Lint with isort run: make isort-check test: name: Test with Python ${{ matrix.entry.version }} needs: lint runs-on: ubuntu-latest strategy: fail-fast: false matrix: entry: - version: "3.9" - version: "3.10" - version: "3.11" - version: "3.12" - version: "3.13" steps: - name: πŸ“₯ Checkout the repository uses: actions/checkout@v4.2.2 - name: πŸ› οΈ Set up Python ${{ matrix.entry.version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.entry.version }} allow-prereleases: ${{ matrix.entry.prereleases || false }} - name: πŸ“¦ Install dependencies run: make requirements - name: πŸƒ Run tests run: make test - name: πŸ›  Build run: make build coverage: name: Upload coverage to Codecov needs: test runs-on: ubuntu-latest steps: - name: πŸ“₯ Checkout the repository uses: actions/checkout@v4.2.2 with: fetch-depth: 0 - name: πŸ› οΈ Set up Python uses: actions/setup-python@v5 with: python-version: 3.x - name: πŸ“¦ Install dependencies run: make requirements - name: πŸ“€ Upload coverage to Codecov run: | make coverage curl -sfSL https://codecov.io/bash | bash -awesomeversion-25.5.0/.github/workflows/codspeed.yml000066400000000000000000000013401501604777100225650ustar00rootroot00000000000000name: CodSpeed on: push: branches: - "main" pull_request: branches: - "main" permissions: {} jobs: benchmarks: name: Run benchmarks runs-on: ubuntu-latest steps: - name: Checkout the repository uses: actions/checkout@v4.2.2 - name: πŸ›  Set up Python 3 uses: actions/setup-python@v5.6.0 id: python with: python-version: 3.x - name: Install dependencies run: make requirements - name: Run benchmarks uses: CodSpeedHQ/action@0010eb0ca6e89b80c88e8edaaa07cfe5f3e6664d # v3.5.0 with: token: ${{ secrets.CODSPEED_TOKEN }} run: poetry run pytest -x --no-cov -vvvvv --codspeed benchmarks awesomeversion-25.5.0/.github/workflows/demo.yml000066400000000000000000000013041501604777100217230ustar00rootroot00000000000000name: Deploy demo on: push: branches: - "main" permissions: {} concurrency: group: "pages" cancel-in-progress: true jobs: deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} permissions: contents: read pages: write id-token: write runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4.2.2 - name: Setup Pages uses: actions/configure-pages@v5.0.0 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: 'demo' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 awesomeversion-25.5.0/.github/workflows/release.yml000066400000000000000000000023611501604777100224230ustar00rootroot00000000000000name: Release on: release: types: - published permissions: {} jobs: build: runs-on: ubuntu-latest name: Build package steps: - name: Checkout the repository uses: actions/checkout@v4.2.2 - name: Set up Python 3.x uses: actions/setup-python@v5 with: python-version: 3.x - name: Install poetry run: make install-poetry - name: Set version number run: | poetry version "${{ github.event.release.tag_name }}" - name: Build run: poetry build --no-interaction - name: Upload dists uses: actions/upload-artifact@v4.6.2 with: name: "dist" path: "dist/" if-no-files-found: error retention-days: 5 publish: name: Publish release to PyPI runs-on: ubuntu-latest needs: "build" environment: name: release url: https://pypi.org/project/awesomeversion permissions: id-token: write steps: - name: Download dists uses: actions/download-artifact@v4.3.0 with: name: "dist" path: "dist/" - name: Publish dists to PyPI uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4awesomeversion-25.5.0/.gitignore000066400000000000000000000001471501604777100166530ustar00rootroot00000000000000__pycache__ __target__ .codspeed .mypy_cache .pytest_cache .coverage coverage.xml dist build *.egg-infoawesomeversion-25.5.0/LICENCE.md000066400000000000000000000020641501604777100162470ustar00rootroot00000000000000MIT License Copyright (c) 2020-2022 Joakim SΓΈrensen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.awesomeversion-25.5.0/Makefile000066400000000000000000000027571501604777100163340ustar00rootroot00000000000000.DEFAULT_GOAL := help help: ## Shows this help message @printf "\033[1m%s\033[36m %s\033[32m %s\033[0m \n\n" "Development environment for" "ludeeus/awesomeversion" ""; @awk 'BEGIN {FS = ":.*##";} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m make %-25s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST); @echo requirements: install-poetry ## Install requirements @poetry install @poetry check install: ## Install awesomeversion @poetry install install-poetry: @curl -sSL https://install.python-poetry.org | python3 - test: ## Run all tests @poetry run pytest --timeout=10 tests -rxf -x -vv -l -s --cov=./ --cov-report=xml build: ## Build the package @poetry build lint: isort black mypy pylint ## Lint all files snapshot-update: ## Update test snapshot files @poetry run pytest tests --snapshot-update --timeout=10 benchmark: @poetry run pytest -x --no-cov -vvvvv benchmarks coverage: ## Check the coverage of the package @poetry run pytest tests --timeout=10 -rxf -x -v -l --cov=./ --cov-report=xml > /dev/null @poetry run coverage report isort: @poetry run isort awesomeversion tests benchmarks isort-check: @poetry run isort awesomeversion tests benchmarks --check-only black: @poetry run black --fast awesomeversion tests benchmarks black-check: @poetry run black --check --fast awesomeversion tests benchmarks mypy: @poetry run mypy --strict awesomeversion tests benchmarks pylint: @poetry run pylint awesomeversion tests benchmarksawesomeversion-25.5.0/README.md000066400000000000000000000173301501604777100161440ustar00rootroot00000000000000# AwesomeVersion [![codecov](https://codecov.io/gh/ludeeus/awesomeversion/branch/main/graph/badge.svg)](https://codecov.io/gh/ludeeus/awesomeversion) ![python version](https://img.shields.io/badge/Python-3.9=><=3.13-blue.svg) ![dependencies](https://img.shields.io/badge/Dependencies-0-blue.svg) [![PyPI](https://img.shields.io/pypi/v/awesomeversion)](https://pypi.org/project/awesomeversion) ![Actions](https://github.com/ludeeus/awesomeversion/workflows/Actions/badge.svg?branch=main) _One version package to rule them all, One version package to find them, One version package to bring them all, and in the darkness bind them._ Make anything a version object, and compare against a vast section of other version formats. ## Installation ```bash python3 -m pip install awesomeversion ``` ## AwesomeVersion class The AwesomeVersion class takes a version as the first argument, you can also pass in additional kwargs to customize the version object. Argument | Description --- | --- `version` | The version string to parse. `ensure_strategy` | Match the `AwesomeVersion` object against spesific strategies when creating if. If it does not match `AwesomeVersionStrategyException` will be raised `find_first_match` | If True, the version given will be scanned for the first match of the given `ensure_strategy`. Raises `AwesomeVersionStrategyException` If it is not found for any of the given strategies. ## AwesomeVersion methods
AwesomeVersion.in_range This is a helper method to check if the version is in a range. This method takes two arguments, `lowest` and `highest`, both are required, and returns a boolean. > **Note** This method is the same as doing `lowest <= AwesomeVersion <= highest` Example: ```python from awesomeversion import AwesomeVersion print(AwesomeVersion("1.2.2").in_range("1.2.1", "1.3")) > True print(AwesomeVersion("1.2.0").in_range("1.2.1", "1.3")) > False ```
AwesomeVersion.diff This is a helper method to get the difference between two versions. This method takes one argument which is the version to compare against, and returns a `AwesomeVersionDiff` object. > **Note** This method is the same as doing `AwesomeVersion - version` Example: ```python from awesomeversion import AwesomeVersion > print(AwesomeVersion("1.0").diff("2.1")) AwesomeVersionDiff(major=True, minor=True, patch=False, modifier=False, strategy=False) ```
AwesomeVersion.section This is a helper method to get a section of the version. This method takes one argument which is the section to get, and returns an integer representing it (or 0 if it does not exist). Example: ```python from awesomeversion import AwesomeVersion > print(AwesomeVersion("1.0").section(0)) 1 ```
## AwesomeVersion properties Argument | Description --- | --- `alpha` | This is a boolean representing if the version is an alpha version. `beta` | This is a boolean representing if the version is a beta version. `dev` | This is a boolean representing if the version is a dev version. `major` | This is an `AwesomeVersion` object representing the major version or `None` if not present. `micro` | This is an `AwesomeVersion` object representing the micro version or `None` if not present. `minor` | This is an `AwesomeVersion` object representing the minor version or `None` if not present. `modifier_type` | This is a string representing the modifier type of the version or `None` if not present. `modifier` | This is a string representing the modifier of the version or `None` if not present. `patch` | This is an `AwesomeVersion` object representing the patch version or `None` if not present. `prefix` | This is the prefix of the version or `None` if not present. `release_candidate` | This is a boolean representing if the version is a release candidate version. `simple` | This is a boolean representing if the version is a simple version. `strategy_description` | This is a `AwesomeVersionStrategyDescription` object representing the strategy description of the version. `strategy` | This is a `AwesomeVersionStrategy` object representing the strategy of the version. `string` | This is the string representation of the version (without the v prefix if present). `valid` | This is a boolean representing if the version is valid (not unknown strategy). `year` | This is alias to `major`, and is an `AwesomeVersion` object representing the year. ## Example usage Here are some examples of how you can use this package, more examples can be found in the `tests` directory.
Basic compare ```python from awesomeversion import AwesomeVersion current = AwesomeVersion("1.2.2") upstream = AwesomeVersion("1.2.3") print(upstream > current) > True ```
Compare beta version ```python from awesomeversion import AwesomeVersion current = AwesomeVersion("2021.1.0") upstream = AwesomeVersion("2021.1.0b2") print(current > upstream) > True ```
Check if version is a beta version ```python from awesomeversion import AwesomeVersion print(AwesomeVersion("1.2.3b0").beta) > True print(AwesomeVersion("1.2.3").beta) > False ```
Use AwesomeVersion with with ... ```python from awesomeversion import AwesomeVersion with AwesomeVersion("20.12.0") as current: with AwesomeVersion("20.12.1") as upstream: print(upstream > current) > True ```
Compare AwesomeVersion with other non-AwesomeVersion formats ```python from awesomeversion import AwesomeVersion base = AwesomeVersion("20.12.0") print(base > "20.12.1") > False print(base > "19") > True print(base > 5) > True ```
## General behavior You can test your versions on the [demo page][awesomeversion_demo]. ### Modifiers When comparing versions with modifiers, if the base version is the same the modifier will be used to determine the order. If one of the versions do not have a modifier, the one without will be considered newer. The order of the modifiers are: - No modifier - RC - Beta - Alpha - Dev
Examples ```python from awesomeversion import AwesomeVersion print(AwesomeVersion("1.0.0") > AwesomeVersion("1.0.0b6")) > True print(AwesomeVersion("1.0.0") > AwesomeVersion("1.0.0.dev6")) > True print(AwesomeVersion("1.0.0.dev19") > AwesomeVersion("1.0.0b4")) > False ```
### Special versions (container) There are some special versions for container that are handled differently than typical version formats. The special versions are in the following order: - `dev` (newest) - `latest` - `beta` - `stable` (oldest) If only the first version is this special version, it will be considered newer. If only the second version is this special version, it will be considered older.
Examples ```python from awesomeversion import AwesomeVersion print(AwesomeVersion("latest") > AwesomeVersion("1.0.0b6")) > True print(AwesomeVersion("1.0.0") > AwesomeVersion("latest")) > False print(AwesomeVersion("stable") > AwesomeVersion("latest")) > False print(AwesomeVersion("beta") > AwesomeVersion("dev")) > False ```
## Contribute **All** contributions are welcome! 1. Fork the repository 2. Clone the repository locally and open the devcontainer or use GitHub codespaces 3. Do your changes 4. Lint the files with `make lint` 5. Ensure all tests passes with `make test` 6. Ensure 100% coverage with `make coverage` 7. Commit your work, and push it to GitHub 8. Create a PR against the `main` branch [awesomeversion_demo]: https://ludeeus.github.io/awesomeversion/awesomeversion-25.5.0/awesomeversion/000077500000000000000000000000001501604777100177275ustar00rootroot00000000000000awesomeversion-25.5.0/awesomeversion/__init__.py000066400000000000000000000010311501604777100220330ustar00rootroot00000000000000"""Initialize the AwesomeVersion package.""" from .awesomeversion import AwesomeVersion, AwesomeVersionDiff from .exceptions import ( AwesomeVersionCompareException, AwesomeVersionException, AwesomeVersionStrategyException, ) from .strategy import COMPARABLE_STRATEGIES, AwesomeVersionStrategy __all__ = [ "AwesomeVersion", "AwesomeVersionCompareException", "AwesomeVersionDiff", "AwesomeVersionException", "AwesomeVersionStrategy", "AwesomeVersionStrategyException", "COMPARABLE_STRATEGIES", ] awesomeversion-25.5.0/awesomeversion/awesomeversion.py000066400000000000000000000420511501604777100233510ustar00rootroot00000000000000"""AwesomeVersion.""" from __future__ import annotations from functools import cached_property from typing import TYPE_CHECKING, Any, Dict from warnings import warn from .comparehandlers.container import compare_handler_container from .comparehandlers.modifier import compare_handler_semver_modifier from .comparehandlers.sections import compare_handler_sections from .comparehandlers.simple import compare_handler_simple from .exceptions import AwesomeVersionCompareException, AwesomeVersionStrategyException from .strategy import ( VERSION_STRATEGIES, VERSION_STRATEGIES_DICT, AwesomeVersionStrategy, AwesomeVersionStrategyDescription, ) from .utils.regex import ( RE_DIGIT, RE_MODIFIER, RE_SIMPLE, compile_regex, generate_full_string_regex, ) if TYPE_CHECKING: from .typing import EnsureStrategyIterableType, EnsureStrategyType, VersionType class AwesomeVersion(str): """ AwesomeVersion class. """ _version: str = "" _modifier: str | None = None _modifier_type: str | None = None _sections: int | None = None _ensure_strategy: EnsureStrategyIterableType = [] def __init__( self, # pylint: disable=unused-argument version: VersionType, *, ensure_strategy: EnsureStrategyType = None, find_first_match: bool = False, **kwargs: Any, ) -> None: """ Initialize AwesomeVersion. **args**: version: The version to create a AwesomeVersion object from **kwargs**: ensure_strategy: Match the AwesomeVersion object against spesific strategies when creating if. If it does not match AwesomeVersionStrategyException will be raised find_first_match: If True, the version given will be scanned for the first match of the given ensure_strategy. Raises AwesomeVersionStrategyException If it is not found for any of the given strategies. """ self._version = ( version._version if isinstance(version, AwesomeVersion) else str(version) ) if isinstance(self._version, str): self._version = self._version.strip() if find_first_match and not ensure_strategy: warn( "Can not use find_first_match without ensure_strategy, " "this is ignored and will start raising an exception in 2025.", stacklevel=2, ) if ensure_strategy is not None: self._ensure_strategy = ensure_strategy = ( ensure_strategy if isinstance(ensure_strategy, (list, tuple)) else [ensure_strategy] ) if AwesomeVersionStrategy.UNKNOWN in ensure_strategy: raise AwesomeVersionStrategyException( f"Can't use {AwesomeVersionStrategy.UNKNOWN.value} as ensure_strategy" ) if find_first_match: for strategy in self._ensure_strategy or []: description = VERSION_STRATEGIES_DICT[strategy] match = compile_regex(description.regex_string).search( self._version ) if match is not None: self._version = match.group(0) break if self.strategy not in ensure_strategy: raise AwesomeVersionStrategyException( f"Strategy {self.strategy.value} does not match " f"{[strategy.value for strategy in ensure_strategy]} for {version}" ) if self._version and self._version[-1] == ".": self._version = self._version[:-1] str.__init__(self._version) def __new__( cls, version: str, *_: Any, **__: Any, ) -> AwesomeVersion: """Create a new AwesomeVersion object.""" return super().__new__(cls, version) def __enter__(self) -> AwesomeVersion: return self def __exit__(self, *_: Any, **__: Any) -> None: pass def __repr__(self) -> str: return f"" def __str__(self) -> str: return str(self._version) def __eq__(self, compareto: VersionType) -> bool: """Check if equals to.""" if isinstance(compareto, (str, float, int)): compareto = AwesomeVersion(compareto) if not isinstance(compareto, AwesomeVersion): raise AwesomeVersionCompareException("Not a valid AwesomeVersion object") return self.string == compareto.string def __lt__(self, compareto: VersionType) -> bool: """Check if less than.""" if isinstance(compareto, (str, float, int)): compareto = AwesomeVersion(compareto) if not isinstance(compareto, AwesomeVersion): raise AwesomeVersionCompareException("Not a valid AwesomeVersion object") if self.string == compareto.string: return False if AwesomeVersionStrategy.UNKNOWN in (self.strategy, compareto.strategy): raise AwesomeVersionCompareException( f"Can't compare <{self.strategy.value} {self._version}> and " f"<{compareto.strategy.value} {compareto._version}>" ) return self._compare_versions(compareto, self) def __gt__(self, compareto: VersionType) -> bool: """Check if greater than.""" if isinstance(compareto, (str, float, int)): compareto = AwesomeVersion(compareto) if not isinstance(compareto, AwesomeVersion): raise AwesomeVersionCompareException("Not a valid AwesomeVersion object") if self.string == compareto.string: return False if AwesomeVersionStrategy.UNKNOWN in (self.strategy, compareto.strategy): raise AwesomeVersionCompareException( f"Can't compare <{self.strategy.value} {self._version}> and " f"<{compareto.strategy.value} {compareto._version}>" ) return self._compare_versions(self, compareto) def __ne__(self, compareto: object) -> bool: return not self.__eq__(compareto) def __le__(self, compareto: object) -> bool: return self.__eq__(compareto) or self.__lt__(compareto) def __ge__(self, compareto: object) -> bool: return self.__eq__(compareto) or self.__gt__(compareto) def __sub__(self, compareto: object) -> AwesomeVersionDiff: return self.diff(compareto) def __hash__(self) -> int: return str.__hash__(self.string) def diff(self, compareto: VersionType) -> AwesomeVersionDiff: """Return a dictionary with differences between 2 AwesomeVersion objects.""" if isinstance(compareto, (str, float, int)): compareto = AwesomeVersion(compareto) if not isinstance(compareto, AwesomeVersion): raise AwesomeVersionCompareException("Not a valid AwesomeVersion object") return AwesomeVersionDiff( { "major": str(self.major) != str(compareto.major), "minor": str(self.minor) != str(compareto.minor), "patch": str(self.patch) != str(compareto.patch), "modifier": self.modifier != compareto.modifier, "strategy": self.strategy != compareto.strategy, } ) def in_range(self, lowest: VersionType, highest: VersionType) -> bool: """Check if version is in range.""" if isinstance(lowest, (str, float, int)): lowest = AwesomeVersion(lowest) if isinstance(highest, (str, float, int)): highest = AwesomeVersion(highest) if not isinstance(lowest, AwesomeVersion): raise AwesomeVersionCompareException("Lowest version is not valid") if not isinstance(highest, AwesomeVersion): raise AwesomeVersionCompareException("Highest version is not valid") return lowest <= self <= highest def section(self, idx: int) -> int: """Return the value of the specified section of the version.""" if self.strategy == AwesomeVersionStrategy.HEXVER: return int(self.string, 16) if idx == 0 else 0 if self.sections >= (idx + 1): match = RE_DIGIT.match(self.string.split(".")[idx] or "") if match and match.groups(): return int(match.group(1) or 0) return 0 @staticmethod def _compare_versions(version_a: AwesomeVersion, version_b: AwesomeVersion) -> bool: """Compare versions.""" for handler in ( compare_handler_container, compare_handler_simple, compare_handler_sections, compare_handler_semver_modifier, ): result = handler(version_a, version_b) if result is not None: return result return False @property def string(self) -> str: """Return a string representation of the version.""" if not self._version: return self._version prefix = self.prefix if prefix is None: return self._version return self._version[len(prefix) :] @cached_property def prefix(self) -> str | None: """Return the version prefix if any""" version = self._version for prefix in ("v", "V", "v.", "V."): if version.startswith(prefix): return prefix return None @property def alpha(self) -> bool: """Return a bool to indicate alpha version.""" return "a" in self.modifier if self.modifier else False @property def beta(self) -> bool: """Return a bool to indicate beta version.""" return "b" in self.modifier if self.modifier else "beta" in self.string @property def dev(self) -> bool: """Return a bool to indicate dev version.""" return "d" in self.modifier if self.modifier else "dev" in self.string @property def release_candidate(self) -> bool: """Return a bool to indicate release candidate version.""" return "rc" in self.modifier if self.modifier else "rc" in self.string @property def sections(self) -> int: """Return a int representation of the number of sections in the version.""" if self._sections is not None: return self._sections if self.strategy == AwesomeVersionStrategy.SEMVER: self._sections = 3 else: modifier = self.modifier self._sections = len( [ section.split(self.modifier_type)[-1] for section in self.string.split(".") if section and (modifier is None or section != modifier) ] ) return self._sections @cached_property def major(self) -> AwesomeVersion | None: """ Return a AwesomeVersion representation of the major version. Will return None if the versions is not semver/buildver/calver/simplever/pep440. """ if self.strategy not in ( AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.BUILDVER, AwesomeVersionStrategy.CALVER, AwesomeVersionStrategy.SIMPLEVER, AwesomeVersionStrategy.PEP440, ): return None return AwesomeVersion(self.section(0)) @cached_property def minor(self) -> AwesomeVersion | None: """ Return a AwesomeVersion representation of the minor version. Will return None if the versions is not semver/simplever/calver/pep440 Will return None if the version does not have at least 2 sections. """ if ( self.strategy not in ( AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.CALVER, AwesomeVersionStrategy.SIMPLEVER, AwesomeVersionStrategy.PEP440, ) or self.sections < 2 ): return None return AwesomeVersion(self.section(1)) @cached_property def patch(self) -> AwesomeVersion | None: """ Return a AwesomeVersion representation of the patch version. Will return None if the versions is not semver/simplever/calver/pep440 Will return None if the version does not have at least 3 sections. """ if ( self.strategy not in ( AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.CALVER, AwesomeVersionStrategy.SIMPLEVER, AwesomeVersionStrategy.PEP440, ) or self.sections < 3 ): return None return AwesomeVersion(self.section(2)) @property def micro(self) -> AwesomeVersion | None: """Alias to self.patch""" return self.patch @property def year(self) -> AwesomeVersion | None: """Alias to self.major, here to provide a better name for use in CalVer.""" return self.major @property def valid(self) -> bool: """Return True if the version is not UNKNOWN.""" return self.strategy != AwesomeVersionStrategy.UNKNOWN @property def modifier(self) -> str | None: """Return the modifier of the version if any.""" if self._modifier is not None: return self._modifier if self.strategy in ( AwesomeVersionStrategy.SPECIALCONTAINER, AwesomeVersionStrategy.HEXVER, ): return None modifier_string = None if ( self.strategy_description is not None and self.strategy_description.strategy == AwesomeVersionStrategy.SEMVER ): match = self.strategy_description.pattern.match(self.string) if match and len(match.groups()) >= 4: self._modifier = modifier_string = match.group(4) else: modifier_string = self.string.split(".")[-1] if not modifier_string: return None match = RE_MODIFIER.match(modifier_string) if match and len(match.groups()) >= 2: self._modifier = match.group(2) return self._modifier @property def modifier_type(self) -> str | None: """Return the modifier type of the version if any.""" if self._modifier_type is not None: return self._modifier_type if self.strategy == AwesomeVersionStrategy.HEXVER: return None match = RE_MODIFIER.match(self.modifier or "") if match and len(match.groups()) >= 3: self._modifier_type = match.group(3) return self._modifier_type @property def strategy_description(self) -> AwesomeVersionStrategyDescription | None: """Return a string representation of the strategy.""" if self.strategy == AwesomeVersionStrategy.UNKNOWN: return None return VERSION_STRATEGIES_DICT[self.strategy] @cached_property def strategy(self) -> AwesomeVersionStrategy: """Return the version strategy.""" version_strategies: dict[ AwesomeVersionStrategy, AwesomeVersionStrategyDescription ] = {} for strategy in self._ensure_strategy or []: version_strategies[strategy] = VERSION_STRATEGIES_DICT[strategy] for description in VERSION_STRATEGIES: if description.strategy not in version_strategies: version_strategies[description.strategy] = description for description in version_strategies.values(): if description.pattern.match(self.string) is not None and ( description.validate is None or description.validate(self.string) ): return description.strategy return AwesomeVersionStrategy.UNKNOWN @cached_property def simple(self) -> bool: """Return True if the version string is simple.""" return generate_full_string_regex(RE_SIMPLE).match(self.string) is not None class AwesomeVersionDiff: """Structured output of AwesomeVersion.diff""" def __init__(self, changes: Dict[str, bool]) -> None: """Initialize the AwesomeVersionDiff.""" self._changes = changes def __repr__(self) -> str: return ( f"AwesomeVersionDiff(major={self.major}, minor={self.minor}, " f"patch={self.patch}, modifier={self.modifier}, strategy={self.strategy})" ) @property def major(self) -> bool: """Return True if the major version has changed.""" return self._changes["major"] @property def minor(self) -> bool: """Return True if the minor version has changed.""" return self._changes["minor"] @property def patch(self) -> bool: """Return True if the patch version has changed.""" return self._changes["patch"] @property def modifier(self) -> bool: """Return True if the modifier version has changed.""" return self._changes["modifier"] @property def strategy(self) -> bool: """Return True if the strategy has changed.""" return self._changes["strategy"] awesomeversion-25.5.0/awesomeversion/comparehandlers/000077500000000000000000000000001501604777100230765ustar00rootroot00000000000000awesomeversion-25.5.0/awesomeversion/comparehandlers/__init__.py000066400000000000000000000000711501604777100252050ustar00rootroot00000000000000"""Initialize the comparehandlers for AwesomeVersion.""" awesomeversion-25.5.0/awesomeversion/comparehandlers/container.py000066400000000000000000000015221501604777100254320ustar00rootroot00000000000000"""Special handler for container.""" from __future__ import annotations from typing import TYPE_CHECKING from ..strategy import AwesomeVersionStrategy CONTAINER_VERSION_MAP = {"stable": 1, "beta": 2, "latest": 3, "dev": 4} if TYPE_CHECKING: from awesomeversion import AwesomeVersion def compare_handler_container( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare handler container.""" if version_a.strategy == AwesomeVersionStrategy.SPECIALCONTAINER: if version_b.strategy != AwesomeVersionStrategy.SPECIALCONTAINER: return True return ( CONTAINER_VERSION_MAP[version_a.string] > CONTAINER_VERSION_MAP[version_b.string] ) if version_b.strategy == AwesomeVersionStrategy.SPECIALCONTAINER: return False return None awesomeversion-25.5.0/awesomeversion/comparehandlers/modifier.py000066400000000000000000000034541501604777100252540ustar00rootroot00000000000000"""Special handler for modifier.""" from __future__ import annotations from typing import TYPE_CHECKING from ..strategy import VERSION_STRATEGIES_DICT, AwesomeVersionStrategy from ..utils.regex import RE_MODIFIER SEMVER_MODIFIER_MAP = {"dev": 0, "alpha": 1, "beta": 2, "rc": 3} if TYPE_CHECKING: from awesomeversion import AwesomeVersion def compare_handler_semver_modifier( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare handler sections.""" if AwesomeVersionStrategy.SEMVER not in ( version_a.strategy, version_b.strategy, ) or (version_a.modifier_type is None or version_b.modifier_type is None): return None if version_a.modifier_type != version_b.modifier_type: mod_a = SEMVER_MODIFIER_MAP.get(version_a.modifier_type) mod_b = SEMVER_MODIFIER_MAP.get(version_b.modifier_type) if mod_a is not None and mod_b is not None: return mod_a > mod_b ver_a_modifier, ver_b_modifier = None, None semver_pattern = VERSION_STRATEGIES_DICT[AwesomeVersionStrategy.SEMVER].pattern semver_match = semver_pattern.match(version_a.string) if semver_match and len(semver_match.groups()) >= 4: modifier_match = RE_MODIFIER.match(semver_match.group(4)) if modifier_match and len(modifier_match.groups()) >= 4: ver_a_modifier = modifier_match.group(4) semver_match = semver_pattern.match(version_b.string) if semver_match and len(semver_match.groups()) >= 4: modifier_match = RE_MODIFIER.match(semver_match.group(4)) if modifier_match and len(modifier_match.groups()) >= 4: ver_b_modifier = modifier_match.group(4) if not ver_a_modifier or not ver_b_modifier: return True return int(ver_a_modifier) > int(ver_b_modifier) awesomeversion-25.5.0/awesomeversion/comparehandlers/sections.py000066400000000000000000000047761501604777100253150ustar00rootroot00000000000000"""Special handler for sections.""" from __future__ import annotations from typing import TYPE_CHECKING from ..utils.regex import RE_IS_SINGLE_DIGIT, RE_MODIFIER if TYPE_CHECKING: from ..awesomeversion import AwesomeVersion MODIFIERS = {"rc": 3, "beta": 2, "b": 2, "alpha": 1, "a": 1, "dev": 0, "d": 0} def compare_handler_sections( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare handler sections.""" base = compare_base_sections(version_a, version_b) if base is not None: return base return compare_modifier_section(version_a, version_b) def compare_base_sections( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare base sections between two AwesomeVersion objects.""" biggest = ( version_a.sections if version_a.sections >= version_b.sections else version_b.sections ) for section in range(0, biggest): ver_a_section = version_a.section(section) ver_b_section = version_b.section(section) if ver_a_section == ver_b_section: continue if ver_a_section > ver_b_section: return True if ver_a_section < ver_b_section: return False return None def compare_modifier_section( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare modifiers between two AwesomeVersion objects.""" if version_a.modifier is None and version_b.modifier is not None: return True if version_a.modifier is not None and version_b.modifier is not None: version_a_modifier = RE_MODIFIER.match(version_a.string.split(".")[-1]) version_b_modifier = RE_MODIFIER.match(version_b.string.split(".")[-1]) if version_a_modifier and version_b_modifier: if version_a_modifier.group(3) == version_b_modifier.group(3): return int(version_a_modifier.group(4) or 0) > int( version_b_modifier.group(4) or 0 ) mod_a = MODIFIERS.get(version_a_modifier.group(3)) mod_b = MODIFIERS.get(version_b_modifier.group(3)) if mod_a is not None and mod_b is not None: return mod_a > mod_b return version_a_modifier.group(3) > version_a_modifier.group(3) if RE_IS_SINGLE_DIGIT.match(version_a.modifier) and RE_IS_SINGLE_DIGIT.match( version_b.modifier ): return int(version_a.modifier) > int(version_b.modifier) return None awesomeversion-25.5.0/awesomeversion/comparehandlers/simple.py000066400000000000000000000007371501604777100247500ustar00rootroot00000000000000"""Special handler for simple.""" from __future__ import annotations from typing import TYPE_CHECKING from .sections import compare_base_sections if TYPE_CHECKING: from awesomeversion import AwesomeVersion def compare_handler_simple( version_a: AwesomeVersion, version_b: AwesomeVersion, ) -> bool | None: """Compare handler simple.""" if version_a.simple and version_b.simple: return compare_base_sections(version_a, version_b) return None awesomeversion-25.5.0/awesomeversion/exceptions.py000066400000000000000000000005501501604777100224620ustar00rootroot00000000000000"""Exceptions for AwesomeVersion.""" class AwesomeVersionException(Exception): """Base AwesomeVersion exception.""" class AwesomeVersionCompareException(AwesomeVersionException): """Thrown when compare is not possible.""" class AwesomeVersionStrategyException(AwesomeVersionException): """Thrown when the expected strategy does not match.""" awesomeversion-25.5.0/awesomeversion/py.typed000066400000000000000000000000001501604777100214140ustar00rootroot00000000000000awesomeversion-25.5.0/awesomeversion/strategy.py000066400000000000000000000052231501604777100221450ustar00rootroot00000000000000"""Strategies for AwesomeVersion.""" from __future__ import annotations from collections.abc import Callable from dataclasses import dataclass from enum import Enum from typing import Pattern, Tuple from .utils.regex import ( RE_BUILDVER, RE_CALVER, RE_HEXVER, RE_PEP440, RE_SEMVER, RE_SIMPLE, RE_SPECIAL_CONTAINER, generate_full_string_regex, ) from .utils.validate import value_is_base16 class AwesomeVersionStrategy(str, Enum): """Strategy enum.""" BUILDVER = "BuildVer" CALVER = "CalVer" HEXVER = "HexVer" SEMVER = "SemVer" SIMPLEVER = "SimpleVer" PEP440 = "PEP 440" UNKNOWN = "unknown" SPECIALCONTAINER = "SpecialContainer" @dataclass class AwesomeVersionStrategyDescription: """Description of a strategy.""" strategy: AwesomeVersionStrategy regex_string: str pattern: Pattern[str] validate: Callable[[str], bool] | None = None COMPARABLE_STRATEGIES = [ strategy for strategy in AwesomeVersionStrategy if strategy not in (AwesomeVersionStrategy.UNKNOWN, AwesomeVersionStrategy.SPECIALCONTAINER) ] VERSION_STRATEGIES: Tuple[AwesomeVersionStrategyDescription, ...] = ( AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.BUILDVER, regex_string=RE_BUILDVER, pattern=generate_full_string_regex(RE_BUILDVER), ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.CALVER, regex_string=RE_CALVER, pattern=generate_full_string_regex(RE_CALVER), ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.HEXVER, regex_string=RE_HEXVER, pattern=generate_full_string_regex(RE_HEXVER), validate=value_is_base16, ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.SEMVER, regex_string=RE_SEMVER, pattern=generate_full_string_regex(RE_SEMVER), ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.SPECIALCONTAINER, regex_string=RE_SPECIAL_CONTAINER, pattern=generate_full_string_regex(RE_SPECIAL_CONTAINER), ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.SIMPLEVER, regex_string=RE_SIMPLE, pattern=generate_full_string_regex(RE_SIMPLE), ), AwesomeVersionStrategyDescription( strategy=AwesomeVersionStrategy.PEP440, regex_string=RE_PEP440, pattern=generate_full_string_regex(RE_PEP440), ), ) VERSION_STRATEGIES_DICT: dict[ AwesomeVersionStrategy, AwesomeVersionStrategyDescription ] = {description.strategy: description for description in VERSION_STRATEGIES} awesomeversion-25.5.0/awesomeversion/typing.py000066400000000000000000000007631501604777100216210ustar00rootroot00000000000000"""Custom types for AwesomeVersion.""" from __future__ import annotations from typing import TYPE_CHECKING, List, Tuple, Union from .strategy import AwesomeVersionStrategy if TYPE_CHECKING: from .awesomeversion import AwesomeVersion VersionType = Union[str, float, int, object, "AwesomeVersion"] EnsureStrategyIterableType = Union[ List[AwesomeVersionStrategy], Tuple[AwesomeVersionStrategy, ...] ] EnsureStrategyType = Union[AwesomeVersionStrategy, EnsureStrategyIterableType, None] awesomeversion-25.5.0/awesomeversion/utils/000077500000000000000000000000001501604777100210675ustar00rootroot00000000000000awesomeversion-25.5.0/awesomeversion/utils/__init__.py000066400000000000000000000000001501604777100231660ustar00rootroot00000000000000awesomeversion-25.5.0/awesomeversion/utils/regex.py000066400000000000000000000025331501604777100225560ustar00rootroot00000000000000"""Regex utils for AwesomeVersion.""" import re from typing import Pattern # General purpose patterns RE_IS_SINGLE_DIGIT = re.compile(r"^\d{1}$") RE_DIGIT = re.compile(r"[a-z]*(\d+)[a-z]*") RE_MODIFIER = re.compile(r"^((?:\d+\-|\d|))(([a-z]+)\.?(\d*))$") # Version patterns RE_CALVER = r"(\d{2}|\d{4})\.\d{1,2}?(\.?\d{1,2}?\.?)?(\.\d)?(\d*(\w+\d+)?)" RE_SEMVER = ( r"(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)" r"(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?" ) RE_PEP440 = ( r"([1-9][0-9]*!)?(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))*" # Main segment r"([-_\.]?(alpha|beta|c|pre|preview|a|b|rc)(0|[1-9][0-9]*))?" # Pre-release segment r"([-_\.]?(post|r|rev)(0|[1-9][0-9]*))?" # Post-release segment r"([-_\.]?(d|dev)(0|[1-9][0-9]*))?" # Development release segment r"(?:\+([a-z0-9]+(?:[-_\.][a-z0-9]+)*))?" # Local version segment ) RE_BUILDVER = r"\d+" RE_HEXVER = r"0x[A-Fa-f0-9]+" RE_SPECIAL_CONTAINER = r"(latest|dev|stable|beta)" RE_SIMPLE = r"[v|V]?((\d+)(\.\d+)+)" def compile_regex(pattern: str) -> Pattern[str]: """Compile a regex.""" return re.compile(pattern) def generate_full_string_regex(string: str) -> Pattern[str]: """Generate a regex that matches the full string.""" return compile_regex(r"^" + string + r"$") awesomeversion-25.5.0/awesomeversion/utils/validate.py000066400000000000000000000003061501604777100232310ustar00rootroot00000000000000"""Utils to validate.""" def value_is_base16(value: str) -> bool: """Check if a value is base16.""" try: int(value, 16) except ValueError: return False return True awesomeversion-25.5.0/benchmarks/000077500000000000000000000000001501604777100167765ustar00rootroot00000000000000awesomeversion-25.5.0/benchmarks/__init__.py000066400000000000000000000000371501604777100211070ustar00rootroot00000000000000"""Init benchmarks package.""" awesomeversion-25.5.0/benchmarks/const.py000066400000000000000000000000611501604777100204730ustar00rootroot00000000000000"""Benchmark constants.""" DEFAULT_RUNS = 1_000 awesomeversion-25.5.0/benchmarks/test_compare.py000066400000000000000000000026431501604777100220420ustar00rootroot00000000000000"""Compare benchmarks for AwesomeVersion.""" import pytest from pytest_codspeed import BenchmarkFixture from awesomeversion import AwesomeVersion from .const import DEFAULT_RUNS @pytest.mark.parametrize( "input_a,operator, input_b", ( pytest.param("9999", ">", "1", id="9999>1"), pytest.param("9999", ">", "2020.1.1", id="9999>2020.1.1"), pytest.param("1.2.3b6", ">", "1.2.3.dev4", id="1.2.3b6>1.2.3.dev4"), pytest.param("1.2.3", "==", "1.2.3", id="1.2.3==1.2.3"), pytest.param("1.2.3", "!=", "3.2.1", id="1.2.3!=3.2.1"), ), ) def test_compare( benchmark: BenchmarkFixture, input_a: str, operator: str, input_b: str, ) -> None: """Benchmark for AwesomeVersion comparison.""" obj = AwesomeVersion(input_a) if operator == ">": @benchmark def _run_benchmark() -> None: for _ in range(DEFAULT_RUNS): assert obj > input_b elif operator == "<": @benchmark def _run_benchmark() -> None: for _ in range(DEFAULT_RUNS): assert obj < input_b elif operator == "==": @benchmark def _run_benchmark() -> None: for _ in range(DEFAULT_RUNS): assert obj == input_b elif operator == "!=": @benchmark def _run_benchmark() -> None: for _ in range(DEFAULT_RUNS): assert obj != input_b awesomeversion-25.5.0/benchmarks/test_constructor.py000066400000000000000000000023361501604777100230000ustar00rootroot00000000000000"""Constructor benchmarks for AwesomeVersion.""" from __future__ import annotations from typing import Any import pytest from awesomeversion import AwesomeVersion, AwesomeVersionStrategy from .const import DEFAULT_RUNS semver_first = { "ensure_strategy": AwesomeVersionStrategy.SEMVER, "find_first_match": True, } @pytest.mark.benchmark @pytest.mark.parametrize( "version,constructor_kv", [ pytest.param("9999", {}, id="9999-default"), pytest.param("v1.2.3", {}, id="v1.2.3-default"), pytest.param( "lorem_ipsum1.2.3", semver_first, id="lorem_ipsum1.2.3-semver-first", ), pytest.param("dev", {}, id="dev-default"), pytest.param(1, {}, id="1-as-int-default"), pytest.param("1", {}, id="1-as-str-default"), pytest.param(3.14, {}, id="3.14-as-float-default"), pytest.param( "1.2.3", semver_first, id="1.2.3-semver-first", ), ], ) def test_constructor( version: str | int | float, constructor_kv: dict[str, Any] ) -> None: """Benchmark for AwesomeVersion constructor.""" for _ in range(DEFAULT_RUNS): assert AwesomeVersion(version, **constructor_kv) awesomeversion-25.5.0/benchmarks/test_properties.py000066400000000000000000000025151501604777100226060ustar00rootroot00000000000000"""Property benchmarks for AwesomeVersion.""" from __future__ import annotations import pytest from pytest_codspeed import BenchmarkFixture from awesomeversion import AwesomeVersion, AwesomeVersionStrategy from .const import DEFAULT_RUNS semver_first = { "ensure_strategy": AwesomeVersionStrategy.SEMVER, "find_first_match": True, } @pytest.mark.parametrize( "version,class_property", ( *[(version, "prefix") for version in ("v1.2.3", "v.1.2.3", "1.2.3")], *[(version, "modifier") for version in ("1.2.3-dev2", "1.2.3dev2")], *[(version, "modifier_type") for version in ("1.2.3.dev0", "1.2.3.beta0")], *[(version, "strategy") for version in ("1.2.3", "2099.1.1", "999")], *[ (version, "strategy_description") for version in ("1.2.3", "2099.1.1", "999") ], *[ (version, segment) for version in ("1.2.3", "123", "0.1.2.3") for segment in ("major", "minor", "patch") ], ), ) def test_property( benchmark: BenchmarkFixture, version: str | int | float, class_property: str, ) -> None: """Benchmark for AwesomeVersion properties.""" obj = AwesomeVersion(version) @benchmark def _run_benchmark() -> None: for _ in range(DEFAULT_RUNS): getattr(obj, class_property) awesomeversion-25.5.0/demo/000077500000000000000000000000001501604777100156055ustar00rootroot00000000000000awesomeversion-25.5.0/demo/index.html000066400000000000000000000145551501604777100176140ustar00rootroot00000000000000 AwesomeVersion Demo { "packages": ["awesomeversion"] } from awesomeversion import AwesomeVersion import json def _diff(versions: dict[str, AwesomeVersion]): return json.dumps( { f"{versions['a'].string}>{versions['b'].string}": safe_compare( versions["a"], versions["b"] ), f"{versions['b'].string}>{versions['a'].string}": safe_compare( versions["b"], versions["a"] ), "diff": { "major": versions["a"].major != versions["b"].major, "minor": versions["a"].minor != versions["b"].minor, "patch": versions["a"].patch != versions["b"].patch, "modifier": versions["a"].modifier != versions["b"].modifier, "strategy": versions["a"].strategy != versions["b"].strategy, }, }, indent=2, ) def safe_compare(a, b): try: return a > b except Exception: return None def version_json(version): return json.dumps( { "string": version.string, "alpha": version.alpha, "beta": version.beta, "dev": version.dev, "major": version.major, "micro": version.micro, "minor": version.minor, "modifier_type": version.modifier_type, "modifier": version.modifier, "patch": version.patch, "prefix": version.prefix, "release_candidate": version.release_candidate, "sections": version.sections, "simple": version.simple, "strategy": version.strategy, "valid": version.valid, "year": version.year, }, indent=2, ) def extract_awesomeversion_properties(*args, **kwargs): versions = { "a": AwesomeVersion(Element("version-input-a").element.value.strip() or None), "b": AwesomeVersion(Element("version-input-b").element.value.strip() or None), } for key, version in versions.items(): if version.string == "None": Element(f"properties-output-{key}").element.innerText = "" Element("properties-output-diff").element.innerText = "" continue Element( f"properties-output-{key}" ).element.innerText = ( f"Version {key.upper()} properties:\n{version_json(version)}" ) if versions["a"].string == "None" or versions["b"].string == "None": Element("properties-output-diff").element.innerText = "" return if "unknown" not in (versions["a"].strategy, versions["b"].strategy): Element("properties-output-diff").element.innerText = f"Compare:\n{_diff(versions)}" else: Element("properties-output-diff").element.innerText = "Not valid for compare"
Version A
Version B

    

    

  
awesomeversion-25.5.0/poetry.lock000066400000000000000000001527221501604777100170660ustar00rootroot00000000000000# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "astroid" version = "3.3.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" groups = ["dev"] files = [ {file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"}, {file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"}, ] [package.dependencies] typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "black" version = "25.1.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "cffi" version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] pycparser = "*" [[package]] name = "click" version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "coverage" version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "dill" version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "exceptiongroup" version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] test = ["pytest (>=6)"] [[package]] name = "importlib-metadata" version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["dev"] markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, ] [package.dependencies] zipp = ">=3.20" [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "isort" version = "6.0.1" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.9.0" groups = ["dev"] files = [ {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, ] [package.extras] colors = ["colorama"] plugins = ["setuptools"] [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark"] code-style = ["pre-commit (>=3.0,<4.0)"] compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] [[package]] name = "mypy" version = "1.15.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] mypy_extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] name = "pycparser" version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pygments" version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" version = "3.3.7" description = "python code static checker" optional = false python-versions = ">=3.9.0" groups = ["dev"] files = [ {file = "pylint-3.3.7-py3-none-any.whl", hash = "sha256:43860aafefce92fca4cf6b61fe199cdc5ae54ea28f9bf4cd49de267b5195803d"}, {file = "pylint-3.3.7.tar.gz", hash = "sha256:2b11de8bde49f9c5059452e0c310c079c746a0a8eeaa789e5aa966ecc23e4559"}, ] [package.dependencies] astroid = ">=3.3.8,<=3.4.0.dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13 || >5.13,<7" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2" tomli = {version = ">=1.1", markers = "python_version < \"3.11\""} tomlkit = ">=0.10.1" typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} [package.extras] spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] [[package]] name = "pytest" version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-codspeed" version = "3.2.0" description = "Pytest plugin to create CodSpeed benchmarks" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_codspeed-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c5165774424c7ab8db7e7acdb539763a0e5657996effefdf0664d7fd95158d34"}, {file = "pytest_codspeed-3.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bd55f92d772592c04a55209950c50880413ae46876e66bd349ef157075ca26c"}, {file = "pytest_codspeed-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf6f56067538f4892baa8d7ab5ef4e45bb59033be1ef18759a2c7fc55b32035"}, {file = "pytest_codspeed-3.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39a687b05c3d145642061b45ea78e47e12f13ce510104d1a2cda00eee0e36f58"}, {file = "pytest_codspeed-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46a1afaaa1ac4c2ca5b0700d31ac46d80a27612961d031067d73c6ccbd8d3c2b"}, {file = "pytest_codspeed-3.2.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c48ce3af3dfa78413ed3d69d1924043aa1519048dbff46edccf8f35a25dab3c2"}, {file = "pytest_codspeed-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:66692506d33453df48b36a84703448cb8b22953eea51f03fbb2eb758dc2bdc4f"}, {file = "pytest_codspeed-3.2.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:479774f80d0bdfafa16112700df4dbd31bf2a6757fac74795fd79c0a7b3c389b"}, {file = "pytest_codspeed-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:109f9f4dd1088019c3b3f887d003b7d65f98a7736ca1d457884f5aa293e8e81c"}, {file = "pytest_codspeed-3.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2f69a03b52c9bb041aec1b8ee54b7b6c37a6d0a948786effa4c71157765b6da"}, {file = "pytest_codspeed-3.2.0-py3-none-any.whl", hash = "sha256:54b5c2e986d6a28e7b0af11d610ea57bd5531cec8326abe486f1b55b09d91c39"}, {file = "pytest_codspeed-3.2.0.tar.gz", hash = "sha256:f9d1b1a3b2c69cdc0490a1e8b1ced44bffbd0e8e21d81a7160cfdd923f6e8155"}, ] [package.dependencies] cffi = ">=1.17.1" importlib-metadata = {version = ">=8.5.0", markers = "python_version < \"3.10\""} pytest = ">=3.8" rich = ">=13.8.1" [package.extras] compat = ["pytest-benchmark (>=5.0.0,<5.1.0)", "pytest-xdist (>=3.6.1,<3.7.0)"] lint = ["mypy (>=1.11.2,<1.12.0)", "ruff (>=0.6.5,<0.7.0)"] test = ["pytest (>=7.0,<8.0)", "pytest-cov (>=4.0.0,<4.1.0)"] [[package]] name = "pytest-cov" version = "6.1.1" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, ] [package.dependencies] coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-snapshot" version = "0.9.0" description = "A plugin for snapshot testing with pytest." optional = false python-versions = ">=3.5" groups = ["dev"] files = [ {file = "pytest-snapshot-0.9.0.tar.gz", hash = "sha256:c7013c3abc3e860f9feff899f8b4debe3708650d8d8242a61bf2625ff64db7f3"}, {file = "pytest_snapshot-0.9.0-py3-none-any.whl", hash = "sha256:4b9fe1c21c868fe53a545e4e3184d36bc1c88946e3f5c1d9dd676962a9b3d4ab"}, ] [package.dependencies] pytest = ">=3.0.0" [[package]] name = "pytest-timeout" version = "2.4.0" description = "pytest plugin to abort hanging tests" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2"}, {file = "pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a"}, ] [package.dependencies] pytest = ">=7.0.0" [[package]] name = "rich" version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" groups = ["dev"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "tomli" version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "zipp" version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["dev"] markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = "^3.9" content-hash = "53f12e81a5a78d8b379cb74765e346a0294c2263f492a0d973c39d08d1fb8ee6" awesomeversion-25.5.0/pyproject.toml000066400000000000000000000026231501604777100176000ustar00rootroot00000000000000[build-system] build-backend = "poetry.core.masonry.api" requires = ["poetry-core>=1.0.0"] [tool.poetry] authors = ["Ludeeus "] classifiers = [ "Intended Audience :: Developers", "Natural Language :: English", "Topic :: Software Development :: Libraries :: Python Modules", ] description = "One version package to rule them all, One version package to find them, One version package to bring them all, and in the darkness bind them." exclude = ['**/__pycache__'] include = ["awesomeversion", "awesomeversion.*", "LICENCE.md"] keywords = ["calver", "semver", "0ver", "version", "pep440", "buildver"] license = "MIT" maintainers = ["Ludeeus "] name = "awesomeversion" readme = "README.md" repository = "https://github.com/ludeeus/awesomeversion" version = "0" [tool.poetry.dependencies] python = "^3.9" [tool.poetry.dev-dependencies] black = "^25.1" isort = "^6.0.1" mypy = "^1.15" pylint = "^3.3.7" pytest = "^8.3.5" pytest-codspeed = "^3.2.0" pytest-cov = "^6.1.1" pytest-snapshot = "^0.9.0" pytest-timeout = "^2.4.0" [tool.isort] combine_as_imports = true force_sort_within_sections = true profile = "black" [tool.pylint.'MESSAGES CONTROL'] disable = "unsubscriptable-object,duplicate-code,too-many-public-methods" [tool.coverage.run] source = ["awesomeversion"] omit = ["setup.py", "tests/*", "benchmarks/*"] [tool.coverage.report] exclude_lines = ["if TYPE_CHECKING:"]awesomeversion-25.5.0/tests/000077500000000000000000000000001501604777100160235ustar00rootroot00000000000000awesomeversion-25.5.0/tests/__init__.py000066400000000000000000000000301501604777100201250ustar00rootroot00000000000000"""Initialize tests.""" awesomeversion-25.5.0/tests/issues/000077500000000000000000000000001501604777100173365ustar00rootroot00000000000000awesomeversion-25.5.0/tests/issues/test_issue14.py000066400000000000000000000005641501604777100222510ustar00rootroot00000000000000"""Test for issue #14.""" # https://github.com/ludeeus/awesomeversion/issues/14 from awesomeversion import AwesomeVersion from awesomeversion.strategy import AwesomeVersionStrategy def test() -> None: """Test for issue #14.""" version = AwesomeVersion("2021.1.0.dev20201230") assert version.dev assert version.strategy != AwesomeVersionStrategy.UNKNOWN awesomeversion-25.5.0/tests/issues/test_issue153.py000066400000000000000000000012041501604777100223250ustar00rootroot00000000000000"""Test for issue #153.""" # https://github.com/ludeeus/awesomeversion/issues/153 from awesomeversion import AwesomeVersion def test() -> None: """Test for issue #153.""" current = AwesomeVersion("v1.10.0") dev1 = AwesomeVersion("v1.11.0-dev.1") dev2 = AwesomeVersion("v2.0.0-dev.1") dev3 = AwesomeVersion("v2.0.0-dev.2") assert current < dev1 assert current < dev2 assert current < dev3 assert dev1 > current assert dev1 < dev2 assert dev1 < dev3 assert dev2 > current assert dev2 > dev1 assert dev2 < dev3 assert dev3 > current assert dev3 > dev1 assert dev3 > dev2 awesomeversion-25.5.0/tests/issues/test_issue26.py000066400000000000000000000004301501604777100222440ustar00rootroot00000000000000"""Test for issue #26.""" # https://github.com/ludeeus/awesomeversion/issues/26 from awesomeversion import AwesomeVersion def test() -> None: """Test for issue #26.""" current = AwesomeVersion(" 123") upstream = AwesomeVersion("123") assert current == upstream awesomeversion-25.5.0/tests/issues/test_issue333.py000066400000000000000000000006311501604777100223300ustar00rootroot00000000000000"""Test for issue #333.""" # https://github.com/ludeeus/awesomeversion/issues/333 from awesomeversion import AwesomeVersion from awesomeversion.strategy import AwesomeVersionStrategy def test() -> None: """Test for issue #333.""" version = AwesomeVersion("v3.4-rc5") assert version < "v3.6-rc2" assert version.release_candidate assert version.strategy != AwesomeVersionStrategy.UNKNOWN awesomeversion-25.5.0/tests/issues/test_issue96.py000066400000000000000000000031701501604777100222570ustar00rootroot00000000000000"""Test for issue #96.""" # https://github.com/ludeeus/awesomeversion/issues/96 import re import pytest from awesomeversion import ( AwesomeVersion, AwesomeVersionStrategy, AwesomeVersionStrategyException, ) def test() -> None: """Test for issue #96.""" version = AwesomeVersion("10.3.0", ensure_strategy=AwesomeVersionStrategy.SEMVER) assert version.strategy == AwesomeVersionStrategy.SEMVER version = AwesomeVersion( "10.3.0", ensure_strategy=[ AwesomeVersionStrategy.CALVER, AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.SIMPLEVER, AwesomeVersionStrategy.BUILDVER, AwesomeVersionStrategy.PEP440, ], ) assert version.strategy == AwesomeVersionStrategy.CALVER version = AwesomeVersion( "10.3.0", ensure_strategy=[ AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.CALVER, ], ) assert version.strategy == AwesomeVersionStrategy.SEMVER with pytest.raises( AwesomeVersionStrategyException, match=re.escape( "Strategy unknown does not match ['SemVer', 'CalVer'] for whatever" ), ): AwesomeVersion( "whatever", ensure_strategy=[ AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.CALVER, ], ) with pytest.raises( AwesomeVersionStrategyException, match=re.escape("Strategy CalVer does not match ['SemVer'] for 2021.12"), ): AwesomeVersion("2021.12", ensure_strategy=AwesomeVersionStrategy.SEMVER) awesomeversion-25.5.0/tests/snapshots/000077500000000000000000000000001501604777100200455ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/BuildVer/000077500000000000000000000000001501604777100215615ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/BuildVer/0.json000066400000000000000000000005461501604777100226200ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "0", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "0", "valid": true, "year": "0" }awesomeversion-25.5.0/tests/snapshots/BuildVer/01234567.json000066400000000000000000000005711501604777100233720ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1234567", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "01234567", "valid": true, "year": "1234567" }awesomeversion-25.5.0/tests/snapshots/BuildVer/1.json000066400000000000000000000005461501604777100226210ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/BuildVer/123.json000066400000000000000000000005541501604777100227650ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "123", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "123", "valid": true, "year": "123" }awesomeversion-25.5.0/tests/snapshots/BuildVer/16785665.json000066400000000000000000000005731501604777100234140ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "16785665", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "16785665", "valid": true, "year": "16785665" }awesomeversion-25.5.0/tests/snapshots/BuildVer/2.json000066400000000000000000000005461501604777100226220ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "2", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/BuildVer/2019.json000066400000000000000000000005571501604777100230560ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2019", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "2019", "valid": true, "year": "2019" }awesomeversion-25.5.0/tests/snapshots/BuildVer/2020.json000066400000000000000000000005571501604777100230460ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "BuildVer", "string": "2020", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/000077500000000000000000000000001501604777100212215ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/CalVer/20.1.0.json000066400000000000000000000005471501604777100226400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "20", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "20.1.0", "valid": true, "year": "20" }awesomeversion-25.5.0/tests/snapshots/CalVer/20.1.json000066400000000000000000000005471501604777100225020ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "20", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "CalVer", "string": "20.1", "valid": true, "year": "20" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.1.1..json000066400000000000000000000005551501604777100230600ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2020.1.1", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.1.json000066400000000000000000000005551501604777100226430ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "CalVer", "string": "2020.1", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.12.0.json000066400000000000000000000005571501604777100230650ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": "0", "minor": "12", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2020.12.0", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.12.1.json000066400000000000000000000005571501604777100230660ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": "1", "minor": "12", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2020.12.1", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.12.dev1602.json000066400000000000000000000005751501604777100240150ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2020", "micro": null, "minor": "12", "modifier_type": "dev", "modifier": "dev1602", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "CalVer", "string": "2020.12.dev1602", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.12.dev1603.json000066400000000000000000000005751501604777100240160ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2020", "micro": null, "minor": "12", "modifier_type": "dev", "modifier": "dev1603", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "CalVer", "string": "2020.12.dev1603", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.2.0.json000066400000000000000000000005551501604777100230020ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": "0", "minor": "2", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2020.2.0", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2020.21.1.json000066400000000000000000000005571501604777100230660ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2020", "micro": "1", "minor": "21", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2020.21.1", "valid": true, "year": "2020" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0.0.json000066400000000000000000000005571501604777100231420ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 4, "simple": true, "strategy": "CalVer", "string": "2021.1.0.0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0.dev0.json000066400000000000000000000005651501604777100236400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "dev", "modifier": "dev0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0.dev0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0.json000066400000000000000000000005551501604777100230020ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2021.1.0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0a0.json000066400000000000000000000005561501604777100232240ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "a", "modifier": "a0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0a0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0b0.json000066400000000000000000000005561501604777100232250ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "b", "modifier": "b0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0b0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0b1.json000066400000000000000000000005561501604777100232260ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "b", "modifier": "b1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0b1", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0b2.json000066400000000000000000000005561501604777100232270ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "b", "modifier": "b2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0b2", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0dev0.json000066400000000000000000000005641501604777100235610ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "dev", "modifier": "dev0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0dev0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.1.0dev20210101.json000066400000000000000000000006021501604777100243010ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2021", "micro": "0", "minor": "1", "modifier_type": "dev", "modifier": "dev20210101", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.1.0dev20210101", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.2.0.dev20210118.json000066400000000000000000000006031501604777100243710ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "2021", "micro": "0", "minor": "2", "modifier_type": "dev", "modifier": "dev20210118", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.2.0.dev20210118", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.2.0.json000066400000000000000000000005551501604777100230030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2021", "micro": "0", "minor": "2", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2021.2.0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.2.0b0.json000066400000000000000000000005561501604777100232260ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "2021", "micro": "0", "minor": "2", "modifier_type": "b", "modifier": "b0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.2.0b0", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2021.2.0b10.json000066400000000000000000000005601501604777100233020ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "2021", "micro": "0", "minor": "2", "modifier_type": "b", "modifier": "b10", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "CalVer", "string": "2021.2.0b10", "valid": true, "year": "2021" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.01.01.json000066400000000000000000000005571501604777100231460ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.01.01", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.01.02.json000066400000000000000000000005571501604777100231470ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "2", "minor": "1", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.01.02", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.02.01.json000066400000000000000000000005571501604777100231470ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "1", "minor": "2", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.02.01", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.02.02.json000066400000000000000000000005571501604777100231500ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "2", "minor": "2", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.02.02", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.03.01.json000066400000000000000000000005571501604777100231500ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "1", "minor": "3", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.03.01", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2022.03.02.json000066400000000000000000000005571501604777100231510ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2022", "micro": "2", "minor": "3", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2022.03.02", "valid": true, "year": "2022" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.01.01.json000066400000000000000000000005571501604777100231470ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.01.01", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.01.02.json000066400000000000000000000005571501604777100231500ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "2", "minor": "1", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.01.02", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.02.01.json000066400000000000000000000005571501604777100231500ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "1", "minor": "2", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.02.01", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.02.02.json000066400000000000000000000005571501604777100231510ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "2", "minor": "2", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.02.02", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.03.01.json000066400000000000000000000005571501604777100231510ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "1", "minor": "3", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.03.01", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/CalVer/2023.03.02.json000066400000000000000000000005571501604777100231520ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2023", "micro": "2", "minor": "3", "modifier_type": null, "modifier": null, "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "CalVer", "string": "2023.03.02", "valid": true, "year": "2023" }awesomeversion-25.5.0/tests/snapshots/HexVer/000077500000000000000000000000001501604777100212465ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/HexVer/0x0.json000066400000000000000000000005501501604777100225500ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "HexVer", "string": "0x0", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/HexVer/0x00AABB00.json000066400000000000000000000005571501604777100234050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "HexVer", "string": "0x00AABB00", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/HexVer/0x01002100.json000066400000000000000000000005571501604777100233030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "HexVer", "string": "0x01002100", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/HexVer/0x23089631.json000066400000000000000000000005571501604777100233370ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "HexVer", "string": "0x23089631", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/HexVer/0x2df35.json000066400000000000000000000005541501604777100232400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "HexVer", "string": "0x2df35", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/PEP 440/000077500000000000000000000000001501604777100207615ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/PEP 440/1-dev1.json000066400000000000000000000005541501604777100226550ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": null, "modifier_type": "dev", "modifier": "dev1", "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "PEP 440", "string": "1-dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0+local.1.2.3.json000066400000000000000000000005601501604777100237010ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 5, "simple": false, "strategy": "PEP 440", "string": "1.0+local.1.2.3", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0b0.json000066400000000000000000000005461501604777100225370ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "b", "modifier": "b0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0b0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0b1.json000066400000000000000000000005461501604777100225400ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "b", "modifier": "b1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0b1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0b10.json000066400000000000000000000005501501604777100226130ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "b", "modifier": "b10", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0b10", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0b9.json000066400000000000000000000005461501604777100225500ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "b", "modifier": "b9", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0b9", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0beta0.json000066400000000000000000000005561501604777100232320ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0beta0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.0rc0.json000066400000000000000000000005511501604777100227160ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc0", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.0rc0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.a0.json000066400000000000000000000005471501604777100224570ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "a", "modifier": "a0", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.a0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.alpha1.json000066400000000000000000000005631501604777100233230ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "alpha", "modifier": "alpha1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.alpha1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.b0.json000066400000000000000000000005471501604777100224600ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b0", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.b0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.b1.json000066400000000000000000000005471501604777100224610ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.b1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.b2.json000066400000000000000000000005471501604777100224620ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b2", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.b2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.d1.json000066400000000000000000000005471501604777100224630ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "d", "modifier": "d1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.d1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.dev0.json000066400000000000000000000005551501604777100230140ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev0", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.dev0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.dev1.json000066400000000000000000000005551501604777100230150ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.dev456.json000066400000000000000000000005611501604777100231700ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.post456.dev34.json000066400000000000000000000005711501604777100243240ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": "456", "minor": "0", "modifier_type": "dev", "modifier": "dev34", "patch": "456", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0.post456.dev34", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.post456.json000066400000000000000000000005651501604777100234030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "post", "modifier": "post456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.post456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0.rc2.json000066400000000000000000000005521501604777100226410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "rc", "modifier": "rc2", "patch": null, "prefix": null, "release_candidate": true, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0.rc2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0a1.json000066400000000000000000000005461501604777100224010ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "a", "modifier": "a1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0a1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0a12.dev456.json000066400000000000000000000005641501604777100234770ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0a12.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0a12.json000066400000000000000000000005501501604777100224560ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "a", "modifier": "a12", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0a12", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0a2.dev456.json000066400000000000000000000005631501604777100234150ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0a2.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b0.json000066400000000000000000000005461501604777100224010ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b0", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0b0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b1.dev456.json000066400000000000000000000005631501604777100234150ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0b1.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b1.json000066400000000000000000000005461501604777100224020ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0b1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b2.json000066400000000000000000000005461501604777100224030ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "b", "modifier": "b2", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0b2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b2.post345.dev456.json000066400000000000000000000005751501604777100246410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": "345", "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": "345", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "PEP 440", "string": "1.0b2.post345.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0b2.post345.json000066400000000000000000000005671501604777100236260ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "post", "modifier": "post345", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0b2.post345", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0rc1+local.1.2.3.json000066400000000000000000000005621501604777100243110ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": true, "sections": 5, "simple": false, "strategy": "PEP 440", "string": "1.0rc1+local.1.2.3", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0rc1.dev456.json000066400000000000000000000005641501604777100236010ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev456", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0rc1.dev456", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.0rc1.json000066400000000000000000000005511501604777100225610ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": "rc", "modifier": "rc1", "patch": null, "prefix": null, "release_candidate": true, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.0rc1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.1-dev1.json000066400000000000000000000005551501604777100230150ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "1", "modifier_type": "dev", "modifier": "dev1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.1-dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.1.dev1.json000066400000000000000000000005551501604777100230160ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "1", "modifier_type": "dev", "modifier": "dev1", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.1.dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.1_dev1.json000066400000000000000000000005521501604777100230740ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.1_dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.2.3.4.5b0.json000066400000000000000000000005521501604777100230460ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": "b", "modifier": "b0", "patch": "3", "prefix": null, "release_candidate": false, "sections": 5, "simple": false, "strategy": "PEP 440", "string": "1.2.3.4.5b0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.2b0.json000066400000000000000000000005461501604777100224030ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": "1", "micro": null, "minor": "2", "modifier_type": "b", "modifier": "b0", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "1.2b0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.dev0.json000066400000000000000000000005541501604777100226550ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": null, "modifier_type": "dev", "modifier": "dev0", "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "PEP 440", "string": "1.dev0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1.dev1.json000066400000000000000000000005541501604777100226560ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": null, "modifier_type": "dev", "modifier": "dev1", "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "PEP 440", "string": "1.dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/1_dev1.json000066400000000000000000000005511501604777100227340ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "PEP 440", "string": "1_dev1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/PEP 440/6.0.dev20210429.json000066400000000000000000000005731501604777100235650ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "6", "micro": null, "minor": "0", "modifier_type": "dev", "modifier": "dev20210429", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "6.0.dev20210429", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/PEP 440/6.0.rc1.json000066400000000000000000000005521501604777100226450ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "6", "micro": null, "minor": "0", "modifier_type": "rc", "modifier": "rc1", "patch": null, "prefix": null, "release_candidate": true, "sections": 2, "simple": false, "strategy": "PEP 440", "string": "6.0.rc1", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/SemVer/000077500000000000000000000000001501604777100212465ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/SemVer/0.118.0.json000066400000000000000000000005501501604777100227460ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "0", "micro": "0", "minor": "118", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "0.118.0", "valid": true, "year": "0" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha+1.2.json000066400000000000000000000005641501604777100241610ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha+1.2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha.1.json000066400000000000000000000005641501604777100240240ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha.2.json000066400000000000000000000005641501604777100240250ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha.2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha.json000066400000000000000000000005601501604777100236610ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha1.json000066400000000000000000000005621501604777100237440ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha10.json000066400000000000000000000005641501604777100240260ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha10", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha10", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-alpha9.json000066400000000000000000000005621501604777100237540ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha9", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-alpha9", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta.1.json000066400000000000000000000005601501604777100236460ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta.10.json000066400000000000000000000005621501604777100237300ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.10", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta.10", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta.2.json000066400000000000000000000005601501604777100236470ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta.2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta.9.json000066400000000000000000000005601501604777100236560ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.9", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta.9", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta.json000066400000000000000000000005541501604777100235120ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta0.json000066400000000000000000000005561501604777100235740ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta0", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-beta1.json000066400000000000000000000005561501604777100235750ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-beta1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-rc.1.json000066400000000000000000000005531501604777100233410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.1", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-rc.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-rc.2.json000066400000000000000000000005531501604777100233420ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.2", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-rc.2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0-rc0.json000066400000000000000000000005511501604777100232600ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc0", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.0.0-rc0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.0.json000066400000000000000000000005441501604777100226000ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.0.0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.0.1.json000066400000000000000000000005441501604777100226010ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.0.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.2.3-1.json000066400000000000000000000005461501604777100227450ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": "1", "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.2.3-1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.2.3-2.json000066400000000000000000000005461501604777100227460ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": "2", "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.2.3-2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.2.3-alpha.1.json000066400000000000000000000005641501604777100240310ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": "alpha", "modifier": "alpha.1", "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.2.3-alpha.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.2.3-dev.1.json000066400000000000000000000005561501604777100235230ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": "1", "micro": "3", "minor": "2", "modifier_type": "dev", "modifier": "dev.1", "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.2.3-dev.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.2.3.json000066400000000000000000000005441501604777100226050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.2.3", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.8.2-beta.1.10+somebuild.json000066400000000000000000000005761501604777100260650ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "2", "minor": "8", "modifier_type": null, "modifier": "beta.1.10", "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.8.2-beta.1.10+somebuild", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.8.2-beta.1.10.json000066400000000000000000000005641501604777100241030ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "2", "minor": "8", "modifier_type": null, "modifier": "beta.1.10", "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.8.2-beta.1.10", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/1.8.2-beta.1.13.json000066400000000000000000000005641501604777100241060ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "1", "micro": "2", "minor": "8", "modifier_type": null, "modifier": "beta.1.13", "patch": "2", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "1.8.2-beta.1.13", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-alpha.1.json000066400000000000000000000005641501604777100240250ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-alpha.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-alpha.2.json000066400000000000000000000005641501604777100240260ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-alpha.2", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-beta.1.json000066400000000000000000000005601501604777100236470ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-beta.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-beta.2.json000066400000000000000000000005601501604777100236500ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-beta.2", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-rc.1.json000066400000000000000000000005531501604777100233420ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.1", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-rc.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0-rc.2.json000066400000000000000000000005531501604777100233430ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.2", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.0.0-rc.2", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.0.0.json000066400000000000000000000005441501604777100226010ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.0.0", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.1.0.json000066400000000000000000000005441501604777100226020ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.1.0", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.1.1.json000066400000000000000000000005441501604777100226030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.1.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.1.3.json000066400000000000000000000005441501604777100226050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "3", "minor": "1", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.1.3", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/2.4.6-8.json000066400000000000000000000005461501604777100227620ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "6", "minor": "4", "modifier_type": null, "modifier": "8", "patch": "6", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "2.4.6-8", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-alpha.1.json000066400000000000000000000005641501604777100240260ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-alpha.1", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-alpha.2.json000066400000000000000000000005641501604777100240270ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "alpha", "modifier": "alpha.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-alpha.2", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-beta.1.json000066400000000000000000000005601501604777100236500ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.1", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-beta.1", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-beta.2.json000066400000000000000000000005601501604777100236510ustar00rootroot00000000000000{ "alpha": true, "beta": true, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "beta", "modifier": "beta.2", "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-beta.2", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-rc.1.json000066400000000000000000000005531501604777100233430ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.1", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-rc.1", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0-rc.2.json000066400000000000000000000005531501604777100233440ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": "rc", "modifier": "rc.2", "patch": "0", "prefix": null, "release_candidate": true, "sections": 3, "simple": false, "strategy": "SemVer", "string": "3.0.0-rc.2", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.0.json000066400000000000000000000005441501604777100226020ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "3", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "3.0.0", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/3.0.1.json000066400000000000000000000005441501604777100226030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "3", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "3.0.1", "valid": true, "year": "3" }awesomeversion-25.5.0/tests/snapshots/SemVer/4.0.0.json000066400000000000000000000005441501604777100226030ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "4", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "4.0.0", "valid": true, "year": "4" }awesomeversion-25.5.0/tests/snapshots/SemVer/4.1.0.json000066400000000000000000000005441501604777100226040ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "4", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "4.1.0", "valid": true, "year": "4" }awesomeversion-25.5.0/tests/snapshots/SemVer/4.2.0.json000066400000000000000000000005441501604777100226050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "4", "micro": "0", "minor": "2", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "4.2.0", "valid": true, "year": "4" }awesomeversion-25.5.0/tests/snapshots/SemVer/5.0.0.json000066400000000000000000000005441501604777100226040ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "5", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "5.0.0", "valid": true, "year": "5" }awesomeversion-25.5.0/tests/snapshots/SemVer/5.1.0.json000066400000000000000000000005441501604777100226050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "5", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "5.1.0", "valid": true, "year": "5" }awesomeversion-25.5.0/tests/snapshots/SemVer/5.1.1.json000066400000000000000000000005441501604777100226060ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "5", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "5.1.1", "valid": true, "year": "5" }awesomeversion-25.5.0/tests/snapshots/SemVer/6.0.0.json000066400000000000000000000005441501604777100226050ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "6", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "6.0.0", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/SemVer/6.1.0.json000066400000000000000000000005441501604777100226060ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "6", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "6.1.0", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/SemVer/6.2.0.json000066400000000000000000000005441501604777100226070ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "6", "micro": "0", "minor": "2", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "6.2.0", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/SemVer/7.0.0.json000066400000000000000000000005441501604777100226060ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "7", "micro": "0", "minor": "0", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "7.0.0", "valid": true, "year": "7" }awesomeversion-25.5.0/tests/snapshots/SemVer/7.1.0.json000066400000000000000000000005441501604777100226070ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "7", "micro": "0", "minor": "1", "modifier_type": null, "modifier": null, "patch": "0", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "7.1.0", "valid": true, "year": "7" }awesomeversion-25.5.0/tests/snapshots/SemVer/7.1.1.json000066400000000000000000000005441501604777100226100ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "7", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": null, "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "7.1.1", "valid": true, "year": "7" }awesomeversion-25.5.0/tests/snapshots/SemVer/v1.0.1.json000066400000000000000000000005431501604777100227660ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.0.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/v1.1.1.json000066400000000000000000000005431501604777100227670ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.1.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/v1.2.1.json000066400000000000000000000005431501604777100227700ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "1", "minor": "2", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "1.2.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SemVer/v2.0.1.json000066400000000000000000000005431501604777100227670ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "1", "minor": "0", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.0.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/v2.1.1.json000066400000000000000000000005431501604777100227700ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "1", "minor": "1", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.1.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SemVer/v2.2.1.json000066400000000000000000000005431501604777100227710ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": "1", "minor": "2", "modifier_type": null, "modifier": null, "patch": "1", "prefix": "v", "release_candidate": false, "sections": 3, "simple": true, "strategy": "SemVer", "string": "2.2.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/000077500000000000000000000000001501604777100217535ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/SimpleVer/0.1.json000066400000000000000000000005471501604777100231520ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "0", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "0.1", "valid": true, "year": "0" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.0.json000066400000000000000000000005471501604777100231520ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "1.0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.1.json000066400000000000000000000005471501604777100231530ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "1.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.2.3.4.5.6.6.8.json000066400000000000000000000005611501604777100242740ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 8, "simple": true, "strategy": "SimpleVer", "string": "1.2.3.4.5.6.6.8", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.2.3.4.5.6.7.8.9.json000066400000000000000000000005631501604777100244460ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 9, "simple": true, "strategy": "SimpleVer", "string": "1.2.3.4.5.6.7.8.9", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.2.3.4.5.6.7.8.json000066400000000000000000000005611501604777100242750ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 8, "simple": true, "strategy": "SimpleVer", "string": "1.2.3.4.5.6.7.8", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.2.3.4.5.json000066400000000000000000000005531501604777100236170ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 5, "simple": true, "strategy": "SimpleVer", "string": "1.2.3.4.5", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/1.2.3.4.json000066400000000000000000000005511501604777100234520ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": "3", "minor": "2", "modifier_type": null, "modifier": null, "patch": "3", "prefix": null, "release_candidate": false, "sections": 4, "simple": true, "strategy": "SimpleVer", "string": "1.2.3.4", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/5.10.json000066400000000000000000000005511501604777100232320ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "5", "micro": null, "minor": "10", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "5.10", "valid": true, "year": "5" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/5.11.json000066400000000000000000000005511501604777100232330ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "5", "micro": null, "minor": "11", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "5.11", "valid": true, "year": "5" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/6.0.json000066400000000000000000000005471501604777100231570ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "6", "micro": null, "minor": "0", "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "6.0", "valid": true, "year": "6" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v1.0.json000066400000000000000000000005461501604777100233370ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "0", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "1.0", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v1.1.json000066400000000000000000000005461501604777100233400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "1.1", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v1.2.json000066400000000000000000000005461501604777100233410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "1", "micro": null, "minor": "2", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "1.2", "valid": true, "year": "1" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v2.0.json000066400000000000000000000005461501604777100233400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": null, "minor": "0", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "2.0", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v2.1.json000066400000000000000000000005461501604777100233410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": null, "minor": "1", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "2.1", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SimpleVer/v2.2.json000066400000000000000000000005461501604777100233420ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": "2", "micro": null, "minor": "2", "modifier_type": null, "modifier": null, "patch": null, "prefix": "v", "release_candidate": false, "sections": 2, "simple": true, "strategy": "SimpleVer", "string": "2.2", "valid": true, "year": "2" }awesomeversion-25.5.0/tests/snapshots/SpecialContainer/000077500000000000000000000000001501604777100232705ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/SpecialContainer/beta.json000066400000000000000000000005621501604777100251010ustar00rootroot00000000000000{ "alpha": false, "beta": true, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "SpecialContainer", "string": "beta", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/SpecialContainer/dev.json000066400000000000000000000005611501604777100247430ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": true, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "SpecialContainer", "string": "dev", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/SpecialContainer/latest.json000066400000000000000000000005651501604777100254650ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "SpecialContainer", "string": "latest", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/SpecialContainer/stable.json000066400000000000000000000005651501604777100254430ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "SpecialContainer", "string": "stable", "valid": true, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/000077500000000000000000000000001501604777100215445ustar00rootroot00000000000000awesomeversion-25.5.0/tests/snapshots/unknown/.json000066400000000000000000000005471501604777100225240ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 0, "simple": false, "strategy": "unknown", "string": "", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/00AABB00.json000066400000000000000000000005571501604777100234330ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "00AABB00", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/0X01002604.json000066400000000000000000000005611501604777100235450ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "0X01002604", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/0x0g.json000066400000000000000000000005531501604777100232200ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "0x0g", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/1.0.invalid4.json000066400000000000000000000005741501604777100244540ustar00rootroot00000000000000{ "alpha": true, "beta": false, "dev": true, "major": null, "micro": null, "minor": null, "modifier_type": "invalid", "modifier": "invalid4", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "unknown", "string": "1.0.invalid4", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/.json000066400000000000000000000005641501604777100246520ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/.json000066400000000000000000000006061501604777100303670ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/False.json000066400000000000000000000005541501604777100234750ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "False", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/None.json000066400000000000000000000005531501604777100233410ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "None", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/True.json000066400000000000000000000005531501604777100233610ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": null, "modifier": null, "patch": null, "prefix": null, "release_candidate": false, "sections": 1, "simple": false, "strategy": "unknown", "string": "True", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/a.b.c.json000066400000000000000000000005521501604777100233220ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": "c", "modifier": "c", "patch": null, "prefix": null, "release_candidate": false, "sections": 2, "simple": false, "strategy": "unknown", "string": "a.b.c", "valid": false, "year": null }awesomeversion-25.5.0/tests/snapshots/unknown/unknown.json000066400000000000000000000005701501604777100241400ustar00rootroot00000000000000{ "alpha": false, "beta": false, "dev": false, "major": null, "micro": null, "minor": null, "modifier_type": "unknown", "modifier": "unknown", "patch": null, "prefix": null, "release_candidate": false, "sections": 0, "simple": false, "strategy": "unknown", "string": "unknown", "valid": false, "year": null }awesomeversion-25.5.0/tests/test_awesomeversion.py000066400000000000000000000216111501604777100225030ustar00rootroot00000000000000"""Test awesomeversion.""" from __future__ import annotations import json import warnings import pytest from awesomeversion import ( AwesomeVersion, AwesomeVersionStrategy, AwesomeVersionStrategyException, ) from awesomeversion.exceptions import ( AwesomeVersionCompareException, AwesomeVersionException, ) from awesomeversion.strategy import COMPARABLE_STRATEGIES from awesomeversion.typing import VersionType def test_awesomeversion() -> None: """Test awesomeversion.""" version = AwesomeVersion("2020.12.1") assert not version.beta assert version.valid version = AwesomeVersion("2020.12.1a0") assert version.alpha assert version.valid version = AwesomeVersion("2020.12.1b0") assert version.beta assert version.valid version = AwesomeVersion("2020.12.1dev0") assert version.dev assert version.valid version = AwesomeVersion("2020.12.1d0") assert version.dev assert version.valid version = AwesomeVersion("2020.12.1rc0") assert version.release_candidate assert version.prefix is None assert version.valid version = AwesomeVersion("v2020.12.1rc0") assert version.prefix == "v" assert version.valid version2 = AwesomeVersion(version) assert version == version2 assert str(version) == str(version2) assert str(version) == "v2020.12.1rc0" assert version.string == "2020.12.1rc0" assert repr(version) == "" assert AwesomeVersion("1.0.0-beta.2").modifier == "beta.2" assert AwesomeVersion("2020.2.0b1").modifier_type == "b" with AwesomeVersion("20.12.0") as current: with AwesomeVersion( "20.12.1", ensure_strategy=AwesomeVersionStrategy.SEMVER ) as upstream: assert upstream > current def test_major() -> None: """Test major.""" assert AwesomeVersion("1.0.0.0").major == 1 assert AwesomeVersion("1.0.0").major == 1 assert AwesomeVersion("1.0").major == 1 assert AwesomeVersion("1").major == 1 def test_minor() -> None: """Test minor.""" assert AwesomeVersion("1.1.0.0").minor == 1 assert AwesomeVersion("1.1.0").minor == 1 assert AwesomeVersion("1.1").minor == 1 assert AwesomeVersion("1").minor is None def test_patch() -> None: """Test patch.""" assert AwesomeVersion("1.1.1.1").patch == 1 assert AwesomeVersion("1.1.1").patch == 1 assert AwesomeVersion("1.1").patch is None assert AwesomeVersion("1").patch is None def test_serialization() -> None: """Test to and from JSON serialization.""" version = AwesomeVersion("20.12.1") dumps = json.dumps({"version": version}) assert dumps == '{"version": "20.12.1"}' assert json.loads(dumps)["version"] == version.string test_data = [ ("2020.12.1b0"), ("2020.12.1"), ("2021.2.0.dev20210118"), ] @pytest.mark.parametrize("version", test_data) def test_nesting(version: VersionType) -> None: """Test nesting AwesomeVersion objects.""" obj = AwesomeVersion(version) assert obj.string == version assert str(obj) == version assert AwesomeVersion(obj) == AwesomeVersion(version) assert AwesomeVersion(obj).string == AwesomeVersion(version) assert str(AwesomeVersion(obj)) == AwesomeVersion(version) assert AwesomeVersion(obj) == version assert AwesomeVersion(obj).string == version assert str(AwesomeVersion(obj)) == version assert ( AwesomeVersion( AwesomeVersion(AwesomeVersion(AwesomeVersion(AwesomeVersion(obj)))) ) == version ) assert ( AwesomeVersion( AwesomeVersion(AwesomeVersion(AwesomeVersion(AwesomeVersion(obj)))) ).string == version ) assert str( ( AwesomeVersion( AwesomeVersion(AwesomeVersion(AwesomeVersion(AwesomeVersion(obj)))) ) ) == version ) def test_ensure_strategy() -> None: """test ensure_strategy.""" obj = AwesomeVersion("1.0.0", ensure_strategy=COMPARABLE_STRATEGIES) assert obj.strategy == AwesomeVersionStrategy.SEMVER obj = AwesomeVersion( "1.0.0", ensure_strategy=[ AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.SPECIALCONTAINER, ], ) assert obj.strategy in [ AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.SPECIALCONTAINER, ] with pytest.raises(AwesomeVersionStrategyException): AwesomeVersion("1", ensure_strategy=AwesomeVersionStrategy.SEMVER) with pytest.raises(AwesomeVersionStrategyException): AwesomeVersion("1", ensure_strategy=AwesomeVersionStrategy.UNKNOWN) with pytest.raises(AwesomeVersionStrategyException): AwesomeVersion( "1", ensure_strategy=[ AwesomeVersionStrategy.SEMVER, AwesomeVersionStrategy.SPECIALCONTAINER, ], ) @pytest.mark.parametrize( "version,strategy,result", [ ("14.0 (Debian 14.0-1.pgdg110+1)", AwesomeVersionStrategy.SIMPLEVER, "14.0"), ( "PostgreSQL 11.13 (Debian 11.13-0+deb10u1) on x86_64-pc-linux-gnu", AwesomeVersionStrategy.SIMPLEVER, "11.13", ), ( "5.7.26-0ubuntu0.18.04.1", AwesomeVersionStrategy.SIMPLEVER, "5.7.26", ), ( "5.7.26-0ubuntu0.18.04.1", AwesomeVersionStrategy.CALVER, "18.04.1", ), ( "0.4.7-MariaDB", AwesomeVersionStrategy.SIMPLEVER, "0.4.7", ), ( "10.4.7-MariaDB-log-ubuntu0.18.04.1-whatever", AwesomeVersionStrategy.SIMPLEVER, "10.4.7", ), ( "Linux 2b4de6616b33 5.11.0-38-generic #42~20.04.1-Ubuntu", AwesomeVersionStrategy.SEMVER, "5.11.0-38", ), ], ) def test_find_first_match( version: VersionType, strategy: AwesomeVersionStrategy, result: str, ) -> None: """Test find_first_match""" obj = AwesomeVersion( version=version, ensure_strategy=strategy, find_first_match=True, ) assert obj.string == result assert ( AwesomeVersion(version, ensure_strategy=strategy, find_first_match=True).string == obj.string ) def test_find_first_match_exception() -> None: """Test""" with warnings.catch_warnings(record=True) as warning_list: assert AwesomeVersion("1", find_first_match=True) assert ( "Can not use find_first_match without ensure_strategy, " "this is ignored and will start raising an exception in 2025." in str(warning_list[-1].message) ) def test_diff() -> None: """Test .diff""" version = AwesomeVersion("2020.12.1") assert version.diff("2021.12.1").major assert not version.diff("2021.12.1").minor assert not version.diff("2021.12.1").patch assert not version.diff("2021.12.1").modifier assert not version.diff("2021.12.1").strategy assert version.diff("2021.11.1").minor assert version.diff("2021.12.2").patch assert version.diff("2021.12.1dev2").modifier assert version.diff("2.11.1").strategy diff = version - "2021.12.1" assert diff.major assert repr(diff).startswith("AwesomeVersionDiff(") with pytest.raises(AwesomeVersionException): version.diff(None) @pytest.mark.parametrize( "lowest,version,highest,result", [ ("14.0", "14.0", "14.0", True), ("14.0", "12.0", "15.0", False), ("14", "12.1", "15", False), ("14", "14.3", "15", True), ("1", 13, "15", True), ("1", AwesomeVersion(2), "15", True), ], ) def test_in_range( lowest: VersionType, version: VersionType, highest: VersionType, result: bool, ) -> None: """Test AwesomeVersion.in_range""" assert AwesomeVersion(version).in_range(lowest, highest) == result @pytest.mark.parametrize( "lowest,version,highest,match", [ (None, "14.0", "14.0", "Lowest version is not valid"), ("14.0", "14.0", None, "Highest version is not valid"), ], ) def test_in_range_exception( lowest: VersionType | None, version: VersionType, highest: VersionType | None, match: str, ) -> None: """Test AwesomeVersion.in_range exceptions""" with pytest.raises(AwesomeVersionCompareException, match=match): AwesomeVersion(version).in_range(lowest, highest) def test_hash() -> None: """Test hash.""" version = AwesomeVersion("2020.12.1") assert hash(version) == hash("2020.12.1") == str.__hash__("2020.12.1") version_set = set( [ version, AwesomeVersion("2020.12.1"), AwesomeVersion("2020.12.2"), version, ] ) assert len(version_set) == 2 assert version in version_set assert "2020.12.1" in version_set assert AwesomeVersion("2021.12.1") not in version_set awesomeversion-25.5.0/tests/test_compare.py000066400000000000000000000110101501604777100210530ustar00rootroot00000000000000"""Test compare.""" import pytest from awesomeversion import AwesomeVersion from awesomeversion.exceptions import AwesomeVersionCompareException from awesomeversion.typing import VersionType @pytest.mark.parametrize( "version_a,version_b", [ ("1.0.0-beta.10", "1.0.0-beta.9"), ("1.0.0-alpha10", "1.0.0-alpha9"), ("2021.2.0", "2021.2.0.dev20210118"), ("2021.2.0b0", "2021.2.0.dev20210118"), ("2021.2.0", "2021.2.0b0"), ("2020.12.1", "2020.12.0"), ("2", "1"), ("2", 1), (2, "1"), (2, 1), ("5.11", "5.10"), ("1.1", "1.0"), ("2020", "2019"), ("1.2.3.4", "1.2.3"), ("2020.1", "2020"), ("2020.2.0", "2020.1.1."), ("1.2.3.4.5.6.7.8.9", "1"), ("2020.12.0", "2020.12.dev1602"), ("2020.12.dev1603", "2020.12.dev1602"), ("2021.1.0", "2021.1.0b0"), ("2021.1.0", "2021.1.0b0"), ("2021.1.0", "2021.1.0b1"), ("2021.1.0", "2021.1.0dev20210101"), ("2021.1.0b0", "2021.1.0a0"), ("2021.1.0b1", "2021.1.0b0"), ("2021.1.0b1", "2021.1.0dev0"), ("2021.1.0b1", "2021.1.0.dev0"), ("2021.1.0", "2021.1.0.dev0"), ("2021.2.0", "2021.1.0b0"), ("2021.2.0b0", "2021.1.0"), ("2021.2.0b10", "2021.1.0b2"), ("beta", "stable"), ("1.2.3-2", "1.2.3-1"), ("dev", "latest"), ("latest", "2020.21.1"), ("latest", "beta"), ("1.0.0-beta0", "1.0.0-alpha1"), ("1.0.0-beta", "1.0.0-beta.1"), ("1.0.0-beta1", "1.0.0-beta"), ("1.0.0-beta.2", "1.0.0-beta.1"), ("1.0.0-rc0", "1.0.0-alpha1"), ("1.0.0-beta", "1.0.0-alpha"), ("1.0.0", "1.0.0-beta1"), ("1.0.0", "1.0.0-beta"), ("6.0.rc1", "6.0.dev20210429"), ("6.0", "6.0.rc1"), ("1.2.3.4.5.6.7.8", "1.2.3.4.5.6.6.8"), ("1.0.0b1", "1.0.0b0"), ("1.0.0b10", "1.0.0b9"), ("1.0.0", "1.0.0b0"), (1.0, "1.0.0rc0"), ("0x2df35", "1"), ("0x01002604", "0x01002100"), ("9", "0x0"), ], ) def test_compare(version_a: VersionType, version_b: VersionType) -> None: """Test compare.""" ver_a = AwesomeVersion(version_a) ver_b = AwesomeVersion(version_b) assert ver_a > ver_b assert ver_a >= ver_b assert ver_a != ver_b assert ver_a > version_b assert ver_a >= version_b assert ver_a != version_b assert version_a > ver_b assert version_a >= ver_b assert version_a != ver_b assert ver_b < ver_a assert ver_b <= ver_a assert ver_b < version_a assert ver_b <= version_a if str(version_a).endswith("."): version_a = str(version_a)[:-1] if str(version_b).endswith("."): version_b = str(version_b)[:-1] assert ver_a.string == str(version_a) assert ver_b.string == str(version_b) def test_invalid_compare() -> None: """Test invalid compare.""" invalid = None with pytest.raises( AwesomeVersionCompareException, match="Not a valid AwesomeVersion object" ): assert AwesomeVersion("2020.12.1") > invalid with pytest.raises( AwesomeVersionCompareException, match="Not a valid AwesomeVersion object" ): assert AwesomeVersion("2020.12.1") < invalid with pytest.raises( AwesomeVersionCompareException, match="Not a valid AwesomeVersion object" ): assert AwesomeVersion("2020.12.1") == invalid with pytest.raises( AwesomeVersionCompareException, match="Can't compare and ", ): assert AwesomeVersion("2020.12.1") > AwesomeVersion("string") with pytest.raises( AwesomeVersionCompareException, match="Can't compare and ", ): assert AwesomeVersion("2020.12.1") < AwesomeVersion("") with pytest.raises( AwesomeVersionCompareException, match="Can't compare and ", ): assert AwesomeVersion("2020.12.1") < AwesomeVersion(None) @pytest.mark.parametrize( "version", [1, "1", 1.0, "1.0", 5.10, "5.10"], ) def test_falsy_compare(version: VersionType) -> None: """Test compare.""" ver_a = AwesomeVersion(version) ver_b = AwesomeVersion(version) assert ver_a == ver_b assert ver_a <= ver_b assert ver_a >= ver_b assert not version != ver_b assert not version > ver_b assert not version < ver_b assert not ver_a != version assert not ver_a > version assert not ver_a < version awesomeversion-25.5.0/tests/test_equals.py000066400000000000000000000012131501604777100207230ustar00rootroot00000000000000"""Test equals.""" import pytest from awesomeversion import AwesomeVersion from awesomeversion.typing import VersionType @pytest.mark.parametrize( "version", [ ("1"), ("2020.12.1"), ("2020"), ("2021.2.0b0"), ("2021.2.0.dev20210118"), ], ) def test_equals(version: VersionType) -> None: """Test equals.""" version_object = AwesomeVersion(version) assert version_object == version assert str(version_object) == version assert version_object.string == version assert version_object == AwesomeVersion(f"v{version}") assert version_object == AwesomeVersion(f"V{version}") awesomeversion-25.5.0/tests/test_handlers.py000066400000000000000000000046561501604777100212470ustar00rootroot00000000000000"""Test compare handlers.""" from __future__ import annotations import pytest from awesomeversion import AwesomeVersion from awesomeversion.comparehandlers.modifier import compare_handler_semver_modifier from awesomeversion.comparehandlers.sections import compare_modifier_section from awesomeversion.typing import VersionType @pytest.mark.parametrize( "ver_a,ver_b,result", ( (False, True, None), ("2", "1", True), ("1", "2", False), ("1", "1", False), ("1.0", "1.0", False), ("5.10", "5.10", False), ("1.2.3.4.5b0", "1.2b0", True), ("1.0b1", "1.0b0", True), ("1.0", "1.0b0", True), ("1.0b0", "1.0b1", False), ("1.0b0", "1.0", False), ("1.dev1", "1.dev0", True), ("1.dev0", "1.dev1", False), ("latest", "stable", True), ("1.2.3-dev.1", "1.2.3-alpha.1", False), ("latest", "1", True), ("1.2.3.4.5.6.7.8.9", "1.2.3.4.5.6.7.8.9", False), ("1.0.0", "stable", False), ("0x01002604", "0x01002604", False), ("0x01002604", "0x01002100", True), ("0x01002100", "0x01002604", False), ), ) def test_compare_handlers( ver_a: VersionType, ver_b: VersionType, result: bool | None, ) -> None: """Test handlers.""" version_a = AwesomeVersion(ver_a) version_b = AwesomeVersion(ver_b) if ( version_a.strategy_description is not None or version_b.strategy_description is not None ): assert (AwesomeVersion(ver_a) > ver_b) == result def test_semver_modifier() -> None: """Test semver modifier.""" result = compare_handler_semver_modifier( AwesomeVersion("1.0"), AwesomeVersion("1.0") ) assert result is None @pytest.mark.parametrize( "ver_a,ver_b,result", ( ("1.0.b2", "1.0.invalid4", False), ("2", "1", None), ("1.0.rc2", "1.0.dev1", True), ("1.0.rc2", "1.0.d1", True), ("1.0.b0", "1.0.dev1", True), ("1.0.0beta0", "1.0.dev1", True), ("1.0.b0", "1.0.b1", False), ("1.0.0beta0", "1.0.dev1", True), ("1.0.a0", "1.0.dev1", True), ("1.0.dev0", "1.0.alpha1", False), ), ) def test_compare_modifier_section( ver_a: VersionType, ver_b: VersionType, result: bool | None, ) -> None: """Test compare_modifier_section.""" assert ( compare_modifier_section(AwesomeVersion(ver_a), AwesomeVersion(ver_b)) == result ) awesomeversion-25.5.0/tests/test_snapshots.py000066400000000000000000000024711501604777100214620ustar00rootroot00000000000000"""Testing with snapshots.""" import json import pytest from pytest_snapshot.plugin import Snapshot # type: ignore from awesomeversion import AwesomeVersion from awesomeversion.typing import VersionType from .test_versions import TEST_VERSIONS @pytest.mark.parametrize("version", TEST_VERSIONS) def test_awesomeversion_output_with_snapshot( version: VersionType, snapshot: Snapshot, ) -> None: """Test AwesomeVersion output with snapshot.""" version_obj = AwesomeVersion(version) snapshot.snapshot_dir = f"tests/snapshots/{version_obj.strategy.value}" snapshot.assert_match( json.dumps( { key: getattr(version_obj, key) for key in [ "alpha", "beta", "dev", "major", "micro", "minor", "modifier_type", "modifier", "patch", "prefix", "release_candidate", "sections", "simple", "strategy", "string", "valid", "year", ] }, indent=4, ), f"{version}.json", ) awesomeversion-25.5.0/tests/test_strategy.py000066400000000000000000000056351501604777100213070ustar00rootroot00000000000000"""Test match.""" import pytest from awesomeversion import AwesomeVersion from awesomeversion.strategy import AwesomeVersionStrategy from awesomeversion.typing import VersionType @pytest.mark.parametrize( "version,strategy", [ *[ (v, AwesomeVersionStrategy.BUILDVER) for v in ( "1", "123", "0", ) ], *[ (v, AwesomeVersionStrategy.CALVER) for v in ( "20.1.0", "20.1", "2021.1.0.0", ) ], *[ (v, AwesomeVersionStrategy.PEP440) for v in ( "1.0a1", "1.0.dev1", "1.0b2.post345.dev456", "1.dev0", "1.0.dev456", "1.0a1", "1.0a2.dev456", "1.0a12.dev456", "1.0a12", "1.0b1.dev456", "1.0b2", "1.0+local.1.2.3", "1.0b2.post345.dev456", "1.0b2.post345", "1.0rc1.dev456", "1.0rc1", "1.0.post456.dev34", "1.0.post456", "1.1.dev1", "1.1-dev1", "1.1dev1", "1.1_dev1", ) ], *[ (v, AwesomeVersionStrategy.SEMVER) for v in ( "0.118.0", "1.0.0-alpha", "1.0.0-alpha+1.2", "1.0.0", "1.2.3", "1.8.2-beta.1.10", "1.8.2-beta.1.13", "2.1.3", "2.4.6-8", "1.8.2-beta.1.10+somebuild", ) ], *[ (v, AwesomeVersionStrategy.SIMPLEVER) for v in ( "1.0", "0.1", "1.2.3.4.5", ) ], *[ (v, AwesomeVersionStrategy.SPECIALCONTAINER) for v in ( "beta", "dev", "latest", "stable", ) ], *[ (v, AwesomeVersionStrategy.UNKNOWN) for v in ( "", "unknown", None, False, True, str, AwesomeVersionStrategy, ) ], ], ) def test_strategy_match(version: VersionType, strategy: AwesomeVersionStrategy) -> None: """Test that the version matches the expected strategy.""" assert AwesomeVersion(version).strategy == strategy if strategy != AwesomeVersionStrategy.UNKNOWN: awesome_version = AwesomeVersion( version, ensure_strategy=strategy, find_first_match=True, ) assert awesome_version.valid assert awesome_version.strategy == strategy awesomeversion-25.5.0/tests/test_version_scheme.py000066400000000000000000000043041501604777100224460ustar00rootroot00000000000000"""Test test_version_scheme.""" from __future__ import annotations import pytest from awesomeversion import AwesomeVersion from awesomeversion.strategy import AwesomeVersionStrategy from awesomeversion.typing import VersionType @pytest.mark.parametrize( "version,strategy,dev,beta,modifier_type", [ ("0.118.0", AwesomeVersionStrategy.SEMVER, False, False, None), ("1.0.0b1", AwesomeVersionStrategy.PEP440, False, True, "b"), ("1.0.0-beta.1", AwesomeVersionStrategy.SEMVER, False, True, "beta"), ("v1.0.0-beta.1", AwesomeVersionStrategy.SEMVER, False, True, "beta"), ("2021.2.0.dev1", AwesomeVersionStrategy.CALVER, True, False, "dev"), ("stable", AwesomeVersionStrategy.SPECIALCONTAINER, False, False, None), ], ) def test_version_scheme( version: VersionType, strategy: AwesomeVersionStrategy, dev: bool, beta: bool, modifier_type: str | None, ) -> None: """Test that the version matches the expected scheme.""" version_object = AwesomeVersion(version) assert str(version_object) == version assert version_object.strategy == strategy assert version_object.dev == dev assert version_object.beta == beta assert version_object.modifier_type == modifier_type def test_semver_sections() -> None: """Test semver sections.""" ver_a = AwesomeVersion("1.0.0-beta.1") ver_b = AwesomeVersion("2.0.0") assert ver_a.strategy == AwesomeVersionStrategy.SEMVER assert ver_b.strategy == AwesomeVersionStrategy.SEMVER assert ver_a.major == "1" assert ver_a.minor == "0" assert ver_a.patch == "0" assert ver_a.major < ver_b.major def test_named_sections() -> None: """Test named sections.""" version = AwesomeVersion("2020.1.1") assert version.major == version.year == "2020" assert version.minor == "1" assert version.patch == "1" assert version.micro == version.patch == "1" def test_named_sections_invalid() -> None: """Test invalid named sections.""" version = AwesomeVersion("latest") assert version.major is None assert version.minor is None assert version.patch is None assert version.year == version.major assert version.micro == version.patch awesomeversion-25.5.0/tests/test_versions.py000066400000000000000000000064511501604777100213120ustar00rootroot00000000000000"""Test versions.""" from awesomeversion.strategy import AwesomeVersionStrategy TEST_VERSIONS = [ "", "0.1", "0.118.0", "0", "1.0.0-alpha.1", "1.0.0-alpha.2", "1.0.0-alpha", "1.0.0-alpha+1.2", "1.0.0-alpha1", "1.0.0-alpha10", "1.0.0-alpha9", "1.0.0-beta.1", "1.0.0-beta.10", "1.0.0-beta.2", "1.0.0-beta.9", "1.0.0-beta", "1.0.0-beta0", "1.0.0-beta1", "1.0.0-rc.1", "1.0.0-rc.2", "1.0.0-rc0", "1.0.0", "1.0.0b0", "1.0.0b1", "1.0.0b10", "1.0.0b9", "1.0.0beta0", "1.0.0rc0", "1.0.1", "1.0.a0", "1.0.alpha1", "1.0.b0", "1.0.b1", "1.0.b2", "1.0.d1", "1.0.dev0", "1.0.dev1", "1.0.dev456", "1.0.invalid4", "1.0.post456.dev34", "1.0.post456", "1.0.rc2", "1.0", "1.0+local.1.2.3", "1.0a1", "1.0a12.dev456", "1.0a12", "1.0a2.dev456", "1.0b0", "1.0b1.dev456", "1.0b1", "1.0b2.post345.dev456", "1.0b2.post345", "1.0b2", "1.0rc1.dev456", "1.0rc1", "1.0rc1+local.1.2.3", "1.1.dev1", "1.1-dev1", "1.1_dev1", "1.1", "1.2.3-1", "1.2.3-2", "1.2.3-alpha.1", "1.2.3-dev.1", "1.2.3.4.5.6.6.8", "1.2.3.4.5.6.7.8.9", "1.2.3.4.5.6.7.8", "1.2.3.4.5", "1.2.3.4.5b0", "1.2.3.4", "1.2.3", "1.2b0", "1.8.2-beta.1.10", "1.8.2-beta.1.10+somebuild", "1.8.2-beta.1.13", "1.dev0", "1.dev1", "1-dev1", "1_dev1", "1", "123", "2.0.0-alpha.1", "2.0.0-alpha.2", "2.0.0-beta.1", "2.0.0-beta.2", "2.0.0-rc.1", "2.0.0-rc.2", "2.0.0", "2.1.0", "2.1.1", "2.1.3", "2.4.6-8", "2", "20.1.0", "20.1", "2019", "2020.1.1.", "2020.1", "2020.12.0", "2020.12.1", "2020.12.dev1602", "2020.12.dev1603", "2020.2.0", "2020.21.1", "2020", "2021.1.0.0", "2021.1.0.dev0", "2021.1.0", "2021.1.0a0", "2021.1.0b0", "2021.1.0b1", "2021.1.0b2", "2021.1.0dev0", "2021.1.0dev20210101", "2021.2.0.dev20210118", "2021.2.0", "2021.2.0b0", "2021.2.0b10", "2022.01.01", "2022.01.02", "2022.02.01", "2022.02.02", "2022.03.01", "2022.03.02", "2023.01.01", "2023.01.02", "2023.02.01", "2023.02.02", "2023.03.01", "2023.03.02", "3.0.0-alpha.1", "3.0.0-alpha.2", "3.0.0-beta.1", "3.0.0-beta.2", "3.0.0-rc.1", "3.0.0-rc.2", "3.0.0", "3.0.1", "4.0.0", "4.1.0", "4.2.0", "5.0.0", "5.1.0", "5.1.1", "5.10", "5.11", "6.0.0", "6.0.dev20210429", "6.0.rc1", "6.0", "6.1.0", "6.2.0", "7.0.0", "7.1.0", "7.1.1", "a.b.c", "beta", "dev", "latest", "stable", "unknown", "v1.0.1", "v1.0", "v1.1.1", "v1.1", "v1.2.1", "v1.2", "v2.0.1", "v2.0", "v2.1.1", "v2.1", "v2.2.1", "v2.2", "00AABB00", "01234567", "0x0", "0x01002100", 0x01002101, "0X01002604", "0x2df35", "0x00AABB00", "0x23089631", "0x0g", AwesomeVersionStrategy, False, None, str, True, ] def test_human_error_in_version_list() -> None: """Test for human error in version list.""" assert len(TEST_VERSIONS) == len(set(TEST_VERSIONS)) awesomeversion-25.5.0/tests/utils/000077500000000000000000000000001501604777100171635ustar00rootroot00000000000000awesomeversion-25.5.0/tests/utils/__init__.py000066400000000000000000000000001501604777100212620ustar00rootroot00000000000000awesomeversion-25.5.0/tests/utils/test_validate.py000066400000000000000000000006041501604777100223650ustar00rootroot00000000000000"""Tests for the validate util.""" import pytest from awesomeversion.utils.validate import value_is_base16 @pytest.mark.parametrize( ("value", "expected"), ( ("0x0", True), ("0xah", False), ("0", True), ), ) def test_value_is_base16(value: str, expected: bool) -> None: """Test value is base16.""" assert value_is_base16(value) == expected