xmlclass/xmlclass.py
changeset 24 364320323b4d
parent 2 93bc4c2cf376
child 58 39cd981ff242
--- a/xmlclass/xmlclass.py	Thu Jun 21 10:23:26 2007 +0200
+++ b/xmlclass/xmlclass.py	Mon Jun 25 18:57:14 2007 +0200
@@ -37,9 +37,9 @@
 """
 Regular expression models for extracting dates and times from a string
 """
-time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2})')
+time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)')
 date_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})')
-datetime_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})[ T]([0-9]{2}):([0-9]{2}):([0-9]{2})')
+datetime_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})[ T]([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)')
 
 """
 Dictionaries for stocking Classes and Types created from XML
@@ -254,11 +254,11 @@
         elif type_compute in ["string","anyURI","NMTOKEN"]:
             return StringType, "\"\""
         elif type_compute == "time":
-            return TimeType, "time(0,0,0)"
+            return TimeType, "time(0,0,0,0)"
         elif type_compute == "date":
             return DateType, "date(1,1,1)"
         elif type_compute == "dateTime":
-            return DateTimeType, "datetime(1,1,1,0,0,0)"
+            return DateTimeType, "datetime(1,1,1,0,0,0,0)"
         elif type_compute == "language":
             return StringType, "\"en-US\""
         else:
@@ -299,7 +299,10 @@
     elif type_compute == "time":
         result = time_model.match(value)
         if result:
-            time_values = [int(v) for v in result.groups()]
+            values = result.groups()
+            time_values = [int(v) for v in values[:2]]
+            seconds = float(values[2])
+            time_values.extend([int(seconds), int((seconds % 1) * 1000000)])
             return time(*time_values)
         else:
             raise ValueError, "\"%s\" is not a valid time!"%value
@@ -313,7 +316,10 @@
     elif type_compute == "dateTime":
         result = datetime_model.match(value)
         if result:
-            datetime_values = [int(v) for v in result.groups()]
+            values = result.groups()
+            datetime_values = [int(v) for v in values[:5]]
+            seconds = float(values[5])
+            datetime_values.extend([int(seconds), int((seconds % 1) * 1000000)])
             return datetime(*datetime_values)
         else:
             raise ValueError, "\"%s\" is not a valid datetime!"%value