Passed
Push — develop ( e76d2d...088138 )
by Jace
01:20
created

scent.html_files()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
"""Configuration file for sniffer."""
3
# pylint: disable=superfluous-parens,bad-continuation,unpacking-non-sequence
4
5
import subprocess
6
import time
7
8
from sniffer.api import file_validator, runnable, select_runnable
9
10
11
try:
12
    from pync import Notifier
13
except ImportError:
14
    notify = None
15
else:
16
    notify = Notifier.notify
17
18
19
watch_paths = ["coveragespace", "tests"]
20
21
22
class Options(object):
23
    group = int(time.time())  # unique per run
24
    show_coverage = False
25
    rerun_args = None
26
27
    targets = [
28
        (('make', 'test-unit', 'DISABLE_COVERAGE=true'), "Unit Tests", True),
29
        (('make', 'test-all'), "Integration Tests", False),
30
        (('make', 'check'), "Static Analysis", True),
31
        (('make', 'docs'), None, True),
32
    ]
33
34
35
@select_runnable('run_targets')
36
@file_validator
37
def python_files(filename):
38
    return filename.endswith('.py')
39
40
41
@select_runnable('run_targets')
42
@file_validator
43
def html_files(filename):
44
    return filename.split('.')[-1] in ['html', 'css', 'js']
45
46
47
@runnable
48
def run_targets(*args):
49
    """Run targets for Python."""
50
    Options.show_coverage = 'coverage' in args
51
52
    count = 0
53
    for count, (command, title, retry) in enumerate(Options.targets, start=1):
54
55
        success = call(command, title, retry)
56
        if not success:
57
            message = u"✅ " * (count - 1) + u"❌"
58
            show_notification(message, title)
59
60
            return False
61
62
    message = u"✅ " * count
63
    title = "All Targets"
64
    show_notification(message, title)
65
    show_coverage()
66
67
    return True
68
69
70
def call(command, title, retry):
71
    """Run a command-line program and display the result."""
72
    if Options.rerun_args:
73
        command, title, retry = Options.rerun_args
74
        Options.rerun_args = None
75
        success = call(command, title, retry)
76
        if not success:
77
            return False
78
79
    print("")
80
    print("$ %s" % ' '.join(command))
81
    failure = subprocess.call(command)
82
83
    if failure and retry:
84
        Options.rerun_args = command, title, retry
85
86
    return not failure
87
88
89
def show_notification(message, title):
90
    """Show a user notification."""
91
    if notify and title:
92
        notify(message, title=title, group=Options.group)
93
94
95
def show_coverage():
96
    """Launch the coverage report."""
97
    if Options.show_coverage:
98
        subprocess.call(['make', 'read-coverage'])
99
100
    Options.show_coverage = False
101