diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index f7a6450..06dd0bf 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -11,7 +11,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.10.4" +__version__ = "2.10.5" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/administration_tools.py b/davtelepot/administration_tools.py index 0715dbf..cd39a41 100644 --- a/davtelepot/administration_tools.py +++ b/davtelepot/administration_tools.py @@ -18,6 +18,7 @@ import re import types from collections import OrderedDict +from importlib.metadata import version as get_package_version_from_metadata from typing import Union, List, Tuple # Third party modules @@ -44,6 +45,13 @@ variable_regex = re.compile(r"(?P[a-zA-Z]\w*)\s*=\s*" r"\"[^\"]*\")") +def get_package_version(package: types.ModuleType): + """Get version of given package.""" + if hasattr(package, '__version__'): + return package.__version__ + return get_package_version_from_metadata(package.__name__) + + async def _forward_to(update, bot: Bot, sender, @@ -865,7 +873,12 @@ async def get_new_versions(bot: Bot, "skipping...") continue new_version = web_page['info']['version'] - current_version = package.__version__ + try: + current_version = get_package_version(package) + except TypeError: + current_version = "NA" + logging.error("Could not get current version of " + "package %s", package.__name__) notification_record = bot.db['updates_notifications'].find_one( package=package.__name__, order_by=['-id'], @@ -895,7 +908,7 @@ async def version_command(bot: Bot, update: dict, text += f'Python: {platform.python_version()}\n' text += '\n'.join( f"{package.__name__}: " - f"{package.__version__}" + f"{get_package_version(package)}" for package in bot.packages ) temporary_message = await bot.send_message( @@ -939,7 +952,7 @@ async def notify_new_version(bot: Bot): order_by=['-id'] ) current_versions = { - f"{package.__name__}_version": package.__version__ + f"{package.__name__}_version": get_package_version(package) for package in bot.packages } current_versions['last_commit'] = last_commit