| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- """
- Contains all deprecated functions.
- .. autofunction: deprecated
- """
- import inspect
- import warnings
- from functools import partial, wraps
- from types import FrameType
- from typing import Type, Callable, Optional, cast
- from . import cli
- from .version import Version
- from ._types import Decorator, F
- def deprecated(
- func: Optional[F] = None,
- *,
- replace: Optional[str] = None,
- version: Optional[str] = None,
- remove: Optional[str] = None,
- category: Type[Warning] = DeprecationWarning,
- ) -> Decorator:
- """
- Decorates a function to output a deprecation warning.
- :param func: the function to decorate
- :param replace: the function to replace (use the full qualified
- name like ``semver.version.Version.bump_major``.
- :param version: the first version when this function was deprecated.
- :param category: allow you to specify the deprecation warning class
- of your choice. By default, it's :class:`DeprecationWarning`, but
- you can choose :class:`PendingDeprecationWarning` or a custom class.
- :return: decorated function which is marked as deprecated
- """
- if func is None:
- return partial(
- deprecated,
- replace=replace,
- version=version,
- remove=remove,
- category=category,
- )
- @wraps(func)
- def wrapper(*args, **kwargs) -> Callable[..., F]:
- msg_list = ["Function 'semver.{f}' is deprecated."]
- if version:
- msg_list.append("Deprecated since version {v}. ")
- if not remove:
- msg_list.append("This function will be removed in semver 3.")
- else:
- msg_list.append(str(remove))
- if replace:
- msg_list.append("Use {r!r} instead.")
- else:
- msg_list.append("Use the respective 'semver.Version.{r}' instead.")
- f = cast(F, func).__qualname__
- r = replace or f
- frame = cast(FrameType, cast(FrameType, inspect.currentframe()).f_back)
- msg = " ".join(msg_list)
- warnings.warn_explicit(
- msg.format(f=f, r=r, v=version),
- category=category,
- filename=inspect.getfile(frame.f_code),
- lineno=frame.f_lineno,
- )
- # As recommended in the Python documentation
- # https://docs.python.org/3/library/inspect.html#the-interpreter-stack
- # better remove the interpreter stack:
- del frame
- return func(*args, **kwargs) # type: ignore
- return wrapper
- @deprecated(
- version="3.0.0",
- remove="Still under investigation, see #258.",
- category=PendingDeprecationWarning,
- )
- def compare(ver1: str, ver2: str) -> int:
- """
- Compare two versions strings.
- .. deprecated:: 3.0.0
- The situation of this function is unclear and it might
- disappear in the future.
- If possible, use :meth:`semver.version.Version.compare`.
- See :gh:`258` for details.
- :param ver1: first version string
- :param ver2: second version string
- :return: The return value is negative if ver1 < ver2,
- zero if ver1 == ver2 and strictly positive if ver1 > ver2
- >>> semver.compare("1.0.0", "2.0.0")
- -1
- >>> semver.compare("2.0.0", "1.0.0")
- 1
- >>> semver.compare("2.0.0", "2.0.0")
- 0
- """
- return Version.parse(ver1).compare(ver2)
- @deprecated(version="2.10.0")
- def parse(version):
- """
- Parse version to major, minor, patch, pre-release, build parts.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.parse` instead.
- :param version: version string
- :return: dictionary with the keys 'build', 'major', 'minor', 'patch',
- and 'prerelease'. The prerelease or build keys can be None
- if not provided
- :rtype: dict
- >>> ver = semver.parse('3.4.5-pre.2+build.4')
- >>> ver['major']
- 3
- >>> ver['minor']
- 4
- >>> ver['patch']
- 5
- >>> ver['prerelease']
- 'pre.2'
- >>> ver['build']
- 'build.4'
- """
- return Version.parse(version).to_dict()
- @deprecated(replace="semver.version.Version.parse", version="2.10.0")
- def parse_version_info(version):
- """
- Parse version string to a Version instance.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.parse` instead.
- .. versionadded:: 2.7.2
- Added :func:`semver.parse_version_info`
- :param version: version string
- :return: a :class:`VersionInfo` instance
- >>> version_info = semver.Version.parse("3.4.5-pre.2+build.4")
- >>> version_info.major
- 3
- >>> version_info.minor
- 4
- >>> version_info.patch
- 5
- >>> version_info.prerelease
- 'pre.2'
- >>> version_info.build
- 'build.4'
- """
- return Version.parse(version)
- @deprecated(version="2.10.0")
- def match(version, match_expr):
- """
- Compare two versions strings through a comparison.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.match` instead.
- :param str version: a version string
- :param str match_expr: operator and version; valid operators are
- < smaller than
- > greater than
- >= greator or equal than
- <= smaller or equal than
- == equal
- != not equal
- :return: True if the expression matches the version, otherwise False
- :rtype: bool
- >>> semver.match("2.0.0", ">=1.0.0")
- True
- >>> semver.match("1.0.0", ">1.0.0")
- False
- """
- ver = Version.parse(version)
- return ver.match(match_expr)
- @deprecated(replace="max", version="2.10.2")
- def max_ver(ver1, ver2):
- """
- Returns the greater version of two versions strings.
- .. deprecated:: 2.10.2
- Use :func:`max` instead.
- :param ver1: version string 1
- :param ver2: version string 2
- :return: the greater version of the two
- :rtype: :class:`Version`
- >>> semver.max_ver("1.0.0", "2.0.0")
- '2.0.0'
- """
- return str(max(ver1, ver2, key=Version.parse))
- @deprecated(replace="min", version="2.10.2")
- def min_ver(ver1, ver2):
- """
- Returns the smaller version of two versions strings.
- .. deprecated:: 2.10.2
- Use Use :func:`min` instead.
- :param ver1: version string 1
- :param ver2: version string 2
- :return: the smaller version of the two
- :rtype: :class:`Version`
- >>> semver.min_ver("1.0.0", "2.0.0")
- '1.0.0'
- """
- return str(min(ver1, ver2, key=Version.parse))
- @deprecated(replace="str(versionobject)", version="2.10.0")
- def format_version(major, minor, patch, prerelease=None, build=None):
- """
- Format a version string according to the Semantic Versioning specification.
- .. deprecated:: 2.10.0
- Use ``str(Version(VERSION)`` instead.
- :param int major: the required major part of a version
- :param int minor: the required minor part of a version
- :param int patch: the required patch part of a version
- :param str prerelease: the optional prerelease part of a version
- :param str build: the optional build part of a version
- :return: the formatted string
- :rtype: str
- >>> semver.format_version(3, 4, 5, 'pre.2', 'build.4')
- '3.4.5-pre.2+build.4'
- """
- return str(Version(major, minor, patch, prerelease, build))
- @deprecated(version="2.10.0")
- def bump_major(version):
- """
- Raise the major part of the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.bump_major` instead.
- :param: version string
- :return: the raised version string
- :rtype: str
- >>> semver.bump_major("3.4.5")
- '4.0.0'
- """
- return str(Version.parse(version).bump_major())
- @deprecated(version="2.10.0")
- def bump_minor(version):
- """
- Raise the minor part of the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.bump_minor` instead.
- :param: version string
- :return: the raised version string
- :rtype: str
- >>> semver.bump_minor("3.4.5")
- '3.5.0'
- """
- return str(Version.parse(version).bump_minor())
- @deprecated(version="2.10.0")
- def bump_patch(version):
- """
- Raise the patch part of the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.bump_patch` instead.
- :param: version string
- :return: the raised version string
- :rtype: str
- >>> semver.bump_patch("3.4.5")
- '3.4.6'
- """
- return str(Version.parse(version).bump_patch())
- @deprecated(version="2.10.0")
- def bump_prerelease(version, token="rc"):
- """
- Raise the prerelease part of the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.bump_prerelease` instead.
- :param version: version string
- :param token: defaults to 'rc'
- :return: the raised version string
- :rtype: str
- >>> semver.bump_prerelease('3.4.5', 'dev')
- '3.4.5-dev.1'
- """
- return str(Version.parse(version).bump_prerelease(token))
- @deprecated(version="2.10.0")
- def bump_build(version, token="build"):
- """
- Raise the build part of the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.bump_build` instead.
- :param version: version string
- :param token: defaults to 'build'
- :return: the raised version string
- :rtype: str
- >>> semver.bump_build('3.4.5-rc.1+build.9')
- '3.4.5-rc.1+build.10'
- """
- return str(Version.parse(version).bump_build(token))
- @deprecated(version="2.10.0")
- def finalize_version(version):
- """
- Remove any prerelease and build metadata from the version string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.finalize_version` instead.
- .. versionadded:: 2.7.9
- Added :func:`finalize_version`
- :param version: version string
- :return: the finalized version string
- :rtype: str
- >>> semver.finalize_version('1.2.3-rc.5')
- '1.2.3'
- """
- verinfo = Version.parse(version)
- return str(verinfo.finalize_version())
- @deprecated(version="2.10.0")
- def replace(version, **parts):
- """
- Replace one or more parts of a version and return the new string.
- .. deprecated:: 2.10.0
- Use :meth:`~semver.version.Version.replace` instead.
- .. versionadded:: 2.9.0
- Added :func:`replace`
- :param version: the version string to replace
- :param parts: the parts to be updated. Valid keys are:
- ``major``, ``minor``, ``patch``, ``prerelease``, or ``build``
- :return: the replaced version string
- :raises TypeError: if ``parts`` contains invalid keys
- >>> import semver
- >>> semver.replace("1.2.3", major=2, patch=10)
- '2.2.10'
- """
- return str(Version.parse(version).replace(**parts))
- # CLI
- cmd_bump = deprecated(cli.cmd_bump, replace="semver.cli.cmd_bump", version="3.0.0")
- cmd_check = deprecated(cli.cmd_check, replace="semver.cli.cmd_check", version="3.0.0")
- cmd_compare = deprecated(
- cli.cmd_compare, replace="semver.cli.cmd_compare", version="3.0.0"
- )
- cmd_nextver = deprecated(
- cli.cmd_nextver, replace="semver.cli.cmd_nextver", version="3.0.0"
- )
- createparser = deprecated(
- cli.createparser, replace="semver.cli.createparser", version="3.0.0"
- )
- process = deprecated(cli.process, replace="semver.cli.process", version="3.0.0")
- main = deprecated(cli.main, replace="semver.cli.main", version="3.0.0")
|