forked from gregtap/mayan
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenerate_setup.py
executable file
·102 lines (77 loc) · 2.75 KB
/
generate_setup.py
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
#!/usr/bin/env python
from __future__ import unicode_literals
import os
from dateutil import parser
import sh
import django
from django.conf import settings
from django.template import Template, Context
from django.utils.encoding import force_text
import mayan
try:
BUILD = sh.Command('git').bake('describe', '--tags', '--always', 'HEAD')
DATE = sh.Command('git').bake('--no-pager', 'log', '-1', '--format=%cd')
except sh.CommandNotFound:
BUILD = None
DATE = None
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
REQUIREMENTS_FILE = 'requirements.txt'
SETUP_TEMPLATE = 'setup.py.tmpl'
MAYAN_TEMPLATE = '__init__.py.tmpl'
def generate_build_number():
if BUILD and DATE:
try:
result = '{} {}'.format(BUILD(), DATE()).replace('\n', '')
except sh.ErrorReturnCode_128:
result = ''
else:
result = ''
return result
def generate_commit_timestamp():
datetime = parser.parse(force_text(DATE()))
return datetime.strftime('%y%m%d%H%M')
def get_requirements(base_directory, filename):
result = []
with open(os.path.join(base_directory, filename)) as file_object:
for line in file_object:
if line.startswith('-r'):
line = line.split('\n')[0][3:]
directory, filename = os.path.split(line)
result.extend(
get_requirements(
base_directory=os.path.join(base_directory, directory), filename=filename
)
)
elif not line.startswith('\n'):
result.append(line.split('\n')[0])
return result
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mayan.settings')
django.setup()
requirements = get_requirements(
base_directory=BASE_DIR, filename=REQUIREMENTS_FILE
)
with open(SETUP_TEMPLATE) as file_object:
template = file_object.read()
result = Template(template).render(
context=Context({'requirements': requirements})
)
with open('setup.py', 'w') as file_object:
file_object.write(result)
with open(MAYAN_TEMPLATE) as file_object:
template = file_object.read()
# Ignore local version if any
upstream_version = '.'.join(
mayan.__version__.split('+')[0].split('.')
)
result = Template(template).render(
context=Context(
{
'build_string': generate_build_number(),
'timestamp': generate_commit_timestamp(),
'version': upstream_version
}
)
)
with open(os.path.join(BASE_DIR, 'mayan', '__init__.py'), 'w') as file_object:
file_object.write(result)