Esempio n. 1
0
class FileMetadataWrapper(object):
    """
    Wraps a CDMS file object to track provenance of variables
    """
    def __init__(self, source):
        self.source = source
        self.vars = WeakList()

    def __call__(self, *args, **kwargs):
        # Retrieve a transient variable from source
        var = self.source(*args, **kwargs)
        v = VariableMetadataWrapper(var, self, args, kwargs, operation=self.__call__)
        self.vars.append(v)
        return v

    def __getitem__(self, *args):
        var = self.source.__getitem__(*args)
        v = VariableMetadataWrapper(var, self, args, operation=self.__getitem__)
        self.vars.append(v)
        return v

    def __getattribute__(self, name):
        if name not in ("source", "vars"):
            s = super(FileMetadataWrapper, self).__getattribute__("source")
            return getattr(s, name)
        else:
            return super(FileMetadataWrapper, self).__getattribute__(name)

    def __setattr__(self, name, value):
        if name in ("source", "vars"):
            super(FileMetadataWrapper, self).__setattr__(name, value)
            return
        setattr(self.source, name, value)
Esempio n. 2
0
 def __init__(self, source):
     self.source = source
     self.vars = WeakList()