3 from StringIO import StringIO
6 from importCommon import *
9 #################################################################################################################################################################################
11 # Import all users from a given file #
14 # 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> ] #
16 # shortest activation (be host = localhost, be port = 8080): #
17 # python importUsers.py [-f <input file> | --ifile=<input file> ] #
19 #################################################################################################################################################################################
20 def import_element(scheme, be_host, be_port, admin_user, exit_on_success, file_dir, url_suffix, element_name, element_form_name,
22 result = createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name, with_metadata)
24 print_name_and_return_code(result[0], result[1])
27 if result[1] is None or result[1] not in [200, 201, 409]:
28 error_and_exit(1, None)
31 error_and_exit(0, None)
35 def createNormativeElement(scheme, be_host, be_port, admin_user, file_dir, url_suffix, element_name, element_form_name,
38 log("in create normative element ", element_name)
42 url = scheme + '://' + be_host + ':' + be_port + url_suffix
46 admin_header = 'USER_ID: ' + admin_user
47 c.setopt(pycurl.HTTPHEADER, [admin_header])
49 type_file_name = file_dir + "/" + element_name
51 multi_part_form_data = create_multipart_form_data(element_form_name, type_file_name, with_metadata, element_name)
53 c.setopt(pycurl.HTTPPOST, multi_part_form_data)
54 c.setopt(c.WRITEFUNCTION, buffer.write)
57 c.setopt(pycurl.SSL_VERIFYPEER, 0)
58 c.setopt(pycurl.SSL_VERIFYHOST, 0)
62 http_res = c.getinfo(c.RESPONSE_CODE)
63 if http_res is not None:
64 debug("http response=", http_res)
65 debug("response buffer", buffer.getvalue())
67 return (element_name, http_res, buffer.getvalue())
69 except Exception as inst:
70 print("ERROR=" + str(inst))
71 return (element_name, None, None)
74 def create_multipart_form_data(element_form_name, type_file_name, with_metadata, element_name):
75 tosca_type_zip_part = create_zip_file_multi_part(element_form_name, type_file_name, element_name)
76 multi_part_form_data = [tosca_type_zip_part]
78 metadata_type_part = create_metadata_multipart(type_file_name)
79 multi_part_form_data.append(metadata_type_part)
80 debug(multi_part_form_data)
81 return multi_part_form_data
84 def create_metadata_multipart(type_file_name):
85 metadata = create_json_metadata_str(type_file_name)
86 return ("toscaTypeMetadata", metadata)
89 def create_zip_file_multi_part(element_form_name, type_file_name, element_name):
90 zf = zipfile.ZipFile(type_file_name + ".zip", "w")
91 zf.write(type_file_name + '.yml', element_name + '.yml')
94 tosca_type_zip_path = type_file_name + ".zip"
95 tosca_type_zip_part = (element_form_name, (pycurl.FORM_FILE, tosca_type_zip_path))
96 return tosca_type_zip_part
99 def create_json_metadata_str(file_name):
100 type_metadata_json_file = file_name + ".json"
101 debug(type_metadata_json_file)
102 json_file = open(type_metadata_json_file)
104 debug("before load json")
105 json_data = json.load(json_file, strict=False)
108 return json.dumps(json_data)