xmlclass/xmlclass.py
changeset 24 364320323b4d
parent 2 93bc4c2cf376
child 58 39cd981ff242
equal deleted inserted replaced
23:cce8d5662738 24:364320323b4d
    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