Skip to content

Commit

Permalink
Merge pull request #66 from ral-facilities/39_only_one_include_filter
Browse files Browse the repository at this point in the history
Allow only one include
  • Loading branch information
keiranjprice101 authored Oct 1, 2019
2 parents a3b9551 + 3702328 commit 0d97b57
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 44 deletions.
7 changes: 5 additions & 2 deletions common/database_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from sqlalchemy import asc, desc
from sqlalchemy.orm import aliased

from common.exceptions import MissingRecordError, BadFilterError, BadRequestError
from common.exceptions import MissingRecordError, BadFilterError, BadRequestError, MultipleIncludeError
from common.models.db_models import INVESTIGATIONUSER, INVESTIGATION, INSTRUMENT, FACILITYCYCLE, \
INVESTIGATIONINSTRUMENT, FACILITY
from common.session_manager import session_manager
Expand Down Expand Up @@ -219,7 +219,10 @@ def __init__(self, included_filters):
self.included_filters = included_filters["include"]

def apply_filter(self, query):
query.include_related_entities = True
if not query.include_related_entities:
query.include_related_entities = True
else:
raise MultipleIncludeError("Attempted multiple includes on a single query")


class QueryFilterFactory(object):
Expand Down
4 changes: 4 additions & 0 deletions common/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ class BadFilterError(ApiError):
pass


class MultipleIncludeError(BadFilterError):
pass


class AuthenticationError(ApiError):
pass

Expand Down
6 changes: 4 additions & 2 deletions common/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from common.database_helpers import QueryFilterFactory
from common.exceptions import MissingRecordError, BadFilterError, AuthenticationError, BadRequestError, \
MissingCredentialsError
MissingCredentialsError, MultipleIncludeError
from common.models.db_models import SESSION
from common.session_manager import session_manager

Expand Down Expand Up @@ -63,6 +63,9 @@ def wrapper_gets_records(*args, **kwargs):
except MissingRecordError as e:
log.exception(e)
return "No such record in table", 404
except MultipleIncludeError as e:
log.exception(e)
return "Bad request, only one include filter may be given per request", 400
except BadFilterError as e:
log.exception(e)
return "Invalid filter requested", 400
Expand All @@ -78,7 +81,6 @@ def wrapper_gets_records(*args, **kwargs):
except BadRequestError as e:
log.exception(e)
return "Bad request", 400

return wrapper_gets_records


Expand Down
Loading

0 comments on commit 0d97b57

Please sign in to comment.