""" Contains html text in variables to make and html response """ import yaml from http import HTTPStatus from html import escape as html_escape __author__ = "Alfonso Tierno " html_start = """ Welcome to OSM
( {} ) VNFDs NSDs NSs NSTDs USERs PROJECTs TOKENs VIMs SDNs logout
""" html_body = """

{item}

""" html_end = """ """ html_body_error = "

Error
{}

" html_auth2 = """ OSM Login

{error}

Sign in to OSM

Username
Password
""" html_upload_body = """

Upload {} descriptor (tar.gz) file:

""" html_nslcmop_body = """ nslcm operations VNFRS

""" def format(data, request, response, session): """ Format a nice html response, depending on the data :param data: :param request: cherrypy request :param response: cherrypy response :return: string with teh html response """ response.headers["Content-Type"] = 'text/html' if response.status == HTTPStatus.UNAUTHORIZED.value: if response.headers.get("WWW-Authenticate") and request.config.get("auth.allow_basic_authentication"): response.headers["WWW-Authenticate"] = "Basic" + response.headers["WWW-Authenticate"][6:] return else: return html_auth2.format(error=data) body = html_body.format(item=request.path_info) if response.status and response.status > 202: body += html_body_error.format(yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False)) elif isinstance(data, (list, tuple)): if request.path_info == "/vnfpkgm/v1/vnf_packages": body += html_upload_body.format(request.path_info, "VNFD") elif request.path_info == "/nsd/v1/ns_descriptors": body += html_upload_body.format(request.path_info + "_content", "NSD") elif request.path_info == "/nst/v1/nst_templates": body += html_upload_body.format(request.path_info + "_content", "NSTD") for k in data: if isinstance(k, dict): data_id = k.pop("_id", None) elif isinstance(k, str): data_id = k body += '

{id}: {t}

'.format(url=request.path_info, id=data_id, t=html_escape(str(k))) elif isinstance(data, dict): if "Location" in response.headers: body += ' show '.format(response.headers["Location"]) else: body += ' '\ .format(request.path_info) if request.path_info.startswith("/nslcm/v1/ns_instances_content/") or \ request.path_info.startswith("/nslcm/v1/ns_instances/"): _id = request.path_info[request.path_info.rfind("/")+1:] body += html_nslcmop_body.format(id=_id) body += "
" + html_escape(yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False)) + \
                "
" elif data is None: if request.method == "DELETE" or "METHOD=DELETE" in request.query_string: body += "
 deleted 
" else: body = html_escape(str(data)) user_text = " " if session: if session.get("username"): user_text += "user: {}".format(session.get("username")) if session.get("project_id"): user_text += ", project: {}".format(session.get("project_id")) return html_start.format(user_text) + body + html_end # yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False) # tags=False, # encoding='utf-8', allow_unicode=True)