forked from pyinvoke/invoke
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tasks.py
113 lines (101 loc) · 3.13 KB
/
tasks.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
import os
from invoke import Collection, task
from invoke.util import LOG_FORMAT
from invocations import travis, checks
from invocations.docs import docs, www, sites, watch_docs
from invocations.pytest import coverage as coverage_, test as test_
from invocations.packaging import vendorize, release
@task
def test(
c,
verbose=False,
color=True,
capture="no",
module=None,
k=None,
x=False,
opts="",
pty=True,
):
"""
Run pytest. See `invocations.pytest.test` for details.
This is a simple wrapper around the abovementioned task, which makes a
couple minor defaults changes appropriate for this particular test suite,
such as:
- setting ``capture=no`` instead of ``capture=sys``, as we do a very large
amount of subprocess IO testing that even the ``sys`` capture screws up
- setting ``verbose=False`` because we have a large number of tests and
skipping verbose output by default is a ~20% time savings.)
"""
# TODO: update test suite to use c.config.run.in_stream = False globally.
# somehow.
return test_(
c,
verbose=verbose,
color=color,
capture=capture,
module=module,
k=k,
x=x,
opts=opts,
pty=pty,
)
# TODO: replace with invocations' once the "call truly local tester" problem is
# solved (see other TODOs). For now this is just a copy/paste/modify.
@task(help=test.help)
def integration(c, opts=None, pty=True):
"""
Run the integration test suite. May be slow!
"""
opts = opts or ""
opts += " integration/"
test(c, opts=opts, pty=pty)
@task
def coverage(c, report="term", opts=""):
"""
Run pytest in coverage mode. See `invocations.pytest.coverage` for details.
"""
# Use our own test() instead of theirs.
# TODO: allow coverage() to just look up the nearby-by-namespace-attachment
# test() instead of hardcoding its own test or doing it this way with an
# arg.
return coverage_(c, report=report, opts=opts, tester=test)
ns = Collection(
test,
coverage,
integration,
vendorize,
release,
www,
docs,
sites,
watch_docs,
travis,
checks.blacken,
)
ns.configure(
{
"blacken": {
# Skip the vendor directory and the (Travis-only) alt venv when
# blackening.
# TODO: this is making it seem like I really do want an explicit
# arg/conf-opt in the blacken task for "excluded paths"...ha
"find_opts": "-and -not \( -path './invoke/vendor*' -or -path './alt_env*' -or -path './build*' \)" # noqa
},
"tests": {"logformat": LOG_FORMAT, "package": "invoke"},
"travis": {
"sudo": {"user": "sudouser", "password": "mypass"},
"black": {"version": "18.6b4"},
},
"packaging": {
"sign": True,
"wheel": True,
"check_desc": True,
# Because of PyYAML's dual source nonsense =/
"dual_wheels": True,
"changelog_file": os.path.join(
www.configuration()["sphinx"]["source"], "changelog.rst"
),
},
}
)