Git Product home page Git Product logo

relay-sdk-python's Introduction

Relay Python SDK

This is the Python SDK for use with the internal Relay service APIs. The SDK requires Python 3.8.

It is intended for use by integration authors who are building containers to run inside the service. For running workflows and interacting with the user-facing service APIs, use the Relay CLI.

The API documentation is auto-generated from the source code. Here are some higher-level examples that show the main SDK classes that integration authors will interact with.

Installation

The SDK is available to install via `pip`:

pip install relay-sdk

If you use the relaysh/core:latest-python container image as your base image, it'll be pre-installed.

Usage

The main purpose of the SDK is to provide helpers for interacting with Relay's metadata service. Each container that runs in Relay has access to this service, which allows the container to read and write key-value data, emit events, and generate logs.

Accessing Data from the step spec

The Interface class is the primary way to interact with the service. Import it and instantiate an object, then call methods on that object to access metadata, which comes from the spec section of the step and global Connection information. The Dynamic class provides syntactic sugar for getting data like connection credentials, workflow-specific parameters, and secrets. It represents nested data structures as dot-separated method accessors.

from relay_sdk import Interface, Dynamic as D

relay = Interface()
azuresecret = relay.get(D.azure.connection.secret) # using Dynamic
azureclient = relay.get('azure["connection"]["clientID"]') # same as above
secret = relay.get(D.mysecret)
relay.outputs.set("outputkey","This will be the value of outputkey")

Webhook Triggers

The WebhookServer class provides a helper that sets up a webserver to handle incoming requests for Trigger actions.

This example, from the Docker Hub integration, makes use of the Interface class to access the events.emit method, which will cause the workflow associated with this trigger to be run with the inline mapping of workflow parameters to values extracted from the webhook payload.

The WebhookServer class can run any WSGI or ASGI application passed to it. The integrations the Relay team develops internally use the Quart web app framework.

from relay_sdk import Interface, WebhookServer
from quart import Quart, request, jsonify, make_response

relay = Interface()
app = Quart('image-pushed')

@app.route('/', methods=['POST'])
async def handler():
    event_payload = await request.get_json()

    if event_payload is None:
        return await make_response(jsonify(message='not a valid Docker Hub event'), 400)

    pd = event_payload['push_data']
    rd = event_payload['repository']

    relay.events.emit({
        'pushedAt': pd['pushed_at'],
        'pusher': pd['pusher'],
        'tag': pd['tag'],
        'name': rd['repo_name']
    })

    return await make_response(jsonify(message='success'), 200)


if __name__ == '__main__':
    WebhookServer(app).serve_forever()

relay-sdk-python's People

Contributors

impl avatar rick-a-lane-ii avatar hunner avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.