orangeqs.juice.service#

OrangeQS Juice Service API.

Submodules#

Package Contents#

Classes#

Service

Base class for OrangeQS Juice services.

IPythonService

IPython service implementation for OrangeQS Juice.

RemoteService

Base class a remote service is built on.

Functions#

start

Start an OrangeQS Juice service by its name.

API#

orangeqs.juice.service.start(service_name: str) None#

Start an OrangeQS Juice service by its name.

Imports the entrypoint class and starts the service.

Parameters#

  • service_name (str): The name of the service to start.s

class orangeqs.juice.service.Service(service_name: str)#

Bases: orangeqs.juice.service._task_server.TaskServer

Base class for OrangeQS Juice services.

This class can be extended to create specific service implementations. It provides a common interface for starting services.

Subclasses can override _setup_service_specifics() for their own setup, and _service_info_kwargs() to supply extra data to store_service_info(). Both are called automatically as part of __init__.

Parameters#

  • service_name (str): The name of the service. Will be used to load the service configuration.

start() None#

Start the service.

This method can be overridden by subclasses to implement service-specific startup logic. Should always call super().start().

If you want to run asynchronous code, you should use self.loop to run your async functions.

class orangeqs.juice.service.IPythonService(service_name: str, /, *, init_module: str | None = None)#

Bases: orangeqs.juice.service._service.Service

IPython service implementation for OrangeQS Juice.

start() None#

Start an IPython OrangeQS Juice service.

property loop: asyncio.AbstractEventLoop#

The event loop used by the IPython kernel.

Raises#

  • (RuntimeError): If the IPython kernel is using a different event loop than the one set in the constructor. This should never happen, but is there to catch any future IPython changes that cause the kernel to use a different loop.

class orangeqs.juice.service.RemoteService(name: str, edge_url: str, api_token: str)#

Bases: orangeqs.juice.service._task_server.TaskHandlerRegistry

Base class a remote service is built on.

Parameters#

  • name (str, optional): The remote’s routing name; must match a config-declared remote.

  • edge_url (str, optional): Base WebSocket URL to reach Juice, e.g. ws://juice.example.com:8888.

  • api_token (str): The edge token the remote presents to Juice. Generate it on the token page of your installation (/hub/token).

run() None#

Connect to the edge and serve tasks until the channel closes.

async serve() None#

Open the Reverse Channel, announce, then dispatch pushed tasks.

publisher_async() orangeqs.juice.service._remote.RemotePublisherAsync#

Return a publisher that emits events onto bus via /hub/pub.

subscriber_async(*, queue: asyncio.Queue[orangeqs.juice.messaging.protocol.Event] | None = None) orangeqs.juice.service._remote.RemoteSubscriberAsync[orangeqs.juice.messaging.protocol.Event]#

Return a subscriber that streams bus events from /hub/sub.

exception orangeqs.juice.service.RemoteAcknowledgementError#

Bases: RuntimeError

Raised when Juice rejects the remote at connection time.