pyxmlrpclib.py :  » Web-Services » Py-Xmlrpc » py-xmlrpc-0.8.8.3 » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Web Services » Py Xmlrpc 
Py Xmlrpc » py xmlrpc 0.8.8.3 » pyxmlrpclib.py
#!/usr/bin/python -O
#
# A fast replacement for xmlrpclib
#
#


import _xmlrpc


# begin by importing all available functions
#
from xmlrpclib import *


# override xmlrpclib classes with _xmlrpc alternatives
#
Boolean  = _xmlrpc.boolean
True = Boolean(1)
False = Boolean(0)
DateTime = _xmlrpc.dateTime
Binary = _xmlrpc.base64


# override the Marshaller class with a (much) simpler version
#
class Marshaller:
  def __init__(self):
      pass

  def dumps(self, values):
    if ((isinstance(values, Fault))
    or  (isinstance(values, Fault))):
      d = { 'faultString' : values.faultString,
          'faultCode' : values.faultCode }
      return ('<fault>\n%s</fault>\n' % _xmlrpc.encode(d))
    else:
      l = ['<params>\n']
      for item in values:
        l.append('\t<param>\n\t\t')
        l.append(_xmlrpc.encode(item))
        l.append('\n\t</param>\n')
      l.append('</params>\n')
      return string.join(l, '')


# override the Marshaller class with a (much) faster version
#
class Parser:
  def __init__(self, target):
    self.result = None
    self.target = target
    self.file = StringIO()

  def feed(self, s):
    self.file.write(s)

  def close(self):
    v = self.file.getvalue()
    self.target.set_data(v)


# ensure that we use our fast parser
#
FastParser = Parser


# override the Marshaller class with a (much) faster version
#
class Unmarshaller:
  def __init__(self):
    self.data = None
    self.method = None
    self.value = None

  def set_data(self, data):
    self.data = data

  def close(self):
    s = string.lstrip(self.data)
    if s[:7] == '<value>':
      self.value = _xmlrpc.decode(data)
    elif ((s[:21] == "<?xml version='1.0'?>")
    or    (s[:21] == '<?xml version="1.0"?>')):
      s = string.lstrip(s[21:])
      if s[:16] == '<methodResponse>':
        try:
          s = ("HTTP/1.0 200 OK\r\n"
               "Content-length: %d\r\n\r\n"
               "%s" % (len(self.data),self.data))
          self.value = _xmlrpc.parseResponse(s)[0]
        except _xmlrpc.fault:
          v = sys.exc_value
          raise Fault(v.faultCode, v.faultString)
      elif s[:12] == '<methodCall>':
        (self.method, self.value) = _xmlrpc.parseCall(self.data)
    if self.value == None:
      raise TypeError, "unrecognized data: %.40s..." % s
    return self.value

  def getmethodname(self):
    return self.method


if __name__ == "__main__":
  server = Server('http://localhost:23456')
  print server
  print server.echo('blah')
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.