import odml """ A module providing general format information and mappings of xml-attributes to their python class equivalents """ class Format(object): _map = {} _rev_map = None def map(self, name): """maps an odml name to a python name""" return self._map.get(name, name) def revmap(self, name): """maps a python name to an odml name""" if self._rev_map is None: # create the reverse map only if requested self._rev_map = {} for k, v in self._map.iteritems(): self._rev_map[v] = k return self._rev_map.get(name, name) def __iter__(self): """iterates each python property name""" for k in self._args: yield self.map(k) def create(self, *args, **kargs): return getattr(odml, self.__class__.__name__)(*args, **kargs) class Value(Format): _name = "value" _args = { 'value': 0, 'uncertainty': 0, 'unit': 0, 'type': 0, 'definition': 0, 'reference': 0, 'filename': 0, 'checksum': 0, 'encoder': 0 } _map = {'type': 'dtype'} class Property(Format): _name = "property" _args = { 'name': 1, 'value': 1, 'definition': 0, 'mapping': 0, 'dependency': 0, 'dependencyvalue': 0 } _map = { 'value': 'values', 'dependencyvalue': 'dependency_value', 'type': 'dtype' } class Section(Format): _name = "section" _args = { 'type': 1, 'name': 0, 'definition': 0, 'reference': 0, 'link': 0, 'repository': 0, 'mapping': 0, 'section': 0, 'include': 0, 'property': 0 } _map = { 'section': 'sections', 'property': 'properties', } class Document(Format): _name = "odML" _args = { 'version': 0, 'author': 0, 'date': 0, 'section': 0, 'repository': 0, } _map = { 'section': 'sections' } Document = Document() Section = Section() Value = Value() Property = Property() __all__ = [Document, Section, Property, Value]