re base code
[sdc.git] / catalog-be / src / main / resources / scripts / import / tosca / importNormativeElements.py
1 import pycurl
2 from StringIO import StringIO
3 import json
4 import copy
5 from importCommon import *
6
7
8 #################################################################################################################################################################################
9 #                                                                                                                                                                                                                                                                                                                                                       #
10 # Import all users from a given file                                                                                                                                                                                                                                                                                    #
11 #                                                                                                                                                                                                                                                                                                                                                               #
12 # activation :                                                                                                                                                                                                                                                                                                                                  #
13 #       python importUsers.py [-s <scheme> | --scheme=<scheme> ] [-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <input file> | --ifile=<input file> ]   #
14 #                                                                                                                                                                                                                                                                                                                                                               #
15 # shortest activation (be host = localhost, be port = 8080):                                                                                                                                                                                                                                    #
16 #               python importUsers.py [-f <input file> | --ifile=<input file> ]                                                                                                                                                                                                         #
17 #                                                                                                                                                                                                                                                                                                                                                       #
18 #################################################################################################################################################################################
19 def import_element(scheme, be_host, be_port, admin_user, exit_on_success, file_dir, url_suffix, element_name, element_form_name,
20                    with_metadata=False):
21     result = createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name, with_metadata)
22     print_frame_line()
23     print_name_and_return_code(result[0], result[1])
24     print_frame_line()
25
26     if result[1] is None or result[1] not in [200, 201, 409]:
27         error_and_exit(1, None)
28     else:
29         if exit_on_success:
30             error_and_exit(0, None)
31
32
33
34 def createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name,
35                            with_metadata=False):
36     try:
37         log("in create normative element ", element_name)
38         buffer = StringIO()
39         c = pycurl.Curl()
40
41         url = scheme + '://' + be_host + ':' + be_port + url_suffix
42         c.setopt(c.URL, url)
43         c.setopt(c.POST, 1)
44
45         admin_header = 'USER_ID: ' + admin_user
46         c.setopt(pycurl.HTTPHEADER, [admin_header])
47
48         type_file_name = file_dir + "/" + element_name
49
50         multi_part_form_data = create_multipart_form_data(element_form_name, type_file_name, with_metadata)
51
52         c.setopt(pycurl.HTTPPOST, multi_part_form_data)
53         c.setopt(c.WRITEFUNCTION, buffer.write)
54
55         if scheme == 'https':
56             c.setopt(c.SSL_VERIFYPEER, 0)
57
58         c.perform()
59
60         http_res = c.getinfo(c.RESPONSE_CODE)
61         if http_res is not None:
62             debug("http response=", http_res)
63         debug("response buffer", buffer.getvalue())
64         c.close()
65         return (element_name, http_res, buffer.getvalue())
66
67     except Exception as inst:
68         print("ERROR=" + str(inst))
69         return (element_name, None, None)
70
71
72 def create_multipart_form_data(element_form_name, type_file_name, with_metadata):
73     tosca_type_zip_part = create_zip_file_multi_part(element_form_name, type_file_name)
74     multi_part_form_data = [tosca_type_zip_part]
75     if with_metadata:
76         metadata_type_part = create_metadata_multipart(type_file_name)
77         multi_part_form_data.append(metadata_type_part)
78     debug(multi_part_form_data)
79     return multi_part_form_data
80
81
82 def create_metadata_multipart(type_file_name):
83     metadata = create_json_metadata_str(type_file_name)
84     return ("toscaTypeMetadata", metadata)
85
86
87 def create_zip_file_multi_part(element_form_name, type_file_name):
88     tosca_type_zip_path = type_file_name + ".zip"
89     tosca_type_zip_part = (element_form_name, (pycurl.FORM_FILE, tosca_type_zip_path))
90     return tosca_type_zip_part
91
92
93 def create_json_metadata_str(file_name):
94     type_metadata_json_file = file_name + ".json"
95     debug(type_metadata_json_file)
96     json_file = open(type_metadata_json_file)
97
98     debug("before load json")
99     json_data = json.load(json_file, strict=False)
100     debug(json_data)
101
102     return json.dumps(json_data)