summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2010-03-03 14:35:49 +0000
committerjortel <devnull@localhost>2010-03-03 14:35:49 +0000
commit42f2080b8085232c93d7d82a2ea9e7be39a1f1f8 (patch)
tree6f2cea49818be3bf0c411f6ebde121d8f195f2a3
parentbe4f612c987ee27f78e3faf8407771e61be44cb6 (diff)
downloadsuds-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__.py2
-rw-r--r--suds/sax/date.py26
-rw-r--r--suds/wsse.py20
-rw-r--r--tests/builtin.py1
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