From 92213162c29aad1b336663df1862ca4b7b0eeb2c Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Thu, 18 Mar 2021 18:40:13 +0000 Subject: [PATCH] lazy import pkg_resources for faster cli --- src/bumpver/cli.py | 5 ++--- src/bumpver/version.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/bumpver/cli.py b/src/bumpver/cli.py index 9b0fa80..2c4a816 100755 --- a/src/bumpver/cli.py +++ b/src/bumpver/cli.py @@ -14,7 +14,6 @@ import subprocess as sp import click import colorama -import pkg_resources from . import vcs from . import config @@ -509,7 +508,7 @@ def _is_valid_version(raw_pattern: str, old_version: str, new_version: str) -> b logger.error(f"Invalid version '{new_version}' for pattern '{raw_pattern}'") return False - if pkg_resources.parse_version(new_version) <= pkg_resources.parse_version(old_version): + if version.parse_version(new_version) <= version.parse_version(old_version): logger.error("Invariant violated: New version must be greater than old version ") logger.error(f" Failed Invariant: '{new_version}' > '{old_version}'") return False @@ -651,7 +650,7 @@ def get_latest_vcs_version_tag(cfg: config.Config, fetch: bool) -> typ.Optional[ version_tags = [tag for tag in all_tags if v1version.is_valid(tag, cfg.version_pattern)] if version_tags: - version_tags.sort(key=pkg_resources.parse_version, reverse=True) + version_tags.sort(key=version.parse_version, reverse=True) _debug_tags = ", ".join(version_tags[:3]) logger.debug(f"found tags: {_debug_tags} ... ({len(version_tags)} in total)") return version_tags[0] diff --git a/src/bumpver/version.py b/src/bumpver/version.py index 5c855b6..b344ddb 100644 --- a/src/bumpver/version.py +++ b/src/bumpver/version.py @@ -6,11 +6,16 @@ import typing as typ import datetime as dt -import pkg_resources - MaybeInt = typ.Optional[int] +def parse_version(version: str) -> typ.Any: + # pylint: disable=import-outside-toplevel; lazy import to speed up --help + import pkg_resources + + return pkg_resources.parse_version(version) + + class V1CalendarInfo(typ.NamedTuple): """Container for calendar components of version strings.""" @@ -171,4 +176,4 @@ def to_pep440(version: str) -> str: >>> to_pep440("v201811.0007-beta") '201811.7b0' """ - return str(pkg_resources.parse_version(version)) + return str(parse_version(version))