Ejemplo n.º 1
0
    def get(self, id, id2, id3):
        """Get a specific process

        This method allows getting a specific process

        Parameters
        ----------
        id: str
            project id
        id2: str
            pipeline id
        id3: str
            process id

        Returns
        -------
        list: list with the process object
        """

        processURI = dbconAg.createURI(namespace=localNSpace + "projects/",
                                       localname=str(id) + "/pipelines/" +
                                       str(id2) + "/processes/" + str(id3))

        queryString = "describe " + str(processURI)
        describeQuery = dbconAg.prepareGraphQuery(QueryLanguage.SPARQL,
                                                  queryString)
        result = describeQuery.evaluate()
        jsonResult2 = parseAgraphStatementsRes(result)

        return jsonResult2, 200
Ejemplo n.º 2
0
    def put(self, id, id2, id3):
        """Change a specific output

        (DEPRECATED)

        Parameters
        ----------
        id
        id2
        id3

        Returns
        -------

        """

        args = process_put_output_parser.parse_args()

        output_prop_to_type = {
            "run_info": "NGS_0000092",
            "run_output": "NGS_0000093",
            "run_stats": "NGS_0000094",
            "log_file": "NGS_0000096",
            "status": "NGS_0000097"
        }

        try:
            processURI = dbconAg.createURI(namespace=localNSpace + "projects/",
                                           localname=str(id) + "/pipelines/" +
                                           str(id2) + "/processes/" + str(id3))

            # get output URI from process
            hasOutput = dbconAg.createURI(namespace=obo,
                                          localname="RO_0002234")
            statements = dbconAg.getStatements(processURI, hasOutput, None)
            outputURI = parseAgraphStatementsRes(statements)
            statements.close()

            outputURI = dbconAg.createURI(outputURI[0]['obj'])

            runInfo = dbconAg.createLiteral((args.property),
                                            datatype=XMLSchema.STRING)
            runInfoProp = dbconAg.createURI(
                namespace=obo, localname=output_prop_to_type[args.property])

            dbconAg.remove(outputURI, runInfoProp, None)

            # add outputs paths to process
            stmt1 = dbconAg.createStatement(outputURI, runInfoProp, runInfo)

            # send to allegro
            dbconAg.add(stmt1)

            return 202
        except Exception as e:
            print e
            return 404
Ejemplo n.º 3
0
    def post(self):
        """Add protocol to workflow

        This method adds protocols to workflows. It requires the protocols
        identifiers and the id of the workflow.

        Returns
        -------
        code: 201 if successfully added.
        """

        args = workflow_post_parser.parse_args()

        protocol_ids = args.protocol_ids.split(',')
        workflow_id = args.workflow_id

        for p_id in protocol_ids:

            protocolURI = dbconAg.createURI(namespace=localNSpace,
                                            localname="protocols/" + str(p_id))

            hasStep = dbconAg.createURI(namespace=obo, localname="NGS_0000078")
            workflowURI = dbconAg.createURI(namespace=localNSpace,
                                            localname="workflows/" +
                                            str(workflow_id))

            statements = dbconAg.getStatements(workflowURI, hasStep, None)
            jsonResult = parseAgraphStatementsRes(statements)
            statements.close()
            numberOfProtocols = len(jsonResult)

            protocolStepType = dbconAg.createURI(namespace=obo,
                                                 localname="NGS_0000075")
            protocStepUri = dbconAg.createURI(namespace=localNSpace,
                                              localname="workflows/" +
                                              str(workflow_id) + "/step/" +
                                              str(numberOfProtocols + 1))

            indexProp = dbconAg.createURI(namespace=obo,
                                          localname="NGS_0000081")
            indexInt = dbconAg.createLiteral((numberOfProtocols + 1),
                                             datatype=XMLSchema.INT)

            hasProtocolRel = dbconAg.createURI(namespace=obo,
                                               localname="NGS_0000077")

            # add step + index
            dbconAg.add(protocStepUri, RDF.TYPE, protocolStepType)
            stmt1 = dbconAg.createStatement(protocStepUri, indexProp, indexInt)
            dbconAg.add(stmt1)
            # link workflow to step
            dbconAg.add(workflowURI, hasStep, protocStepUri)
            # add protocol + link to step
            dbconAg.add(protocStepUri, hasProtocolRel, protocolURI)

        return 201
