Ejemplo n.º 1
0
    def public_url(self):
        """ Generate a publicly visible URL for this artifact. """

        return create_url(
            f"{self.pipeline_run.pipeline.uuid}/{self.pipeline_run.uuid}/{self.uuid}-{quote(self.name)}",
            self.name,
        )
Ejemplo n.º 2
0
def fetch_pipeline_run(
    organization_uuid, organization_pipeline_uuid, organization_pipeline_run_uuid
):
    """Find an OrganizationPipelineRun for a pipline."""
    org_pipeline = find_organization_pipeline(
        organization_uuid, organization_pipeline_uuid
    )

    org_pipeline_run = next(
        filter(
            lambda r: r.uuid == organization_pipeline_run_uuid,
            org_pipeline.organization_pipeline_runs
        )
    )

    response = requests.get(
        f"{current_app.config[WORKFLOW_HOSTNAME]}/v1/pipelines/{org_pipeline.pipeline_uuid}/runs/{org_pipeline_run.pipeline_run_uuid}",
        headers={
            "Content-Type": "application/json",
            ROLES_KEY: current_app.config[WORKFLOW_API_TOKEN],
        },
    )

    try:
        pipeline_run = response.json()
        response.raise_for_status()

        # update with org uuid
        opr = find_organization_pipeline_run(
            org_pipeline.id, str(pipeline_run.get("uuid"))
        )
        pipeline_run["uuid"] = opr.uuid
        org_pipeline_input_files = find_organization_pipeline_input_files(
            org_pipeline.id
        )
        inputs = []

        # generate download urls and add uuid
        for opf in org_pipeline_input_files:
            if opf.organization_pipeline_run_id == opr.id:
                sname = quote(opf.name)
                url = create_url(
                    f"{organization_pipeline_uuid}/{opf.uuid}-{sname}", sname
                )
                inputs.append({"url": url, "name": opf.name, "uuid": opf.uuid})

        pipeline_run["inputs"] = inputs

        return pipeline_run
    except ValueError as value_error:
        raise HTTPError("Non JSON payload returned") from value_error
    except HTTPError as http_error:
        raise ValueError(pipeline_run) from http_error
Ejemplo n.º 3
0
def create_pipeline_run(organization_uuid, pipeline_uuid, request_json):
    """Creates OrganizationPipelineRuns for a pipline."""
    org_pipeline = find_organization_pipeline(organization_uuid, pipeline_uuid)
    input_file_uuids = request_json.get("inputs", [])

    if not org_pipeline:
        raise ValueError({"message": "organizational_pipeline_uuid not found"})

    org_pipeline_input_files = search_organization_pipeline_input_files(
        org_pipeline.id, input_file_uuids
    )

    new_pipeline_run = OrganizationPipelineRun(
        organization_pipeline_id=org_pipeline.id,
        status_update_token=uuid.uuid4().hex,
        status_update_token_expires_at=datetime.now() + timedelta(days=7),
        share_token=uuid.uuid4().hex,
        share_password_hash=None,
        share_password_salt=None,
    )

    db.session.add(new_pipeline_run)
    db.session.flush()

    new_pipeline = {"inputs": []}

    for opf in org_pipeline_input_files:
        sname = quote(opf.name)
        url = create_url(f"{pipeline_uuid}/{opf.uuid}-{sname}", sname)
        new_pipeline["inputs"].append({"url": url, "name": opf.name})

    response = requests.post(
        f"{current_app.config[WORKFLOW_HOSTNAME]}/v1/pipelines/{org_pipeline.pipeline_uuid}/runs",
        headers={
            "Content-Type": "application/json",
            ROLES_KEY: current_app.config[WORKFLOW_API_TOKEN],
        },
        json=new_pipeline,
    )

    try:
        created_pipeline = response.json()
        response.raise_for_status()

        new_pipeline_run.uuid = (
            new_pipeline_run.pipeline_run_uuid
        ) = created_pipeline.get("uuid")

        db.session.add(new_pipeline_run)

        for opf in org_pipeline_input_files:
            opf.organization_pipeline_run_id = new_pipeline_run.id
            db.session.add(opf)

        db.session.commit()

        created_pipeline.update(
            {
                "uuid": new_pipeline_run.uuid,
            }
        )

        return created_pipeline
    except ValueError as value_error:
        raise HTTPError("Non JSON payload returned") from value_error
    except HTTPError as http_error:
        raise ValueError(created_pipeline) from http_error