summaryrefslogtreecommitdiff
path: root/trunk/qpid/python/qpid/datatypes.py
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/qpid/python/qpid/datatypes.py')
-rw-r--r--trunk/qpid/python/qpid/datatypes.py375
1 files changed, 0 insertions, 375 deletions
diff --git a/trunk/qpid/python/qpid/datatypes.py b/trunk/qpid/python/qpid/datatypes.py
deleted file mode 100644
index 61643715e4..0000000000
--- a/trunk/qpid/python/qpid/datatypes.py
+++ /dev/null
@@ -1,375 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import threading, struct, datetime, time
-from exceptions import Timeout
-
-class Struct:
-
- def __init__(self, _type, *args, **kwargs):
- if len(args) > len(_type.fields):
- raise TypeError("%s() takes at most %s arguments (%s given)" %
- (_type.name, len(_type.fields), len(args)))
-
- self._type = _type
-
- idx = 0
- for field in _type.fields:
- if idx < len(args):
- arg = args[idx]
- if kwargs.has_key(field.name):
- raise TypeError("%s() got multiple values for keyword argument '%s'" %
- (_type.name, field.name))
- elif kwargs.has_key(field.name):
- arg = kwargs.pop(field.name)
- else:
- arg = field.default()
- setattr(self, field.name, arg)
- idx += 1
-
- if kwargs:
- unexpected = kwargs.keys()[0]
- raise TypeError("%s() got an unexpected keyword argument '%s'" %
- (_type.name, unexpected))
-
- def __getitem__(self, name):
- return getattr(self, name)
-
- def __setitem__(self, name, value):
- if not hasattr(self, name):
- raise AttributeError("'%s' object has no attribute '%s'" %
- (self._type.name, name))
- setattr(self, name, value)
-
- def __repr__(self):
- fields = []
- for f in self._type.fields:
- v = self[f.name]
- if f.type.is_present(v):
- fields.append("%s=%r" % (f.name, v))
- return "%s(%s)" % (self._type.name, ", ".join(fields))
-
-class Message:
-
- def __init__(self, *args):
- if args:
- self.body = args[-1]
- else:
- self.body = None
- if len(args) > 1:
- self.headers = list(args[:-1])
- else:
- self.headers = None
- self.id = None
-
- def has(self, name):
- return self.get(name) != None
-
- def get(self, name):
- if self.headers:
- for h in self.headers:
- if h.NAME == name:
- return h
- return None
-
- def set(self, header):
- if self.headers is None:
- self.headers = []
- idx = 0
- while idx < len(self.headers):
- if self.headers[idx].NAME == header.NAME:
- self.headers[idx] = header
- return
- idx += 1
- self.headers.append(header)
-
- def clear(self, name):
- idx = 0
- while idx < len(self.headers):
- if self.headers[idx].NAME == name:
- del self.headers[idx]
- return
- idx += 1
-
- def __repr__(self):
- args = []
- if self.headers:
- args.extend(map(repr, self.headers))
- if self.body:
- args.append(repr(self.body))
- if self.id is not None:
- args.append("id=%s" % self.id)
- return "Message(%s)" % ", ".join(args)
-
-def serial(o):
- if isinstance(o, Serial):
- return o
- else:
- return Serial(o)
-
-class Serial:
-
- def __init__(self, value):
- self.value = value & 0xFFFFFFFFL
-
- def __hash__(self):
- return hash(self.value)
-
- def __cmp__(self, other):
- if other.__class__ not in (int, long, Serial):
- return 1
-
- other = serial(other)
-
- delta = (self.value - other.value) & 0xFFFFFFFFL
- neg = delta & 0x80000000L
- mag = delta & 0x7FFFFFFF
-
- if neg:
- return -mag
- else:
- return mag
-
- def __add__(self, other):
- return Serial(self.value + other)
-
- def __sub__(self, other):
- if isinstance(other, Serial):
- return self.value - other.value
- else:
- return Serial(self.value - other)
-
- def __repr__(self):
- return "serial(%s)" % self.value
-
- def __str__(self):
- return str(self.value)
-
-class Range:
-
- def __init__(self, lower, upper = None):
- self.lower = serial(lower)
- if upper is None:
- self.upper = self.lower
- else:
- self.upper = serial(upper)
-
- def __contains__(self, n):
- return self.lower <= n and n <= self.upper
-
- def __iter__(self):
- i = self.lower
- while i <= self.upper:
- yield i
- i += 1
-
- def touches(self, r):
- # XXX: are we doing more checks than we need?
- return (self.lower - 1 in r or
- self.upper + 1 in r or
- r.lower - 1 in self or
- r.upper + 1 in self or
- self.lower in r or
- self.upper in r or
- r.lower in self or
- r.upper in self)
-
- def span(self, r):
- return Range(min(self.lower, r.lower), max(self.upper, r.upper))
-
- def intersect(self, r):
- lower = max(self.lower, r.lower)
- upper = min(self.upper, r.upper)
- if lower > upper:
- return None
- else:
- return Range(lower, upper)
-
- def __repr__(self):
- return "%s-%s" % (self.lower, self.upper)
-
-class RangedSet:
-
- def __init__(self, *args):
- self.ranges = []
- for n in args:
- self.add(n)
-
- def __contains__(self, n):
- for r in self.ranges:
- if n in r:
- return True
- return False
-
- def add_range(self, range):
- idx = 0
- while idx < len(self.ranges):
- r = self.ranges[idx]
- if range.touches(r):
- del self.ranges[idx]
- range = range.span(r)
- elif range.upper < r.lower:
- self.ranges.insert(idx, range)
- return
- else:
- idx += 1
- self.ranges.append(range)
-
- def add(self, lower, upper = None):
- self.add_range(Range(lower, upper))
-
- def empty(self):
- for r in self.ranges:
- if r.lower <= r.upper:
- return False
- return True
-
- def max(self):
- if self.ranges:
- return self.ranges[-1].upper
- else:
- return None
-
- def min(self):
- if self.ranges:
- return self.ranges[0].lower
- else:
- return None
-
- def __iter__(self):
- return iter(self.ranges)
-
- def __repr__(self):
- return str(self.ranges)
-
-class Future:
- def __init__(self, initial=None, exception=Exception):
- self.value = initial
- self._error = None
- self._set = threading.Event()
- self.exception = exception
-
- def error(self, error):
- self._error = error
- self._set.set()
-
- def set(self, value):
- self.value = value
- self._set.set()
-
- def get(self, timeout=None):
- self._set.wait(timeout)
- if self._set.isSet():
- if self._error != None:
- raise self.exception(self._error)
- return self.value
- else:
- raise Timeout()
-
- def is_set(self):
- return self._set.isSet()
-
-try:
- import uuid
- def random_uuid():
- return uuid.uuid4().get_bytes()
-except ImportError:
- import random
- def random_uuid():
- bytes = [random.randint(0, 255) for i in xrange(16)]
-
- # From RFC4122, the version bits are set to 0100
- bytes[7] &= 0x0F
- bytes[7] |= 0x40
-
- # From RFC4122, the top two bits of byte 8 get set to 01
- bytes[8] &= 0x3F
- bytes[8] |= 0x80
- return "".join(map(chr, bytes))
-
-def uuid4():
- return UUID(random_uuid())
-
-class UUID:
-
- def __init__(self, bytes):
- self.bytes = bytes
-
- def __cmp__(self, other):
- if isinstance(other, UUID):
- return cmp(self.bytes, other.bytes)
- else:
- return -1
-
- def __str__(self):
- return "%08x-%04x-%04x-%04x-%04x%08x" % struct.unpack("!LHHHHL", self.bytes)
-
- def __repr__(self):
- return "UUID(%r)" % str(self)
-
- def __hash__(self):
- return self.bytes.__hash__()
-
-class timestamp(float):
-
- def __new__(cls, obj=None):
- if obj is None:
- obj = time.time()
- elif isinstance(obj, datetime.datetime):
- obj = time.mktime(obj.timetuple()) + 1e-6 * obj.microsecond
- return super(timestamp, cls).__new__(cls, obj)
-
- def datetime(self):
- return datetime.datetime.fromtimestamp(self)
-
- def __add__(self, other):
- if isinstance(other, datetime.timedelta):
- return timestamp(self.datetime() + other)
- else:
- return timestamp(float(self) + other)
-
- def __sub__(self, other):
- if isinstance(other, datetime.timedelta):
- return timestamp(self.datetime() - other)
- else:
- return timestamp(float(self) - other)
-
- def __radd__(self, other):
- if isinstance(other, datetime.timedelta):
- return timestamp(self.datetime() + other)
- else:
- return timestamp(other + float(self))
-
- def __rsub__(self, other):
- if isinstance(other, datetime.timedelta):
- return timestamp(self.datetime() - other)
- else:
- return timestamp(other - float(self))
-
- def __neg__(self):
- return timestamp(-float(self))
-
- def __pos__(self):
- return self
-
- def __abs__(self):
- return timestamp(abs(float(self)))
-
- def __repr__(self):
- return "timestamp(%r)" % float(self)