35 DateTimeType = datetime(1,1,1,0,0,0).__class__ |
35 DateTimeType = datetime(1,1,1,0,0,0).__class__ |
36 |
36 |
37 """ |
37 """ |
38 Regular expression models for extracting dates and times from a string |
38 Regular expression models for extracting dates and times from a string |
39 """ |
39 """ |
40 time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2})') |
40 time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)') |
41 date_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})') |
41 date_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})') |
42 datetime_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})[ T]([0-9]{2}):([0-9]{2}):([0-9]{2})') |
42 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]*)?)') |
43 |
43 |
44 """ |
44 """ |
45 Dictionaries for stocking Classes and Types created from XML |
45 Dictionaries for stocking Classes and Types created from XML |
46 """ |
46 """ |
47 XMLClasses = {} |
47 XMLClasses = {} |
252 elif type_compute in ["decimal","unsignedLong","long","integer"]: |
252 elif type_compute in ["decimal","unsignedLong","long","integer"]: |
253 return IntType, "0" |
253 return IntType, "0" |
254 elif type_compute in ["string","anyURI","NMTOKEN"]: |
254 elif type_compute in ["string","anyURI","NMTOKEN"]: |
255 return StringType, "\"\"" |
255 return StringType, "\"\"" |
256 elif type_compute == "time": |
256 elif type_compute == "time": |
257 return TimeType, "time(0,0,0)" |
257 return TimeType, "time(0,0,0,0)" |
258 elif type_compute == "date": |
258 elif type_compute == "date": |
259 return DateType, "date(1,1,1)" |
259 return DateType, "date(1,1,1)" |
260 elif type_compute == "dateTime": |
260 elif type_compute == "dateTime": |
261 return DateTimeType, "datetime(1,1,1,0,0,0)" |
261 return DateTimeType, "datetime(1,1,1,0,0,0,0)" |
262 elif type_compute == "language": |
262 elif type_compute == "language": |
263 return StringType, "\"en-US\"" |
263 return StringType, "\"en-US\"" |
264 else: |
264 else: |
265 print "Can't affect: %s"%type_compute |
265 print "Can't affect: %s"%type_compute |
266 elif attr_type.startswith("cls:"): |
266 elif attr_type.startswith("cls:"): |
297 elif type_compute in ["string","anyURI","NMTOKEN","language"]: |
297 elif type_compute in ["string","anyURI","NMTOKEN","language"]: |
298 return value |
298 return value |
299 elif type_compute == "time": |
299 elif type_compute == "time": |
300 result = time_model.match(value) |
300 result = time_model.match(value) |
301 if result: |
301 if result: |
302 time_values = [int(v) for v in result.groups()] |
302 values = result.groups() |
|
303 time_values = [int(v) for v in values[:2]] |
|
304 seconds = float(values[2]) |
|
305 time_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
303 return time(*time_values) |
306 return time(*time_values) |
304 else: |
307 else: |
305 raise ValueError, "\"%s\" is not a valid time!"%value |
308 raise ValueError, "\"%s\" is not a valid time!"%value |
306 elif type_compute == "date": |
309 elif type_compute == "date": |
307 result = date_model.match(value) |
310 result = date_model.match(value) |
311 else: |
314 else: |
312 raise ValueError, "\"%s\" is not a valid date!"%value |
315 raise ValueError, "\"%s\" is not a valid date!"%value |
313 elif type_compute == "dateTime": |
316 elif type_compute == "dateTime": |
314 result = datetime_model.match(value) |
317 result = datetime_model.match(value) |
315 if result: |
318 if result: |
316 datetime_values = [int(v) for v in result.groups()] |
319 values = result.groups() |
|
320 datetime_values = [int(v) for v in values[:5]] |
|
321 seconds = float(values[5]) |
|
322 datetime_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
317 return datetime(*datetime_values) |
323 return datetime(*datetime_values) |
318 else: |
324 else: |
319 raise ValueError, "\"%s\" is not a valid datetime!"%value |
325 raise ValueError, "\"%s\" is not a valid datetime!"%value |
320 else: |
326 else: |
321 print "Can't affect: %s"%type_compute |
327 print "Can't affect: %s"%type_compute |