25 from xml.dom import minidom |
25 from xml.dom import minidom |
26 import sys,re |
26 import sys,re |
27 from types import * |
27 from types import * |
28 from datetime import * |
28 from datetime import * |
29 from new import classobj |
29 from new import classobj |
30 |
|
31 """ |
|
32 Time and date definitions |
|
33 """ |
|
34 TimeType = time(0,0,0).__class__ |
|
35 DateType = date(1,1,1).__class__ |
|
36 DateTimeType = datetime(1,1,1,0,0,0).__class__ |
|
37 |
30 |
38 """ |
31 """ |
39 Regular expression models for extracting dates and times from a string |
32 Regular expression models for extracting dates and times from a string |
40 """ |
33 """ |
41 time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)') |
34 time_model = re.compile('([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)') |
374 time_values = [int(v) for v in values[:2]] |
367 time_values = [int(v) for v in values[:2]] |
375 seconds = float(values[2]) |
368 seconds = float(values[2]) |
376 time_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
369 time_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
377 return time(*time_values) |
370 return time(*time_values) |
378 return time(0,0,0,0) |
371 return time(0,0,0,0) |
379 return TimeType, GetTimeInitialValue |
372 return time, GetTimeInitialValue |
380 else: |
373 else: |
381 return TimeType, lambda:time(0,0,0,0) |
374 return time, lambda:time(0,0,0,0) |
382 elif type_compute == "date": |
375 elif type_compute == "date": |
383 if default: |
376 if default: |
384 def GetDateInitialValue(): |
377 def GetDateInitialValue(): |
385 result = date_model.match(value) |
378 result = date_model.match(value) |
386 if result: |
379 if result: |
387 date_values = [int(v) for v in result.groups()] |
380 date_values = [int(v) for v in result.groups()] |
388 return date(*date_values) |
381 return date(*date_values) |
389 return date(1,1,1) |
382 return date(1,1,1) |
390 return DateType, GetDateInitialValue |
383 return date, GetDateInitialValue |
391 else: |
384 else: |
392 return DateType, lambda:date(1,1,1) |
385 return date, lambda:date(1,1,1) |
393 elif type_compute == "dateTime": |
386 elif type_compute == "dateTime": |
394 if default: |
387 if default: |
395 def GetDateTimeInitialValue(): |
388 def GetDateTimeInitialValue(): |
396 result = datetime_model.match(value) |
389 result = datetime_model.match(value) |
397 if result: |
390 if result: |
399 datetime_values = [int(v) for v in values[:5]] |
392 datetime_values = [int(v) for v in values[:5]] |
400 seconds = float(values[5]) |
393 seconds = float(values[5]) |
401 datetime_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
394 datetime_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
402 return datetime(*datetime_values) |
395 return datetime(*datetime_values) |
403 return datetime(1,1,1,0,0,0,0) |
396 return datetime(1,1,1,0,0,0,0) |
404 return DateTimeType, GetDateTimeInitialValue |
397 return datetime, GetDateTimeInitialValue |
405 else: |
398 else: |
406 return DateTimeType, lambda:datetime(1,1,1,0,0,0,0) |
399 return datetime, lambda:datetime(1,1,1,0,0,0,0) |
407 elif type_compute == "language": |
400 elif type_compute == "language": |
408 if default: |
401 if default: |
409 def GetStringInitialValue(): |
402 def GetStringInitialValue(): |
410 return default |
403 return default |
411 return StringType, GetStringInitialValue |
404 return StringType, GetStringInitialValue |
503 # Class is a limited type |
496 # Class is a limited type |
504 elif attr == "limit": |
497 elif attr == "limit": |
505 value_type, initial = self.GetTypeInitialValue(members["basetype"]) |
498 value_type, initial = self.GetTypeInitialValue(members["basetype"]) |
506 if "min" in values: |
499 if "min" in values: |
507 initial = max(initial, values["min"]) |
500 initial = max(initial, values["min"]) |
508 if "max" in values: |
501 elif "max" in values: |
509 initial = min(initial, values["max"]) |
502 initial = min(initial, values["max"]) |
510 initialValues["value"] = GetInitialValueFunction(initial) |
503 initialValues["value"] = GetInitialValueFunction(initial) |
511 classmembers["value"] = initial |
504 classmembers["value"] = initial |
512 classmembers["setValue"] = generateSetLimitMethod(values, value_type) |
505 classmembers["setValue"] = generateSetLimitMethod(values, value_type) |
513 classmembers["getValue"] = generateGetMethod("value") |
506 classmembers["getValue"] = generateGetMethod("value") |