-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
109 lines (96 loc) · 4.07 KB
/
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
103
104
105
106
107
108
109
#!/usr/bin/env python
"""
Setup script for rodent_anat
"""
import os
import subprocess
import re
import io
from setuptools import setup
from setuptools import find_packages
MODULE = 'rodent_anat'
def get_filetext(rootdir, filename):
""" Get the text of a local file """
with io.open(os.path.join(rootdir, filename), encoding='utf-8') as f_handle:
return f_handle.read()
def git_version():
""" Get the full and python standardized version from Git tags (if possible) """
try:
# Full version includes the Git commit hash
full_version = subprocess.check_output('git describe --dirty', shell=True).decode("utf-8").strip(" \n")
# Python standardized version in form major.minor.patch.post<build>
version_regex = re.compile(r"v?(\d+\.\d+\.\d+(-\d+)?).*")
match = version_regex.match(full_version)
if match:
std_version = match.group(1).replace("-", ".post")
else:
raise RuntimeError("Failed to parse version string %s" % full_version)
return full_version, std_version
except:
# Any failure, return None. We may not be in a Git repo at all
return None, None
def git_timestamp():
""" Get the last commit timestamp from Git (if possible)"""
try:
return subprocess.check_output('git log -1 --format=%cd', shell=True).decode("utf-8").strip(" \n")
except:
# Any failure, return None. We may not be in a Git repo at all
return None
def update_metadata(rootdir, version_str, timestamp_str):
""" Update the version and timestamp metadata in the module _version.py file """
with io.open(os.path.join(rootdir, MODULE, "_version.py"), "w", encoding='utf-8') as f_handle:
f_handle.write("__version__ = '%s'\n" % version_str)
f_handle.write("__timestamp__ = '%s'\n" % timestamp_str)
def get_requirements(rootdir):
""" Get a list of all entries in the requirements file """
with io.open(os.path.join(rootdir, 'requirements.txt'), encoding='utf-8') as f_handle:
return [l.strip() for l in f_handle.readlines()]
def get_version(rootdir):
""" Get the current version number (and update it in the module _version.py file if necessary)"""
version, timestamp = git_version()[1], git_timestamp()
if version is not None and timestamp is not None:
# We got the metadata from Git - update the version file
update_metadata(rootdir, version, timestamp)
else:
# Could not get metadata from Git - use the version file if it exists
try:
with io.open(os.path.join(rootdir, MODULE, '_version.py'), encoding='utf-8') as f_handle:
metadata = f_handle.read()
match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", metadata, re.M)
if match:
version = match.group(1)
else:
version = "unknown"
except IOError:
version = "unknown"
return version
MODULE_DIR = os.path.abspath(os.path.dirname(__file__))
KWARGS = {
'name' : 'rodent_anat',
'version' : get_version(MODULE_DIR),
'description' : 'Anatomical pipeline for rodent MRI based on fsl_anat interface',
'long_description' : get_filetext(MODULE_DIR, 'README.md'),
'long_description_content_type' : 'text/markdown',
'author' : 'Martin Craig',
'author_email' : '[email protected]',
'license' : 'Apache 2',
'install_requires' : get_requirements(MODULE_DIR),
'packages' : find_packages(),
'package_data' : {},
'entry_points' : {
'console_scripts' : {
'rodent_anat=rodent_anat.main:main',
'rodent_anat_report=rodent_anat.report:main',
'rodent_anat_qc=rodent_anat.qc:main',
'rodent_preproc=rodent_anat.preproc:main',
'reorient2std=rodent_anat.reorient2std:main',
}
},
'classifiers' : [
'Intended Audience :: Science/Research',
'Programming Language :: Python :: 3',
'Topic :: Scientific/Engineering :: Bio-Informatics',
'License :: OSI Approved :: Apache Software License',
],
}
setup(**KWARGS)