From 5d66cc9fa0b2407d461aaf5ddd205d02ca6f57b5 Mon Sep 17 00:00:00 2001 From: apoorvad Date: Tue, 17 Nov 2015 18:15:10 -0800 Subject: [PATCH] Consolidating database calls in db.py Change-Id: Ic50c3a91aab815056eab9d7c36a7748cacdf6e53 --- .gitignore | 1 + ciwatch/api.py | 32 +++++--------------------------- ciwatch/db.py | 24 ++++++++++++++++++++++++ ciwatch/events.py | 13 +++++-------- ciwatch/views.py | 3 +-- 5 files changed, 36 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index e625780..2073d5c 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ ChangeLog *~ .*.swp .*sw? +.idea/ diff --git a/ciwatch/api.py b/ciwatch/api.py index c11785f..3cef9fa 100644 --- a/ciwatch/api.py +++ b/ciwatch/api.py @@ -17,14 +17,8 @@ from datetime import datetime from datetime import timedelta from flask import request -from sqlalchemy import and_ -from sqlalchemy import desc from ciwatch import db -from ciwatch.models import CiServer -from ciwatch.models import PatchSet -from ciwatch.models import Project - TIME_OPTIONS = OrderedDict([ # Map time options to hours ("24 hours", 24), @@ -48,34 +42,18 @@ def _get_ci_info_for_patch_sets(ci, patch_sets): return ci_info -def get_projects(): - return db.Session().query(Project).order_by(Project.name).all() - - -def get_ci_servers(): - return db.Session().query(CiServer).order_by( - desc(CiServer.trusted), CiServer.name).all() - - -def get_patch_sets(project, since): - return db.Session().query(PatchSet).filter( - and_(PatchSet.project == project, PatchSet.created >= since) - ).order_by(PatchSet.created.desc()).all() - - def get_time_options(): return TIME_OPTIONS.keys() def get_context(): - project = request.args.get('project', DEFAULT_PROJECT) + project_name = request.args.get('project', DEFAULT_PROJECT) time = request.args.get('time', DEFAULT_TIME_OPTION) since = datetime.now() - timedelta(hours=TIME_OPTIONS[time]) - project = db.Session().query(Project).filter( - Project.name == project).one() - patch_sets = get_patch_sets(project=project, since=since) + project = db.get_project(project_name) + patch_sets = db.get_patch_sets(project, since) results = OrderedDict() - for ci in get_ci_servers(): + for ci in db.get_ci_servers(): ci_info = _get_ci_info_for_patch_sets(ci, patch_sets) if any(result for result in ci_info["results"]): results[ci.ci_owner] = results.get(ci.ci_owner, []) @@ -86,5 +64,5 @@ def get_context(): "time_option": time, "patch_sets": patch_sets, "project": project, - "projects": get_projects(), + "projects": db.get_projects(), "user_results": results} diff --git a/ciwatch/db.py b/ciwatch/db.py index 05b4f62..b63ba9f 100644 --- a/ciwatch/db.py +++ b/ciwatch/db.py @@ -12,10 +12,13 @@ # License for the specific language governing permissions and limitations # under the License. +from sqlalchemy import and_ from sqlalchemy import create_engine +from sqlalchemy import desc from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker + from ciwatch.config import Config from ciwatch import models @@ -58,3 +61,24 @@ def get_or_create(model, commit_=True, **kwargs): if commit_: session.commit() return result + + +def get_projects(): + return Session().query(models.Project).order_by(models.Project.name).all() + + +def get_ci_servers(): + return Session().query(models.CiServer).order_by( + desc(models.CiServer.trusted), models.CiServer.name).all() + + +def get_patch_sets(project, since): + return Session().query(models.PatchSet).filter( + and_(models.PatchSet.project == project, + models.PatchSet.created >= since) + ).order_by(models.PatchSet.created.desc()).all() + + +def get_project(project_name): + return Session().query(models.Project).filter( + models.Project.name == project_name).one() diff --git a/ciwatch/events.py b/ciwatch/events.py index a748cd1..bd090ac 100644 --- a/ciwatch/events.py +++ b/ciwatch/events.py @@ -121,10 +121,8 @@ def parse_json_event(event, projects): def add_event_to_db(event, commit_=True): - session = db.Session() - project = session.query(models.Project).filter( - models.Project.name == _process_project_name( - event["change"]["project"])).one() + project = db.get_project(_process_project_name( + event["change"]["project"])) patch_set = db.get_or_create( models.PatchSet, commit_=False, @@ -133,9 +131,6 @@ def add_event_to_db(event, commit_=True): commit_message=event['change']['commitMessage'], created=datetime.fromtimestamp( int(event['patchSet']['createdOn']))) - - owner_name = event["author"]["name"] - owner = db.get_or_create(models.CiOwner, name=owner_name) trusted = (event["author"]["username"] == "jenkins") if trusted and "approvals" in event: @@ -144,6 +139,8 @@ def add_event_to_db(event, commit_=True): elif event["approvals"][0]["value"] in ("-1", "-2"): patch_set.verified = False + owner_name = event["author"]["name"] + owner = db.get_or_create(models.CiOwner, name=owner_name) for ci, data in event['ci-status'].iteritems(): ci_server = db.get_or_create(models.CiServer, commit_=False, @@ -156,7 +153,7 @@ def add_event_to_db(event, commit_=True): ci_server_id=ci_server.id, patch_set_id=patch_set.id) if commit_: - session.commit() + db.Session().commit() def main(): diff --git a/ciwatch/views.py b/ciwatch/views.py index f4f5a63..5ae151d 100644 --- a/ciwatch/views.py +++ b/ciwatch/views.py @@ -17,7 +17,6 @@ from sqlalchemy.orm.exc import NoResultFound from werkzeug.exceptions import abort from ciwatch.api import get_context -from ciwatch.api import get_projects from ciwatch.cache import cached from ciwatch import db from ciwatch.server import app @@ -29,7 +28,7 @@ from ciwatch.server import app def home(): try: return render_template( - 'index.html.jinja', projects=get_projects()) + 'index.html.jinja', projects=db.get_projects()) finally: db.Session.remove()