Source code for pymerit.utils

"""
Utils
-----

Helper functions 
"""
import json
import yaml 
from .exceptions import *

[docs]def all_subclasses(cls): """ Find all subclasses of a class :rtype: object :return: "Set of subclasses" :param object cls: Baseclass """ return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
def get_metadata_attribute(name): if name is None: raise MeritInvalidAttribute("Invalid attribute: None") @property def prop(self): if name not in self.metadata: raise MeritNoAttribute("Missing attribute: {}".format(name)) return self.metadata[name] @prop.setter def prop(self, value): self.metadata[name] = value return prop
[docs]def new(metadata, mode="json"): """ Create Merit object from dictionary :param dict metadata: Metadata to be loaded """ from pymerit import MeritBase # => If it is a file descriptor, then load it as a json if hasattr(metadata, 'read'): if mode == "json": metadata = json.load(metadata) elif mode == "yaml": metadata = yaml.load(metadata) cls = MeritBase.find_handler_for_dict(metadata) obj = cls() obj.load(metadata) return obj
[docs]def schema_register(cls): """ Register a new handler class :param class cls: Handler class """ from pymerit import MeritBase return MeritBase.schema_register(cls)
[docs]def schema_unregister(cls): """ Unregister a handler class :param class cls: Handler class """ from pymerit import MeritBase return MeritBase.schema_unregister(cls)
[docs]def find_handler(schema): """ Find handler classes :param str schema: Schema to find handler for """ from pymerit import MeritBase return MeritBase.find_handler(schema)