def new(cls, *args, **kwargs): """Create a new object.""" if not issubclass(cls, ComplexType): raise TypeError, "Do not know how to construct %s" % cls schema = get_xml_schema() element = compat.find(schema, '{%s}element[@type="%s"]' % (_ns_xml_schema, cls.__name__)) if element is not None: factory = getattr(_schema, element.attrib["name"]) else: factory = cls obj = factory(*args, **kwargs) return obj
return False return True get_xml_schema() module = globals() for sym in dir(_schema): cls = getattr(_schema, sym) if not isinstance(cls, type) or not issubclass(cls, ComplexType): continue name = cls.__name__ bases = (cls,) members = {} if cls in (BaseResource, BaseResources): continue elif issubclass(cls, BaseResources): bases += (CollectionMixin,) element = compat.find( _xml_schema, '{%s}complexType[@name="%s"]//{%s}element' % (_ns_xml_schema, name, _ns_xml_schema) ) if element is None: continue members["_resource"] = element.attrib["ref"] mixin = CollectionMixin elif issubclass(cls, BaseResource): bases += (ResourceMixin,) derived = type(name, bases, members) cls._SetSupersedingClass(derived) module[name] = derived