def _get_config(self): """Get the fetcher config element from desired_status """ # The config element for the fetcher is just what desired # status says it is. try: ds_elt = copy.deepcopy(context.get_worker_elt(self.name)) c_elt = ds_elt.find("config") except: c_elt = etree.Element("config") return c_elt
def generate_status(self): """Generate worker status element. Part generated: Everything from desired status is just returned, apart from: - versionInstalled: auto-generated from installed packages """ # The current status of machination is just what desired # status says it is, apart from installedVersion. # Copy the __machination__ worker element as our starting point. w_elt = copy.deepcopy(context.get_worker_elt(self.name)) # Grab the installedVersion element. try: desiv = w_elt.xpath("installedVersion")[0] except IndexError: # No installedVersion, create an empty one for the rest of # the algorithm. desiv = etree.Element("installedVersion") else: w_elt.remove(desiv) # Find installedVersion information geniv = getattr(self, self.get_installed_func())() # Use geniv as a template to build new element. We do this so # that the installedVersion element's children are in the same # order. self.generated_iv = etree.Element("installedVersion") for desb in desiv.xpath("machinationFetcherBundle"): try: genb = geniv.xpath('machinationFetcherBundle[@id="{}"]'.format(desb.get("id")))[0] except IndexError: # No counterpart. pass else: # Found counterpart in geniv, add to generated_iv. self.generated_iv.append(genb) # Now add any elements left in geniv to generated_iv for genb in geniv: self.generated_iv.append(genb) w_elt.append(self.generated_iv) return xmltools.mc14n(w_elt)