Skip to main content

rpc and node backbone

Project description

rekuest-next

codecov PyPI version Maintenance Maintainer PyPI pyversions PyPI status

self-documenting asynchronous scalable RPC based on provisionable untrusted actors acccessible via fastapi or deployed in the arkitekt platform.

Idea

rekuest is the python client for the rekuest server, it provides a simple interface both register and provide actions (functionality) and call other actions in async and synchronous manner. Contrary to most RPC services, Rekuest is focussed on providing functionaly on the Client, and is especially tailored for scenarios where apps can be developed to perform tasks on users behalves, therefore requiring fine grained access control.

Prerequesits

Requires a running instance of a rekuest server (e.g in an arkitekt deployment).

Install

Currently the usage of rekeust is heavily tied to the arkitekt platform, which provides a simple way to deploy and manage the rekuest server. Please install the arkitekt-next package to get started. This installation will also install the rekuest-next package.

pip install arkitekt-next

If you are working in image analysis checkout the arkitekt platform that also provides data structures for image analysis (composed in the arkitekt platform)

Get started

from arkitekt_next import register

@register
def rpc_function(x: int, name: str) -> str
    """
    A rpc function that we can
    simple call from anywhere

    """
    print(str)



with easy("other_app") as app:
    # this will register the function on the app
    app.run()

Run example:

arkitekt-next run dev

This node is now register under the application and signed in user and can be provisioned and called to by other apps. By default users are only able to asign to their own apps. This can be changed on the rekuest server.

Calling

from arkitekt_next import easy
from rekuest_next import find


with easy("name_of_your_app") as app:
    # this will call the function on the app
    action = find("other_app", "rpc_function")

    x = action.call(
        x=1,
        name="hello world",
    )

    print(x)

Usage with complex Datastructures

Rekuest_next takes care of serialization and documentation of standard python datastructures

  • str
  • bool
  • int
  • float
  • Enum
  • Dict
  • List

To increase performance and latency it is not possible to serialize complex python objects like numpy arrays into the messages. These are best transformed into immutable objects on a centrally accessible storage and then only the reference is passed. Rekuest does not impose any rules on how you handle this storage (see mikro for ideas), it provides however a simple api.

class ComplexStructure:
    id: str # A reference for this structure on central storage

    async def shrink(self):
        return self.id

    @classmethod
    async def expand(cls, value):
        return cls.load_from_server(value)

by providing two functions:

  • shrink
  • expand

You can now use this Structure with simple typehints and arkitekt will automaticall shrink (serialize) and expand (deserialize) the structure on calling.

def complex_call(x: ComplexStrucuture) -> int:
    return x.max()

Terminology

Node A concept (documentatio) of a function that is enabled on the platform.

App: A provider of functions, that negotiates access right to data and other Apps through Oauth2

Template: An Implementation of a Node by an App.

Agent: An active instance of this App, its the host of actors. Agents connect and disconnect.

Actor: A stateless instance of a function that was provisioned

Provision: A contract between arkitekt and a Agent for the usage of a specific function. As long as the provision is active the connected agent will be required to provide the resources of the function (think Deployment in Kubernetes)

Reservation: A contract between a User and arkitekt that wants to use one or mulitple instances of functions (Actors). The platform tries to autocorrect and failure correct. Calls to the function are always address to the reservation no the provision (think: Exchange in RabbitMQ)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rekuest_next-1.6.1.tar.gz (202.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rekuest_next-1.6.1-py3-none-any.whl (262.8 kB view details)

Uploaded Python 3

File details

Details for the file rekuest_next-1.6.1.tar.gz.

File metadata

  • Download URL: rekuest_next-1.6.1.tar.gz
  • Upload date:
  • Size: 202.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for rekuest_next-1.6.1.tar.gz
Algorithm Hash digest
SHA256 bd8506f6d8e67f3326cef218e602e7716631c01d511b371735bc7841073a521f
MD5 e85b21b791cea3a08fd6ebf5be5aa23f
BLAKE2b-256 cf40cf9c3b0cbf8828764accf4e1e6143620781adc0fd9b12f402e361f3ff003

See more details on using hashes here.

File details

Details for the file rekuest_next-1.6.1-py3-none-any.whl.

File metadata

  • Download URL: rekuest_next-1.6.1-py3-none-any.whl
  • Upload date:
  • Size: 262.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for rekuest_next-1.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d0555ed4001d135e2a742e536bcb49ad0ee67f1d9143059e3f246a44a409c25b
MD5 e058283693d70164175f00df315a0269
BLAKE2b-256 22e75bf54d534aa01ce3ad9183c7ea13839a198b544966d5ef98e44557f8dfc5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page