-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.py
More file actions
executable file
·149 lines (124 loc) · 4.96 KB
/
Copy pathsetup.py
File metadata and controls
executable file
·149 lines (124 loc) · 4.96 KB
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
#!/usr/bin/env python
import glob
import os
import shutil
import sys
from distutils.core import setup, Command, Extension
from distutils.command.clean import clean as distutils_clean
from distutils.command.sdist import sdist as distutils_sdist
class clean(distutils_clean):
def run(self):
# In addition to what the normal clean run does, remove pyc
# and pyo and backup files from the source tree.
distutils_clean.run(self)
def should_remove(filename):
if (filename.lower()[-4:] in [".pyc", ".pyo"]
or filename.endswith("~")
or (filename.startswith("#")
and filename.endswith("#"))):
return True
else:
return False
for pathname, dirs, files in os.walk(os.path.dirname(__file__)):
for filename in filter(should_remove, files):
try:
os.unlink(os.path.join(pathname, filename))
except EnvironmentError as err:
print(str(err))
try:
os.unlink("MANIFEST")
except OSError:
pass
for base in ["coverage", "build", "dist"]:
path = os.path.join(os.path.dirname(__file__), base)
if os.path.isdir(path):
shutil.rmtree(path)
class coverage_cmd(Command):
description = "generate test coverage data"
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
import trace
tracer = trace.Trace(
count=True, trace=False,
ignoredirs=[sys.prefix, sys.exec_prefix])
def run_tests():
import bulletml
try:
reload(bulletml)
except NameError:
pass
self.run_command("test")
tracer.runfunc(run_tests)
results = tracer.results()
coverage = os.path.join(os.path.dirname(__file__), "coverage")
results.write_results(show_missing=True, coverdir=coverage)
map(os.unlink, glob.glob(os.path.join(coverage, "[!b]*.cover")))
try:
os.unlink(os.path.join(coverage, "..setup.cover"))
except OSError:
pass
total_lines = 0
bad_lines = 0
for filename in glob.glob(os.path.join(coverage, "*.cover")):
lines = open(filename, "rU").readlines()
total_lines += len(lines)
bad_lines += len(
[line for line in lines if
(line.startswith(">>>>>>") and
"finally:" not in line and '"""' not in line)])
pct = 100.0 * (total_lines - bad_lines) / float(total_lines)
print("Coverage data written to %s (%d/%d, %0.2f%%)" % (
coverage, total_lines - bad_lines, total_lines, pct))
class sdist(distutils_sdist):
def run(self):
self.run_command("test")
distutils_sdist.run(self)
class test_cmd(Command):
description = "run automated tests"
user_options = [
("to-run=", None, "list of tests to run (default all)"),
]
def initialize_options(self):
self.to_run = []
self.quick = False
def finalize_options(self):
if self.to_run:
self.to_run = self.to_run.split(",")
def run(self):
import tests
if tests.unit(self.to_run):
raise SystemExit("Test failures are listed above.")
if __name__ == "__main__":
setup(cmdclass=dict(clean=clean, test=test_cmd, coverage=coverage_cmd,
sdist=sdist),
name="python-bulletml", version="3",
url="https://yukkurigames.com/python-bulletml/",
description="parse and run BulletML scripts",
author="Joe Wreschnig",
author_email="joe.wreschnig@gmail.com",
license="MIT-style",
packages=["bulletml"],
data_files=glob.glob("examples/*/*.xml") + ["examples/template.xml"],
scripts=["bulletml-runner", "bulletml-to-bulletyaml"],
ext_modules=[Extension(
'bulletml._collision',
[os.path.join('bulletml', '_collision.c')])],
long_description="""\
BulletML is the Bullet Markup Language. BulletML can describe the
barrage of bullets in shooting games. (For example Progear, Psyvariar,
Gigawing2, G DARIUS, XEVIOUS, ...) This module parses and executes
BulletML scripts in Python. All data structures in it are
renderer-agnostic. A sample renderer for Pygame is included. The full
API documentation is contained in its Python docstrings.
In addition to the standard BulletML XML format, this module supports
an equivalent YAML format. For convenience, two simple collision
routines are provided, bulletml.overlaps for stationary circles and
bulletml.collides for moving circles.
More information is available at the BulletML homepage,
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index_e.html, or the
python-bulletml homepage, https://yukkurigames.com/python-bulletml/.
""")