1#!/usr/bin/env python
2
3import json
4import os
5import string
6
7MAPPING_FILE_NAME = 'serviceMapping.vm'
8RESOURCES_ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)))
9ARCHETYPE_LAMBDA_ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.path.join(RESOURCES_ROOT_DIR, "../"))))
10SERVICE_DIR = os.path.join(
11    os.path.dirname(os.path.dirname(os.path.abspath(os.path.join(__file__, "../../../../")))),
12    'services'
13)
14
15def load_all_service_modules():
16    service_mapping = {}
17    for f in [f for f in os.listdir(SERVICE_DIR) if os.path.isdir(os.path.join(SERVICE_DIR, f)) & os.path.exists(os.path.join(SERVICE_DIR, f, 'target'))]:
18        for s in [s for s in os.listdir(os.path.join(SERVICE_DIR, f, 'target', 'generated-sources/sdk/software/amazon/awssdk/services', f)) if s.endswith('AsyncClient.java') & s.startswith('Default')]:
19            service_mapping[f] = find_client_prefix(s)
20    return service_mapping
21
22def find_client_prefix(d):
23    index = d.find('AsyncClient.java')
24    return d[7:index]
25
26def write_to_vm_file(service_mapping):
27    target = os.path.join(ARCHETYPE_LAMBDA_ROOT_DIR, 'target')
28
29    if not os.path.exists(target):
30        os.mkdir(target)
31
32    target = os.path.join(ARCHETYPE_LAMBDA_ROOT_DIR, 'target', 'classes')
33
34    if not os.path.exists(target):
35        os.mkdir(target)
36
37    filename = os.path.join(target, MAPPING_FILE_NAME)
38
39    with open(filename, 'w') as f:
40        f.write('#set ( $serviceMapping =')
41        f.write(json.dumps(service_mapping))
42        f.write(')')
43    return filename
44
45def main():
46    service_mapping = load_all_service_modules()
47    write_to_vm_file(service_mapping)
48
49if __name__ == '__main__':
50    main()
51