xmlclass/xmlclass.py
changeset 92 76d5001393df
parent 90 2245e8776086
child 116 58b9b84e385f
equal deleted inserted replaced
91:e8e9ddeed76c 92:76d5001393df
    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")