ccp.docs/source/methods_development/02.1_basic_docker_image.md

4.8 KiB

Implementation of simple algorithms

Simple algorithms can be implemented using a generic unix docker image, and totally defined in the json script.

Examples of this algorithms are parametric curl or wget operations on external APIs, shell for file processing, etc

Default ccpimage for simple algorithms

To implement methods that doesn't need any particular library or configuration, we can leave empty the ccpimage value, to use a basic Linux Docker image.

ccpimage bash

{
    "inputs": {
        "ccpimage": {
            "id": "ccpimage",
            "title": "Runtime",
            "description": "`bash`, a basic unix docker image.",
            "minOccurs": 1,
            "maxOccurs": 1, 
            "schema": {
                "type": "string",
                "format": "url",
                "contentMediaType": "text/plain",
                "default": "",
                "readOnly": true
            }
        }
    }
}

Execution Parameters

all the parameters and configurations needed for the execution of the algorithms are defined in the inputs section

{
    "inputs": {
        "baseurl": {
            "id": "baseurl",
            "title": "Base URL",
            "description": "The base URL of the REST API",
            "minOccurs": 1,
            "maxOccurs": 1,
            "schema": {
                "type": "string",
                "format": "url",
                "contentMediaType": "text/plain",
                "default": "https://REST_API_URL/process/",
                "readOnly": true
            }
        },
        "service": {
            "id": "service",
            "title": "Service name",
            "description": "The name of the service",
            "minOccurs": 1,
            "maxOccurs": 1,
            "schema": {
                "type": "string",
                "format": null,
                "contentMediaType": "text/plain",
                "default": "my_custom_service"
            }
        },
        "file": {
            "id": "file",
            "title": "Input file",
            "description": "The input file to be annotated",
            "minOccurs": 1,
            "maxOccurs": 1,
            "schema": {
                "type": "string",
                "format": "file",
                "contentMediaType": "text/plain",
                "default": ""
            }
        },
        "contenttype": {
            "id": "contenttype",
            "title": "Content type",
            "description": "The content type of the input file",
            "minOccurs": 1,
            "maxOccurs": 1,
            "schema": {
                "type": "string",
                "format": null,
                "contentMediaType": "text/plain",
                "default": "text/plain",
                "enum": [
                    "text/plain",
                    "application/pdf",
                    "text/html"
                ]
            }
        },
        "credentials": {
            "id": "credentials",
            "title": "Credentials",
            "description": "The Basic auth credentials",
            "minOccurs": 1,
            "maxOccurs": 1,
            "schema": {
                "type": "string",
                "format": "secret",
                "contentMediaType": "text/plain",
                "default": "XXXYYYZZZ"
            }
        }
    }
}

the "readOnly": true/false parameter defines what is binded in the definiton of the ccp method (readonly=true, only the baseurl input in the given example) and what is parametric (readonly=false, or not defined in the input schema)

the given example uses special input parameters that will be explained in next sections

secret input credentials

  • [file upload](./03_1_input_file.md

input file

Execution

the implementation of the algorithms is totally defined in the deploy-script and in the execute-script

{
    "additionalParameters": {
        "parameters": [
            {
                "name": "deploy-script",
                "value": [
                    "echo {{file}} | base64 -d > /ccp_data/input"
                ]
            },
            {
                "name": "execute-script",
                "value": [
                    "wget {{baseurl}}/{{service}}?annotations={{annotations}} --post-file /ccp_data/input --header \"Authorization: Basic {{credentials}}\" --header \"Content-Type: {{contenttype}}\" --header \"Accept: application/json\" -O /ccp_data/annotated.json"
                ]
            },
            {
                "name": "undeploy-script",
                "value": []
            }
        ]
    }
}

example: bash example