From d4550301ebed79e5513f390d91b13cd17a25f7fd Mon Sep 17 00:00:00 2001 From: Korbinian Preisler Date: Fri, 2 Dec 2011 07:29:54 +0100 Subject: [PATCH] User buffer for binary fields issue2316 review192001 (transplanted from 434afda1cfe3cfa8df12235df1172b831c0b511b) --- proteus/__init__.py | 10 +++++++++- proteus/config.py | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/proteus/__init__.py b/proteus/__init__.py index e2b7e9e92c..1a8231fb6d 100644 --- a/proteus/__init__.py +++ b/proteus/__init__.py @@ -91,6 +91,14 @@ class CharDescriptor(FieldDescriptor): super(CharDescriptor, self).__set__(instance, value or '') +class BinaryDescriptor(FieldDescriptor): + default = None + + def __set__(self, instance, value): + assert isinstance(value, (basestring, buffer)) or value in (None, False) + super(BinaryDescriptor, self).__set__(instance, value or '') + + class IntegerDescriptor(FieldDescriptor): default = 0 @@ -295,7 +303,7 @@ class MetaModelFactory(object): 'char': CharDescriptor, 'text': CharDescriptor, 'sha': CharDescriptor, - 'binary': CharDescriptor, + 'binary': BinaryDescriptor, 'selection': CharDescriptor, # TODO implement its own descriptor 'integer': IntegerDescriptor, 'biginteger': IntegerDescriptor, diff --git a/proteus/config.py b/proteus/config.py index 2eccfff55c..a374c5bf43 100644 --- a/proteus/config.py +++ b/proteus/config.py @@ -17,10 +17,17 @@ def dump_decimal(self, value, write): write(str(value)) write("\n") +def dump_buffer(self, value, write): + self.write = write + value = xmlrpclib.Binary(value) + value.encode(self) + del self.write + xmlrpclib.Marshaller.dispatch[Decimal] = dump_decimal xmlrpclib.Marshaller.dispatch[datetime.date] = \ lambda self, value, write: self.dump_datetime( datetime.datetime.combine(value, datetime.time()), write) +xmlrpclib.Marshaller.dispatch[buffer] = dump_buffer def _end_double(self, data): self.append(Decimal(data))