[Pkg-debile-commits] [debile-master] 27/126: nice
Sylvestre Ledru
sylvestre at alioth.debian.org
Mon Aug 19 14:56:08 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 a70df70314c17ba7ed2954335b69b3c32f78fc65
Author: Paul Tagliamonte <tag at pault.ag>
Date: Sun May 26 17:36:18 2013 -0400
nice
---
lucy/incoming.py | 3 ++
lucy/models/__init__.py | 1 +
lucy/models/job.py | 1 +
lucy/server.py | 128 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 133 insertions(+)
diff --git a/lucy/incoming.py b/lucy/incoming.py
index c1a057e..cbb9f0a 100644
--- a/lucy/incoming.py
+++ b/lucy/incoming.py
@@ -53,6 +53,9 @@ def accept_source(config, changes):
path = move_to_pool(config, obj, changes)
os.unlink(changes.get_filename())
+ obj['path'] = path
+ obj.save()
+
print("ACCEPT: {source}/{version} for {owner} as {_id}".format(**obj))
add_jobs(obj, 'source', config['job_classes']['source'])
diff --git a/lucy/models/__init__.py b/lucy/models/__init__.py
index f9f3dd8..b26733e 100644
--- a/lucy/models/__init__.py
+++ b/lucy/models/__init__.py
@@ -46,6 +46,7 @@ class LucyObject(dict):
def query(cls, what):
table = _get_table(cls._type)
for x in table.find(what):
+ print(x)
yield cls(**x)
@classmethod
diff --git a/lucy/models/job.py b/lucy/models/job.py
index 769d3dd..cb25ace 100644
--- a/lucy/models/job.py
+++ b/lucy/models/job.py
@@ -29,6 +29,7 @@ class Job(LucyObject):
builder=builder,
finished_at=finished_at,
assigned_at=assigned_at,
+ package_type=package_type,
**kwargs)
def get_builder(self):
diff --git a/lucy/server.py b/lucy/server.py
new file mode 100644
index 0000000..4a81306
--- /dev/null
+++ b/lucy/server.py
@@ -0,0 +1,128 @@
+from lucy import Machine, Job, Source
+from lucy.core import get_config
+
+from xmlrpc.server import SimpleXMLRPCServer
+from xmlrpc.server import SimpleXMLRPCRequestHandler
+
+from base64 import b64decode
+import datetime as dt
+import socketserver
+import threading
+
+NAMESPACE = threading.local()
+
+
+def get_builder_id():
+ return NAMESPACE.machine['_id']
+
+
+class LucyAuthMixIn(SimpleXMLRPCRequestHandler):
+ def authenticate(self):
+ (basic, _, encoded) = self.headers.get('Authorization').partition(' ')
+ if basic.lower() != 'basic':
+ self.send_error(401, 'Only allowed basic type thing')
+
+ machine, password = b64decode(encoded.encode()).decode().split(":", 1)
+ machine = Machine.load(machine)
+ if machine.auth(password):
+ NAMESPACE.machine = machine
+ return True
+ NAMESPACE.machine = None
+ return False
+
+ def parse_request(self, *args):
+ if super(LucyAuthMixIn, self).parse_request(*args):
+ if self.authenticate():
+ return True
+ else:
+ self.send_error(401, 'Authentication failed')
+ return False
+
+
+class AsyncXMLRPCServer(socketserver.ThreadingMixIn, LucyAuthMixIn):
+ pass
+
+
+class LucyInterface(object):
+ def version(self):
+ return "1.0"
+
+ def identify(self):
+ return get_builder_id()
+
+ def get_next_job(self, job_type):
+ ajobs = list(Job.assigned_jobs(get_builder_id()))
+ if ajobs != []:
+ return dict(ajobs[0])
+
+ try:
+ job = Job.next_job(type=job_type)
+ except KeyError:
+ return None
+
+ job['builder'] = get_builder_id()
+ job['assigned_at'] = dt.datetime.utcnow()
+ job.save()
+ return dict(job)
+
+ def get_dsc_url(self, package):
+ config = get_config()
+ package = Source.load(package)
+ url = "{public}/{path}/{source}_{version}.dsc".format(
+ public=config['public'],
+ path=package['path'],
+ source=package['source'],
+ version=package['version'])
+ return url
+
+ def get_source(self, package):
+ return dict(Source.load(package))
+
+ def submit_report(self, job, report):
+ job = Job.load(job)
+ if job.is_finished():
+ raise ValueError("Job is finished")
+
+ builder = job.get_builder()
+ builder = builder['_id'] if builder else None
+
+ if builder != get_builder_id():
+ raise ValueError("Machine isn't assigned.")
+
+ r = Report(builder=get_builder_id(),
+ job=job['_id'],
+ report=report,
+ package=job['package'])
+ return r.save()
+
+ def close_job(self, job):
+ job = Job.load(job)
+ if job.is_finished():
+ raise ValueError("job is already closed")
+
+ builder = job.get_builder()
+ builder = builder['_id'] if builder else None
+
+ if builder != get_builder_id():
+ raise ValueError("Machine isn't assigned.")
+
+ job['finished_at'] = dt.datetime.utcnow()
+ return job.save()
+
+
+def serve(server, port):
+ print("Serving on `{server}' on port `{port}'".format(**locals()))
+ server = SimpleXMLRPCServer((server, port),
+ requestHandler=AsyncXMLRPCServer,
+ allow_none=True)
+ server.register_introspection_functions()
+ server.register_instance(LucyInterface())
+ server.serve_forever()
+
+
+def main():
+ serve("localhost", 20017)
+
+
+if __name__ == "__main__":
+ main()
--
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