def onfile(self, **kwargs): """ Derives metadata from for a file from 101repo. Called when a file was added or changed, or if the entire repo is walked to re-derive all files. """ self.cleandump(kwargs["relative"]) units = [] for value in self.rules: rule = value["rule"] result = self.match(rule, **kwargs) if result is not None and "metadata" in rule: for metadata in tolist(rule["metadata"]): result["metadata"] = metadata units.append(result.copy()) # TODO fix this dominator code keys = [] for unit in units: metadata = unit["metadata"] if "dominator" in metadata: keys.append(metadata["dominator"]) removals = [] for key in keys: for unit in units: metadata = unit["metadata"] if key in metadata \ and ("dominator" not in metadata or metadata["dominator"] != key): removals.append(unit) survivals = [] for unit in units: if not unit in removals: survivals.append(unit) units = survivals if units: incremental101.writejson(kwargs["target"], units) self.matches[kwargs["relative"]] = units else: incremental101.deletefile(kwargs["target"])
def doline(*args): inc.outstream = StringIO() inc.deletefile(*args) return inc.outstream.getvalue()
def ondelete(self, target, relative, **kwargs): """ Removes all traces of a deleted primary resource created by this phase. """ incremental101.deletefile(target) self.cleandump(relative)