
Heute wollte ich ein monolitisches Python File der FLubtitles API etwas modularisieren. Ich hatte mich initial an das Beispiel von wsgi-jsonrpc gehalten. Also einfach eine Klasse erstellen, diese instanzieren und an WSGIJSONRPCApplication übergeben.
... def class Common(): def LogIn(): def LogOut(): ...
import os import sys import wsgi_jsonrpc sys.path = [os.path.dirname(__file__)] + sys.path from api import Common() methods = Common() application = wsgi_jsonrpc.WSGIJSONRPCApplication(instance=methods)
Da ich api.py nun aufteilen wollte, ergaben sich jedoch mehrere Klassen und ich kann aber nur eine Instanz an WSGIJSONRPCApplication übergeben. Jedoch gibt es auch die Möglichkeit statt einer Klassen-Instanz auch einfach eine Liste der Methoden zu übergeben. Jetzt musste ich es nur noch hinbekommen, alle Methoden einzusammeln und unnötige rauszufiltern. Ich bin dann auf ein nettes Module namens inspect gestoßen. Sehr hilfreich waren die Beispiele auf Dough Hellmann's Seite.
class Auth(): def CreateAccount(): def LogIn():
class Common(): def GetSubtitleLanguages(): def GetStatusCodes():
import os import sys import inspect import wsgi_jsonrpc sys.path = [os.path.dirname(__file__)] + sys.path from api.common import Common from api.auth import Auth common = Common() auth = Auth() api_methods = [] for name, data in inspect.getmembers(common, inspect.ismethod): if name != '__init__': api_methods.append(data) for name, data in inspect.getmembers(auth, inspect.ismethod): if name != '__init__': api_methods.append(data) application = wsgi_jsonrpc.WSGIJSONRPCApplication(methods=api_methods)
So funktioniert es nun. Mit dem Module inspect macht man quasi eine Razzia durch seine Files und schaut sich an, was es an Daten gibt :-)