File: patch.py

package info (click to toggle)
python-poetry-dynamic-versioning 1.9.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 460 kB
  • sloc: python: 1,528; makefile: 4
file content (58 lines) | stat: -rw-r--r-- 1,614 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import atexit
import functools

from poetry_dynamic_versioning import (
    _revert_version,
    _get_and_apply_version,
    _get_config_from_path,
    _get_pyproject_path_from_poetry,
    _state,
)


def _patch_poetry_create(factory_mod) -> None:
    try:
        from poetry.core.constraints.version import Version as PoetryVersion
    except ImportError:
        from poetry.core.semver.version import Version as PoetryVersion

    original_poetry_create = getattr(factory_mod, "Factory").create_poetry

    @functools.wraps(original_poetry_create)
    def alt_poetry_create(cls, *args, **kwargs):
        instance = original_poetry_create(cls, *args, **kwargs)

        if not _state.cli_mode:
            name = _get_and_apply_version(
                pyproject_path=_get_pyproject_path_from_poetry(instance.pyproject),
            )
            if name:
                version = _state.projects[name].version
                instance._package._version = PoetryVersion.parse(version)
                instance._package._pretty_version = version

        return instance

    getattr(factory_mod, "Factory").create_poetry = alt_poetry_create


def _apply_patches() -> None:
    if not _state.patched_core_poetry_create:
        from poetry.core import factory as factory_mod

        _patch_poetry_create(factory_mod)
        _state.patched_core_poetry_create = True


def activate() -> None:
    config = _get_config_from_path()
    if not config["enable"]:
        return

    _apply_patches()
    atexit.register(deactivate)


def deactivate() -> None:
    if not _state.cli_mode:
        _revert_version()