X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fnbi.py;h=46c7c9b5c21bbb78f711e4dd5858819f9ec43348;hp=caf4c2d9510156658e61ba8f91b1370eb2027674;hb=e4c83a7871f341a8340e6befc9b4e66a72e4927d;hpb=e36ab859d275c9c1b863bbb6564a1da56cabe2dd diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index caf4c2d..46c7c9b 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -101,7 +101,9 @@ URL: /osm GET POST / O O O O /projects O O / O O - /vims_accounts (also vims for compatibility) O O + /vim_accounts (also vims for compatibility) O O + / O O O + /wim_accounts O O / O O O /sdns O O / O O O @@ -214,6 +216,9 @@ class Server(object): "vim_accounts": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE", "PATCH", "PUT")} }, + "wim_accounts": {"METHODS": ("GET", "POST"), + "": {"METHODS": ("GET", "DELETE", "PATCH", "PUT")} + }, "sdns": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE", "PATCH", "PUT")} }, @@ -444,7 +449,8 @@ class Server(object): elif "application/yaml" in accept or "*/*" in accept or "text/plain" in accept: pass - else: + # if there is not any valid accept, raise an error. But if response is already an error, format in yaml + elif cherrypy.response.status >= 400: raise cherrypy.HTTPError(HTTPStatus.NOT_ACCEPTABLE.value, "Only 'Accept' of type 'application/json' or 'application/yaml' " "for output format are available") @@ -544,7 +550,7 @@ class Server(object): def test(self, *args, **kwargs): thread_info = None if args and args[0] == "help": - return "
\ninit\nfile/  download file\ndb-clear/table\nprune\nlogin\nlogin2\n"\
+            return "
\ninit\nfile/  download file\ndb-clear/table\nfs-clear[/folder]\nlogin\nlogin2\n"\
                    "sleep/
" elif args and args[0] == "init": @@ -565,9 +571,16 @@ class Server(object): return f elif len(args) == 2 and args[0] == "db-clear": - return self.engine.db.del_list(args[1], kwargs) - elif args and args[0] == "prune": - return self.engine.prune() + deleted_info = self.engine.db.del_list(args[1], kwargs) + return "{} {} deleted\n".format(deleted_info["deleted"], args[1]) + elif len(args) and args[0] == "fs-clear": + if len(args) >= 2: + folders = (args[1],) + else: + folders = self.engine.fs.dir_ls(".") + for folder in folders: + self.engine.fs.file_delete(folder) + 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"' @@ -614,7 +627,7 @@ class Server(object): " session: {}\n".format(cherrypy.session) + " cookie: {}\n".format(cherrypy.request.cookie) + " method: {}\n".format(cherrypy.request.method) + - " session: {}\n".format(cherrypy.session.get('fieldname')) + + " session: {}\n".format(cherrypy.session.get('fieldname')) + " body:\n") return_text += " length: {}\n".format(cherrypy.request.body.length) if cherrypy.request.body.length: @@ -802,6 +815,7 @@ class Server(object): outdata = self.engine.del_item_list(session, engine_topic, kwargs) cherrypy.response.status = HTTPStatus.OK.value else: # len(args) > 1 + delete_in_process = False if topic == "ns_instances_content" and not force: nslcmop_desc = { "lcmOperationType": "terminate", @@ -809,8 +823,10 @@ class Server(object): "autoremove": True } opp_id = self.engine.new_item(rollback, session, "nslcmops", nslcmop_desc, None) - outdata = {"_id": opp_id} - cherrypy.response.status = HTTPStatus.ACCEPTED.value + if opp_id: + delete_in_process = True + outdata = {"_id": opp_id} + cherrypy.response.status = HTTPStatus.ACCEPTED.value elif topic == "netslice_instances_content" and not force: nsilcmop_desc = { "lcmOperationType": "terminate", @@ -818,12 +834,14 @@ class Server(object): "autoremove": True } opp_id = self.engine.new_item(rollback, session, "nsilcmops", nsilcmop_desc, None) - outdata = {"_id": opp_id} - cherrypy.response.status = HTTPStatus.ACCEPTED.value - else: + if opp_id: + delete_in_process = True + outdata = {"_id": opp_id} + cherrypy.response.status = HTTPStatus.ACCEPTED.value + if not delete_in_process: self.engine.del_item(session, engine_topic, _id, force) cherrypy.response.status = HTTPStatus.NO_CONTENT.value - if engine_topic in ("vim_accounts", "sdns"): + if engine_topic in ("vim_accounts", "wim_accounts", "sdns"): cherrypy.response.status = HTTPStatus.ACCEPTED.value elif method in ("PUT", "PATCH"): @@ -862,7 +880,8 @@ class Server(object): self.engine.db.set_one(rollback_item["topic"], {"_id": rollback_item["_id"]}, rollback_item["content"], fail_on_empty=False) else: - self.engine.del_item(**rollback_item, session=session, force=True) + self.engine.db.del_one(rollback_item["topic"], {"_id": rollback_item["_id"]}, + fail_on_empty=False) except Exception as e2: rollback_error_text = "Rollback Exception {}: {}".format(rollback_item, e2) cherrypy.log(rollback_error_text)