[copr] bkabrda-workspace: Enable updating builds by backend (e6960cb)

bkabrda at fedoraproject.org bkabrda at fedoraproject.org
Mon Nov 19 12:19:39 UTC 2012


Repository : http://git.fedorahosted.org/cgit/copr.git

On branch  : bkabrda-workspace

>---------------------------------------------------------------

commit e6960cb537873a59c0de1ccfef3e753bd3db33fb
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date:   Mon Nov 19 13:01:03 2012 +0100

    Enable updating builds by backend


>---------------------------------------------------------------

 wsgi/coprs/logic/builds_logic.py               |   11 +++++++++++
 wsgi/coprs/views/backend_ns/backend_general.py |   20 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/wsgi/coprs/logic/builds_logic.py b/wsgi/coprs/logic/builds_logic.py
index 35c2c9d..2eb6302 100644
--- a/wsgi/coprs/logic/builds_logic.py
+++ b/wsgi/coprs/logic/builds_logic.py
@@ -45,6 +45,8 @@ class BuildsLogic(object):
                                    order_by(models.Build.submitted_on.asc())
         return query
 
+    def get_by_ids(cls, user, ids):
+        return models.Build.query.filter(models.Build.id.in_(ids))
 
     @classmethod
     def new(cls, user, build, copr, check_authorized = True):
@@ -56,6 +58,15 @@ class BuildsLogic(object):
         db.session.add(build)
 
     @classmethod
+    def update_from_dict(cls, user, build, upd_dict):
+        for attr in ['results', 'started_on', 'ended_on', 'status']:
+            value = upd_dict.get(attr, None)
+            if value:
+                setattr(build, attr, value)
+
+        db.session.add(build)
+
+    @classmethod
     def cancel_build(cls, user, build):
         if build.user_id != user.id:
             raise exceptions.InsufficientRightsException('You can only cancel your own builds.')
diff --git a/wsgi/coprs/views/backend_ns/backend_general.py b/wsgi/coprs/views/backend_ns/backend_general.py
index 7b92e56..cc85ca8 100644
--- a/wsgi/coprs/views/backend_ns/backend_general.py
+++ b/wsgi/coprs/views/backend_ns/backend_general.py
@@ -16,3 +16,23 @@ def waiting_builds():
                                                                        '__columns_except__': ['chroots', 'repos'],
                                                                        '__included_ids__': False},
                                                               '__included_ids__': False}) for build in builds]})
+
+ at backend_ns.route('/update_builds/', methods = ['POST', 'PUT'])
+def update_builds():
+    build_ids = []
+    for build in flask.request.json['builds']: # first get ids of sent builds
+        build_ids.append(build['id'])
+
+    if not build_ids:
+        return json.dumps({'warning': 'No parsed builds'})
+
+    existing = {} # create a dict of existing builds {build.id: build, ...}
+    for build in builds_logic.BuildsLogic.get_by_ids(None, build_ids).all():
+        existing[build.id] = build
+
+    for build in flask.request.json['builds']: # actually update existing builds
+        builds_logic.BuildsLogic.update_from_dict(None, existing[build['id']], build)
+
+    db.session.commit()
+
+    return json.dumps({'updated_builds': len(existing)})



More information about the copr-devel mailing list