def create_message(self, describe=False): """ Creates a basic empty Message object with basic boilerplate metadata :return: Response object with execution information and the new message object inside the data envelope :rtype: Response """ # Internal documentation setup #allowable_parameters = { 'action': { 'None' } } allowable_parameters = { 'dsl_command': '`create_message()`' } # can't get this name at run-time, need to manually put it in per https://www.python.org/dev/peps/pep-3130/ if describe: allowable_parameters[ 'brief_description'] = """The `create_message` method creates a basic empty Message object with basic boilerplate metadata such as reasoner_id, schema_version, etc. filled in. This DSL command takes no arguments""" return allowable_parameters #### Define a default response response = Response() self.response = response #### Create the top-level message response.info("Creating an empty template ARAX Message") message = Message() self.message = message #### Fill it with default information message.id = None message.type = "translator_reasoner_message" message.reasoner_id = "ARAX" message.tool_version = RTXConfiguration().version message.schema_version = "0.9.3" message.message_code = "OK" message.code_description = "Created empty template Message" message.context = "https://raw.githubusercontent.com/biolink/biolink-model/master/context.jsonld" #### Why is this _datetime ?? FIXME message._datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S") #### Create an empty master knowledge graph message.knowledge_graph = KnowledgeGraph() message.knowledge_graph.nodes = [] message.knowledge_graph.edges = [] #### Create an empty query graph message.query_graph = QueryGraph() message.query_graph.nodes = [] message.query_graph.edges = [] #### Create empty results message.results = [] message.n_results = 0 #### Return the response response.data['message'] = message return response
def from_dict(self, message): if str(message.__class__ ) != "<class 'swagger_server.models.message.Message'>": message = Message().from_dict(message) message.query_graph = QueryGraph().from_dict(message.query_graph) message.knowledge_graph = KnowledgeGraph().from_dict( message.knowledge_graph) #### This is an unfortunate hack that fixes qnode.curie entries #### Officially a curie can be a str or a list. But Swagger 2.0 only permits one type and we set it to str #### so when it gets converted from_dict, the list gets converted to a str because that's its type #### Here we force it back. This should no longer be needed when we are properly on OpenAPI 3.0 if message.query_graph is not None and message.query_graph.nodes is not None: for qnode in message.query_graph.nodes: if qnode.curie is not None and isinstance(qnode.curie, str): if qnode.curie[0:2] == "['": try: qnode.curie = ast.literal_eval(qnode.curie) except: pass #new_nodes = [] #for qnode in message.query_graph.nodes: # print(type(qnode)) # new_nodes.append(QNode().from_dict(qnode)) #message.query_graph.nodes = new_nodes #for qedge in message.query_graph.edges: # new_edges.append(QEdge().from_dict(qedge)) #message.query_graph.edges = new_edges if message.results is not None: for result in message.results: if result.result_graph is not None: #eprint(str(result.result_graph.__class__)) if str( result.result_graph.__class__ ) != "<class 'swagger_server.models.knowledge_graph.KnowledgeGraph'>": result.result_graph = KnowledgeGraph().from_dict( result.result_graph) return message