Skip to content
Snippets Groups Projects
Commit 227c1b61 authored by Tobias Winchen's avatar Tobias Winchen
Browse files

Use setuptools_scm vor versioning, adapt to PEP 621

parent 1d3495b5
Branches pep621_install
No related tags found
No related merge requests found
Pipeline #146229 failed
"""
Determine the version of the code. If no version number is given, the version is deduced from git
"""
import setuptools_scm
from importlib.metadata import version, PackageNotFoundError
# if hard coded version from setup.py use this
# ToDo, not implemented as no setup.py here
import os
import subprocess
import sys
import mpikat.core.logger
from mpikat.core import logger
_log = mpikat.core.logger.getLogger("mpikat.core.version")
_log = logger.getLogger("mpikat.core.version")
VERSION = '0.0.1+UNKNOWN'
try:
_log.debug("Determine version from git repository")
import git
path = os.path.dirname(os.path.realpath(__file__))
_log.debug("code file located in {}".format(path))
rroot = os.path.join(path, "../..")
_log.debug("repository root {}".format(rroot))
repo = git.Repo(rroot)
# Check if current version is a tag, use shaidx otherwise
_log.debug("Get latest tag")
if sys.version_info >= (3, 6):
LATEST_TAG = subprocess.check_output('git describe --abbrev=0 --tags'.split(), cwd=rroot, encoding='utf-8').strip()
else:
LATEST_TAG = subprocess.check_output('git describe --abbrev=0 --tags'.split(), cwd=rroot).strip()
_log.debug(" LATEST TAG: %s", LATEST_TAG)
if repo.tags[LATEST_TAG].commit == repo.head.commit:
VERSION = "{}".format(LATEST_TAG)
if repo.is_dirty():
VERSION += "+withMODIFICATIONS"
else:
# This date format is not well readable, but does not violate
# PEP440 local version definition. Adhering to PEP440 is necessary
# for installation with pip / setuptools in new versions
VERSION = "{}+{}.{}".format(LATEST_TAG, repo.head.object.hexsha, repo.head.object.authored_datetime.strftime("%Y%m%dT%H%M%S"))
if repo.is_dirty():
VERSION += ".withMODIFICATIONS"
except Exception as E:
_log.debug("Error determining version from git:\n{}".format(E))
VERSION = setuptools_scm.get_version(version_scheme="release-branch-semver",
root='../..', relative_to=__file__)
except LookupError:
_log.debug("Cannot retrieve version from git, possibly because package was installed")
try:
version_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'version.txt')
with open(version_file, "r") as f:
VERSION = f.read().strip()
if not VERSION.endswith(".fromFILE"):
VERSION += ".fromFILE"
VERSION = version("mpikat")
except PackageNotFoundError:
_log.warning("Cannot determine version")
VERSION = '0.0.1+UNKNOWN'
except Exception as E:
_log.debug("Cannot read version file: {}".format(E))
_log.error("Cannot determin verion!")
_log.debug("VERSION: {}".format(VERSION))
_log.debug("VERSION: %s", VERSION)
if __name__ == "__main__":
print(VERSION)
[project]
name = "mpikat"
authors = [
{name="Ewan Barr", email="ebarr@mpifr.de"},
{name="Niclas Esser", email="nesser@mpifr.de"},
{name="Tobias Winchen", email="twinchen@mpifr.de"},
{name="Jason Wu", email="jwu@mpifr.de"}
]
description = "Control layer for the EDD backend."
license = {file="LICENSE"}
readme = "README.md"
requires-python= ">=3.6"
dynamic = ["version"]
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
dependencies = [
'coloredlogs',
'aiokatcp',
]
[project.urls]
"Homepage" = "https://gitlab.mpcdf.mpg.de/mpifr-bdg/mpikat"
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
build-backend = "setuptools.build_meta"
# empty section required
[tool.setuptools_scm]
[metadata]
name = mpikat
version = file: mpikat/core/version.txt
author = Ewan Barr, Tobias Winchen, Jason Wu
author_email = ebarr@mpifr-bonn.mpg.de
description= Control software for the EDD
long_description = file: README.md
long_description_content_type = text/markdown
url=https://gitlab.mpcdf.mpg.de/mpifr-bdg/mpikat.git
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT
Operating System :: Linux
[options]
packages = find:
python_requires = >=2.7
include_package_data = True
[options.package_data]
* = core/version.txt,
from setuptools import setup; setup()
from __future__ import print_function, division, unicode_literals
# pylint: disable=protected-access,missing-function-docstring,too-few-public-methods,missing-class-docstring
import unittest
import logging
from mpikat.utils.core_manager import CoreManager
import mpikat.utils.numa as numa
from mpikat.utils import numa
class Test_core_manager(unittest.TestCase):
def setUp(self):
self.cm = CoreManager('0')
self.cm = CoreManager("0")
def test_too_many_cores(self):
self.cm.add_task('T1', len(numa.getInfo()['0']['cores']) + len(numa.getInfo()['0']['isolated_cores'])+ 1 )
self.cm.add_task(
"T1",
len(numa.getInfo()["0"]["cores"])
+ len(numa.getInfo()["0"]["isolated_cores"])
+ 1,
)
self.assertEqual(len(self.cm.get_cores('T1')), len(numa.getInfo()['0']['cores']))
self.assertEqual(
len(self.cm.get_cores("T1")), len(numa.getInfo()["0"]["cores"])
)
def test_too_many_isolated_cores(self):
self.cm.add_task('T1', len(numa.getInfo()['0']['isolated_cores']) + 1, require_isolated=True)
with self.assertRaises(Exception) as context:
self.cm.get_cores('T1')
self.cm.add_task(
"T1", len(numa.getInfo()["0"]["isolated_cores"]) + 1, require_isolated=True
)
with self.assertRaises(Exception):
self.cm.get_cores("T1")
def test_use_non_isolated_cores(self):
self.cm.add_task('T1', len(numa.getInfo()['0']['isolated_cores']) + 1, prefere_isolated=True)
self.cm.get_cores('T1')
self.cm.add_task(
"T1", len(numa.getInfo()["0"]["isolated_cores"]) + 1, prefere_isolated=True
)
self.cm.get_cores("T1")
def test_list_return(self):
self.cm.add_task('T1', 1)
self.cm.add_task('T2', 2)
self.cm.add_task("T1", 1)
self.cm.add_task("T2", 2)
self.assertTrue(isinstance(self.cm.get_cores('T1'), list))
self.assertTrue(isinstance(self.cm.get_cores('T2'), list))
self.assertEqual(len(self.cm.get_cores('T1')), 1)
self.assertEqual(len(self.cm.get_cores('T2')), 2)
self.assertTrue(isinstance(self.cm.get_cores("T1"), list))
self.assertTrue(isinstance(self.cm.get_cores("T2"), list))
self.assertEqual(len(self.cm.get_cores("T1")), 1)
self.assertEqual(len(self.cm.get_cores("T2")), 2)
def test_list_str_equivalence(self):
self.cm.add_task('T1', 3)
self.assertEqual(self.cm.get_cores('T1'), self.cm.get_coresstr("T1").split(','))
self.cm.add_task("T1", 3)
self.assertEqual(self.cm.get_cores("T1"), self.cm.get_coresstr("T1").split(","))
def test_non_ovverlap(self):
self.cm.add_task('T1', len(numa.getInfo()['0']['cores']) // 2)
self.cm.add_task('T2', len(numa.getInfo()['0']['cores']) // 2)
T1 = self.cm.get_cores('T1')
T2 = self.cm.get_cores('T2')
#print("XXX", T1, type(T1))
self.assertEqual(len(T1), len(set(T1)), "Cores associated to task multiple times: {}".format(T1))
self.assertEqual(len(T2), len(set(T2)), "Cores associated to task multiple times: {}".format(T2))
self.assertEqual(len(T2 + T1), len(set(T2 + T1)), "Cores not unique: T1={}, T2={}".format(T1, T2))
if __name__ == '__main__':
self.cm.add_task("T1", len(numa.getInfo()["0"]["cores"]) // 2)
self.cm.add_task("T2", len(numa.getInfo()["0"]["cores"]) // 2)
T1 = self.cm.get_cores("T1")
T2 = self.cm.get_cores("T2")
self.assertEqual(
len(T1),
len(set(T1)),
"Cores associated to task multiple times: {}".format(T1),
)
self.assertEqual(
len(T2),
len(set(T2)),
"Cores associated to task multiple times: {}".format(T2),
)
self.assertEqual(
len(T2 + T1),
len(set(T2 + T1)),
"Cores not unique: T1={}, T2={}".format(T1, T2),
)
if __name__ == "__main__":
unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment