diff --git a/environments/python/server.py b/environments/python/server.py index 1dfd48f3..a553dd60 100644 --- a/environments/python/server.py +++ b/environments/python/server.py @@ -8,8 +8,9 @@ import bjoern from gevent.pywsgi import WSGIServer from flask import Flask, request, abort, g + class FuncApp(Flask): - def __init__(self, name, loglevel = logging.DEBUG): + def __init__(self, name, loglevel=logging.DEBUG): super(FuncApp, self).__init__(name) # init the class members @@ -24,7 +25,8 @@ class FuncApp(Flask): # self.root.setLevel(loglevel) self.ch.setLevel(loglevel) - self.ch.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + self.ch.setFormatter(logging.Formatter( + '%(asctime)s - %(levelname)s - %(message)s')) self.logger.addHandler(self.ch) # @@ -42,28 +44,30 @@ class FuncApp(Flask): body = request.get_json() filepath = body['filepath'] handler = body['functionName'] - - # The value of "functionName" is consist of `.`. + + # The value of "functionName" is consist of + # `.`. moduleName, funcName = handler.split(".") # check whether the destination is a directory or a file if os.path.isdir(filepath): # add package directory path into module search path sys.path.append(filepath) - + # find module from package path we append previously. - # Python will try to find module from the same name file under - # the package directory. If search is successful, the return - # value is a 3-element tuple; otherwise, an exception "ImportError" - # is raised. - # Second parameter of find_module enforces python to find same - # name module from the given list of directories to prevent name - # confliction with built-in modules. + # Python will try to find module from the same name + # file under the package directory. If search is + # successful, the return value is a 3-element tuple; + # otherwise, an exception "ImportError" is raised. + # Second parameter of find_module enforces python to + # find same name module from the given list of + # directories to prevent name confliction with + # built-in modules. f, path, desc = imp.find_module(moduleName, [filepath]) - + # load module - # Return module object is the load is successful; otherwise, - # an exception is raised. + # Return module object is the load is successful; + # otherwise, an exception is raised. try: mod = imp.load_module(moduleName, f, path, desc) finally: @@ -72,30 +76,35 @@ class FuncApp(Flask): else: # load source from destination python file mod = imp.load_source(moduleName, filepath) - + # load user function from module self.userfunc = getattr(mod, funcName) - + return "" @self.route('/healthz', methods=['GET']) def healthz(): return "", 200 - @self.route('/', methods=['GET', 'POST', 'PUT', 'HEAD', 'OPTIONS', 'DELETE']) + @self.route('/', methods=['GET', 'POST', 'PUT', 'HEAD', 'OPTIONS', + 'DELETE']) def f(): - if self.userfunc == None: + if self.userfunc is None: print("Generic container: no requests supported") abort(500) # # Customizing the request context # - # If you want to pass something to the function, you can add it to 'g': + # If you want to pass something to the function, you can + # add it to 'g': # g.myKey = myValue - # And the user func can then access that (after doing a "from flask import g"). # + # And the user func can then access that + # (after doing a"from flask import g"). + return self.userfunc() + app = FuncApp(__name__, logging.DEBUG) #