ยปCore Development>Code coverage>Doc/tools/sphinxext/patchlevel.py

Python code coverage for Doc/tools/sphinxext/patchlevel.py

#countcontent
1n/a# -*- coding: utf-8 -*-
2n/a"""
3n/a patchlevel.py
4n/a ~~~~~~~~~~~~~
5n/a
6n/a Extract version info from Include/patchlevel.h.
7n/a Adapted from Doc/tools/getversioninfo.
8n/a
9n/a :copyright: 2007-2008 by Georg Brandl.
10n/a :license: Python license.
11n/a"""
12n/a
13n/aimport os
14n/aimport re
15n/aimport sys
16n/a
17n/adef get_header_version_info(srcdir):
18n/a patchlevel_h = os.path.join(srcdir, '..', 'Include', 'patchlevel.h')
19n/a
20n/a # This won't pick out all #defines, but it will pick up the ones we
21n/a # care about.
22n/a rx = re.compile(r'\s*#define\s+([a-zA-Z][a-zA-Z_0-9]*)\s+([a-zA-Z_0-9]+)')
23n/a
24n/a d = {}
25n/a f = open(patchlevel_h)
26n/a try:
27n/a for line in f:
28n/a m = rx.match(line)
29n/a if m is not None:
30n/a name, value = m.group(1, 2)
31n/a d[name] = value
32n/a finally:
33n/a f.close()
34n/a
35n/a release = version = '%s.%s' % (d['PY_MAJOR_VERSION'], d['PY_MINOR_VERSION'])
36n/a micro = int(d['PY_MICRO_VERSION'])
37n/a release += '.' + str(micro)
38n/a
39n/a level = d['PY_RELEASE_LEVEL']
40n/a suffixes = {
41n/a 'PY_RELEASE_LEVEL_ALPHA': 'a',
42n/a 'PY_RELEASE_LEVEL_BETA': 'b',
43n/a 'PY_RELEASE_LEVEL_GAMMA': 'rc',
44n/a }
45n/a if level != 'PY_RELEASE_LEVEL_FINAL':
46n/a release += suffixes[level] + str(int(d['PY_RELEASE_SERIAL']))
47n/a return version, release
48n/a
49n/a
50n/adef get_sys_version_info():
51n/a major, minor, micro, level, serial = sys.version_info
52n/a release = version = '%s.%s' % (major, minor)
53n/a release += '.%s' % micro
54n/a if level != 'final':
55n/a release += '%s%s' % (level[0], serial)
56n/a return version, release
57n/a
58n/a
59n/adef get_version_info():
60n/a try:
61n/a return get_header_version_info('.')
62n/a except (IOError, OSError):
63n/a version, release = get_sys_version_info()
64n/a print >>sys.stderr, 'Can\'t get version info from Include/patchlevel.h, ' \
65n/a 'using version of this interpreter (%s).' % release
66n/a return version, release
67n/a
68n/aif __name__ == '__main__':
69n/a print(get_header_version_info('.')[1])