From ef9b05602bc6534d94615ab62697c910f931cc43 Mon Sep 17 00:00:00 2001 From: Rongxin Liu Date: Sat, 18 Nov 2023 23:36:03 -0500 Subject: [PATCH] replace pkg_resources with importlib.metadata for Python 3.12, require python>=3.8 --- setup.py | 2 +- submit50/__init__.py | 17 ++++------------- submit50/__main__.py | 23 ++++++++++++----------- 3 files changed, 17 insertions(+), 25 deletions(-) mode change 100644 => 100755 setup.py mode change 100644 => 100755 submit50/__init__.py mode change 100644 => 100755 submit50/__main__.py diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index e125a6c..c98e932 --- a/setup.py +++ b/setup.py @@ -26,6 +26,6 @@ entry_points={ "console_scripts": ["submit50=submit50.__main__:main"] }, - version="3.1.2", + version="3.1.3", include_package_data=True ) diff --git a/submit50/__init__.py b/submit50/__init__.py old mode 100644 new mode 100755 index c2bfa22..af841cc --- a/submit50/__init__.py +++ b/submit50/__init__.py @@ -1,19 +1,10 @@ -from pkg_resources import get_distribution, DistributionNotFound +from importlib.metadata import PackageNotFoundError, version import os -# https://stackoverflow.com/questions/17583443/what-is-the-correct-way-to-share-package-version-with-setup-py-and-the-package try: - _dist = get_distribution("submit50") - # Normalize path for cross-OS compatibility. - _dist_loc = os.path.normcase(_dist.location) - _here = os.path.normcase(__file__) - if not _here.startswith(os.path.join(_dist_loc, "submit50")): - # This version is not installed, but another version is. - raise DistributionNotFound -except DistributionNotFound: - __version__ = "locally installed, no version information available" -else: - __version__ = _dist.version + __version__ = version("submit50") +except PackageNotFoundError: + __version__ = "UNKNOWN" CONFIG_LOADER = __import__("lib50").config.Loader("submit50") CONFIG_LOADER.scope("files", "include", "exclude", "require") diff --git a/submit50/__main__.py b/submit50/__main__.py old mode 100644 new mode 100755 index 5665505..85c443d --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -3,7 +3,6 @@ import enum import gettext import logging -import pkg_resources import re import shutil import sys @@ -14,10 +13,12 @@ import requests import termcolor +from packaging import version +from importlib.resources import files from . import __version__, CONFIG_LOADER # Internationalization -gettext.install("submit50", pkg_resources.resource_filename("submit50", "locale")) +gettext.install("submit50", files("submit50").joinpath("locale")) SUBMIT_URL = "https://submit.cs50.io" @@ -65,8 +66,8 @@ def check_version(): "Please visit our status page https://cs50.statuspage.io for more information.")) # Check that latest version == version installed - required_version = pkg_resources.parse_version(res.text.strip()) - local_version = pkg_resources.parse_version(__version__) + required_version = version.parse(res.text.strip()) + local_version = version.parse(__version__) if required_version > local_version: raise Error(_("You have an outdated version of submit50. " @@ -126,7 +127,7 @@ def prompt(honesty, included, excluded): # If there's no honesty question, continue. if not honesty: return True - + # Prompt for honesty try: # Show default message @@ -138,17 +139,17 @@ def prompt(honesty, included, excluded): # If a custom message is configured, show that instead else: honesty_question = str(honesty) - + # Get the user's answer answer = input(honesty_question) except EOFError: answer = None print() - + # If no answer given, or yes is not given, don't continue if not answer or not re.match(f"^\s*(?:{_('y|yes')})\s*$", answer, re.I): return False - + # Otherwise, do continue return True @@ -199,12 +200,12 @@ def main(): '\ndebug: adds the output of all commands run.') ) parser.add_argument( - "-V", "--version", - action="version", + "-V", "--version", + action="version", version=f"%(prog)s {__version__}" ) parser.add_argument( - "slug", + "slug", help=_("prescribed identifier of work to submit") )