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()
|