6 from sdcBePy.common.logger import debug, log, print_name_and_return_code, print_and_exit
7 from sdcBePy.common.sdcBeProxy import SdcBeProxy
8 from sdcBePy.common.errors import ResourceCreationError
11 def process_and_create_normative_element(normative_element,
12 scheme=None, be_host=None, be_port=None, header=None, admin_user=None, sdc_be_proxy=None,
13 model=None, debug=False,
14 exit_on_success=False):
15 if sdc_be_proxy is None:
16 sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, admin_user, debug=debug)
18 file_dir, url_suffix, element_name, element_from_name, with_metadata = normative_element.get_parameters()
19 _create_normative_element(sdc_be_proxy,
29 def _create_normative_element(sdc_be_proxy, file_dir,
30 url_suffix, element_name, element_form_name, model, with_metadata=False,
31 exit_on_success=False):
32 result = _send_request(sdc_be_proxy,
39 print_and_check_result(result, exit_on_success)
42 def _send_request(sdc_be_proxy, file_dir, url_suffix, element_name,
43 element_form_name, model,
46 log("create normative element ", element_name)
48 type_file_name = file_dir + element_name
49 multi_part_form_data = _create_multipart_form_data(element_form_name, type_file_name, with_metadata,
52 debug("http request url =", url_suffix)
53 http_res = sdc_be_proxy.post_file(url_suffix, multi_part_form_data)
54 if http_res is not None:
55 debug("http response =", http_res)
57 response = sdc_be_proxy.get_response_from_buffer()
58 debug("response buffer", response)
60 return element_name, http_res, response
62 except Exception as inst:
63 print("ERROR=" + str(inst))
64 return element_name, None, None
67 def _create_multipart_form_data(element_form_name, type_file_name, with_metadata, element_name, model):
68 tosca_type_zip_part = _create_zip_file_multi_part(element_form_name, type_file_name, element_name)
69 multi_part_form_data = [tosca_type_zip_part]
71 metadata_type_part = _create_metadata_multipart(type_file_name)
72 multi_part_form_data.append(metadata_type_part)
74 model_data = ("model", model)
75 multi_part_form_data.append(model_data)
76 debug(multi_part_form_data)
77 return multi_part_form_data
80 def _create_metadata_multipart(type_file_name):
81 metadata = _create_json_metadata_str(type_file_name)
82 return "toscaTypeMetadata", metadata
84 def _create_zip_file_multi_part(element_form_name, type_file_name, element_name):
85 zf = zipfile.ZipFile(type_file_name + ".zip", "w")
86 zf.write(type_file_name + '.yml', element_name + '.yml')
89 tosca_type_zip_path = type_file_name + ".zip"
90 tosca_type_zip_part = (element_form_name, (pycurl.FORM_FILE, tosca_type_zip_path))
91 return tosca_type_zip_part
94 def _create_json_metadata_str(file_name):
95 type_metadata_json_file = file_name + ".json"
96 debug(type_metadata_json_file)
97 json_file = open(type_metadata_json_file, encoding='utf-8')
99 debug("before load json")
100 json_data = json.load(json_file, strict=False)
103 return json.dumps(json_data)
106 def print_and_check_result(result, exit_on_success):
107 if result is not None:
108 print_name_and_return_code(result[0], result[1])
109 if result[1] is None or result[1] not in [200, 201, 409]:
110 raise ResourceCreationError("Failed to create the normatives elements!!", 1)
112 if exit_on_success is True:
113 print_and_exit(0, "All normatives elements created successfully!!")
115 raise ResourceCreationError("Results is None!", 1)