[Pkg-debile-commits] [debile-master] 04/126: fiddling with the rpc server
Sylvestre Ledru
sylvestre at alioth.debian.org
Mon Aug 19 14:56:04 UTC 2013
This is an automated email from the git hooks/post-receive script.
sylvestre pushed a commit to branch scan-build-html
in repository debile-master.
commit 663775e05db3e593497880f3e1f3ca31044ca48d
Author: Paul Tagliamonte <tag at pault.ag>
Date: Tue May 21 15:13:00 2013 -0400
fiddling with the rpc server
---
lucy/models/job.py | 22 +++++++++++++++++-----
lucy/models/report.py | 7 +++++--
lucy/server.py | 34 +++++++++++++++++++++++++++++++---
3 files changed, 53 insertions(+), 10 deletions(-)
diff --git a/lucy/models/job.py b/lucy/models/job.py
index 5d70a59..9a4462b 100644
--- a/lucy/models/job.py
+++ b/lucy/models/job.py
@@ -6,8 +6,8 @@ from lucy.models import LucyObject
class Job(LucyObject):
_type = 'jobs'
- def __init__(self, type, package, builder=None,
- finished_at=None, **kwargs):
+ def __init__(self, type, package, builder=None, finished_at=None,
+ assigned_at=None, **kwargs):
package = Package.load(package)['_id']
@@ -19,6 +19,7 @@ class Job(LucyObject):
package=package,
builder=builder,
finished_at=finished_at,
+ assigned_at=assigned_at,
**kwargs)
def get_builder(self):
@@ -28,20 +29,31 @@ class Job(LucyObject):
return Machine.load(builder)
def is_finished(self):
- return self.get('finished_at', None) is None
+ return not self.get('finished_at', None) is None
@classmethod
def unassigned_jobs(cls, **kwargs):
k = kwargs.copy()
k.update({"builder": None, "finished_at": None})
- for x in cls.query(**k):
+ for x in cls.query(k):
yield x
@classmethod
+ def next_job(cls, **kwargs):
+ k = kwargs.copy()
+ k.update({"builder": None, "finished_at": None})
+ v = cls.single(k)
+ return v
+
+ @classmethod
def unfinished_jobs(cls, **kwargs):
k = kwargs.copy()
k.update({"finished_at": None})
- for x in cls.query(**k):
+ for x in cls.query(k):
yield x
+
+ @classmethod
+ def assigned_jobs(cls, builder, **kwargs):
+ return cls.unfinished_jobs(**{"builder": builder})
diff --git a/lucy/models/report.py b/lucy/models/report.py
index 19a8358..e143312 100644
--- a/lucy/models/report.py
+++ b/lucy/models/report.py
@@ -1,15 +1,18 @@
-from lucy.models import LucyObject
from lucy.models.machine import Machine
from lucy.models.package import Package
+from lucy.models import LucyObject
+from lucy.models.job import Job
class Report(LucyObject):
_type = 'reports'
- def __init__(self, report, builder, package, **kwargs):
+ def __init__(self, report, builder, package, job, **kwargs):
builder = Machine.load(builder)['_id']
package = Package.load(package)['_id']
+ job = Job.load(job)['_id']
super(Report, self).__init__(builder=builder,
package=package,
report=report,
+ job=job,
**kwargs)
diff --git a/lucy/server.py b/lucy/server.py
index 3c09b72..8392377 100644
--- a/lucy/server.py
+++ b/lucy/server.py
@@ -1,10 +1,12 @@
from lucy.models.machine import Machine
from lucy.models.report import Report
+from lucy.models.job import Job
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
from base64 import b64decode
+import datetime as dt
import socketserver
import threading
@@ -45,11 +47,37 @@ class LucyInterface(object):
def identify(self):
return NAMESPACE.machine['_id']
- def submit_report(self, package, report):
+ def get_next_job(self, job_type):
+ ajobs = list(Job.assigned_jobs(NAMESPACE.machine['_id']))
+ if len(ajobs) != []:
+ return dict(ajobs[0])
+
+ job = Job.next_job(type=job_type)
+ job['builder'] = NAMESPACE.machine['_id']
+ job['assigned_at'] = dt.datetime.utcnow()
+ job.save()
+ return dict(job)
+
+ def submit_report(self, job, report):
+ job = Job.load(job)
+ if job.is_finished():
+ raise ValueError("Job has already been submited")
+
+ builder = job.get_builder()
+ builder = builder['_id'] if builder else None
+
+ if builder != NAMESPACE.machine['_id']:
+ raise ValueError("Machine isn't assigned.")
+
r = Report(builder=NAMESPACE.machine['_id'],
+ job=job['_id'],
report=report,
- package=package)
- return r.save()
+ package=job['package'])
+ report = r.save()
+
+ job['finished_at'] = dt.datetime.utcnow()
+ job.save()
+ return report
def serve(server, port):
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-debile/debile-master.git
More information about the Pkg-debile-commits
mailing list