def get_fw_by_id(self, dbname, fw_id): """ Given a Firework id, give back a Firework object :param fw_id: Firework id (int) :return: Firework object """ return Firework.from_dict(self.get_fw_dict_by_id(fw_id))
def from_dict(cls, m_dict): """ Return Workflow from its dict representation. Args: m_dict (dict): either a Workflow dict or a Firework dict Returns: SwarmFlow """ if 'fws' in m_dict: created_on = m_dict.get('created_on') updated_on = m_dict.get('updated_on') return SwarmFlow([Firework.from_dict(f) for f in m_dict['fws']], Workflow.Links.from_dict(m_dict['links']), m_dict.get('name'), m_dict['metadata'], created_on, updated_on) else: return SwarmFlow.from_Firework(Firework.from_dict(m_dict))
def partial_fw(self): if not self._fw: fields = list(self.db_fields) + list(self.db_launch_fields) data = self._fwc.find_one({'fw_id': self.fw_id}, projection=fields) launch_data = {} # move some data to separate launch dict for key in self.db_launch_fields: launch_data[key] = data[key] del data[key] self._lids = launch_data self._fw = Firework.from_dict(data) return self._fw
def _find_fw_structure(firework): """ Look for the final geometry in the spec/tasks of a Firework. Args: firework (Firework): Firework in which to look for the geometry. Returns: Last specified geometry in the Firework and its parents. """ structure = None if "final_geometry" in firework.spec: structure = firework.spec["final_geometry"] else: for t in firework.tasks: if "WriteVaspFromIOSet" in t["_fw_name"]: try: structure = t["structure"] break except KeyError: pass try: structure = t["vasp_input_set"].structure break except TypeError: pass except AttributeError: pass try: structure = _find_fw_structure( Firework.from_dict(t["parents"]) ) except KeyError: pass if issubclass(structure.__class__, Structure): return structure else: raise ValueError("Failed to extract structure from Firework.")
def get_fw_by_id(self, fw_id): """ Given a Firework id, give back a Firework object :param fw_id: Firework id (int) :return: Firework object """ fw_dict = self.fireworks.find_one({'fw_id': fw_id}) if not fw_dict: raise ValueError('No Firework exists with id: {}'.format(fw_id)) # recreate launches from the launch collection fw_dict['launches'] = list(self.launches.find( {'launch_id': {"$in": fw_dict['launches']}})) fw_dict['archived_launches'] = list(self.launches.find( {'launch_id': {"$in": fw_dict['archived_launches']}})) return Firework.from_dict(fw_dict)