[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