def __getattr__()

in automation/symbols-generation/symbolstore.py [0:0]


    def __getattr__(self, name):
        """__getattr__ is only called for attributes that are not set on self,
        so setting self.[attr] will prevent future calls to the GetRoot,
        GetRevision, and GetFilename methods. We don't set the values on
        failure on the off chance that a future call might succeed."""

        if name == "root":
            root = self.GetRoot()
            if root:
                self.root = root
            return root

        elif name == "clean_root":
            clean_root = self.GetCleanRoot()
            if clean_root:
                self.clean_root = clean_root
            return clean_root

        elif name == "revision":
            revision = self.GetRevision()
            if revision:
                self.revision = revision
            return revision

        elif name == "filename":
            filename = self.GetFilename()
            if filename:
                self.filename = filename
            return filename

        raise AttributeError