Ejemplo n.º 4
0
    def get(self):
        """Get strains

        Get strains available o+in the NGSOnto database

        Returns
        -------
        list: list of the available strains
        """

        strainType = dbconAg.createURI(namespace=obo, localname="OBI_0000747")
        statements = dbconAg.getStatements(None, RDF.TYPE, strainType)
        strainsAg = parseAgraphStatementsRes(statements)
        statements.close()

        return strainsAg, 200
Ejemplo n.º 5
0
    def get(self):
        """Get projects

        This method allows getting all the available projects.

        Returns
        -------
        list: list of projects
        """

        # Agraph
        studyType = dbconAg.createURI(namespace=obo, localname="OBI_0000066")
        statements = dbconAg.getStatements(None, RDF.TYPE, studyType)
        jsonResult = parseAgraphStatementsRes(statements)
        statements.close()

        return jsonResult, 200
Ejemplo n.º 6
0
    def get(self):
        """Get users

        This method allows getting a list of the available users from the
        NGSOnto database

        Returns
        -------
        list: list of the available users
        """

        # Agraph
        userType = dbconAg.createURI(namespace=dcterms, localname="Agent")
        statements = dbconAg.getStatements(None, RDF.TYPE, userType)
        usersAg=parseAgraphStatementsRes(statements)
        statements.close()

        return usersAg
Ejemplo n.º 7
0
    def get(self):
        """Projects from user

        This method allows getting all the available projects of a given user.
        It requires login.

        Returns
        -------
        list: list of the available projects from that user.
        """

        id = current_user.id
        UserURI = dbconAg.createURI(namespace=localNSpace,
                                    localname="users/" + str(id))
        studyBelong = dbconAg.createURI(namespace=obo, localname="NGS_0000015")
        statements = dbconAg.getStatements(None, studyBelong, UserURI)
        studiesAg = parseAgraphStatementsRes(statements)
        statements.close()

        return studiesAg, 200
Ejemplo n.º 8
0
    def get(self, id):
        """Get specific project

        This method allows getting a specific projct from the NGSOnto database

        Parameters
        ----------
        id: str
            project identifier

        Returns
        -------
        list: list with the query result
        """

        # Agraph
        studyURI = dbconAg.createURI(namespace=localNSpace + "projects/",
                                     localname=str(id))
        statements = dbconAg.getStatements(studyURI, None, None)
        studyAg = parseAgraphStatementsRes(statements)
        statements.close()

        return studyAg, 200
    def get(self, id):
        """Get NGSOnto pipelines

        This method allows getting the list of pipelines associated witha
        given project.

        Parameters
        ----------
        id: str
            project identifier

        Returns
        -------
        list: list of pipelines
        """

        studyURI = dbconAg.createURI(namespace=localNSpace + "projects/",
                                     localname=str(id))
        hasPart = dbconAg.createURI(namespace=obo, localname="OBI_0000471")
        statements = dbconAg.getStatements(studyURI, hasPart, None)
        jsonResult = parseAgraphStatementsRes(statements)
        statements.close()

        return jsonResult, 200
Ejemplo n.º 10
0
    def get(self, id):
        """Get user

        This method allows getting a specific user available at the NGSOnto
        database.

        Parameters
        ----------
        id: str
            user identifier

        Returns
        -------

        """

        # Agraph
        UserURI = dbconAg.createURI(namespace=localNSpace,
                                    localname="users/"+str(id))
        statements = dbconAg.getStatements(UserURI, None, None)
        usersAg=parseAgraphStatementsRes(statements)
        statements.close()

        return usersAg
