1 | """Update project metrics on The Coverage Space. |
||
2 | |||
3 | Usage: |
||
4 | coverage.space <owner/repo> <metric> [<value>] [--verbose] [--exit-code] |
||
5 | coverage.space (-h | --help) |
||
6 | coverage.space (-V | --version) |
||
7 | |||
8 | Options: |
||
9 | -h --help Show this help screen. |
||
10 | -V --version Show the program version. |
||
11 | -v --verbose Always display the coverage metrics. |
||
12 | --exit-code Return non-zero exit code on failures. |
||
13 | |||
14 | """ |
||
15 | |||
16 | 1 | from __future__ import unicode_literals |
|
17 | |||
18 | 1 | import sys |
|
19 | 1 | import json |
|
20 | |||
21 | 1 | import six |
|
22 | 1 | from docopt import docopt |
|
23 | 1 | import requests |
|
24 | 1 | import colorama |
|
25 | 1 | from backports.shutil_get_terminal_size import get_terminal_size |
|
26 | |||
27 | 1 | from . import API, VERSION |
|
28 | |||
29 | 1 | from .plugins import get_coverage |
|
30 | 1 | from .cache import Cache |
|
31 | |||
32 | |||
33 | 1 | cache = Cache() |
|
34 | |||
35 | |||
36 | 1 | def main(): |
|
37 | """Run the program.""" |
||
38 | 1 | colorama.init(autoreset=True) |
|
39 | 1 | arguments = docopt(__doc__, version=VERSION) |
|
40 | |||
41 | 1 | slug = arguments['<owner/repo>'] |
|
42 | 1 | metric = arguments['<metric>'] |
|
43 | 1 | value = arguments.get('<value>') or get_coverage() |
|
44 | 1 | verbose = arguments.get('--verbose') |
|
45 | |||
46 | 1 | success = call(slug, metric, value, verbose) |
|
47 | |||
48 | 1 | if not success and arguments['--exit-code']: |
|
49 | 1 | sys.exit(1) |
|
50 | |||
51 | |||
52 | 1 | def call(slug, metric, value, verbose=False): |
|
53 | """Call the API and display errors.""" |
||
54 | 1 | url = "{}/{}".format(API, slug) |
|
55 | 1 | data = {metric: value} |
|
56 | |||
57 | 1 | response = cache.get(url, data) |
|
58 | 1 | if response is None: |
|
59 | 1 | response = requests.put(url, data=data) |
|
60 | 1 | cache.set(url, data, response) |
|
61 | |||
62 | 1 | if response.status_code == 200: |
|
63 | 1 | if verbose: |
|
64 | 1 | display("coverage increased", response.json(), |
|
65 | colorama.Fore.GREEN + colorama.Style.BRIGHT) |
||
0 ignored issues
–
show
|
|||
66 | 1 | return True |
|
67 | |||
68 | 1 | elif response.status_code == 422: |
|
69 | 1 | display("coverage decreased", response.json(), |
|
70 | colorama.Fore.YELLOW + colorama.Style.BRIGHT) |
||
71 | 1 | return False |
|
72 | |||
73 | else: |
||
74 | display("coverage unknown", response.json(), |
||
75 | colorama.Fore.RED + colorama.Style.BRIGHT) |
||
76 | return False |
||
77 | |||
78 | |||
79 | 1 | def display(title, data, color=""): |
|
80 | """Write colored text to the console.""" |
||
81 | 1 | width, _ = get_terminal_size() |
|
82 | 1 | six.print_(color + "{0:=^{1}}".format(' ' + title + ' ', width)) |
|
83 | 1 | six.print_(color + json.dumps(data, indent=4)) |
|
84 | six.print_(color + '=' * width) |
||
85 |
This check looks for calls to members that are non-existent. These calls will fail.
The member could have been renamed or removed.