1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
# Copyright (c) 2008-2012 testtools developers. See LICENSE for details.
"""Extensions to the standard Python unittest library."""
__all__ = [
"ConcurrentStreamTestSuite",
"ConcurrentTestSuite",
"CopyStreamResult",
"DecorateTestCaseResult",
"ErrorHolder",
"ExpectedException",
"ExtendedToOriginalDecorator",
"ExtendedToStreamDecorator",
"FixtureSuite",
"MultiTestResult",
"MultipleExceptions",
"PlaceHolder",
"ResourcedToStreamDecorator",
"RunTest",
"StreamFailFast",
"StreamResult",
"StreamResultRouter",
"StreamSummary",
"StreamTagger",
"StreamToDict",
"StreamToExtendedDecorator",
"StreamToQueue",
"Tagger",
"TestByTestResult",
"TestCase",
"TestControl",
"TestResult",
"TestResultDecorator",
"TextTestResult",
"ThreadsafeForwardingResult",
"TimestampingStreamResult",
"__version__",
"clone_test_with_new_id",
"iterate_tests",
"run_test_with",
"skip",
"skipIf",
"skipUnless",
"unique_text_generator",
"version",
]
from testtools.matchers._impl import Matcher # noqa: F401
from testtools.runtest import (
MultipleExceptions,
RunTest,
)
from testtools.testcase import (
DecorateTestCaseResult,
ErrorHolder,
ExpectedException,
PlaceHolder,
TestCase,
clone_test_with_new_id,
run_test_with,
skip,
skipIf,
skipUnless,
unique_text_generator,
)
from testtools.testresult import (
CopyStreamResult,
ExtendedToOriginalDecorator,
ExtendedToStreamDecorator,
MultiTestResult,
ResourcedToStreamDecorator,
StreamFailFast,
StreamResult,
StreamResultRouter,
StreamSummary,
StreamTagger,
StreamToDict,
StreamToExtendedDecorator,
StreamToQueue,
Tagger,
TestByTestResult,
TestControl,
TestResult,
TestResultDecorator,
TextTestResult,
ThreadsafeForwardingResult,
TimestampingStreamResult,
)
from testtools.testsuite import (
ConcurrentStreamTestSuite,
ConcurrentTestSuite,
FixtureSuite,
iterate_tests,
)
def __get_git_version() -> str | None:
import os
import subprocess
cwd = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir)
try:
out = subprocess.check_output(
["git", "describe"], stderr=subprocess.STDOUT, cwd=cwd
)
except (OSError, subprocess.CalledProcessError):
return None
try:
version = out.strip().decode("utf-8")
except UnicodeDecodeError:
return None
if "-" in version: # after tag
# convert version-N-githash to version.postN+githash
return version.replace("-", ".post", 1).replace("-g", "+git", 1)
else:
return version
# same format as sys.version_info: "A tuple containing the five components of
# the version number: major, minor, micro, releaselevel, and serial. All
# values except releaselevel are integers; the release level is 'alpha',
# 'beta', 'candidate', or 'final'. The version_info value corresponding to the
# Python version 2.0 is (2, 0, 0, 'final', 0)." Additionally we use a
# releaselevel of 'dev' for unreleased under-development code.
#
# If the releaselevel is 'alpha' then the major/minor/micro components are not
# established at this point, and setup.py will use a version of next-$(revno).
# If the releaselevel is 'final', then the tarball will be major.minor.micro.
# Otherwise it is major.minor.micro~$(revno).
try:
from ._version import __version__, version
except ModuleNotFoundError:
# package is not installed
if v := __get_git_version():
version = v
# we're in a git repo
__version__ = tuple([int(x) if x.isdigit() else x for x in version.split(".")])
else:
# we're working with a tarball or similar
version = "0.0.0"
__version__ = (0, 0, 0)
|