Ejemplo n.º 11
0
    def post(self, id, id2, id3):
        """Add output to process

        This method allows adding logs, run information, status and
        statistics to the NGSOnto entry.

        Parameters
        ----------
        id: str
            project identifier
        id2: str
            pipeline identifier
        id3: str
            process identifier

        Returns
        -------
        code: status code of the request
        """

        args = process_post_output_parser.parse_args()
        try:
            processURI = dbconAg.createURI(namespace=localNSpace + "projects/",
                                           localname=str(id) + "/pipelines/" +
                                           str(id2) + "/processes/" + str(id3))

            # get output URI from process
            hasOutput = dbconAg.createURI(namespace=obo,
                                          localname="RO_0002234")
            statements = dbconAg.getStatements(processURI, hasOutput, None)
            outputURI = parseAgraphStatementsRes(statements)
            statements.close()

            outputURI = dbconAg.createURI(outputURI[0]['obj'])

            runInfo = dbconAg.createLiteral((args.run_info),
                                            datatype=XMLSchema.STRING)
            runInfoProp = dbconAg.createURI(namespace=obo,
                                            localname="NGS_0000092")

            runStats = dbconAg.createLiteral((args.output),
                                             datatype=XMLSchema.STRING)
            runStatsProp = dbconAg.createURI(namespace=obo,
                                             localname="NGS_0000093")

            runFile = dbconAg.createLiteral((args.run_stats),
                                            datatype=XMLSchema.STRING)
            runFileProp = dbconAg.createURI(namespace=obo,
                                            localname="NGS_0000094")

            runStatus = dbconAg.createLiteral((args.status),
                                              datatype=XMLSchema.STRING)
            runStatusProp = dbconAg.createURI(namespace=obo,
                                              localname="NGS_0000097")

            dbconAg.remove(outputURI, runInfoProp, None)
            dbconAg.remove(outputURI, runStatsProp, None)
            dbconAg.remove(outputURI, runFileProp, None)
            dbconAg.remove(outputURI, runStatusProp, None)

            # add outputs paths to process
            stmt1 = dbconAg.createStatement(outputURI, runInfoProp, runInfo)
            stmt2 = dbconAg.createStatement(outputURI, runStatsProp, runStats)
            stmt3 = dbconAg.createStatement(outputURI, runFileProp, runFile)
            stmt4 = dbconAg.createStatement(processURI, runStatusProp,
                                            runStatus)

            # send to allegro
            dbconAg.add(stmt1)
            dbconAg.add(stmt2)
            dbconAg.add(stmt3)
            dbconAg.add(stmt4)
            return 202
        except Exception as e:
            print e
            return 404
