def __new__(mcs, name, bases, new_attrs): """Create a new class. Args: mcs: The metaclass. name: The name of the class. bases: List of base classes from which mcs inherits. new_attrs: The class attribute dictionary. """ if 'rest_entity_path' not in new_attrs: new_attrs['rest_entity_path'] = util.underscore(name) return type.__new__(mcs, name, bases, new_attrs)
def _find_class_for(cls, element_name=None, class_name=None, create_missing=True): """Look in the parent modules for classes matching the element name. One or both of element/class name must be specified. Args: element_name: The name of the element type. class_name: The class name of the element type. create_missing: Whether classes should be auto-created if no existing match is found. Returns: A Resource class. """ if not element_name and not class_name: raise Error('One of element_name,class_name must be specified.') elif not element_name: element_name = util.underscore(class_name) elif not class_name: class_name = util.camelize(element_name) module_path = cls.__module__.split('.') for depth in range(len(module_path), 0, -1): try: __import__('.'.join(module_path[:depth])) module = sys.modules['.'.join(module_path[:depth])] except ImportError: continue try: klass = getattr(module, class_name) return klass except AttributeError: try: __import__('.'.join([module.__name__, element_name])) submodule = sys.modules['.'.join( [module.__name__, element_name])] except ImportError: continue try: klass = getattr(submodule, class_name) return klass except AttributeError: continue # If we made it this far, no such class was found if create_missing: return new.classobj(class_name, (cls, ), {'__module__': cls.__module__})
def _find_class_for(cls, element_name=None, class_name=None, create_missing=True): """Look in the parent modules for classes matching the element name. One or both of element/class name must be specified. Args: element_name: The name of the element type. class_name: The class name of the element type. create_missing: Whether classes should be auto-created if no existing match is found. Returns: A Resource class. """ if not element_name and not class_name: raise Error('One of element_name,class_name must be specified.') elif not element_name: element_name = util.underscore(class_name) elif not class_name: class_name = util.camelize(element_name) module_path = cls.__module__.split('.') for depth in range(len(module_path), 0, -1): try: __import__('.'.join(module_path[:depth])) module = sys.modules['.'.join(module_path[:depth])] except ImportError: continue try: klass = getattr(module, class_name) return klass except AttributeError: try: __import__('.'.join([module.__name__, element_name])) submodule = sys.modules['.'.join([module.__name__, element_name])] except ImportError: continue try: klass = getattr(submodule, class_name) return klass except AttributeError: continue # If we made it this far, no such class was found if create_missing: return new.classobj(class_name, (cls,), {'__module__': cls.__module__})
def from_xml(self, xml_string): """Grab errors from an XML response. Args: xml_string: An xml errors object (e.g. '<errors></errors>') Returns: None """ attribute_keys = self.base.attributes.keys() print xml_string try: messages = util.xml_to_dict(xml_string)['errors'][0] if not isinstance(messages, list): messages = [messages] except util.Error: messages = [] for message in messages: attr_name = message.split()[0] key = util.underscore(attr_name) if key in attribute_keys: self.add(key, message[len(attr_name) + 1:]) else: self.add_to_base(message)
def __new__(mcs, name, bases, new_attrs): """Create a new class. Args: mcs: The metaclass. name: The name of the class. bases: List of base classes from which mcs inherits. new_attrs: The class attribute dictionary. """ if '_singular' not in new_attrs or not new_attrs['_singular']: new_attrs['_singular'] = util.underscore(name) if '_plural' not in new_attrs or not new_attrs['_plural']: new_attrs['_plural'] = util.pluralize(new_attrs['_singular']) klass = type.__new__(mcs, name, bases, new_attrs) # if _site is defined, use the site property to ensure that user # and password are properly initialized. if '_site' in new_attrs: klass.site = new_attrs['_site'] return klass
def from_xml(self, xml_string): """Grab errors from an XML response. Args: xml_string: An xml errors object (e.g. '<errors></errors>') Returns: None """ attribute_keys = self.base.attributes.keys() print xml_string try: messages = util.xml_to_dict( xml_string)['errors'][0] if not isinstance(messages, list): messages = [messages] except util.Error: messages = [] for message in messages: attr_name = message.split()[0] key = util.underscore(attr_name) if key in attribute_keys: self.add(key, message[len(attr_name)+1:]) else: self.add_to_base(message)