61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
import cherrypy
|
|
from photoapp.dbutils import create_db_sessionmaker, cursorwrap
|
|
from photoapp.types import Job, JobTargetType, JobTarget
|
|
|
|
|
|
class JobSubscriber(object):
|
|
"""
|
|
adapter between cherrypy bus and JobsClient
|
|
"""
|
|
def __init__(self, client):
|
|
self.client = client
|
|
cherrypy.engine.subscribe("create-job", self.create_job) # TODO make "create-job" a const somewhere?
|
|
|
|
def create_job(self, name, targets):
|
|
uuid = self.client.create_job(name, targets)
|
|
self.client.notify_server(uuid)
|
|
return uuid
|
|
|
|
|
|
class JobsClient(object):
|
|
def __init__(self, dbengine, notifier):
|
|
self.engine = dbengine
|
|
self.session = create_db_sessionmaker(self.engine)
|
|
self.notifier = notifier
|
|
|
|
@cursorwrap
|
|
def create_job(self, c, name, targets):
|
|
"""
|
|
create a new job in the database
|
|
|
|
targets: list of dict(
|
|
type=JobTargetType.TYPE,
|
|
targets=[1, 2, 3]
|
|
)
|
|
"""
|
|
job_targets = []
|
|
|
|
for target in targets:
|
|
for target_id in target["targets"]:
|
|
job_targets.append(
|
|
JobTarget(target_type=target["type"],
|
|
target=target_id)
|
|
)
|
|
|
|
j = Job(
|
|
job_name=name,
|
|
targets=job_targets,
|
|
)
|
|
|
|
c.add(j)
|
|
c.commit()
|
|
|
|
return j.uuid
|
|
|
|
def notify_server(self, uuid):
|
|
"""
|
|
notify the job execution server of a job that needs processing because it had been added/updated
|
|
"""
|
|
self.notifier(uuid)
|
|
|