forked from planetfederal/qgis-core-tests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pavement.py
81 lines (69 loc) · 2.07 KB
/
pavement.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
# -*- coding: utf-8 -*-
import os
import fnmatch
import zipfile
import shutil
from paver.easy import *
from paver.doctools import html
options(
plugin = Bunch(
name = 'coretests',
source_dir = path('coretests'),
package_dir = path('.'),
tests = ['test', 'tests'],
excludes = [
'*.pyc',
".git"
]
),
sphinx = Bunch(
docroot = 'doc',
sourcedir = 'source',
builddir = 'build'
)
)
@task
def setup(options):
pass
@task
def install(options):
'''install plugin to qgis'''
plugin_name = options.plugin.name
src = path(__file__).dirname() / plugin_name
if os.name == 'nt':
dst = path('~/AppData/Roaming/QGIS/QGIS3/profiles/default/python/plugins').expanduser() / plugin_name
else:
dst = path('~/.local/share/QGIS/QGIS3/profiles/default/python/plugins').expanduser() / plugin_name
src = src.abspath()
dst = dst.abspath()
if not hasattr(os, 'symlink'):
dst.rmtree()
src.copytree(dst)
elif not dst.exists():
src.symlink(dst)
@task
@cmdopts([
('tests', 't', 'Package tests with plugin'),
])
def package(options):
'''create package for plugin'''
package_file = options.plugin.package_dir / ('%s.zip' % options.plugin.name)
with zipfile.ZipFile(package_file, "w", zipfile.ZIP_DEFLATED) as zip:
make_zip(zip, options)
def make_zip(zip, options):
excludes = set(options.plugin.excludes)
src_dir = options.plugin.source_dir
exclude = lambda p: any([fnmatch.fnmatch(p, e) for e in excludes])
def filter_excludes(files):
if not files: return []
# to prevent descending into dirs, modify the list in place
for i in range(len(files) - 1, -1, -1):
f = files[i]
if exclude(f):
files.remove(f)
return files
for root, dirs, files in os.walk(src_dir):
for f in filter_excludes(files):
relpath = os.path.relpath(root, '.')
zip.write(path(root) / f, path(relpath) / f)
filter_excludes(dirs)