~joetalbott/uci-engine/user_auth

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python

import argparse
import logging
import json
import os.path
import sys
import yaml

format_list = {'json', 'yaml'}
# Make up some resonable data returned from each service
data = {
    'master': {
        'autopilot': {
            'version': '1.3.1+13.10.20131003.1-0ubuntu2~fginther.1',
            'files': [
                '/path/to/changes',
                '/path/to/dsc',
                '/path/to/diff.gz']}},
    'ppa_assigner': {
        'result': 'PASSED',
        'ppa': 'ppa:team/ppa'},
    'bsbuilder': {
        'result': 'PASSED',
        'version': '1.3.1+13.10.20131003.1-0ubuntu2~fginther.1',
        'packages': [
            'autopilot-desktop',
            'autopilot-touch',
            'python-autopilot',
            'python-autopilot-test',
            'python-autopilot-trace',
            'python-autopilot-vis'],
        'ppa': 'ppa:team/ppa'},
    'image_builder': {
        'result': 'PASSED',
        'image': '/path/to/image'},
    'test_runner': {
        'result': 'PASSED',
        'artifacts': [
            '/path/to/artifact1',
            '/path/to/artifact2']},
    'publisher': {
        'result': 'PASSED',
        'image': '/path/to/image'},
}

logger = logging.getLogger('lander_service_wrapper')
stdout_handler = logging.StreamHandler(stream=sys.stdout)
formatter = logging.Formatter('%(levelname)s: %(message)s')
stdout_handler.setFormatter(formatter)
logger.addHandler(stdout_handler)


def parse_arguments():
    parser = argparse.ArgumentParser(
        description='Wraps the REST API calls with a progress queue monitor.')
    parser.add_argument('--service',
                        required=True,
                        help='The service name to call.')
    parser.add_argument('--input-file',
                        required=True,
                        help='File containing all of the input parameters.')
    parser.add_argument('--input-format',
                        required=False,
                        default='json',
                        help='''Format for the input parameter file
                        {}.'''.format(format_list))
    parser.add_argument('--output-file',
                        required=True,
                        help='File to store the API call results.')
    parser.add_argument('--output-format',
                        required=False,
                        default='json',
                        help='''Format for API call results
                        {}.'''.format(format_list))
    return parser.parse_args()


def main():
    args = parse_arguments()
    if args.service not in data:
        logger.error("ERROR: Unknown service: {}".format(args.service))
        sys.exit(1)

    if args.input_format not in format_list:
        logger.error(
            "ERROR: Unknown input format: {}".format(args.input_format))
        sys.exit(1)

    if args.output_format not in format_list:
        logger.error(
            "ERROR: Unknown output format: {}".format(args.output_format))
        sys.exit(1)

    logger.debug('Executing service wrapper: {}'.format(args.service))
    # TODO: Call the service and collect the returned data
    # For now, canned responses are used as the return data
    with open(args.output_file, 'w') as output_file:
        out_data = None
        if args.output_format == 'json':
            out_data = json.dumps(data[args.service])
        elif args.output_format == 'yaml':
            out_data = yaml.dump(data[args.service])
        logger.debug('Output data [{}]: {}'.format(args.output_format,
                                                   out_data))
        output_file.write('{}\n'.format(out_data))
    logger.debug('Exit 0')
    sys.exit(0)


if __name__ == '__main__':
    main()