diff options
author | Skip Montanaro <skip@pobox.com> | 2003-01-22 18:17:25 (GMT) |
---|---|---|
committer | Skip Montanaro <skip@pobox.com> | 2003-01-22 18:17:25 (GMT) |
commit | 9a7c96a2bca4342f70b05f5d1e00ad5be142bf24 (patch) | |
tree | 592287527c110d3266d29b7f93c37f330ad994ab /Lib/xmlrpclib.py | |
parent | 32417e7dc1cfbcf52b6034cced6e0e902dbc3ccb (diff) | |
download | cpython-9a7c96a2bca4342f70b05f5d1e00ad5be142bf24.zip cpython-9a7c96a2bca4342f70b05f5d1e00ad5be142bf24.tar.gz cpython-9a7c96a2bca4342f70b05f5d1e00ad5be142bf24.tar.bz2 |
add support for Python's bool type to xmlrpclib - patch # 559288
Diffstat (limited to 'Lib/xmlrpclib.py')
-rw-r--r-- | Lib/xmlrpclib.py | 93 |
1 files changed, 56 insertions, 37 deletions
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index 5ef1cf9..0cb9ba6 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -142,6 +142,11 @@ try: except NameError: unicode = None # unicode support not available +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): @@ -266,51 +271,56 @@ class Fault(Error): # @param value A boolean value. Any true value is interpreted as True, # all other values are interpreted as False. -class Boolean: - """Boolean-value wrapper. +if _bool_is_builtin: + boolean = Boolean = bool + # to avoid breaking code which references xmlrpclib.{True,False} + True, False = True, False +else: + class Boolean: + """Boolean-value wrapper. - Use True or False to generate a "boolean" XML-RPC value. - """ + Use True or False to generate a "boolean" XML-RPC value. + """ - def __init__(self, value = 0): - self.value = operator.truth(value) + 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 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 __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 __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 __int__(self): + return self.value - def __nonzero__(self): - return self.value + def __nonzero__(self): + return self.value -True, False = Boolean(1), Boolean(0) + True, False = Boolean(1), Boolean(0) -## -# Map true or false value to XML-RPC boolean values. -# -# @def boolean(value) -# @param value A boolean value. Any true value is mapped to True, -# all other values are mapped to False. -# @return xmlrpclib.True or xmlrpclib.False. -# @see Boolean -# @see True -# @see False - -def boolean(value, _truefalse=(False, True)): - """Convert any Python value to XML-RPC 'boolean'.""" - return _truefalse[operator.truth(value)] + ## + # Map true or false value to XML-RPC boolean values. + # + # @def boolean(value) + # @param value A boolean value. Any true value is mapped to True, + # all other values are mapped to False. + # @return xmlrpclib.True or xmlrpclib.False. + # @see Boolean + # @see True + # @see False + + def boolean(value, _truefalse=(False, True)): + """Convert any Python value to XML-RPC 'boolean'.""" + return _truefalse[operator.truth(value)] ## # Wrapper for XML-RPC DateTime values. This converts a time value to @@ -411,7 +421,9 @@ def _binary(data): value.decode(data) return value -WRAPPERS = DateTime, Binary, Boolean +WRAPPERS = (DateTime, Binary) +if not _bool_is_builtin: + WRAPPERS = WRAPPERS + (Boolean,) # -------------------------------------------------------------------- # XML parsers @@ -599,6 +611,13 @@ class Marshaller: 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 XML-RPC limits" |