From 67a2395db3a4c467d00b340e3335302a43d7efee Mon Sep 17 00:00:00 2001 From: Peter Surda Date: Mon, 1 Mar 2021 10:33:42 +0100 Subject: [PATCH] fix: code quality --- main.py | 78 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/main.py b/main.py index da63005..3437a54 100644 --- a/main.py +++ b/main.py @@ -1,24 +1,38 @@ -import os -import sys - -import cherrypy -from cherrypy.lib.static import serve_file -import yaml -import socket +#!/usr/bin/env python3 +""" +Serve cloud init files +""" import configparser +import os +import socket +import sys +from ipaddress import AddressValueError, IPv4Address, IPv6Address + +import yaml +import cherrypy +from cherrypy.lib.static import serve_file + PATH = os.path.dirname(os.path.abspath(__file__)) -config = configparser.ConfigParser() -config.read(os.path.join(PATH, "config.ini")) +CONFIG = configparser.ConfigParser() +CONFIG.read(os.path.join(PATH, "config.ini")) -user_data_filename = config["app"].get("user_data", "user-data") -meta_data_filename = config["app"].get("meta_data", "meta-data") -redirect_filename = config["app"].get("redirect", "redirect") +USER_DATA_FILENAME = CONFIG["app"].get("user_data", "user-data") +META_DATA_FILENAME = CONFIG["app"].get("meta_data", "meta-data") +REDIRECT_FILENAME = CONFIG["app"].get("redirect", "redirect") -class MainApp: +class CloudInitApp: + """ + Serve cloud init files + """ + + def __init__(self): + self.remoteip = None + self.hostinfo = ('localhost', ) + def _can_ip_be_proxy(self): self.remoteip = cherrypy.request.remote.ip try: @@ -46,17 +60,17 @@ class MainApp: try: self.hostinfo = socket.gethostbyaddr(self.remoteip) except socket.herror: - self.hostinfo = ('localhost', ) + pass def _redirect_if_needed(self): filepath = os.path.join(PATH, "data", self.hostinfo[0], - "redirect") + REDIRECT_FILENAME) if os.path.exists(filepath): try: - with open(filepath) as f: - content = f.read().splitlines() + with open(filepath) as redirect: + content = redirect.read().splitlines() raise cherrypy.HTTPRedirect(content[0], 301) - except BaseException: + except IOError: return False return False @@ -68,10 +82,10 @@ class MainApp: self._init_ip() self._redirect_if_needed() filepath = os.path.join(PATH, "data", self.hostinfo[0], - user_data_filename) + USER_DATA_FILENAME) if not os.path.exists(filepath): - filepath = os.path.join(PATH, "data", user_data_filename) - return serve_file(filepath, "application/x-download", "attachment") + filepath = os.path.join(PATH, "data", USER_DATA_FILENAME) + return serve_file(filepath, "text/yaml", "attachment") @cherrypy.expose def meta_data(self): @@ -82,17 +96,21 @@ class MainApp: self._redirect_if_needed() hostname = self.hostinfo[0] data = { - "instance-id": hostname.split(".")[0], - "local-hostname": hostname + "instance-id": hostname.split(".")[0], + "local-hostname": hostname } - filepath = os.path.join(PATH, "data", hostname, meta_data_filename) + filepath = os.path.join(PATH, "data", hostname, META_DATA_FILENAME) if os.path.exists(filepath): with open(filepath, "r") as metadata: for line in metadata.readlines(): linesplit = list(map(lambda k: k.strip(), line.split(":"))) data[linesplit[0]] = linesplit[1] + cherrypy.response.headers['Content-Type'] = \ + 'text/yaml' + cherrypy.response.headers['Content-Disposition'] = \ + 'attachment; filename="user-data"' return yaml.dump(data) @cherrypy.expose @@ -114,15 +132,17 @@ class MainApp: if not os.path.exists(folder): os.makedirs(folder) - with open(os.path.join(folder, meta_data_filename), "w") as f: - f.write(data) + with open(os.path.join(folder, META_DATA_FILENAME), "w") as fin: + fin.write(data) -ROOT = MainApp() +ROOT = CloudInitApp() if __name__ == "__main__": - cherrypy.server.socket_host = config["server"].get("server_host", "127.0.0.1") - cherrypy.server.socket_port = config["server"].getint("server_port", 8081) + cherrypy.server.socket_host = \ + CONFIG["server"].get("server_host", "127.0.0.1") + cherrypy.server.socket_port = \ + CONFIG["server"].getint("server_port", 8081) ENGINE = cherrypy.engine cherrypy.tree.mount(ROOT)