-
Notifications
You must be signed in to change notification settings - Fork 0
/
tasks.py
79 lines (60 loc) · 1.93 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
import os
import shutil
import sys
from invoke import task, context
import subprocess
def check_package(c, package_name):
result = c.run("pip list --format=freeze", hide=True)
installed_packages = result.stdout.split("\n")
return any(package_name in pkg for pkg in installed_packages)
def install_packages(c, packages):
print(f"Installing missing packages...")
c.run(f'pip install {" ".join(packages)}')
@task
def test(c):
c.run("pytest tests")
@task
def docs(c):
c.run("sphinx-apidoc -f -o docs/source {{project.package_name}}")
c.run("sphinx-build -b html docs/source docs/build")
@task
def clean(c):
paths = [
"build",
"dist",
"docs/build",
"docs/modules.rst",
"docs/{{project.package_name}}.rst",
"{{project.package_name}}.egg-info",
".meta",
]
for path in paths:
if os.path.exists(path):
if os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)
@task
def check_requirements(c):
packages = ["setuptools", "wheel", "twine"]
missing_packages = [pkg for pkg in packages if not check_package(c, pkg)]
if missing_packages:
print(f"Missing required packages: {', '.join(missing_packages)}")
choice = input("Do you want to auto-install the missing packages? [y/n]: ")
if choice.lower() == "y":
install_packages(c, missing_packages)
else:
print("> Required packages are missing. Task failed.")
sys.exit(1)
else:
print("All required packages are installed.")
@task(pre=[check_requirements])
def package(c):
print("Creating distribution package...")
c.run("python setup.py sdist bdist_wheel")
print("Package created.")
@task(pre=[check_requirements, package])
def upload(c):
print("Uploading package to PyPI...")
c.run("twine upload dist/*")
print("Package uploaded.")