diff options
author | jortel <devnull@localhost> | 2010-03-03 14:35:49 +0000 |
---|---|---|
committer | jortel <devnull@localhost> | 2010-03-03 14:35:49 +0000 |
commit | 42f2080b8085232c93d7d82a2ea9e7be39a1f1f8 (patch) | |
tree | 6f2cea49818be3bf0c411f6ebde121d8f195f2a3 | |
parent | be4f612c987ee27f78e3faf8407771e61be44cb6 (diff) | |
download | suds-42f2080b8085232c93d7d82a2ea9e7be39a1f1f8.tar.gz |
Add UTC class and change the wsse timestamps to use sax.date classes for propert formatting. Also, change wsse classes to have timestamps in UTC.
-rw-r--r-- | suds/__init__.py | 2 | ||||
-rw-r--r-- | suds/sax/date.py | 26 | ||||
-rw-r--r-- | suds/wsse.py | 20 | ||||
-rw-r--r-- | tests/builtin.py | 1 |
4 files changed, 37 insertions, 12 deletions
diff --git a/suds/__init__.py b/suds/__init__.py index 3c9341b..c1d249a 100644 --- a/suds/__init__.py +++ b/suds/__init__.py @@ -27,7 +27,7 @@ import sys # __version__ = '0.4' -__build__="(beta) R660-20100219" +__build__="(beta) R663-20100303" # # Exceptions diff --git a/suds/sax/date.py b/suds/sax/date.py index f07cf84..81a7a10 100644 --- a/suds/sax/date.py +++ b/suds/sax/date.py @@ -132,6 +132,7 @@ class Time: @type adjusted: boolean @raise ValueError: When I{time} is invalid. """ + self.tz = Timezone() if isinstance(time, dt.time): self.time = time return @@ -245,7 +246,7 @@ class Time: if len(s) == len('-00:00'): return int(s[:3]) if len(s) == 0: - return Timezone.local + return self.tz.local if len(s) == 1: return 0 raise Exception() @@ -255,7 +256,10 @@ class Time: def __unicode__(self): time = self.time.isoformat() - return '%s%+.2d:00' % (time, Timezone.local) + if self.tz.local: + return '%s%+.2d:00' % (time, self.tz.local) + else: + return '%sZ' % time class DateTime(Date,Time): @@ -319,6 +323,18 @@ class DateTime(Date,Time): return 'T'.join(s) +class UTC(DateTime): + """ + Represents current UTC time. + """ + + def __init__(self, date=None): + if date is None: + date = dt.datetime.utcnow() + DateTime.__init__(self, date) + self.tz.local = 0 + + class Timezone: """ Timezone object used to do TZ conversions @@ -327,9 +343,11 @@ class Timezone: @cvar patten: The regex patten to match TZ. @type patten: L{re.RegexObject} """ - - local = ( 0-time.timezone/60/60 ) + pattern = re.compile('([zZ])|([\-\+][0-9]{2}:[0-9]{2})') + + def __init__(self): + self.local = ( 0-time.timezone/60/60 ) @classmethod def split(cls, s): diff --git a/suds/wsse.py b/suds/wsse.py index 0fc8301..2a697c1 100644 --- a/suds/wsse.py +++ b/suds/wsse.py @@ -22,6 +22,7 @@ from logging import getLogger from suds import * from suds.sudsobject import Object from suds.sax.element import Element +from suds.sax.date import UTC from datetime import datetime, timedelta try: @@ -88,8 +89,13 @@ class Token(Object): return datetime.now() @classmethod + def utc(cls): + return datetime.utcnow() + + @classmethod def sysdate(cls): - return cls.now().isoformat() + utc = UTC() + return str(utc) def __init__(self): Object.__init__(self) @@ -144,11 +150,11 @@ class UsernameToken(Token): """ Set I{created}. @param dt: The created date & time. - Set as datetime.now() when I{None}. + Set as datetime.utc() when I{None}. @type dt: L{datetime} """ if dt is None: - self.created = Token.now() + self.created = Token.utc() else: self.created = dt @@ -172,7 +178,7 @@ class UsernameToken(Token): root.append(n) if self.created is not None: n = Element('Created', ns=wsuns) - n.setText(self.created.isoformat()) + n.setText(str(UTC(self.created))) root.append(n) return root @@ -192,15 +198,15 @@ class Timestamp(Token): @type validity: int """ Token.__init__(self) - self.created = Token.now() + self.created = Token.utc() self.expires = self.created + timedelta(seconds=validity) def xml(self): root = Element("Timestamp", ns=wsuns) created = Element('Created', ns=wsuns) - created.setText(self.created.isoformat()) + created.setText(str(UTC(self.created))) expires = Element('Expires', ns=wsuns) - expires.setText(self.expires.isoformat()) + expires.setText(str(UTC(self.expires))) root.append(created) root.append(expires) return root
\ No newline at end of file diff --git a/tests/builtin.py b/tests/builtin.py index 31ca3c3..c8f6c6f 100644 --- a/tests/builtin.py +++ b/tests/builtin.py @@ -16,6 +16,7 @@ import sys sys.path.append('../') +import unittest from suds.sax.date import Timezone as Tz from suds.xsd.sxbuiltin import * from unittest import TestCase |