Skip to main content

job-service

SDK cliente y runtime para integrarse con un job_service remoto.

Este paquete permite:

  • registrar un servicio consumidor y su manifest de jobs
  • crear ejecuciones remotas
  • reportar progreso, eventos, resultados y errores
  • construir flows reutilizables
  • ejecutar workers con Inngest Connect o con un worker local simple

Instalación

pip install job-service-sdk

API pública principal

from job_service_sdk import (
    JobClientConfig,
    JobDefinitionConfig,
    JobServiceClient,
    JobServiceProvider,
    build_service_client_config,
    bootstrap_job_service_provider,
    initialize_job_service_provider_from_settings,
    job_flow,
    build_job_definition_configs,
    start_job_runtime_from_settings,
    stop_job_runtime_from_settings,
    handler,
    JobWorker,
)

Registrar un servicio y sus jobs

from job_service_sdk import JobClientConfig, JobDefinitionConfig, JobServiceClient

client = JobServiceClient("http://localhost:8001")

client.register_service(
    JobClientConfig(
        client_key="sample-backend",
        display_name="Sample Backend",
        base_url="http://sample-backend:8000",
        healthcheck_url="http://sample-backend:8000/api/v1/health",
    ),
    [
        JobDefinitionConfig(
            client_key="sample-backend",
            job_key="sample_job",
            display_name="Sample Job",
        )
    ],
)

Crear una ejecución

from job_service_sdk import JobServiceClient

client = JobServiceClient("http://localhost:8001")

execution = client.create_execution(
    "sample_job",
    job_input={"sample_key": "sample_value"},
    requested_by_id="sample.user",
    requested_by_display="sample.user@example.com",
)

Reportar progreso y completar

from uuid import UUID

from job_service_sdk import JobServiceClient

client = JobServiceClient("http://localhost:8001")
job_id = UUID("00000000-0000-0000-0000-000000000001")

client.report_progress(
    job_id,
    progress_current=1,
    progress_total=3,
    progress_label="processing",
)

client.complete_execution(
    job_id,
    result={"processed_items": 4},
    result_summary="Job completado",
)

Flow declarativo

from job_service_sdk import JobFlow, job_flow


@job_flow(
    job_key="sample_job",
    display_name="Sample Job",
    description="Ejemplo de flow declarativo",
)
def build_sample_flow() -> JobFlow:
    flow = JobFlow()
    return flow

Corrida programada

cron registra una segunda función de Inngest que solo encola una ejecución con cron_input, así que la corrida programada nace con su fila en el job-service igual que la que se lanza a mano.

cron_guard decide si toca. Se evalúa antes de encolar, de modo que un reloj que corre seguido para una ventana corta no deja ejecuciones vacías en la lista de corridas.

@job_flow(
    job_key="sample_job",
    display_name="Sample Job",
    description="Ejemplo con reloj",
    cron="TZ=America/Bogota 0 * * * *",
    cron_input={"confirm": True},
    cron_guard=is_in_window,
)
def build_sample_flow() -> JobFlow:
    return JobFlow().step("trabajo", do_work)

Worker local

from job_service_sdk import JobServiceClient, JobWorker, handler


@handler("sample_job")
async def sample_handler(job_id, job_input):
    return {"processed_items": 1}


client = JobServiceClient("http://localhost:8001")
worker = JobWorker(client)

Inngest Connect

El paquete incluye helpers para levantar el runtime configurado a partir de settings y definiciones ya registradas.

from job_service_sdk import (
    initialize_job_service_provider_from_settings,
    start_job_runtime_from_settings,
    stop_job_runtime_from_settings,
)

initialize_job_service_provider_from_settings(
    settings,
    definitions_module="sample.jobs_config",
)

await start_job_runtime_from_settings(
    settings,
    definitions_module="sample.jobs_config",
)

await stop_job_runtime_from_settings(settings)

Hoy el runtime soportado es inngest, pero la app consumidora ya no necesita decidir eso directamente.

Metadata

Release files for job-service-sdk 2.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for job-service-sdk 2.4.0
File Size Uploaded
job_service_sdk-2.4.0.tar.gz 17.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for job-service-sdk 2.4.0
File Interpreter ABI Platform
job_service_sdk-2.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.2 kB

Release files / job_service_sdk-2.4.0.tar.gz

Download URL job_service_sdk-2.4.0.tar.gz
Size 17.6 kB
Tags Source
SHA-256 checksum
How to use checksums
1b745f6562a1c404b4d4aa1963cb9f41396301a24065994f6c36fea9d0d2e0fc
BLAKE2b-256 checksum
How to use checksums
6b56a12373397de484273d4798825b8babdde62f0de5c2e4ef028ac878e21883
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / job_service_sdk-2.4.0-py3-none-any.whl

Download URL job_service_sdk-2.4.0-py3-none-any.whl
Size 19.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
514ccf8687d4acfb6be2daf3fffe4d90b14c7f288742e140f4ce9b020626ec21
BLAKE2b-256 checksum
How to use checksums
556c5d4df5160e1f027fe2398826a0790e899da2330f3fc01fb7f92798880d87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

2.4.1

2 release files

This release

2.4.0 This release

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page