Python Razzia

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.

Vorher

  • api.py

...
def class Common():
 
    def LogIn():
 
    def LogOut():
...

  • json-rpc.wsgi

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.

Nachher

  • api/auth.py

class Auth():
 
    def CreateAccount():
 
    def LogIn():

  • api/common.py

class Common():
 
    def GetSubtitleLanguages():
 
    def GetStatusCodes():

  • json-rpc.wsgi

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 :-)