xmlclass/xsdschema.py
changeset 2459 21164625b393
parent 2457 9deec258ab1a
child 3750 f62625418bff
equal deleted inserted replaced
2458:2a70d5240300 2459:21164625b393
    26 from __future__ import absolute_import
    26 from __future__ import absolute_import
    27 from __future__ import print_function
    27 from __future__ import print_function
    28 import os
    28 import os
    29 import re
    29 import re
    30 import datetime
    30 import datetime
       
    31 from types import FunctionType
    31 from xml.dom import minidom
    32 from xml.dom import minidom
    32 from types import *
    33 from future.builtins import round
       
    34 from six import string_types
       
    35 from past.builtins import long
    33 
    36 
    34 from xmlclass.xmlclass import *
    37 from xmlclass.xmlclass import *
    35 
    38 
    36 
    39 
    37 def GenerateDictFacets(facets):
    40 def GenerateDictFacets(facets):
    59     def generateXMLTextMethod(value, name=None, indent=0):
    62     def generateXMLTextMethod(value, name=None, indent=0):
    60         text = ""
    63         text = ""
    61         if name is not None:
    64         if name is not None:
    62             ind1, _ind2 = getIndent(indent, name)
    65             ind1, _ind2 = getIndent(indent, name)
    63             text += ind1 + "<%s>" % name
    66             text += ind1 + "<%s>" % name
    64         if isinstance(value, IntType):
    67         if isinstance(value, int):
    65             text += str(value)
    68             text += str(value)
    66         elif value in extra_values or value % 1 != 0:
    69         elif value in extra_values or value % 1 != 0:
    67             text += float_format(value)
    70             text += float_format(value)
    68         else:
    71         else:
    69             text += "{:.0f}".format(value)
    72             text += "{:.0f}".format(value)
   165     if "name" in attributes:
   168     if "name" in attributes:
   166         simpleType["name"] = attributes["name"]
   169         simpleType["name"] = attributes["name"]
   167 
   170 
   168     if typeinfos["type"] in ["restriction", "extension"]:
   171     if typeinfos["type"] in ["restriction", "extension"]:
   169         # Search for base type definition
   172         # Search for base type definition
   170         if isinstance(typeinfos["base"], (StringType, UnicodeType)):
   173         if isinstance(typeinfos["base"], string_types):
   171             basetypeinfos = factory.FindSchemaElement(typeinfos["base"], SIMPLETYPE)
   174             basetypeinfos = factory.FindSchemaElement(typeinfos["base"], SIMPLETYPE)
   172             if basetypeinfos is None:
   175             if basetypeinfos is None:
   173                 raise "\"%s\" isn't defined!" % typeinfos["base"]
   176                 raise "\"%s\" isn't defined!" % typeinfos["base"]
   174         else:
   177         else:
   175             basetypeinfos = typeinfos["base"]
   178             basetypeinfos = typeinfos["base"]
   389 
   392 
   390         GenerateSimpleType = basetypeinfos["generate"]
   393         GenerateSimpleType = basetypeinfos["generate"]
   391 
   394 
   392     elif typeinfos["type"] == "list":
   395     elif typeinfos["type"] == "list":
   393         # Search for item type definition
   396         # Search for item type definition
   394         if isinstance(typeinfos["itemType"], (StringType, UnicodeType)):
   397         if isinstance(typeinfos["itemType"], string_types):
   395             itemtypeinfos = factory.FindSchemaElement(typeinfos["itemType"], SIMPLETYPE)
   398             itemtypeinfos = factory.FindSchemaElement(typeinfos["itemType"], SIMPLETYPE)
   396             if itemtypeinfos is None:
   399             if itemtypeinfos is None:
   397                 raise "\"%s\" isn't defined!" % typeinfos["itemType"]
   400                 raise "\"%s\" isn't defined!" % typeinfos["itemType"]
   398         else:
   401         else:
   399             itemtypeinfos = typeinfos["itemType"]
   402             itemtypeinfos = typeinfos["itemType"]
   435 
   438 
   436     elif typeinfos["type"] == "union":
   439     elif typeinfos["type"] == "union":
   437         # Search for member types definition
   440         # Search for member types definition
   438         membertypesinfos = []
   441         membertypesinfos = []
   439         for membertype in typeinfos["memberTypes"]:
   442         for membertype in typeinfos["memberTypes"]:
   440             if isinstance(membertype, (StringType, UnicodeType)):
   443             if isinstance(membertype, string_types):
   441                 infos = factory.FindSchemaElement(membertype, SIMPLETYPE)
   444                 infos = factory.FindSchemaElement(membertype, SIMPLETYPE)
   442                 if infos is None:
   445                 if infos is None:
   443                     raise ValueError("\"%s\" isn't defined!" % membertype)
   446                     raise ValueError("\"%s\" isn't defined!" % membertype)
   444             else:
   447             else:
   445                 infos = membertype
   448                 infos = membertype
   476             return False
   479             return False
   477 
   480 
   478         SimpleTypeInitialValue = membertypesinfos[0]["initial"]
   481         SimpleTypeInitialValue = membertypesinfos[0]["initial"]
   479 
   482 
   480         def GenerateSimpleTypeFunction(value):
   483         def GenerateSimpleTypeFunction(value):
   481             if isinstance(value, BooleanType):
   484             if isinstance(value, bool):
   482                 return {True: "true", False: "false"}[value]
   485                 return {True: "true", False: "false"}[value]
   483             else:
   486             else:
   484                 return str(value)
   487                 return str(value)
   485         GenerateSimpleType = GenerateSimpleTypeXMLText(GenerateSimpleTypeFunction)
   488         GenerateSimpleType = GenerateSimpleTypeXMLText(GenerateSimpleTypeFunction)
   486 
   489 
   509 def ExtractAttributes(factory, elements, base=None):
   512 def ExtractAttributes(factory, elements, base=None):
   510     attrs = []
   513     attrs = []
   511     attrnames = {}
   514     attrnames = {}
   512     if base is not None:
   515     if base is not None:
   513         basetypeinfos = factory.FindSchemaElement(base)
   516         basetypeinfos = factory.FindSchemaElement(base)
   514         if not isinstance(basetypeinfos, (UnicodeType, StringType)) and basetypeinfos["type"] == COMPLEXTYPE:
   517         if not isinstance(basetypeinfos, string_types) and basetypeinfos["type"] == COMPLEXTYPE:
   515             attrnames = dict(map(lambda x: (x["name"], True), basetypeinfos["attributes"]))
   518             attrnames = dict(map(lambda x: (x["name"], True), basetypeinfos["attributes"]))
   516 
   519 
   517     for element in elements:
   520     for element in elements:
   518         if element["type"] == ATTRIBUTE:
   521         if element["type"] == ATTRIBUTE:
   519             if attrnames.get(element["name"], False):
   522             if attrnames.get(element["name"], False):
   810             elmtgroup = factory.FindSchemaElement(child["ref"], ELEMENTSGROUP)
   813             elmtgroup = factory.FindSchemaElement(child["ref"], ELEMENTSGROUP)
   811             if "choices" not in elmtgroup:
   814             if "choices" not in elmtgroup:
   812                 raise ValueError("Only group composed of \"choice\" can be referenced in \"choice\" element!")
   815                 raise ValueError("Only group composed of \"choice\" can be referenced in \"choice\" element!")
   813             choices_tmp = []
   816             choices_tmp = []
   814             for choice in elmtgroup["choices"]:
   817             for choice in elmtgroup["choices"]:
   815                 if not isinstance(choice["elmt_type"], (UnicodeType, StringType)) and choice["elmt_type"]["type"] == COMPLEXTYPE:
   818                 if not isinstance(choice["elmt_type"], string_types) and choice["elmt_type"]["type"] == COMPLEXTYPE:
   816                     elmt_type = "%s_%s" % (elmtgroup["name"], choice["name"])
   819                     elmt_type = "%s_%s" % (elmtgroup["name"], choice["name"])
   817                     if factory.TargetNamespace is not None:
   820                     if factory.TargetNamespace is not None:
   818                         elmt_type = "%s:%s" % (factory.TargetNamespace, elmt_type)
   821                         elmt_type = "%s:%s" % (factory.TargetNamespace, elmt_type)
   819                     new_choice = choice.copy()
   822                     new_choice = choice.copy()
   820                     new_choice["elmt_type"] = elmt_type
   823                     new_choice["elmt_type"] = elmt_type
   844             elmtgroup = factory.FindSchemaElement(child["ref"], ELEMENTSGROUP)
   847             elmtgroup = factory.FindSchemaElement(child["ref"], ELEMENTSGROUP)
   845             if "elements" not in elmtgroup or not elmtgroup["order"]:
   848             if "elements" not in elmtgroup or not elmtgroup["order"]:
   846                 raise ValueError("Only group composed of \"sequence\" can be referenced in \"sequence\" element!")
   849                 raise ValueError("Only group composed of \"sequence\" can be referenced in \"sequence\" element!")
   847             elements_tmp = []
   850             elements_tmp = []
   848             for element in elmtgroup["elements"]:
   851             for element in elmtgroup["elements"]:
   849                 if not isinstance(element["elmt_type"], (UnicodeType, StringType)) and element["elmt_type"]["type"] == COMPLEXTYPE:
   852                 if not isinstance(element["elmt_type"], string_types) and element["elmt_type"]["type"] == COMPLEXTYPE:
   850                     elmt_type = "%s_%s" % (elmtgroup["name"], element["name"])
   853                     elmt_type = "%s_%s" % (elmtgroup["name"], element["name"])
   851                     if factory.TargetNamespace is not None:
   854                     if factory.TargetNamespace is not None:
   852                         elmt_type = "%s:%s" % (factory.TargetNamespace, elmt_type)
   855                         elmt_type = "%s:%s" % (factory.TargetNamespace, elmt_type)
   853                     new_element = element.copy()
   856                     new_element = element.copy()
   854                     new_element["elmt_type"] = elmt_type
   857                     new_element["elmt_type"] = elmt_type
   980             elif not CompareSchema(infos, child):
   983             elif not CompareSchema(infos, child):
   981                 raise ValueError("\"%s\" is defined twice in targetNamespace!" % child["name"])
   984                 raise ValueError("\"%s\" is defined twice in targetNamespace!" % child["name"])
   982 
   985 
   983 
   986 
   984 def CompareSchema(schema, reference):
   987 def CompareSchema(schema, reference):
   985     if isinstance(schema, ListType):
   988     if isinstance(schema, list):
   986         if not isinstance(reference, ListType) or len(schema) != len(reference):
   989         if not isinstance(reference, list) or len(schema) != len(reference):
   987             return False
   990             return False
   988         for i, value in enumerate(schema):
   991         for i, value in enumerate(schema):
   989             result = CompareSchema(value, reference[i])
   992             result = CompareSchema(value, reference[i])
   990             if not result:
   993             if not result:
   991                 return result
   994                 return result
   992         return True
   995         return True
   993     elif isinstance(schema, DictType):
   996     elif isinstance(schema, dict):
   994         if not isinstance(reference, DictType) or len(schema) != len(reference):
   997         if not isinstance(reference, dict) or len(schema) != len(reference):
   995             return False
   998             return False
   996         for name, value in schema.items():
   999         for name, value in schema.items():
   997             ref_value = reference.get(name, None)
  1000             ref_value = reference.get(name, None)
   998             if ref_value is None and value is not None:
  1001             if ref_value is None and value is not None:
   999                 return False
  1002                 return False
  2210         "basename": "string",
  2213         "basename": "string",
  2211         "extract": GetAttributeValue,
  2214         "extract": GetAttributeValue,
  2212         "facets": STRING_FACETS,
  2215         "facets": STRING_FACETS,
  2213         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2216         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2214         "initial": lambda: "",
  2217         "initial": lambda: "",
  2215         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2218         "check": lambda x: isinstance(x, string_types)},
  2216     },
       
  2217 
  2219 
  2218     "normalizedString": {
  2220     "normalizedString": {
  2219         "type": SIMPLETYPE,
  2221         "type": SIMPLETYPE,
  2220         "basename": "normalizedString",
  2222         "basename": "normalizedString",
  2221         "extract": GetNormalizedString,
  2223         "extract": GetNormalizedString,
  2222         "facets": STRING_FACETS,
  2224         "facets": STRING_FACETS,
  2223         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2225         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2224         "initial": lambda: "",
  2226         "initial": lambda: "",
  2225         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2227         "check": lambda x: isinstance(x, string_types)
  2226     },
  2228     },
  2227 
  2229 
  2228     "token": {
  2230     "token": {
  2229         "type": SIMPLETYPE,
  2231         "type": SIMPLETYPE,
  2230         "basename": "token",
  2232         "basename": "token",
  2231         "extract": GetToken,
  2233         "extract": GetToken,
  2232         "facets": STRING_FACETS,
  2234         "facets": STRING_FACETS,
  2233         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2235         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2234         "initial": lambda: "",
  2236         "initial": lambda: "",
  2235         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2237         "check": lambda x: isinstance(x, string_types)
  2236     },
  2238     },
  2237 
  2239 
  2238     "base64Binary": {
  2240     "base64Binary": {
  2239         "type": SIMPLETYPE,
  2241         "type": SIMPLETYPE,
  2240         "basename": "base64Binary",
  2242         "basename": "base64Binary",
  2241         "extract": NotSupportedYet("base64Binary"),
  2243         "extract": NotSupportedYet("base64Binary"),
  2242         "facets": STRING_FACETS,
  2244         "facets": STRING_FACETS,
  2243         "generate": GenerateSimpleTypeXMLText(str),
  2245         "generate": GenerateSimpleTypeXMLText(str),
  2244         "initial": lambda: 0,
  2246         "initial": lambda: 0,
  2245         "check": lambda x: isinstance(x, (IntType, LongType))
  2247         "check": lambda x: isinstance(x, (int, long))
  2246     },
  2248     },
  2247 
  2249 
  2248     "hexBinary": {
  2250     "hexBinary": {
  2249         "type": SIMPLETYPE,
  2251         "type": SIMPLETYPE,
  2250         "basename": "hexBinary",
  2252         "basename": "hexBinary",
  2251         "extract": GetHexInteger,
  2253         "extract": GetHexInteger,
  2252         "facets": STRING_FACETS,
  2254         "facets": STRING_FACETS,
  2253         "generate": GenerateSimpleTypeXMLText(lambda x: ("%."+str(int(round(len("%X" % x)/2.)*2))+"X") % x),
  2255         "generate": GenerateSimpleTypeXMLText(lambda x: ("%."+str(int(round(len("%X" % x)/2.)*2))+"X") % x),
  2254         "initial": lambda: 0,
  2256         "initial": lambda: 0,
  2255         "check": lambda x: isinstance(x, (IntType, LongType))
  2257         "check": lambda x: isinstance(x, (int, long))
  2256     },
  2258     },
  2257 
  2259 
  2258     "integer": {
  2260     "integer": {
  2259         "type": SIMPLETYPE,
  2261         "type": SIMPLETYPE,
  2260         "basename": "integer",
  2262         "basename": "integer",
  2261         "extract": GenerateIntegerExtraction(),
  2263         "extract": GenerateIntegerExtraction(),
  2262         "facets": DECIMAL_FACETS,
  2264         "facets": DECIMAL_FACETS,
  2263         "generate": GenerateSimpleTypeXMLText(str),
  2265         "generate": GenerateSimpleTypeXMLText(str),
  2264         "initial": lambda: 0,
  2266         "initial": lambda: 0,
  2265         "check": lambda x: isinstance(x, IntType)
  2267         "check": lambda x: isinstance(x, int)
  2266     },
  2268     },
  2267 
  2269 
  2268     "positiveInteger": {
  2270     "positiveInteger": {
  2269         "type": SIMPLETYPE,
  2271         "type": SIMPLETYPE,
  2270         "basename": "positiveInteger",
  2272         "basename": "positiveInteger",
  2271         "extract": GenerateIntegerExtraction(minExclusive=0),
  2273         "extract": GenerateIntegerExtraction(minExclusive=0),
  2272         "facets": DECIMAL_FACETS,
  2274         "facets": DECIMAL_FACETS,
  2273         "generate": GenerateSimpleTypeXMLText(str),
  2275         "generate": GenerateSimpleTypeXMLText(str),
  2274         "initial": lambda: 1,
  2276         "initial": lambda: 1,
  2275         "check": lambda x: isinstance(x, IntType)
  2277         "check": lambda x: isinstance(x, int)
  2276     },
  2278     },
  2277 
  2279 
  2278     "negativeInteger": {
  2280     "negativeInteger": {
  2279         "type": SIMPLETYPE,
  2281         "type": SIMPLETYPE,
  2280         "basename": "negativeInteger",
  2282         "basename": "negativeInteger",
  2281         "extract": GenerateIntegerExtraction(maxExclusive=0),
  2283         "extract": GenerateIntegerExtraction(maxExclusive=0),
  2282         "facets": DECIMAL_FACETS,
  2284         "facets": DECIMAL_FACETS,
  2283         "generate": GenerateSimpleTypeXMLText(str),
  2285         "generate": GenerateSimpleTypeXMLText(str),
  2284         "initial": lambda: -1,
  2286         "initial": lambda: -1,
  2285         "check": lambda x: isinstance(x, IntType)
  2287         "check": lambda x: isinstance(x, int)
  2286     },
  2288     },
  2287 
  2289 
  2288     "nonNegativeInteger": {
  2290     "nonNegativeInteger": {
  2289         "type": SIMPLETYPE,
  2291         "type": SIMPLETYPE,
  2290         "basename": "nonNegativeInteger",
  2292         "basename": "nonNegativeInteger",
  2291         "extract": GenerateIntegerExtraction(minInclusive=0),
  2293         "extract": GenerateIntegerExtraction(minInclusive=0),
  2292         "facets": DECIMAL_FACETS,
  2294         "facets": DECIMAL_FACETS,
  2293         "generate": GenerateSimpleTypeXMLText(str),
  2295         "generate": GenerateSimpleTypeXMLText(str),
  2294         "initial": lambda: 0,
  2296         "initial": lambda: 0,
  2295         "check": lambda x: isinstance(x, IntType)
  2297         "check": lambda x: isinstance(x, int)
  2296     },
  2298     },
  2297 
  2299 
  2298     "nonPositiveInteger": {
  2300     "nonPositiveInteger": {
  2299         "type": SIMPLETYPE,
  2301         "type": SIMPLETYPE,
  2300         "basename": "nonPositiveInteger",
  2302         "basename": "nonPositiveInteger",
  2301         "extract": GenerateIntegerExtraction(maxInclusive=0),
  2303         "extract": GenerateIntegerExtraction(maxInclusive=0),
  2302         "facets": DECIMAL_FACETS,
  2304         "facets": DECIMAL_FACETS,
  2303         "generate": GenerateSimpleTypeXMLText(str),
  2305         "generate": GenerateSimpleTypeXMLText(str),
  2304         "initial": lambda: 0,
  2306         "initial": lambda: 0,
  2305         "check": lambda x: isinstance(x, IntType)
  2307         "check": lambda x: isinstance(x, int)
  2306     },
  2308     },
  2307 
  2309 
  2308     "long": {
  2310     "long": {
  2309         "type": SIMPLETYPE,
  2311         "type": SIMPLETYPE,
  2310         "basename": "long",
  2312         "basename": "long",
  2311         "extract": GenerateIntegerExtraction(minInclusive=-2**63, maxExclusive=2**63),
  2313         "extract": GenerateIntegerExtraction(minInclusive=-2**63, maxExclusive=2**63),
  2312         "facets": DECIMAL_FACETS,
  2314         "facets": DECIMAL_FACETS,
  2313         "generate": GenerateSimpleTypeXMLText(str),
  2315         "generate": GenerateSimpleTypeXMLText(str),
  2314         "initial": lambda: 0,
  2316         "initial": lambda: 0,
  2315         "check": lambda x: isinstance(x, IntType)
  2317         "check": lambda x: isinstance(x, int)
  2316     },
  2318     },
  2317 
  2319 
  2318     "unsignedLong": {
  2320     "unsignedLong": {
  2319         "type": SIMPLETYPE,
  2321         "type": SIMPLETYPE,
  2320         "basename": "unsignedLong",
  2322         "basename": "unsignedLong",
  2321         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**64),
  2323         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**64),
  2322         "facets": DECIMAL_FACETS,
  2324         "facets": DECIMAL_FACETS,
  2323         "generate": GenerateSimpleTypeXMLText(str),
  2325         "generate": GenerateSimpleTypeXMLText(str),
  2324         "initial": lambda: 0,
  2326         "initial": lambda: 0,
  2325         "check": lambda x: isinstance(x, IntType)
  2327         "check": lambda x: isinstance(x, int)
  2326     },
  2328     },
  2327 
  2329 
  2328     "int": {
  2330     "int": {
  2329         "type": SIMPLETYPE,
  2331         "type": SIMPLETYPE,
  2330         "basename": "int",
  2332         "basename": "int",
  2331         "extract": GenerateIntegerExtraction(minInclusive=-2**31, maxExclusive=2**31),
  2333         "extract": GenerateIntegerExtraction(minInclusive=-2**31, maxExclusive=2**31),
  2332         "facets": DECIMAL_FACETS,
  2334         "facets": DECIMAL_FACETS,
  2333         "generate": GenerateSimpleTypeXMLText(str),
  2335         "generate": GenerateSimpleTypeXMLText(str),
  2334         "initial": lambda: 0,
  2336         "initial": lambda: 0,
  2335         "check": lambda x: isinstance(x, IntType)
  2337         "check": lambda x: isinstance(x, int)
  2336     },
  2338     },
  2337 
  2339 
  2338     "unsignedInt": {
  2340     "unsignedInt": {
  2339         "type": SIMPLETYPE,
  2341         "type": SIMPLETYPE,
  2340         "basename": "unsignedInt",
  2342         "basename": "unsignedInt",
  2341         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**32),
  2343         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**32),
  2342         "facets": DECIMAL_FACETS,
  2344         "facets": DECIMAL_FACETS,
  2343         "generate": GenerateSimpleTypeXMLText(str),
  2345         "generate": GenerateSimpleTypeXMLText(str),
  2344         "initial": lambda: 0,
  2346         "initial": lambda: 0,
  2345         "check": lambda x: isinstance(x, IntType)
  2347         "check": lambda x: isinstance(x, int)
  2346     },
  2348     },
  2347 
  2349 
  2348     "short": {
  2350     "short": {
  2349         "type": SIMPLETYPE,
  2351         "type": SIMPLETYPE,
  2350         "basename": "short",
  2352         "basename": "short",
  2351         "extract": GenerateIntegerExtraction(minInclusive=-2**15, maxExclusive=2**15),
  2353         "extract": GenerateIntegerExtraction(minInclusive=-2**15, maxExclusive=2**15),
  2352         "facets": DECIMAL_FACETS,
  2354         "facets": DECIMAL_FACETS,
  2353         "generate": GenerateSimpleTypeXMLText(str),
  2355         "generate": GenerateSimpleTypeXMLText(str),
  2354         "initial": lambda: 0,
  2356         "initial": lambda: 0,
  2355         "check": lambda x: isinstance(x, IntType)
  2357         "check": lambda x: isinstance(x, int)
  2356     },
  2358     },
  2357 
  2359 
  2358     "unsignedShort": {
  2360     "unsignedShort": {
  2359         "type": SIMPLETYPE,
  2361         "type": SIMPLETYPE,
  2360         "basename": "unsignedShort",
  2362         "basename": "unsignedShort",
  2361         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**16),
  2363         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**16),
  2362         "facets": DECIMAL_FACETS,
  2364         "facets": DECIMAL_FACETS,
  2363         "generate": GenerateSimpleTypeXMLText(str),
  2365         "generate": GenerateSimpleTypeXMLText(str),
  2364         "initial": lambda: 0,
  2366         "initial": lambda: 0,
  2365         "check": lambda x: isinstance(x, IntType)
  2367         "check": lambda x: isinstance(x, int)
  2366     },
  2368     },
  2367 
  2369 
  2368     "byte": {
  2370     "byte": {
  2369         "type": SIMPLETYPE,
  2371         "type": SIMPLETYPE,
  2370         "basename": "byte",
  2372         "basename": "byte",
  2371         "extract": GenerateIntegerExtraction(minInclusive=-2**7, maxExclusive=2**7),
  2373         "extract": GenerateIntegerExtraction(minInclusive=-2**7, maxExclusive=2**7),
  2372         "facets": DECIMAL_FACETS,
  2374         "facets": DECIMAL_FACETS,
  2373         "generate": GenerateSimpleTypeXMLText(str),
  2375         "generate": GenerateSimpleTypeXMLText(str),
  2374         "initial": lambda: 0,
  2376         "initial": lambda: 0,
  2375         "check": lambda x: isinstance(x, IntType)
  2377         "check": lambda x: isinstance(x, int)
  2376     },
  2378     },
  2377 
  2379 
  2378     "unsignedByte": {
  2380     "unsignedByte": {
  2379         "type": SIMPLETYPE,
  2381         "type": SIMPLETYPE,
  2380         "basename": "unsignedByte",
  2382         "basename": "unsignedByte",
  2381         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**8),
  2383         "extract": GenerateIntegerExtraction(minInclusive=0, maxExclusive=2**8),
  2382         "facets": DECIMAL_FACETS,
  2384         "facets": DECIMAL_FACETS,
  2383         "generate": GenerateSimpleTypeXMLText(str),
  2385         "generate": GenerateSimpleTypeXMLText(str),
  2384         "initial": lambda: 0,
  2386         "initial": lambda: 0,
  2385         "check": lambda x: isinstance(x, IntType)
  2387         "check": lambda x: isinstance(x, int)
  2386     },
  2388     },
  2387 
  2389 
  2388     "decimal": {
  2390     "decimal": {
  2389         "type": SIMPLETYPE,
  2391         "type": SIMPLETYPE,
  2390         "basename": "decimal",
  2392         "basename": "decimal",
  2391         "extract": GenerateFloatExtraction("decimal"),
  2393         "extract": GenerateFloatExtraction("decimal"),
  2392         "facets": DECIMAL_FACETS,
  2394         "facets": DECIMAL_FACETS,
  2393         "generate": GenerateFloatXMLText(decimal=3),
  2395         "generate": GenerateFloatXMLText(decimal=3),
  2394         "initial": lambda: 0.,
  2396         "initial": lambda: 0.,
  2395         "check": lambda x: isinstance(x, (IntType, FloatType))
  2397         "check": lambda x: isinstance(x, (int, float))
  2396     },
  2398     },
  2397 
  2399 
  2398     "float": {
  2400     "float": {
  2399         "type": SIMPLETYPE,
  2401         "type": SIMPLETYPE,
  2400         "basename": "float",
  2402         "basename": "float",
  2401         "extract": GenerateFloatExtraction("float", ["INF", "-INF", "NaN"]),
  2403         "extract": GenerateFloatExtraction("float", ["INF", "-INF", "NaN"]),
  2402         "facets": NUMBER_FACETS,
  2404         "facets": NUMBER_FACETS,
  2403         "generate": GenerateFloatXMLText(["INF", "-INF", "NaN"]),
  2405         "generate": GenerateFloatXMLText(["INF", "-INF", "NaN"]),
  2404         "initial": lambda: 0.,
  2406         "initial": lambda: 0.,
  2405         "check": lambda x: {"INF": True, "-INF": True, "NaN": True}.get(x, isinstance(x, (IntType, FloatType)))
  2407         "check": lambda x: {"INF": True, "-INF": True, "NaN": True}.get(x, isinstance(x, (int, float)))
  2406     },
  2408     },
  2407 
  2409 
  2408     "double": {
  2410     "double": {
  2409         "type": SIMPLETYPE,
  2411         "type": SIMPLETYPE,
  2410         "basename": "double",
  2412         "basename": "double",
  2411         "extract": GenerateFloatExtraction("double", ["INF", "-INF", "NaN"]),
  2413         "extract": GenerateFloatExtraction("double", ["INF", "-INF", "NaN"]),
  2412         "facets": NUMBER_FACETS,
  2414         "facets": NUMBER_FACETS,
  2413         "generate": GenerateFloatXMLText(["INF", "-INF", "NaN"]),
  2415         "generate": GenerateFloatXMLText(["INF", "-INF", "NaN"]),
  2414         "initial": lambda: 0.,
  2416         "initial": lambda: 0.,
  2415         "check": lambda x: {"INF": True, "-INF": True, "NaN": True}.get(x, isinstance(x, (IntType, FloatType)))
  2417         "check": lambda x: {"INF": True, "-INF": True, "NaN": True}.get(x, isinstance(x, (int, float)))
  2416     },
  2418     },
  2417 
  2419 
  2418     "boolean": {
  2420     "boolean": {
  2419         "type": SIMPLETYPE,
  2421         "type": SIMPLETYPE,
  2420         "basename": "boolean",
  2422         "basename": "boolean",
  2421         "extract": GetBoolean,
  2423         "extract": GetBoolean,
  2422         "facets": GenerateDictFacets(["pattern", "whiteSpace"]),
  2424         "facets": GenerateDictFacets(["pattern", "whiteSpace"]),
  2423         "generate": GenerateSimpleTypeXMLText(lambda x: {True: "true", False: "false"}[x]),
  2425         "generate": GenerateSimpleTypeXMLText(lambda x: {True: "true", False: "false"}[x]),
  2424         "initial": lambda: False,
  2426         "initial": lambda: False,
  2425         "check": lambda x: isinstance(x, BooleanType)
  2427         "check": lambda x: isinstance(x, bool)
  2426     },
  2428     },
  2427 
  2429 
  2428     "duration": {
  2430     "duration": {
  2429         "type": SIMPLETYPE,
  2431         "type": SIMPLETYPE,
  2430         "basename": "duration",
  2432         "basename": "duration",
  2431         "extract": NotSupportedYet("duration"),
  2433         "extract": NotSupportedYet("duration"),
  2432         "facets": NUMBER_FACETS,
  2434         "facets": NUMBER_FACETS,
  2433         "generate": GenerateSimpleTypeXMLText(str),
  2435         "generate": GenerateSimpleTypeXMLText(str),
  2434         "initial": lambda: "",
  2436         "initial": lambda: "",
  2435         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2437         "check": lambda x: isinstance(x, string_types)
  2436     },
  2438     },
  2437 
  2439 
  2438     "dateTime": {
  2440     "dateTime": {
  2439         "type": SIMPLETYPE,
  2441         "type": SIMPLETYPE,
  2440         "basename": "dateTime",
  2442         "basename": "dateTime",
  2470         "basename": "gYear",
  2472         "basename": "gYear",
  2471         "extract": NotSupportedYet("gYear"),
  2473         "extract": NotSupportedYet("gYear"),
  2472         "facets": NUMBER_FACETS,
  2474         "facets": NUMBER_FACETS,
  2473         "generate": GenerateSimpleTypeXMLText(str),
  2475         "generate": GenerateSimpleTypeXMLText(str),
  2474         "initial": lambda: "",
  2476         "initial": lambda: "",
  2475         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2477         "check": lambda x: isinstance(x, string_types)
  2476     },
  2478     },
  2477 
  2479 
  2478     "gYearMonth": {
  2480     "gYearMonth": {
  2479         "type": SIMPLETYPE,
  2481         "type": SIMPLETYPE,
  2480         "basename": "gYearMonth",
  2482         "basename": "gYearMonth",
  2481         "extract": NotSupportedYet("gYearMonth"),
  2483         "extract": NotSupportedYet("gYearMonth"),
  2482         "facets": NUMBER_FACETS,
  2484         "facets": NUMBER_FACETS,
  2483         "generate": GenerateSimpleTypeXMLText(str),
  2485         "generate": GenerateSimpleTypeXMLText(str),
  2484         "initial": lambda: "",
  2486         "initial": lambda: "",
  2485         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2487         "check": lambda x: isinstance(x, string_types)
  2486     },
  2488     },
  2487 
  2489 
  2488     "gMonth": {
  2490     "gMonth": {
  2489         "type": SIMPLETYPE,
  2491         "type": SIMPLETYPE,
  2490         "basename": "gMonth",
  2492         "basename": "gMonth",
  2491         "extract": NotSupportedYet("gMonth"),
  2493         "extract": NotSupportedYet("gMonth"),
  2492         "facets": NUMBER_FACETS,
  2494         "facets": NUMBER_FACETS,
  2493         "generate": GenerateSimpleTypeXMLText(str),
  2495         "generate": GenerateSimpleTypeXMLText(str),
  2494         "initial": lambda: "",
  2496         "initial": lambda: "",
  2495         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2497         "check": lambda x: isinstance(x, string_types)
  2496     },
  2498     },
  2497 
  2499 
  2498     "gMonthDay": {
  2500     "gMonthDay": {
  2499         "type": SIMPLETYPE,
  2501         "type": SIMPLETYPE,
  2500         "basename": "gMonthDay",
  2502         "basename": "gMonthDay",
  2501         "extract": NotSupportedYet("gMonthDay"),
  2503         "extract": NotSupportedYet("gMonthDay"),
  2502         "facets": NUMBER_FACETS,
  2504         "facets": NUMBER_FACETS,
  2503         "generate": GenerateSimpleTypeXMLText(str),
  2505         "generate": GenerateSimpleTypeXMLText(str),
  2504         "initial": lambda: "",
  2506         "initial": lambda: "",
  2505         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2507         "check": lambda x: isinstance(x, string_types)
  2506     },
  2508     },
  2507 
  2509 
  2508     "gDay": {
  2510     "gDay": {
  2509         "type": SIMPLETYPE,
  2511         "type": SIMPLETYPE,
  2510         "basename": "gDay",
  2512         "basename": "gDay",
  2511         "extract": NotSupportedYet("gDay"),
  2513         "extract": NotSupportedYet("gDay"),
  2512         "facets": NUMBER_FACETS,
  2514         "facets": NUMBER_FACETS,
  2513         "generate": GenerateSimpleTypeXMLText(str),
  2515         "generate": GenerateSimpleTypeXMLText(str),
  2514         "initial": lambda: "",
  2516         "initial": lambda: "",
  2515         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2517         "check": lambda x: isinstance(x, string_types)
  2516     },
  2518     },
  2517 
  2519 
  2518     "Name": {
  2520     "Name": {
  2519         "type": SIMPLETYPE,
  2521         "type": SIMPLETYPE,
  2520         "basename": "Name",
  2522         "basename": "Name",
  2521         "extract": GenerateModelNameExtraction("Name", Name_model),
  2523         "extract": GenerateModelNameExtraction("Name", Name_model),
  2522         "facets": STRING_FACETS,
  2524         "facets": STRING_FACETS,
  2523         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2525         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2524         "initial": lambda: "",
  2526         "initial": lambda: "",
  2525         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2527         "check": lambda x: isinstance(x, string_types)
  2526     },
  2528     },
  2527 
  2529 
  2528     "QName": {
  2530     "QName": {
  2529         "type": SIMPLETYPE,
  2531         "type": SIMPLETYPE,
  2530         "basename": "QName",
  2532         "basename": "QName",
  2531         "extract": GenerateModelNameExtraction("QName", QName_model),
  2533         "extract": GenerateModelNameExtraction("QName", QName_model),
  2532         "facets": STRING_FACETS,
  2534         "facets": STRING_FACETS,
  2533         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2535         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2534         "initial": lambda: "",
  2536         "initial": lambda: "",
  2535         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2537         "check": lambda x: isinstance(x, string_types)
  2536     },
  2538     },
  2537 
  2539 
  2538     "NCName": {
  2540     "NCName": {
  2539         "type": SIMPLETYPE,
  2541         "type": SIMPLETYPE,
  2540         "basename": "NCName",
  2542         "basename": "NCName",
  2541         "extract": GenerateModelNameExtraction("NCName", NCName_model),
  2543         "extract": GenerateModelNameExtraction("NCName", NCName_model),
  2542         "facets": STRING_FACETS,
  2544         "facets": STRING_FACETS,
  2543         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2545         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2544         "initial": lambda: "",
  2546         "initial": lambda: "",
  2545         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2547         "check": lambda x: isinstance(x, string_types)
  2546     },
  2548     },
  2547 
  2549 
  2548     "anyURI": {
  2550     "anyURI": {
  2549         "type": SIMPLETYPE,
  2551         "type": SIMPLETYPE,
  2550         "basename": "anyURI",
  2552         "basename": "anyURI",
  2551         "extract": GenerateModelNameExtraction("anyURI", URI_model),
  2553         "extract": GenerateModelNameExtraction("anyURI", URI_model),
  2552         "facets": STRING_FACETS,
  2554         "facets": STRING_FACETS,
  2553         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2555         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2554         "initial": lambda: "",
  2556         "initial": lambda: "",
  2555         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2557         "check": lambda x: isinstance(x, string_types)
  2556     },
  2558     },
  2557 
  2559 
  2558     "language": {
  2560     "language": {
  2559         "type": SIMPLETYPE,
  2561         "type": SIMPLETYPE,
  2560         "basename": "language",
  2562         "basename": "language",
  2561         "extract": GenerateModelNameExtraction("language", LANGUAGE_model),
  2563         "extract": GenerateModelNameExtraction("language", LANGUAGE_model),
  2562         "facets": STRING_FACETS,
  2564         "facets": STRING_FACETS,
  2563         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2565         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2564         "initial": lambda: "en",
  2566         "initial": lambda: "en",
  2565         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2567         "check": lambda x: isinstance(x, string_types)
  2566     },
  2568     },
  2567 
  2569 
  2568     "ID": {
  2570     "ID": {
  2569         "type": SIMPLETYPE,
  2571         "type": SIMPLETYPE,
  2570         "basename": "ID",
  2572         "basename": "ID",
  2571         "extract": GenerateModelNameExtraction("ID", Name_model),
  2573         "extract": GenerateModelNameExtraction("ID", Name_model),
  2572         "facets": STRING_FACETS,
  2574         "facets": STRING_FACETS,
  2573         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2575         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2574         "initial": lambda: "",
  2576         "initial": lambda: "",
  2575         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2577         "check": lambda x: isinstance(x, string_types)
  2576     },
  2578     },
  2577 
  2579 
  2578     "IDREF": {
  2580     "IDREF": {
  2579         "type": SIMPLETYPE,
  2581         "type": SIMPLETYPE,
  2580         "basename": "IDREF",
  2582         "basename": "IDREF",
  2581         "extract": GenerateModelNameExtraction("IDREF", Name_model),
  2583         "extract": GenerateModelNameExtraction("IDREF", Name_model),
  2582         "facets": STRING_FACETS,
  2584         "facets": STRING_FACETS,
  2583         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2585         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2584         "initial": lambda: "",
  2586         "initial": lambda: "",
  2585         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2587         "check": lambda x: isinstance(x, string_types)
  2586     },
  2588     },
  2587 
  2589 
  2588     "IDREFS": {
  2590     "IDREFS": {
  2589         "type": SIMPLETYPE,
  2591         "type": SIMPLETYPE,
  2590         "basename": "IDREFS",
  2592         "basename": "IDREFS",
  2591         "extract": GenerateModelNameExtraction("IDREFS", Names_model),
  2593         "extract": GenerateModelNameExtraction("IDREFS", Names_model),
  2592         "facets": STRING_FACETS,
  2594         "facets": STRING_FACETS,
  2593         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2595         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2594         "initial": lambda: "",
  2596         "initial": lambda: "",
  2595         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2597         "check": lambda x: isinstance(x, string_types)
  2596     },
  2598     },
  2597 
  2599 
  2598     "ENTITY": {
  2600     "ENTITY": {
  2599         "type": SIMPLETYPE,
  2601         "type": SIMPLETYPE,
  2600         "basename": "ENTITY",
  2602         "basename": "ENTITY",
  2601         "extract": GenerateModelNameExtraction("ENTITY", Name_model),
  2603         "extract": GenerateModelNameExtraction("ENTITY", Name_model),
  2602         "facets": STRING_FACETS,
  2604         "facets": STRING_FACETS,
  2603         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2605         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2604         "initial": lambda: "",
  2606         "initial": lambda: "",
  2605         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2607         "check": lambda x: isinstance(x, string_types)
  2606     },
  2608     },
  2607 
  2609 
  2608     "ENTITIES": {
  2610     "ENTITIES": {
  2609         "type": SIMPLETYPE,
  2611         "type": SIMPLETYPE,
  2610         "basename": "ENTITIES",
  2612         "basename": "ENTITIES",
  2611         "extract": GenerateModelNameExtraction("ENTITIES", Names_model),
  2613         "extract": GenerateModelNameExtraction("ENTITIES", Names_model),
  2612         "facets": STRING_FACETS,
  2614         "facets": STRING_FACETS,
  2613         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2615         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2614         "initial": lambda: "",
  2616         "initial": lambda: "",
  2615         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2617         "check": lambda x: isinstance(x, string_types)
  2616     },
  2618     },
  2617 
  2619 
  2618     "NOTATION": {
  2620     "NOTATION": {
  2619         "type": SIMPLETYPE,
  2621         "type": SIMPLETYPE,
  2620         "basename": "NOTATION",
  2622         "basename": "NOTATION",
  2621         "extract": GenerateModelNameExtraction("NOTATION", Name_model),
  2623         "extract": GenerateModelNameExtraction("NOTATION", Name_model),
  2622         "facets": STRING_FACETS,
  2624         "facets": STRING_FACETS,
  2623         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2625         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2624         "initial": lambda: "",
  2626         "initial": lambda: "",
  2625         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2627         "check": lambda x: isinstance(x, string_types)
  2626     },
  2628     },
  2627 
  2629 
  2628     "NMTOKEN": {
  2630     "NMTOKEN": {
  2629         "type": SIMPLETYPE,
  2631         "type": SIMPLETYPE,
  2630         "basename": "NMTOKEN",
  2632         "basename": "NMTOKEN",
  2631         "extract": GenerateModelNameExtraction("NMTOKEN", NMToken_model),
  2633         "extract": GenerateModelNameExtraction("NMTOKEN", NMToken_model),
  2632         "facets": STRING_FACETS,
  2634         "facets": STRING_FACETS,
  2633         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2635         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2634         "initial": lambda: "",
  2636         "initial": lambda: "",
  2635         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2637         "check": lambda x: isinstance(x, string_types)
  2636     },
  2638     },
  2637 
  2639 
  2638     "NMTOKENS": {
  2640     "NMTOKENS": {
  2639         "type": SIMPLETYPE,
  2641         "type": SIMPLETYPE,
  2640         "basename": "NMTOKENS",
  2642         "basename": "NMTOKENS",
  2641         "extract": GenerateModelNameExtraction("NMTOKENS", NMTokens_model),
  2643         "extract": GenerateModelNameExtraction("NMTOKENS", NMTokens_model),
  2642         "facets": STRING_FACETS,
  2644         "facets": STRING_FACETS,
  2643         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2645         "generate": GenerateSimpleTypeXMLText(lambda x: x),
  2644         "initial": lambda: "",
  2646         "initial": lambda: "",
  2645         "check": lambda x: isinstance(x, (StringType, UnicodeType))
  2647         "check": lambda x: isinstance(x, string_types)
  2646     },
  2648     },
  2647 
  2649 
  2648     # Complex Types
  2650     # Complex Types
  2649     "anyType": {"type": COMPLEXTYPE, "extract": lambda x: None},
  2651     "anyType": {"type": COMPLEXTYPE, "extract": lambda x: None},
  2650 }
  2652 }