-
Notifications
You must be signed in to change notification settings - Fork 8
/
setup.py
162 lines (141 loc) · 4.97 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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
from setuptools import setup
import os
import subprocess
import warnings
import locale
def _decode_stdio(stream):
try:
stdio_encoding = locale.getdefaultlocale()[1] or "utf-8"
except ValueError:
stdio_encoding = "utf-8"
try:
text = stream.decode(stdio_encoding)
except UnicodeDecodeError:
# Final fallback
text = stream.decode("latin1")
return text
def get_git_devstr(sha=False, show_warning=True, path=None):
"""
Determines the number of revisions in this repository.
Parameters
----------
sha : bool
If True, the full SHA1 hash will be returned. Otherwise, the total
count of commits in the repository will be used as a "revision
number".
show_warning : bool
If True, issue a warning if git returns an error code, otherwise errors
pass silently.
path : str or None
If a string, specifies the directory to look in to find the git
repository. If `None`, the current working directory is used, and must
be the root of the git repository.
If given a filename it uses the directory containing that file.
Returns
-------
devversion : str
Either a string with the revision number (if `sha` is False), the
SHA1 hash of the current commit (if `sha` is True), or an empty string
if git version info could not be identified.
"""
if path is None:
path = os.getcwd()
if not os.path.isdir(path):
path = os.path.abspath(os.path.dirname(path))
if sha:
# Faster for getting just the hash of HEAD
cmd = ["rev-parse", "HEAD"]
else:
cmd = ["rev-list", "--count", "HEAD"]
def run_git(cmd):
try:
p = subprocess.Popen(
["git"] + cmd,
cwd=path,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
)
stdout, stderr = p.communicate()
except OSError as e:
if show_warning:
warnings.warn("Error running git: " + str(e))
return (None, b"", b"")
if p.returncode == 128:
if show_warning:
warnings.warn(
"No git repository present at {0!r}! Using "
"default dev version.".format(path)
)
return (p.returncode, b"", b"")
if p.returncode == 129:
if show_warning:
warnings.warn(
"Your git looks old (does it support {0}?); "
"consider upgrading to v1.7.2 or "
"later.".format(cmd[0])
)
return (p.returncode, stdout, stderr)
elif p.returncode != 0:
if show_warning:
warnings.warn(
"Git failed while determining revision "
"count: {0}".format(_decode_stdio(stderr))
)
return (p.returncode, stdout, stderr)
return p.returncode, stdout, stderr
returncode, stdout, stderr = run_git(cmd)
if not sha and returncode == 128:
# git returns 128 if the command is not run from within a git
# repository tree. In this case, a warning is produced above but we
# return the default dev version of '0'.
return "0"
elif not sha and returncode == 129:
# git returns 129 if a command option failed to parse; in
# particular this could happen in git versions older than 1.7.2
# where the --count option is not supported
# Also use --abbrev-commit and --abbrev=0 to display the minimum
# number of characters needed per-commit (rather than the full hash)
cmd = ["rev-list", "--abbrev-commit", "--abbrev=0", "HEAD"]
returncode, stdout, stderr = run_git(cmd)
# Fall back on the old method of getting all revisions and counting
# the lines
if returncode == 0:
return str(stdout.count(b"\n"))
else:
return ""
elif sha:
return _decode_stdio(stdout)[:40]
else:
return _decode_stdio(stdout).strip()
# Set affiliated package-specific settings
PACKAGENAME = "penquins"
DESCRIPTION = "A python client for Kowalski"
LONG_DESCRIPTION = ""
AUTHOR = "Dmitry A. Duev"
AUTHOR_EMAIL = "[email protected]"
LICENSE = "MIT"
URL = "https://github.com/dmitryduev/penquins"
# VERSION should be PEP386 compatible (http://www.python.org/dev/peps/pep-0386)
VERSION = "2.4.2"
# Indicates if this version is a release version
RELEASE = "dev" not in VERSION
if not RELEASE:
VERSION += get_git_devstr(sha=False)
setup(
name=PACKAGENAME,
version=VERSION,
description=DESCRIPTION,
packages=["penquins"],
install_requires=[
"pymongo>=3.10.1",
"pytest>=5.3.1",
"requests>=2.25.0",
"tqdm>=4.46.0",
],
author=AUTHOR,
author_email=AUTHOR_EMAIL,
license=LICENSE,
url=URL,
long_description=LONG_DESCRIPTION,
)