File: __init__.py

package info (click to toggle)
python-testtools 2.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,244 kB
  • sloc: python: 15,086; makefile: 127; sh: 3
file content (145 lines) | stat: -rw-r--r-- 3,891 bytes parent folder | download
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)