Skip to content

Commit 5d191c9

Browse files
committed
move version calculation inside papermerge.core.__init__ module.
1 parent ea505f5 commit 5d191c9

File tree

2 files changed

+75
-74
lines changed

2 files changed

+75
-74
lines changed

papermerge/core/__init__.py

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from .utils import get_version
1+
import functools
2+
import os
3+
import subprocess
4+
from datetime import datetime
25

36
default_app_config = 'papermerge.core.apps.CoreConfig'
47

@@ -9,4 +12,75 @@
912

1013
VERSION = (2, 0, 0, FINAL, 0)
1114

15+
16+
def get_version(version=None):
17+
"""Return a PEP 440-compliant version number from VERSION."""
18+
version = get_complete_version(version)
19+
20+
# Now build the two parts of the version number:
21+
# main = X.Y[.Z]
22+
# sub = .devN - for pre-alpha releases
23+
# | {a|b|rc}N - for alpha, beta, and rc releases
24+
25+
main = get_main_version(version)
26+
27+
sub = ''
28+
if version[3] == 'alpha' and version[4] == 0:
29+
git_changeset = get_git_changeset()
30+
if git_changeset:
31+
sub = '.dev%s' % git_changeset
32+
33+
elif version[3] != 'final':
34+
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'}
35+
sub = mapping[version[3]] + str(version[4])
36+
37+
return main + sub
38+
39+
40+
def get_main_version(version=None):
41+
"""Return main version (X.Y[.Z]) from VERSION."""
42+
version = get_complete_version(version)
43+
parts = 2 if version[2] == 0 else 3
44+
return '.'.join(str(x) for x in version[:parts])
45+
46+
47+
def get_complete_version(version=None):
48+
"""
49+
Return a tuple of the django version. If version argument is non-empty,
50+
check for correctness of the tuple provided.
51+
"""
52+
if version is None:
53+
from django import VERSION as version
54+
else:
55+
assert len(version) == 5
56+
assert version[3] in ('alpha', 'beta', 'rc', 'final')
57+
58+
return version
59+
60+
61+
@functools.lru_cache()
62+
def get_git_changeset():
63+
"""Return a numeric identifier of the latest git changeset.
64+
65+
The result is the UTC timestamp of the changeset in YYYYMMDDHHMMSS format.
66+
This value isn't guaranteed to be unique, but collisions are very unlikely,
67+
so it's sufficient for generating the development version numbers.
68+
"""
69+
repo_dir = os.path.dirname(
70+
os.path.dirname(
71+
os.path.dirname(os.path.abspath(__file__))
72+
)
73+
)
74+
git_log = subprocess.run(
75+
['git', 'log', '--pretty=format:%ct', '--quiet', '-1', 'HEAD'],
76+
stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=repo_dir,
77+
)
78+
timestamp = git_log.stdout
79+
try:
80+
timestamp = datetime.utcfromtimestamp(int(timestamp))
81+
except ValueError:
82+
return None
83+
return timestamp.strftime('%Y%m%d%H%M%S')
84+
85+
1286
__version__ = get_version(VERSION)

papermerge/core/utils.py

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import functools
2-
import os
3-
import subprocess
41
import time
52
import logging
63
import re
@@ -119,76 +116,6 @@ def __str__(self):
119116
return f"{self.total:.2f}"
120117

121118

122-
def get_version(version=None):
123-
"""Return a PEP 440-compliant version number from VERSION."""
124-
version = get_complete_version(version)
125-
126-
# Now build the two parts of the version number:
127-
# main = X.Y[.Z]
128-
# sub = .devN - for pre-alpha releases
129-
# | {a|b|rc}N - for alpha, beta, and rc releases
130-
131-
main = get_main_version(version)
132-
133-
sub = ''
134-
if version[3] == 'alpha' and version[4] == 0:
135-
git_changeset = get_git_changeset()
136-
if git_changeset:
137-
sub = '.dev%s' % git_changeset
138-
139-
elif version[3] != 'final':
140-
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'}
141-
sub = mapping[version[3]] + str(version[4])
142-
143-
return main + sub
144-
145-
146-
def get_main_version(version=None):
147-
"""Return main version (X.Y[.Z]) from VERSION."""
148-
version = get_complete_version(version)
149-
parts = 2 if version[2] == 0 else 3
150-
return '.'.join(str(x) for x in version[:parts])
151-
152-
153-
def get_complete_version(version=None):
154-
"""
155-
Return a tuple of the django version. If version argument is non-empty,
156-
check for correctness of the tuple provided.
157-
"""
158-
if version is None:
159-
from django import VERSION as version
160-
else:
161-
assert len(version) == 5
162-
assert version[3] in ('alpha', 'beta', 'rc', 'final')
163-
164-
return version
165-
166-
167-
@functools.lru_cache()
168-
def get_git_changeset():
169-
"""Return a numeric identifier of the latest git changeset.
170-
171-
The result is the UTC timestamp of the changeset in YYYYMMDDHHMMSS format.
172-
This value isn't guaranteed to be unique, but collisions are very unlikely,
173-
so it's sufficient for generating the development version numbers.
174-
"""
175-
repo_dir = os.path.dirname(
176-
os.path.dirname(
177-
os.path.dirname(os.path.abspath(__file__))
178-
)
179-
)
180-
git_log = subprocess.run(
181-
['git', 'log', '--pretty=format:%ct', '--quiet', '-1', 'HEAD'],
182-
stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=repo_dir,
183-
)
184-
timestamp = git_log.stdout
185-
try:
186-
timestamp = datetime.utcfromtimestamp(int(timestamp))
187-
except ValueError:
188-
return None
189-
return timestamp.strftime('%Y%m%d%H%M%S')
190-
191-
192119
def filter_node_id(value):
193120
"""Invalid values of node id will be
194121
filtered out (return None).

0 commit comments

Comments
 (0)