Completed
Push — develop ( 4c6de9...3d5961 )
by Jace
02:26
created

coveragespace/cli.py (2 issues)

Labels
Severity
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
The Instance of AnsiCodes does not seem to have a member named GREEN.

This check looks for calls to members that are non-existent. These calls will fail.

The member could have been renamed or removed.

Loading history...
The Instance of AnsiCodes does not seem to have a member named BRIGHT.

This check looks for calls to members that are non-existent. These calls will fail.

The member could have been renamed or removed.

Loading history...
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