def stmts_from_json(json_in, on_missing_support='handle'): """Get a list of Statements from Statement jsons. In the case of pre-assembled Statements which have `supports` and `supported_by` lists, the uuids will be replaced with references to Statement objects from the json, where possible. The method of handling missing support is controled by the `on_missing_support` key-word argument. Parameters ---------- json_in : iterable[dict] A json list containing json dict representations of INDRA Statements, as produced by the `to_json` methods of subclasses of Statement, or equivalently by `stmts_to_json`. on_missing_support : Optional[str] Handles the behavior when a uuid reference in `supports` or `supported_by` attribute cannot be resolved. This happens because uuids can only be linked to Statements contained in the `json_in` list, and some may be missing if only some of all the Statements from pre- assembly are contained in the list. Options: - *'handle'* : (default) convert unresolved uuids into `Unresolved` Statement objects. - *'ignore'* : Simply omit any uuids that cannot be linked to any Statements in the list. - *'error'* : Raise an error upon hitting an un-linkable uuid. Returns ------- stmts : list[:py:class:`Statement`] A list of INDRA Statements. """ stmts = [] uuid_dict = {} for json_stmt in json_in: try: st = Statement._from_json(json_stmt) except Exception as e: logger.warning("Error creating statement: %s" % e) continue stmts.append(st) uuid_dict[st.uuid] = st for st in stmts: _promote_support(st.supports, uuid_dict, on_missing_support) _promote_support(st.supported_by, uuid_dict, on_missing_support) return stmts
def _from_json(cls, json_dict): path_stmt_json = json_dict.get('path') path_stmt = Statement._from_json(path_stmt_json) ent_constr_json = json_dict.get('entity_constraints') entity_constraints = None if ent_constr_json: entity_constraints = {} for key, value in ent_constr_json.items(): entity_constraints[key] = [Agent._from_json(ec) for ec in value] rel_constr_json = json_dict.get('relationship_constraints') relationship_constraints = None if rel_constr_json: relationship_constraints = {} for key, value in rel_constr_json.items(): relationship_constraints[key] = [ rel_type['type'] for rel_type in value] query = cls(path_stmt, entity_constraints, relationship_constraints) return query
def _get_tests(self): tests = [ Statement._from_json(res['test_json']) for res in self.json_results[1:] ] return tests
def _get_statements(self): serialized_stmts = self.json_results[0]['statements'] return [Statement._from_json(stmt) for stmt in serialized_stmts]