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

Florian Lindner mailinglists at xgm.de
Mo Jun 13 12:04:28 CEST 2011


Am Sonntag 12 Juni 2011, 20:52:03 schrieb Diez B. Roggisch:
> 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...

Genau.

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

Schade.

> @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.

Eine interessante Methode. Für *mein* Problem vom Implementierungsaufwand 
allerdings in keinem Verhältnis zur Größe des Problems. Hinzu kommt, dass ich 
von einem existierenden Server ableite und das Protokoll um einige Methoden 
erweitere. Diese sollten sich aber einfügen in die vorhandene API.
Ich werde wohl einfach statt

def xml-method(self):
    return object

ein

    return object.some_dict_representation()


machen.

Grüße,

Florian


Mehr Informationen über die Mailingliste python-de