Merge pull request #347 from alphagov/get-jobs-created-in-last-7-days

Add a limit days query param for get all jobs.
This commit is contained in:
Rebecca Law
2016-05-25 11:36:31 +01:00
6 changed files with 97 additions and 11 deletions

View File

@@ -28,3 +28,8 @@ class DAOClass(object):
db.session.delete(inst)
if _commit:
db.session.commit()
def days_ago(number_of_days):
from datetime import date, timedelta
return date.today() - timedelta(days=number_of_days)

View File

@@ -1,5 +1,8 @@
from sqlalchemy import desc
from datetime import date, timedelta
from sqlalchemy import desc, cast, Date as sql_date
from app import db
from app.dao import days_ago
from app.models import Job
@@ -7,8 +10,11 @@ def dao_get_job_by_service_id_and_job_id(service_id, job_id):
return Job.query.filter_by(service_id=service_id, id=job_id).one()
def dao_get_jobs_by_service_id(service_id):
return Job.query.filter_by(service_id=service_id).order_by(desc(Job.created_at)).all()
def dao_get_jobs_by_service_id(service_id, limit_days=None):
query_filter = [Job.service_id == service_id]
if limit_days is not None:
query_filter.append(cast(Job.created_at, sql_date) >= days_ago(limit_days))
return Job.query.filter(*query_filter).order_by(desc(Job.created_at)).all()
def dao_get_job_by_id(job_id):

View File

@@ -11,6 +11,7 @@ from flask import current_app
from werkzeug.datastructures import MultiDict
from app import db
from app.dao import days_ago
from app.models import (
Service,
Notification,
@@ -342,7 +343,3 @@ def delete_notifications_created_more_than_a_week_ago(status):
).delete(synchronize_session='fetch')
db.session.commit()
return deleted
def days_ago(number_of_days):
return date.today() - timedelta(days=number_of_days)

View File

@@ -1,8 +1,8 @@
from flask import (
Blueprint,
jsonify,
request
)
request,
current_app)
from app.dao.jobs_dao import (
dao_create_job,
@@ -36,7 +36,17 @@ def get_job_by_service_and_job_id(service_id, job_id):
@job.route('', methods=['GET'])
def get_jobs_by_service(service_id):
jobs = dao_get_jobs_by_service_id(service_id)
if request.args.get('limit_days'):
try:
limit_days = int(request.args['limit_days'])
except ValueError as e:
error = '{} is not an integer'.format(request.args['limit_days'])
current_app.logger.error(error)
return jsonify(result="error", message={'limit_days': [error]}), 400
else:
limit_days = None
jobs = dao_get_jobs_by_service_id(service_id, limit_days)
data, errors = job_schema.dump(jobs, many=True)
if errors:
return jsonify(result="error", message=errors), 400