[Openlanhouse-development] SF.net SVN: openlanhouse:[313] trunk/openlh-client/src/OpenlhClient
Status: Pre-Alpha
Brought to you by:
n3rd3x
|
From: <n3...@us...> - 2008-10-20 15:50:08
|
Revision: 313
http://openlanhouse.svn.sourceforge.net/openlanhouse/?rev=313&view=rev
Author: n3rd3x
Date: 2008-10-20 15:50:00 +0000 (Mon, 20 Oct 2008)
Log Message:
-----------
openlh-client/src/OpenlhClient/certgen.py: This file is removed
Modified Paths:
--------------
trunk/openlh-client/src/OpenlhClient/Makefile.am
trunk/openlh-client/src/OpenlhClient/__init__.py
Removed Paths:
-------------
trunk/openlh-client/src/OpenlhClient/certgen.py
trunk/openlh-client/src/OpenlhClient/server_info.py
trunk/openlh-client/src/OpenlhClient/xmlpickler.py
Modified: trunk/openlh-client/src/OpenlhClient/Makefile.am
===================================================================
--- trunk/openlh-client/src/OpenlhClient/Makefile.am 2008-10-20 15:46:50 UTC (rev 312)
+++ trunk/openlh-client/src/OpenlhClient/Makefile.am 2008-10-20 15:50:00 UTC (rev 313)
@@ -3,13 +3,10 @@
openlhdir = $(pythondir)/OpenlhClient
openlh_PYTHON = \
__init__.py \
- certgen.py \
login.py \
globals.py \
main.py \
utils.py \
- xmlpickler.py \
config.py \
prefs.py \
- dbus_manager.py \
- server_info.py
+ dbus_manager.py
Modified: trunk/openlh-client/src/OpenlhClient/__init__.py
===================================================================
--- trunk/openlh-client/src/OpenlhClient/__init__.py 2008-10-20 15:46:50 UTC (rev 312)
+++ trunk/openlh-client/src/OpenlhClient/__init__.py 2008-10-20 15:50:00 UTC (rev 313)
@@ -16,5 +16,5 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-__all__ = ('login', 'server_info', 'ui', 'config'
+__all__ = ('login', 'ui', 'config'
'globals', 'utils', 'main', 'prefs', 'dbus_manager')
Deleted: trunk/openlh-client/src/OpenlhClient/certgen.py
===================================================================
--- trunk/openlh-client/src/OpenlhClient/certgen.py 2008-10-20 15:46:50 UTC (rev 312)
+++ trunk/openlh-client/src/OpenlhClient/certgen.py 2008-10-20 15:50:00 UTC (rev 313)
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2008 Wilson Pinto Júnior (N3RD3X) <n3...@gu...>
-# Copyright (C) 2008 Gabriel Falcão <ga...@na...>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import os
-
-TYPE_RSA = 0
-TYPE_DSA = 1
-
-from OpenlhClient.utils import execute_command, is_in_path
-
-CERTTOOL_PATH = is_in_path("certtool")
-
-class CreateTemplateError(Exception): pass
-
-def generate_private_key(type=TYPE_RSA, bits=1024):
-
- print CERTTOOL_PATH
-
- cmd = [CERTTOOL_PATH, "--generate-privkey", "--bits", str(bits)]
-
- if type == TYPE_DSA:
- cmd.append('--dsa')
-
- (stdout, stderr, retval) = execute_command(cmd)
-
- if retval != 0:
- raise SystemError(stderr)
- else:
- return stdout
-
-def generate_self_signed(template_file, privkey_file):
-
- cmd = [CERTTOOL_PATH, "--template", template_file, "--generate-self-signed",
- "--load-privkey", privkey_file]
-
- (stdout, stderr, retval) = execute_command(cmd)
-
- if retval != 0:
- raise IOError(stdout)
- else:
- return stdout
-
-def create_template(organization, common_name, expiration_days, email=None,
- unit=None, locality=None, state=None, country=None):
-
- data = []
- data.append('organization = "%s"' % organization)
-
- if unit:
- data.append('unit = "%s"' % unit)
-
- if locality:
- data.append('locality = "%s"' % locality)
-
- if state:
- data.append('state = "%s"' % state)
-
- if country:
- data.append('country = %s' % country)
-
- data.append('cn = "%s"' % common_name)
- data.append('expiration_days = %d' % expiration_days)
-
- if email:
- data.append('email = "%s"' % email)
-
- return '\n'.join(data)
\ No newline at end of file
Deleted: trunk/openlh-client/src/OpenlhClient/server_info.py
===================================================================
--- trunk/openlh-client/src/OpenlhClient/server_info.py 2008-10-20 15:46:50 UTC (rev 312)
+++ trunk/openlh-client/src/OpenlhClient/server_info.py 2008-10-20 15:50:00 UTC (rev 313)
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2008 Wilson Pinto Júnior (N3RD3X) <n3...@gu...>
-# Copyright (C) 2008 Gabriel Falcão <ga...@na...>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-import gtk
-import gtk.glade
-
-from OpenLH.core.globals import *
-
-class ServerInfo:
- def __init__(self):
- self.xml = self.create_widgets(SERVER_INFO_GLADE)
- self.xml.signal_autoconnect(self)
-
- self.set_price = lambda x: self.price.set_text(x)
- self.set_server_os = lambda x: self.server_os.set_text(x)
- self.set_client_os = lambda x: self.client_os.set_text(x)
- self.set_server_host = lambda x: self.server_host.set_text(x)
- self.set_client_host = lambda x: self.client_host.set_text(x)
- self.set_admin_email = lambda x: self.admin_email.set_text(x)
- self.set_server_version = lambda x: self.server_version.set_text(x)
- self.set_client_version = lambda x: self.client_version.set_text(x)
-
- def create_widgets(self, glade_file):
- xml = gtk.glade.XML(glade_file)
-
- self.price = xml.get_widget('price')
- self.lan_name = xml.get_widget('lan_name')
- self.emailbox = xml.get_widget('emailbox')
- self.server_os = xml.get_widget('server_os')
- self.client_os = xml.get_widget('client_os')
- self.server_info = xml.get_widget('server_info')
- self.admin_email = xml.get_widget('admin_email')
- self.server_host = xml.get_widget('server_host')
- self.client_host = xml.get_widget('client_host')
- self.server_version = xml.get_widget('server_version')
- self.client_version = xml.get_widget('client_version')
-
- return xml
-
- def run(self):
- self.server_info.run()
- self.server_info.hide()
\ No newline at end of file
Deleted: trunk/openlh-client/src/OpenlhClient/xmlpickler.py
===================================================================
--- trunk/openlh-client/src/OpenlhClient/xmlpickler.py 2008-10-20 15:46:50 UTC (rev 312)
+++ trunk/openlh-client/src/OpenlhClient/xmlpickler.py 2008-10-20 15:50:00 UTC (rev 313)
@@ -1,833 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2007 Python 2.5 Developers
-# Copyright (C) 2008 Wilson Pinto Júnior (N3RD3X) <n3...@gu...>
-# Copyright (C) 2008 Gabriel Falcão <ga...@na...>
-#
-#This program is free software: you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation, either version 3 of the License, or
-#(at your option) any later version.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-
-#You should have received a copy of the GNU General Public License
-#along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-#Based in Xmlrpclib
-__version__ = "1.0.1"
-
-#ERRORS
-PARSE_ERROR = -32700
-SERVER_ERROR = -32600
-APPLICATION_ERROR = -32500
-SYSTEM_ERROR = -32400
-TRANSPORT_ERROR = -32300
-NOT_WELLFORMED_ERROR = -32700
-UNSUPPORTED_ENCODING = -32701
-INVALID_ENCODING_CHAR = -32702
-INVALID_XMLRPC = -32600
-METHOD_NOT_FOUND = -32601
-INVALID_METHOD_PARAMS = -32602
-INTERNAL_ERROR = -32603
-
-MAXINT = 2L ** 31 - 1
-MININT = - 2L ** 31
-
-import re
-import string
-import time
-import datetime
-import operator
-import base64
-
-try:
- import cStringIO as StringIO
-except ImportError:
- import StringIO
-
-class DateTime:
- """DateTime wrapper for an ISO 8601 string or time tuple or
- localtime integer value to generate 'dateTime.iso8601'
- """
-
- def __init__(self, value=0):
- if not isinstance(value, StringType):
- if datetime and isinstance(value, datetime.datetime):
- self.value = value.strftime("%Y%m%dT%H:%M:%S")
- return
-
- if datetime and isinstance(value, datetime.date):
- self.value = value.strftime("%Y%m%dT%H:%M:%S")
- return
-
- if datetime and isinstance(value, datetime.time):
- today = datetime.datetime.now().strftime("%Y%m%d")
- self.value = value.strftime(today + "T%H:%M:%S")
- return
-
- if not isinstance(value, (TupleType, time.struct_time)):
- if value == 0:
- value = time.time()
-
- value = time.localtime(value)
-
- value = time.strftime("%Y%m%dT%H:%M:%S", value)
-
- self.value = value
-
- def __cmp__(self, other):
- if isinstance(other, DateTime):
- other = other.value
-
- return cmp(self.value, other)
-
- ##
- # Get date/time value.
- #
- # @return Date/time value, as an ISO 8601 string.
-
- def __str__(self):
- return self.value
-
- def __repr__(self):
- return "<DateTime %s at %x>" % (repr(self.value), id(self))
-
- def decode(self, data):
- data = str(data)
- self.value = string.strip(data)
-
- def encode(self, out):
- out.write("<value><dateTime.iso8601>")
- out.write(self.value)
- out.write("</dateTime.iso8601></value>\n")
-
-class Binary:
- def __init__(self, data=None):
- self.data = data
-
- ##
- # Get buffer contents.
- #
- # @return Buffer contents, as an 8-bit string.
-
- def __str__(self):
- return self.data or ""
-
- def __cmp__(self, other):
- if isinstance(other, Binary):
- other = other.data
- return cmp(self.data, other)
-
- def decode(self, data):
- self.data = base64.decodestring(data)
-
- def encode(self, out):
- out.write("<value><base64>\n")
- base64.encode(StringIO.StringIO(self.data), out)
- out.write("</base64></value>\n")
-
-class _Boolean:
- def __init__(self, value = 0):
- self.value = operator.truth(value)
-
- def encode(self, out):
- out.write("<value><boolean>%d</boolean></value>\n" % self.value)
-
- def __cmp__(self, other):
- if isinstance(other, Boolean):
- other = other.value
- return cmp(self.value, other)
-
- def __repr__(self):
- if self.value:
- return "<Boolean True at %x>" % id(self)
- else:
- return "<Boolean False at %x>" % id(self)
-
- def __int__(self):
- return self.value
-
- def __nonzero__(self):
- return self.value
-
-try:
- unicode
-except:
- unicode = None
-
-try:
- import datetime
-except:
- datetime = None
-
-from types import * #FIX ME
-
-try:
- _bool_is_builtin = False.__class__.__name__ == "bool"
-except NameError:
- _bool_is_builtin = 0
-
-def _decode(data, encoding, is8bit=re.compile("[\x80-\xff]").search):
- # decode non-ascii string (if possible)
- if unicode and encoding and is8bit(data):
- data = unicode(data, encoding)
- return data
-
-def escape(s, replace=string.replace):
- s = replace(s, "&", "&")
- s = replace(s, "<", "<")
- return replace(s, ">", ">",)
-
-if unicode:
- def _stringify(string):
- try:
- return string.encode("ascii")
- except UnicodeError:
- return string
-else:
- def _stringify(string):
- return string
-
-#EXCEPTIONS
-class Error(Exception):
- """Base class for client errors."""
- def __str__(self):
- return repr(self)
-
-class ResponseError(Error):
- """Indicates a broken response package."""
- pass
-
-class Fault(Error):
- """Indicates an XML-RPC fault package."""
- def __init__(self, faultCode, faultString, **extra):
- Error.__init__(self)
- self.faultCode = faultCode
- self.faultString = faultString
- def __repr__(self):
- return (
- "<Fault %s: %s>" %
- (self.faultCode, repr(self.faultString))
- )
-
-
-if _bool_is_builtin:
- boolean = Boolean = bool
- True, False = True, False
-
-else:
- Boolean = _Boolean
- True, False = Boolean(1), Boolean(0)
-
- def boolean(value, _truefalse=(False, True)):
- """Convert any Python value to XML-RPC 'boolean'."""
- return _truefalse[operator.truth(value)]
-
-def _datetime(data):
- value = DateTime()
- value.decode(data)
- return value
-
-def _datetime_type(data):
- t = time.strptime(data, "%Y%m%dT%H:%M:%S")
- return datetime.datetime(*tuple(t)[:6])
-
-def _binary(data):
- # decode xml element contents into a Binary structure
- value = Binary()
- value.decode(data)
- return value
-
-WRAPPERS = (DateTime, Binary)
-
-if not _bool_is_builtin:
- WRAPPERS = WRAPPERS + (Boolean,)
-
-try:
- # optional xmlrpclib accelerator
- import _xmlrpclib
- FastParser = _xmlrpclib.Parser
- FastUnmarshaller = _xmlrpclib.Unmarshaller
-except (AttributeError, ImportError):
- FastParser = FastUnmarshaller = None
-
-try:
- import _xmlrpclib
- FastMarshaller = _xmlrpclib.Marshaller
-except (AttributeError, ImportError):
- FastMarshaller = None
-
-
-class _SgmlopParser:
- def __init__(self, target):
- # setup callbacks
- self.finish_starttag = target.start
- self.finish_endtag = target.end
- self.handle_data = target.data
- self.handle_xml = target.xml
-
- # activate parser
- self.parser = sgmlop.XMLParser()
- self.parser.register(self)
- self.feed = self.parser.feed
- self.entity = {
- "amp": "&", "gt": ">", "lt": "<",
- "apos": "'", "quot": '"'
- }
-
- def close(self):
- try:
- self.parser.close()
- finally:
- self.parser = self.feed = None # nuke circular reference
-
- def handle_proc(self, tag, attr):
- m = re.search("encoding\s*=\s*['\"]([^\"']+)[\"']", attr)
- if m:
- self.handle_xml(m.group(1), 1)
-
- def handle_entityref(self, entity):
- # <string> entity
- try:
- self.handle_data(self.entity[entity])
- except KeyError:
- self.handle_data("&%s;" % entity)
-
-try:
- import sgmlop
-
- if not hasattr(sgmlop, "XMLParser"):
- raise ImportError
-
-except ImportError:
- SgmlopParser = None
-
-else:
- SgmlopParser = _SgmlopParser
-
-class _ExpatParser:
- def __init__(self, target):
-
- self._parser = parser = expat.ParserCreate(None, None)
- self._target = target
- parser.StartElementHandler = target.start
- parser.EndElementHandler = target.end
- parser.CharacterDataHandler = target.data
- encoding = None
-
- if not parser.returns_unicode:
- encoding = "utf-8"
-
- target.xml(encoding, None)
-
- def feed(self, data):
- self._parser.Parse(data, 0)
-
- def close(self):
- self._parser.Parse("", 1)
- del self._target, self._parser
-
-try:
- from xml.parsers import expat
-
- if not hasattr(expat, "ParserCreate"):
- raise ImportError
-
-except ImportError:
- ExpatParser = None
-
-else:
- ExpatParser = _ExpatParser
-
-class SlowParser:
- """Default XML parser (based on xmllib.XMLParser)."""
-
- def __init__(self, target):
- import xmllib
- if xmllib.XMLParser not in SlowParser.__bases__:
- SlowParser.__bases__ = (xmllib.XMLParser,)
-
- self.handle_xml = target.xml
- self.unknown_starttag = target.start
- self.handle_data = target.data
- self.handle_cdata = target.data
- self.unknown_endtag = target.end
-
- try:
- xmllib.XMLParser.__init__(self, accept_utf8=1)
- except TypeError:
- xmllib.XMLParser.__init__(self) # pre-2.0
-
-# --------------------------------------------------------------------
-# XML-RPC marshalling and unmarshalling code
-
-##
-# XML-RPC marshaller.
-#
-# @param encoding Default encoding for 8-bit strings. The default
-# value is None (interpreted as UTF-8).
-# @see dumps
-
-class Marshaller:
-
- dispatch = {}
-
- def __init__(self, encoding=None, allow_none=0):
- self.memo = {}
- self.data = None
- self.encoding = encoding
- self.allow_none = allow_none
-
- def dumps(self, values):
- out = []
- write = out.append
- dump = self.__dump
-
- if isinstance(values, Fault):
- # fault instance
- write("<fault>\n")
- dump({'faultCode': values.faultCode,
- 'faultString': values.faultString},
- write)
- write("</fault>\n")
-
- else:
- write("<params>\n")
-
- for v in values:
- write("<param>\n")
- dump(v, write)
- write("</param>\n")
-
- write("</params>\n")
-
- result = string.join(out, "")
-
- return result
-
- def __dump(self, value, write):
- try:
- f = self.dispatch[type(value)]
-
- except KeyError:
- raise TypeError, "cannot marshal %s objects" % type(value)
-
- else:
- f(self, value, write)
-
- def dump_nil (self, value, write):
- if not self.allow_none:
- raise TypeError, "cannot marshal None unless allow_none is enabled"
-
- write("<value><nil/></value>")
-
- dispatch[NoneType] = dump_nil
-
- def dump_int(self, value, write):
-
- if value > MAXINT or value < MININT:
- raise OverflowError, "int exceeds limits"
-
- write("<value><int>")
- write(str(value))
- write("</int></value>\n")
-
- dispatch[IntType] = dump_int
-
- if _bool_is_builtin:
- def dump_bool(self, value, write):
- write("<value><boolean>")
- write(value and "1" or "0")
- write("</boolean></value>\n")
-
- dispatch[bool] = dump_bool
-
- def dump_long(self, value, write):
- if value > MAXINT or value < MININT:
- raise OverflowError, "long int exceeds limits"
-
- write("<value><int>")
- write(str(int(value)))
- write("</int></value>\n")
-
- dispatch[LongType] = dump_long
-
- def dump_double(self, value, write):
- write("<value><double>")
- write(repr(value))
- write("</double></value>\n")
-
- dispatch[FloatType] = dump_double
-
- def dump_string(self, value, write, escape=escape):
- write("<value><string>")
- write(escape(value))
- write("</string></value>\n")
-
- dispatch[StringType] = dump_string
-
- if unicode:
- def dump_unicode(self, value, write, escape=escape):
- value = value.encode(self.encoding)
- write("<value><string>")
- write(escape(value))
- write("</string></value>\n")
-
- dispatch[UnicodeType] = dump_unicode
-
- def dump_array(self, value, write):
- i = id(value)
- if self.memo.has_key(i):
- raise TypeError, "cannot marshal recursive sequences"
-
- self.memo[i] = None
- dump = self.__dump
- write("<value><array><data>\n")
-
- for v in value:
- dump(v, write)
-
- write("</data></array></value>\n")
-
- del self.memo[i]
-
- dispatch[TupleType] = dump_array
- dispatch[ListType] = dump_array
-
- def dump_struct(self, value, write, escape=escape):
- i = id(value)
-
- if self.memo.has_key(i):
- raise TypeError, "cannot marshal recursive dictionaries"
-
- self.memo[i] = None
- dump = self.__dump
- write("<value><struct>\n")
-
- for k, v in value.items():
- write("<member>\n")
-
- if type(k) is not StringType:
- if unicode and type(k) is UnicodeType:
- k = k.encode(self.encoding)
-
- else:
- raise TypeError, "dictionary key must be string"
-
- write("<name>%s</name>\n" % escape(k))
- dump(v, write)
- write("</member>\n")
-
- write("</struct></value>\n")
- del self.memo[i]
-
- dispatch[DictType] = dump_struct
-
- if datetime:
- def dump_datetime(self, value, write):
- write("<value><dateTime.iso8601>")
- write(value.strftime("%Y%m%dT%H:%M:%S"))
- write("</dateTime.iso8601></value>\n")
-
- dispatch[datetime.datetime] = dump_datetime
-
- def dump_date(self, value, write):
- write("<value><dateTime.iso8601>")
- write(value.strftime("%Y%m%dT00:00:00"))
- write("</dateTime.iso8601></value>\n")
-
- dispatch[datetime.date] = dump_date
-
- def dump_time(self, value, write):
- write("<value><dateTime.iso8601>")
- write(datetime.datetime.now().date().strftime("%Y%m%dT"))
- write(value.strftime("%H:%M:%S"))
- write("</dateTime.iso8601></value>\n")
-
- dispatch[datetime.time] = dump_time
-
- def dump_instance(self, value, write):
- # check for special wrappers
- if value.__class__ in WRAPPERS:
- self.write = write
- value.encode(self)
- del self.write
-
- else:
- # store instance attributes as a struct (really?)
- self.dump_struct(value.__dict__, write)
-
- dispatch[InstanceType] = dump_instance
-
-class Unmarshaller:
-
- def __init__(self, use_datetime=0):
- self._type = None
- self._stack = []
- self._marks = []
- self._data = []
- self._methodname = None
- self._encoding = "utf-8"
- self.append = self._stack.append
- self._use_datetime = use_datetime
-
- if use_datetime and not datetime:
- raise ValueError, "the datetime module is not available"
-
- def close(self):
- # return response tuple and target method
- if self._type is None or self._marks:
- raise ResponseError()
-
- if self._type == "fault":
- raise Fault(**self._stack[0])
-
- return tuple(self._stack)
-
- def getmethodname(self):
- return self._methodname
-
- def xml(self, encoding, standalone):
- self._encoding = encoding
-
- def start(self, tag, attrs):
- if tag == "array" or tag == "struct":
- self._marks.append(len(self._stack))
-
- self._data = []
- self._value = (tag == "value")
-
- def data(self, text):
- self._data.append(text)
-
- def end(self, tag, join=string.join):
- # call the appropriate end tag handler
- try:
- f = self.dispatch[tag]
-
- except KeyError:
- pass
-
- else:
- return f(self, join(self._data, ""))
-
- def end_dispatch(self, tag, data):
-
- try:
- f = self.dispatch[tag]
-
- except KeyError:
- pass
-
- else:
- return f(self, data)
-
- dispatch = {}
-
- def end_nil (self, data):
- self.append(None)
- self._value = 0
-
- dispatch["nil"] = end_nil
-
- def end_boolean(self, data):
- if data == "0":
- self.append(False)
-
- elif data == "1":
- self.append(True)
-
- else:
- raise TypeError, "bad boolean value"
-
- self._value = 0
-
- dispatch["boolean"] = end_boolean
-
- def end_int(self, data):
- self.append(int(data))
- self._value = 0
-
- dispatch["i4"] = end_int
- dispatch["int"] = end_int
-
- def end_double(self, data):
- self.append(float(data))
- self._value = 0
-
- dispatch["double"] = end_double
-
- def end_string(self, data):
- if self._encoding:
- data = _decode(data, self._encoding)
-
- self.append(_stringify(data))
- self._value = 0
-
- dispatch["string"] = end_string
- dispatch["name"] = end_string # struct keys are always strings
-
- def end_array(self, data):
- mark = self._marks.pop()
- # map arrays to Python lists
- self._stack[mark:] = [self._stack[mark:]]
- self._value = 0
-
- dispatch["array"] = end_array
-
- def end_struct(self, data):
- mark = self._marks.pop()
- # map structs to Python dictionaries
- dict = {}
- items = self._stack[mark:]
-
- for i in range(0, len(items), 2):
- dict[_stringify(items[i])] = items[i + 1]
-
- self._stack[mark:] = [dict]
- self._value = 0
-
- dispatch["struct"] = end_struct
-
- def end_base64(self, data):
- value = Binary()
- value.decode(data)
- self.append(value)
- self._value = 0
-
- dispatch["base64"] = end_base64
-
- def end_dateTime(self, data):
- value = DateTime()
- value.decode(data)
-
- if self._use_datetime:
- value = _datetime_type(data)
-
- self.append(value)
-
- dispatch["dateTime.iso8601"] = end_dateTime
-
- def end_value(self, data):
- if self._value:
- self.end_string(data)
-
- dispatch["value"] = end_value
-
- def end_params(self, data):
- self._type = "params"
-
- dispatch["params"] = end_params
-
- def end_fault(self, data):
- self._type = "fault"
-
- dispatch["fault"] = end_fault
-
- def end_methodName(self, data):
- if self._encoding:
- data = _decode(data, self._encoding)
-
- self._methodname = data
- self._type = "methodName"
-
- dispatch["methodName"] = end_methodName
-
-def getparser(use_datetime=0):
-
- if use_datetime and not datetime:
- raise ValueError, "the datetime module is not available"
-
- if FastParser and FastUnmarshaller:
- if use_datetime:
- mkdatetime = _datetime_type
-
- else:
- mkdatetime = _datetime
-
- target = FastUnmarshaller(True, False, _binary, mkdatetime, Fault)
- parser = FastParser(target)
-
- else:
- target = Unmarshaller(use_datetime=use_datetime)
-
- if FastParser:
- parser = FastParser(target)
-
- elif SgmlopParser:
- parser = SgmlopParser(target)
-
- elif ExpatParser:
- parser = ExpatParser(target)
-
- else:
- parser = SlowParser(target)
-
- return parser, target
-
-def dumps(params, methodname=None, methodresponse=None, encoding=None,
- allow_none=0):
-
- assert isinstance(params, TupleType) or isinstance(params, Fault),\
- "argument must be tuple or Fault instance"
-
- if isinstance(params, Fault):
- methodresponse = 1
-
- elif methodresponse and isinstance(params, TupleType):
- assert len(params) == 1, "response tuple must be a singleton"
-
- if not encoding:
- encoding = "utf-8"
-
- if FastMarshaller:
- m = FastMarshaller(encoding)
-
- else:
- m = Marshaller(encoding, allow_none)
-
- data = m.dumps(params)
-
- if encoding != "utf-8":
- xmlheader = "<?xml version='1.0' encoding='%s'?>\n" % str(encoding)
-
- else:
- xmlheader = "<?xml version='1.0'?>\n" # utf-8 is default
-
- # standard XML-RPC wrappings
- if methodname:
- if not isinstance(methodname, StringType):
- methodname = methodname.encode(encoding)
-
- data = (
- xmlheader,
- "<methodCall>\n"
- "<methodName>", methodname, "</methodName>\n",
- data,
- "</methodCall>\n"
- )
-
- elif methodresponse:
- # a method response, or a fault structure
- data = (
- xmlheader,
- "<methodResponse>\n",
- data,
- "</methodResponse>\n"
- )
-
- else:
- return data
-
- return string.join(data, "")
-
-def loads(data, use_datetime=0):
- p, u = getparser(use_datetime=use_datetime)
- p.feed(data)
- p.close()
- return u.close(), u.getmethodname()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|