6 from sdcBePy.common.errors import ResourceCreationError
7 from sdcBePy.common.logger import print_name_and_return_code, print_and_exit, log, debug
8 from sdcBePy.common.sdcBeProxy import SdcBeProxy
11 def process_and_create_normative_types(normative_type,
12 scheme=None, be_host=None, be_port=None, header=None, admin_user=None,
16 exit_on_success=False):
17 if sdc_be_proxy is None:
18 sdc_be_proxy = SdcBeProxy(be_host, be_port, header, scheme, admin_user, debug=debug)
20 file_dir, normative_type_list = normative_type.get_parameters()
22 results = _create_normatives_type(file_dir, sdc_be_proxy, normative_type_list, update_version)
23 print_and_check_results(results, update_version, exit_on_success)
26 def print_and_check_results(results, update_version, exit_on_success=False):
27 if results is not None:
30 print("----------------------------------------")
31 for result in results:
32 print_name_and_return_code(result[0], result[1], with_line=False)
33 print("----------------------------------------")
34 check_results_and_exit(results, exit_on_success)
36 raise ResourceCreationError("Results is none -> error occurred!!", 1)
39 def check_results_and_exit(results, exit_on_success):
40 if not _results_ok(results, _get_response_code()):
41 raise ResourceCreationError("Failed to create the normatives types !!", 1)
44 print_and_exit(0, "All normatives types created successfully!!")
47 def _create_normatives_type(file_dir, sdc_be_proxy, types, update_version):
49 response_codes = _get_response_code()
50 for normative_type in types:
51 if not os.path.exists(file_dir):
53 result = _send_request(sdc_be_proxy, file_dir, normative_type, update_version)
54 results.append(result)
55 if result[1] is None or result[1] not in response_codes:
56 raise ResourceCreationError("Failed creating normative type " + normative_type + ". " + str(result[1]),
62 def _send_request(sdc_be_proxy, file_dir, element_name, update_version):
64 log("create normative type ", element_name)
65 debug("userId", sdc_be_proxy.con.user_header)
66 debug("fileDir", file_dir)
68 url = '/sdc2/rest/v1/catalog/upload/multipart'
69 if update_version is not None:
70 url += '?createNewVersion=' + _boolean_to_string(update_version)
72 send = _create_send_body(file_dir, element_name)
75 http_res = sdc_be_proxy.post_file(url, send)
76 if http_res is not None:
77 debug("http response=", http_res)
79 response = sdc_be_proxy.get_response_from_buffer()
81 return element_name, http_res, response
83 except Exception as inst:
84 print("ERROR=" + str(inst))
85 return element_name, None, None
88 def _create_send_body(file_dir, element_name):
89 yml_path = file_dir + element_name + "/" + element_name + ".yml"
90 path = file_dir + element_name + "/" + element_name + ".zip"
92 zf = zipfile.ZipFile(path, "w")
93 zf.write(yml_path, element_name + '.yml')
97 current_json_file = file_dir + element_name + "/" + element_name + ".json"
99 json_file = open(current_json_file, encoding='utf-8')
101 debug("before load json")
102 json_data = json.load(json_file, strict=False)
105 json_as_str = json.dumps(json_data)
107 return [('resourceMetadata', json_as_str), ('resourceZip', (pycurl.FORM_FILE, path))]
110 def _results_ok(results, response_codes):
111 for result in results:
112 if result[1] not in response_codes:
118 def _get_response_code():
119 response_codes = [200, 201, 409]
120 return response_codes
123 def _boolean_to_string(boolean_value):
124 return "true" if boolean_value else "false"