[Python-de] XML-RPC Serialisierung beeinflußen

Diez B. Roggisch deets at web.de
So Jun 12 20:52:03 CEST 2011


On Jun 12, 2011, at 8:40 PM, Andreas Jung wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Seltsame Frage....bei XML-RPC werden immer noch Methoden
> mit einer festen Signatur aufgerufen und der Client muss die
> Parameter analog call-by-value übergeben. Wieso willst Du also hier
> ein Objekt reinstecken...sorry, das macht keinen Sinn im Kontext
> von XML-RPC. 

Macht es sehr wohl, wenn man die Frage wirklich gelesen haette. Plus die Doku.

Florian ist auf der Suche nach einer customisierten Serialisierung/De-Serialisierung von Objektzustaenden. Da geht es nicht um irgendwelche Methodenaufrufe von durch die Gegend gereichten Objektreferenzen...

Leider scheint es nicht moeglich zu sein mittels zB des Pickle-Protokolls "dazwischenzugraetschen". 

@Florian

Unter Umstaenden koennte dir JSON hier helfen. Das built-in-json erlaubt naemlich sowas. Du muesstest fuer deine entsprechenden Typen eine Serialisierung progarmmieren, zB indem du auf eine Methode wie __json__ zurueckgreifst, die dann zB so aussieht:


class Foo(object):

   def __json__(self):
         res = {
             some_property : self.some_property
         }
         res.update(self.__dict__)
         return res

Dann musst du in jeder XMLRPC-Methode/Funktion den Rueckgabewert "jsonifizieren". Das kann man zB durch einen Dekorator vereinfachen, oder gar einer Metaklasse.

Der Vorteil des Ganzen: JSON selbst regelt schon den rekursiven Abstieg in die ueblichen Typen.

Achtung: du musst die speziellen Objekte von XMLRPC (DateTime & Binary) natuerlich ebenfalls behandeln!

Diez


Mehr Informationen über die Mailingliste python-de