Source code for pywb.warcserver.amf

import json
import six
from pyamf.remoting import Envelope, Request
from pyamf.flex.messaging import RemotingMessage


[docs]class Amf:
[docs] @staticmethod def get_representation(request_object, max_calls=500): max_calls = max_calls - 1 if max_calls < 0: raise Exception("Amf.get_representation maximum number of calls reached") if isinstance(request_object, Envelope): # Remove order of Request bodies = [] for i in request_object.bodies: bodies.append(Amf.get_representation(i[1], max_calls)) bodies = sorted(bodies) return "<Envelope>{bodies}</Envelope>".format(bodies="[" + ",".join(bodies) + "]") elif isinstance(request_object, Request): # Remove cyclic reference target = request_object.target body = Amf.get_representation(request_object.body, max_calls) return "<Request target={target}>{body}</Request>".format(**locals()) elif isinstance(request_object, RemotingMessage): # Remove random properties operation = request_object.operation body = Amf.get_representation(request_object.body, max_calls) return "<RemotingMessage operation={operation}>{body}</RemotingMessage>".format(**locals()) elif isinstance(request_object, dict): return json.dumps(request_object, sort_keys=True) elif isinstance(request_object, list): bodies = [] for i in request_object: bodies.append(Amf.get_representation(i, max_calls)) return "[" + ",".join(bodies) + "]" elif isinstance(request_object, six.string_types): return request_object elif request_object is None: return "" elif isinstance(request_object, object) and hasattr(request_object, "__dict__"): classname = request_object.__class__.__name__ properties = request_object.__dict__ bodies = dict() for prop in properties: bodies[prop] = Amf.get_representation(getattr(request_object, prop), max_calls) bodies = Amf.get_representation(bodies, max_calls) return '<{classname}>{bodies}</{classname}>'.format(**locals()) else: return repr(request_object)