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)
| File | Size | Uploaded | |
|---|---|---|---|
| job_service_sdk-2.4.0.tar.gz | 17.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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