Ejemplo n.º 12
0
    def post(self, id, id2):
        """Add processes to pipeline

        This method allows adding processes to a pipeline by linking the
        protocol ids with the processes.
        It requires the project id, pipeline id, protocol ids and strain
        identifier.

        Parameters
        ----------
        id: str
            project identifier
        id2: str
            pipeline identifier

        Returns
        -------
        list: list of processes identifiers
        """

        args = process_post_parser.parse_args()

        pipelineStr = localNSpace + "projects/" + str(
            id) + "/pipelines/" + str(id2)

        # get number of processes already mapped on the pipeline
        hasPart = dbconAg.createURI(namespace=obo, localname="BFO_0000051")
        pipelineURI = dbconAg.createURI(pipelineStr)
        statements = dbconAg.getStatements(pipelineURI, hasPart, None)
        jsonResult = parseAgraphStatementsRes(statements)
        statements.close()

        numberOfProcesses = len(jsonResult)

        print "Request 1", str(id2)

        # get all ordered workflows from pipeline
        queryString = "SELECT (str(?proc) " \
                      "as ?StrProc) (str(?index) as ?StrIndex)" \
                      " WHERE{<"+pipelineStr+"> obo:BFO_0000051 ?proc." \
                                             " ?proc obo:NGS_0000081 ?index.}"

        tupleQuery = dbconAg.prepareTupleQuery(QueryLanguage.SPARQL,
                                               queryString)
        result = tupleQuery.evaluate()

        procJsonResult = parseAgraphQueryRes(result, ["StrProc", "StrIndex"])

        result.close()

        numberOfProcesses = len(procJsonResult)

        print "Request 2", str(id2)

        # get all ordered workflows from pipeline
        queryString = "SELECT ?execStep ?stepIndex" \
                      " ?workflowURI ?execStep  " \
                      "WHERE {<"+pipelineStr+"> obo:NGS_0000076 ?execStep." \
                                             " ?execStep obo:NGS_0000079" \
                                             " ?workflowURI; obo:NGS_0000081" \
                                             " ?stepIndex3} ORDER BY" \
                                             " ASC(?stepIndex)"

        tupleQuery = dbconAg.prepareTupleQuery(QueryLanguage.SPARQL,
                                               queryString)
        result = tupleQuery.evaluate()
        jsonResult = parseAgraphQueryRes(
            result, ["stepIndex", "workflowURI", "execStep"])
        result.close()

        print "Request 3", str(id2)

        # get all protocols per workflow
        listOrderedProtocolsURI = []
        listOrderedProcessTypes = []
        listOrderedMessageTypes = []

        for result in jsonResult:
            workflowURI = result["workflowURI"]
            queryString = "SELECT ?protocStep ?stepIndex" \
                          " ?protocolURI ?type  " \
                          "WHERE {"+workflowURI+\
                          " obo:NGS_0000078 ?protocStep. ?protocStep" \
                          " obo:NGS_0000077 ?protocolURI; obo:NGS_0000081" \
                          " ?stepIndex. ?protocolURI a ?type. ?type rdfs:label"\
                          " ?typelabel.} ORDER BY ASC(?stepIndex)"

            tupleQuery = dbconAg.prepareTupleQuery(QueryLanguage.SPARQL,
                                                   queryString)
            result3 = tupleQuery.evaluate()
            jsonResult2 = parseAgraphQueryRes(
                result3, ["stepIndex", "protocolURI", "type"])
            result3.close()

            for results in jsonResult2:
                for k, v in protocolsTypes.items():
                    if v in results["type"]:
                        listOrderedProtocolsURI.append(results["protocolURI"])
                        listOrderedProcessTypes.append(processTypes[k])
                        listOrderedMessageTypes.append(processMessages[k])

        print "Request 4 all protocols", str(id2)

        # Starts at 500 in case does not exists
        messageid = 500

        # TEST query string
        queryString = """SELECT ?index {?message rdf:type/rdfs:subClassOf*
         obo:NGS_0000061; obo:NGS_0000081 ?index} order by 
         desc(?index) limit 1"""

        tupleQuery = dbconAg.prepareTupleQuery(QueryLanguage.SPARQL,
                                               queryString)
        result = tupleQuery.evaluate()

        for bindingSet in result:
            messageid = int(str(bindingSet[0]).split('"')[1])

        print "Request 5", str(id2)

        result.close()

        if args.strain_id != "null":
            strainid = args.strain_id
            rpipid = args.real_pipeline_id
            ppipid = rpipid
            ppropid = id
            pprocid = 0

        else:
            ppipid = args.parent_pipeline_id
            ppropid = args.parent_project_id
            pprocid = args.parent_process_id
            rpipid = args.real_pipeline_id

        if ppipid == rpipid:
            for proc_json in procJsonResult:
                if int(proc_json["StrIndex"].replace('"', '')) > int(pprocid):
                    todelUri = dbconAg.createURI(
                        "<" + proc_json["StrProc"].replace('"', "") + ">")

                    hasOutputRel = dbconAg.createURI(namespace=obo,
                                                     localname="RO_0002234")
                    statements = dbconAg.getStatements(todelUri, hasOutputRel,
                                                       None)
                    jsonResult = parseAgraphStatementsRes(statements)
                    statements.close()

                    todelUri2 = jsonResult[0]["obj"]
                    todelUri2 = dbconAg.createURI(todelUri2)

                    dbconAg.remove(todelUri2, None, None)

                    dbconAg.remove(todelUri, None, None)
                    dbconAg.remove(None, None, todelUri)

                    statements = dbconAg.getStatements(todelUri, None, None)
                    jsonResult = parseAgraphStatementsRes(statements)
                    statements.close()

                    numberOfProcesses -= 1

        print "Request 6", str(id2)

        try:
            addedProcesses = numberOfProcesses
            hasOutputRel = dbconAg.createURI(namespace=obo,
                                             localname="RO_0002234")
            hasInputRel = dbconAg.createURI(namespace=obo,
                                            localname="RO_0002233")
            index = dbconAg.createURI(namespace=obo, localname="NGS_0000081")
            isRunOfProtocl = dbconAg.createURI(namespace=obo,
                                               localname="NGS_0000091")

            # prev process to link (strain URI most of times)
            if args.strain_id != "null":
                prevMessageURI = dbconAg.createURI(
                    namespace=localNSpace,
                    localname="strains/strain_" + str(strainid))

                strainTypeURI = dbconAg.createURI(
                    'http://rdf.ebi.ac.uk/terms/biosd/Sample')
                dbconAg.add(prevMessageURI, RDF.TYPE, strainTypeURI)

            processes_ids = []
            processid = addedProcesses

            # Case new run
            while addedProcesses < len(listOrderedProcessTypes):
                processid += 1
                messageid += 1
                processURI = dbconAg.createURI(
                    namespace=localNSpace + "projects/",
                    localname=str(id) + "/pipelines/" + str(id2) +
                    "/processes/" + str(processid))

                messageURI = dbconAg.createURI(
                    namespace=localNSpace + "projects/",
                    localname=str(id) + "/pipelines/" + str(id2) +
                    "/messages/" + str(messageid))
                processTypeURI = dbconAg.createURI(
                    listOrderedProcessTypes[addedProcesses])
                messageTypeURI = dbconAg.createURI(
                    listOrderedMessageTypes[addedProcesses])
                protocolTypeURI = dbconAg.createURI(
                    listOrderedProtocolsURI[addedProcesses])
                indexProp = dbconAg.createURI(namespace=obo,
                                              localname="NGS_0000081")
                indexInt = dbconAg.createLiteral((addedProcesses + 1),
                                                 datatype=XMLSchema.INT)
                messageindexInt = dbconAg.createLiteral((messageid),
                                                        datatype=XMLSchema.INT)

                # get specific process input type and uri

                queryString = """SELECT (STR(?out) as ?messageURI) WHERE
                 {<"""+localNSpace+"projects/"+str(id)+"/pipelines/"+\
                              str(rpipid)+"""> obo:BFO_0000051  ?proc. ?proc
                               obo:NGS_0000081 ?index; obo:RO_0002234 ?out}
                               order by desc(?out)"""

                print queryString

                tupleQuery = dbconAg.prepareTupleQuery(QueryLanguage.SPARQL,
                                                       queryString)
                result5 = tupleQuery.evaluate()
                jsonResult2 = parseAgraphQueryRes(result5, ["messageURI"])
                result5.close()

                for results in jsonResult2:
                    prevMessageURI = dbconAg.createURI(
                        results["messageURI"].replace('"', ''))
                    break

                # add process and link to pipeline
                dbconAg.add(processURI, RDF.TYPE, processTypeURI)
                dbconAg.add(pipelineURI, hasPart, processURI)
                stmt1 = dbconAg.createStatement(processURI, indexProp,
                                                indexInt)
                dbconAg.add(stmt1)

                # create output and input/output link messages to process
                dbconAg.add(messageURI, RDF.TYPE, messageTypeURI)
                dbconAg.add(messageURI, index, messageindexInt)
                dbconAg.add(processURI, hasOutputRel, messageURI)
                dbconAg.add(processURI, isRunOfProtocl, protocolTypeURI)
                dbconAg.add(processURI, hasInputRel, prevMessageURI)

                # prevMessageURI=messageURI
                addedProcesses += 1
                processes_ids.append(processid)

            print "Request 7", str(id2)

            return processes_ids
        except Exception as e:
            print e
            return 404