2 from StringIO import StringIO
5 from importCommon import *
8 #################################################################################################################################################################################
10 # Import all users from a given file #
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> ] #
15 # shortest activation (be host = localhost, be port = 8080): #
16 # python importUsers.py [-f <input file> | --ifile=<input file> ] #
18 #################################################################################################################################################################################
19 def import_element(scheme, be_host, be_port, admin_user, exit_on_success, file_dir, url_suffix, element_name, element_form_name,
21 result = createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name, with_metadata)
23 print_name_and_return_code(result[0], result[1])
26 if result[1] is None or result[1] not in [200, 201, 409]:
27 error_and_exit(1, None)
30 error_and_exit(0, None)
34 def createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name,
37 log("in create normative element ", element_name)
41 url = scheme + '://' + be_host + ':' + be_port + url_suffix
45 admin_header = 'USER_ID: ' + admin_user
46 c.setopt(pycurl.HTTPHEADER, [admin_header])
48 type_file_name = file_dir + "/" + element_name
50 multi_part_form_data = create_multipart_form_data(element_form_name, type_file_name, with_metadata)
52 c.setopt(pycurl.HTTPPOST, multi_part_form_data)
53 c.setopt(c.WRITEFUNCTION, buffer.write)
56 c.setopt(c.SSL_VERIFYPEER, 0)
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())
65 return (element_name, http_res, buffer.getvalue())
67 except Exception as inst:
68 print("ERROR=" + str(inst))
69 return (element_name, None, None)
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]
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
82 def create_metadata_multipart(type_file_name):
83 metadata = create_json_metadata_str(type_file_name)
84 return ("toscaTypeMetadata", metadata)
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
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)
98 debug("before load json")
99 json_data = json.load(json_file, strict=False)
102 return json.dumps(json_data)