X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fro_main.py;h=51c22bf5e40a1d854d63c7d1378a23a149730375;hb=HEAD;hp=2a2e22cf99ddae4dd3c43efb76752bc3af0cdf53;hpb=29a4c1a24050561a70f4f47b276a268d48c79067;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/ro_main.py b/NG-RO/osm_ng_ro/ro_main.py index 2a2e22cf..51c22bf5 100644 --- a/NG-RO/osm_ng_ro/ro_main.py +++ b/NG-RO/osm_ng_ro/ro_main.py @@ -35,6 +35,7 @@ from osm_common.fsbase import FsException from osm_common.msgbase import MsgException from osm_ng_ro import version as ro_version, version_date as ro_version_date import osm_ng_ro.html_out as html +from osm_ng_ro.monitor import start_monitoring, stop_monitoring from osm_ng_ro.ns import Ns, NsException from osm_ng_ro.validation import ValidationError from osm_ng_ro.vim_admin import VimAdminThread @@ -214,6 +215,7 @@ class Server(object): } def _format_in(self, kwargs): + error_text = "" try: indata = None @@ -227,9 +229,7 @@ class Server(object): cherrypy.request.headers.pop("Content-File-MD5", None) elif "application/yaml" in cherrypy.request.headers["Content-Type"]: error_text = "Invalid yaml format " - indata = yaml.load( - cherrypy.request.body, Loader=yaml.SafeLoader - ) + indata = yaml.safe_load(cherrypy.request.body) cherrypy.request.headers.pop("Content-File-MD5", None) elif ( "application/binary" in cherrypy.request.headers["Content-Type"] @@ -254,21 +254,19 @@ class Server(object): indata = filecontent.file # .read() if filecontent.content_type.value: - cherrypy.request.headers[ - "Content-Type" - ] = filecontent.content_type.value + cherrypy.request.headers["Content-Type"] = ( + filecontent.content_type.value + ) else: # raise cherrypy.HTTPError(HTTPStatus.Not_Acceptable, # "Only 'Content-Type' of type 'application/json' or # 'application/yaml' for input format are available") error_text = "Invalid yaml format " - indata = yaml.load( - cherrypy.request.body, Loader=yaml.SafeLoader - ) + indata = yaml.safe_load(cherrypy.request.body) cherrypy.request.headers.pop("Content-File-MD5", None) else: error_text = "Invalid yaml format " - indata = yaml.load(cherrypy.request.body, Loader=yaml.SafeLoader) + indata = yaml.safe_load(cherrypy.request.body) cherrypy.request.headers.pop("Content-File-MD5", None) if not indata: @@ -284,9 +282,11 @@ class Server(object): kwargs[k] = None elif format_yaml: try: - kwargs[k] = yaml.load(v, Loader=yaml.SafeLoader) - except Exception: - pass + kwargs[k] = yaml.safe_load(v) + except Exception as yaml_error: + logging.exception( + f"{yaml_error} occured while parsing the yaml" + ) elif ( k.endswith(".gt") or k.endswith(".lt") @@ -298,8 +298,10 @@ class Server(object): except Exception: try: kwargs[k] = float(v) - except Exception: - pass + except Exception as keyword_error: + logging.exception( + f"{keyword_error} occured while getting the keyword arguments" + ) elif v.find(",") > 0: kwargs[k] = v.split(",") elif isinstance(v, (list, tuple)): @@ -308,9 +310,11 @@ class Server(object): v[index] = None elif format_yaml: try: - v[index] = yaml.load(v[index], Loader=yaml.SafeLoader) - except Exception: - pass + v[index] = yaml.safe_load(v[index]) + except Exception as error: + logging.exception( + f"{error} occured while parsing the yaml" + ) return indata except (ValueError, yaml.YAMLError) as exc: @@ -352,9 +356,9 @@ class Server(object): if accept: if "application/json" in accept: - cherrypy.response.headers[ - "Content-Type" - ] = "application/json; charset=utf-8" + cherrypy.response.headers["Content-Type"] = ( + "application/json; charset=utf-8" + ) a = json.dumps(data, indent=4) + "\n" return a.encode("utf8") @@ -535,15 +539,15 @@ class Server(object): return ",".join(folders) + " folders deleted\n" elif args and args[0] == "login": if not cherrypy.request.headers.get("Authorization"): - cherrypy.response.headers[ - "WWW-Authenticate" - ] = 'Basic realm="Access to OSM site", charset="UTF-8"' + cherrypy.response.headers["WWW-Authenticate"] = ( + 'Basic realm="Access to OSM site", charset="UTF-8"' + ) cherrypy.response.status = HTTPStatus.UNAUTHORIZED.value elif args and args[0] == "login2": if not cherrypy.request.headers.get("Authorization"): - cherrypy.response.headers[ - "WWW-Authenticate" - ] = 'Bearer realm="Access to OSM site"' + cherrypy.response.headers["WWW-Authenticate"] = ( + 'Bearer realm="Access to OSM site"' + ) cherrypy.response.status = HTTPStatus.UNAUTHORIZED.value elif args and args[0] == "sleep": sleep_time = 5 @@ -564,18 +568,14 @@ class Server(object): try: if cherrypy.request.method == "POST": - to_send = yaml.load(cherrypy.request.body, Loader=yaml.SafeLoader) + to_send = yaml.safe_load(cherrypy.request.body) for k, v in to_send.items(): self.ns.msg.write(main_topic, k, v) return_text += " {}: {}\n".format(k, v) elif cherrypy.request.method == "GET": for k, v in kwargs.items(): - self.ns.msg.write( - main_topic, k, yaml.load(v, Loader=yaml.SafeLoader) - ) - return_text += " {}: {}\n".format( - k, yaml.load(v, Loader=yaml.SafeLoader) - ) + self.ns.msg.write(main_topic, k, yaml.safe_load(v)) + return_text += " {}: {}\n".format(k, yaml.safe_load(v)) except Exception as e: return_text += "Error: " + str(e) @@ -687,7 +687,7 @@ class Server(object): **kwargs, ): token_info = None - outdata = None + outdata = {} _format = None method = "DONE" rollback = [] @@ -743,9 +743,11 @@ class Server(object): cherrypy.response.status = ( HTTPStatus.ACCEPTED.value if not done - else HTTPStatus.OK.value - if outdata is not None - else HTTPStatus.NO_CONTENT.value + else ( + HTTPStatus.OK.value + if outdata is not None + else HTTPStatus.NO_CONTENT.value + ) ) return self._format_out(outdata, token_info, _format) @@ -766,9 +768,9 @@ class Server(object): http_code_name = e.http_code.name cherrypy.log("Exception {}".format(e)) else: - http_code_value = ( - cherrypy.response.status - ) = HTTPStatus.BAD_REQUEST.value # INTERNAL_SERVER_ERROR + http_code_value = cherrypy.response.status = ( + HTTPStatus.BAD_REQUEST.value + ) # INTERNAL_SERVER_ERROR cherrypy.log("CRITICAL: Exception {}".format(e), traceback=True) http_code_name = HTTPStatus.BAD_REQUEST.name @@ -854,7 +856,7 @@ def _start_service(): elif k1 == "tools": # update [/] configuration engine_config["/"]["tools." + k2.replace("_", ".")] = yaml.safe_load(v) - elif k1 in ("message", "database", "storage", "authentication"): + elif k1 in ("message", "database", "storage", "authentication", "period"): engine_config[k1][k2] = yaml.safe_load(v) except Exception as e: @@ -931,6 +933,8 @@ def _start_service(): # # start subscriptions thread: vim_admin_thread = VimAdminThread(config=engine_config, engine=ro_server.ns) vim_admin_thread.start() + start_monitoring(config=engine_config) + # # Do not capture except SubscriptionException # backend = engine_config["authentication"]["backend"] @@ -948,7 +952,7 @@ def _stop_service(): # terminate vim_admin_thread if vim_admin_thread: vim_admin_thread.terminate() - + stop_monitoring() vim_admin_thread = None cherrypy.tree.apps["/ro"].root.ns.stop() cherrypy.log.error("Stopping osm_ng_ro") @@ -990,7 +994,7 @@ if __name__ == "__main__": elif o in ("-c", "--config"): config_file = a else: - assert False, "Unhandled option" + raise ValueError("Unhandled option") if config_file: if not path.isfile(config_file):