Skip to content

Commit

Permalink
#142: Change 'BadFilterError' to 'FilterError'
Browse files Browse the repository at this point in the history
- Part of PR review for this branch
  • Loading branch information
MRichards99 committed Aug 17, 2020
1 parent 4707be6 commit e27c887
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 20 deletions.
9 changes: 5 additions & 4 deletions common/database/filters.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from common.filters import WhereFilter, DistinctFieldFilter, OrderFilter, SkipFilter, LimitFilter, \
IncludeFilter
from common.exceptions import FilterError

class DatabaseWhereFilter(WhereFilter):
def __init__(self, field, value, operation):
Expand All @@ -9,7 +10,7 @@ def apply_filter(self, query):
try:
field = getattr(query.table, self.field)
except AttributeError:
raise BadFilterError(f"Bad WhereFilter requested")
raise FilterError(f"Unknown attribute {self.field} on table {query.table.__name__}")

if self.included_included_field:
included_table = getattr(db_models, self.field)
Expand Down Expand Up @@ -40,7 +41,7 @@ def apply_filter(self, query):
elif self.operation == "in":
query.base_query = query.base_query.filter(field.in_(self.value))
else:
raise BadFilterError(
raise FilterError(
f" Bad operation given to where filter. operation: {self.operation}")


Expand All @@ -54,7 +55,7 @@ def apply_filter(self, query):
self.fields = [getattr(query.table, field)
for field in self.fields]
except AttributeError:
raise BadFilterError("Bad field requested")
raise FilterError("Bad field requested")
query.base_query = query.session.query(*self.fields).distinct()


Expand All @@ -70,7 +71,7 @@ def apply_filter(self, query):
query.base_query = query.base_query.order_by(
desc(self.field.upper()))
else:
raise BadFilterError(f" Bad filter: {self.direction}")
raise FilterError(f" Bad filter: {self.direction}")


class DatabaseSkipFilter(SkipFilter):
Expand Down
4 changes: 2 additions & 2 deletions common/database/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from sqlalchemy import asc, desc
from sqlalchemy.orm import aliased

from common.exceptions import ApiError, AuthenticationError, MissingRecordError, BadFilterError, \
from common.exceptions import ApiError, AuthenticationError, MissingRecordError, FilterError, \
BadRequestError, MultipleIncludeError
from common.models import db_models
from common.models.db_models import INVESTIGATIONUSER, INVESTIGATION, INSTRUMENT, FACILITYCYCLE, \
Expand Down Expand Up @@ -212,7 +212,7 @@ def get_query_filter(filter):
elif filter_name == "distinct":
return DistinctFieldFilter(filter["distinct"])
else:
raise BadFilterError(f" Bad filter: {filter}")
raise FilterError(f" Bad filter: {filter}")


def insert_row_into_table(table, row):
Expand Down
4 changes: 2 additions & 2 deletions common/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ def __init__(self, msg='No such record in table', *args, **kwargs):
self.status_code = 404


class BadFilterError(ApiError):
class FilterError(ApiError):
def __init__(self, msg='Invalid filter requested', *args, **kwargs):
super().__init__(msg, *args, **kwargs)
self.status_code = 400


class MultipleIncludeError(BadFilterError):
class MultipleIncludeError(FilterError):
def __init__(self, msg='Bad request, only one include filter may be given per request', *args, **kwargs):
super().__init__(msg, *args, **kwargs)
self.status_code = 400
Expand Down
4 changes: 2 additions & 2 deletions common/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from sqlalchemy.exc import IntegrityError

from common.database.helpers import QueryFilterFactory
from common.exceptions import ApiError, AuthenticationError, BadFilterError, BadRequestError, MissingCredentialsError, MissingRecordError, MultipleIncludeError
from common.exceptions import ApiError, AuthenticationError, FilterError, BadRequestError, MissingCredentialsError, MissingRecordError, MultipleIncludeError

log = logging.getLogger()

Expand Down Expand Up @@ -88,4 +88,4 @@ def get_filters_from_query_string():
{arg: json.loads(value)}))
return filters
except:
raise BadFilterError()
raise FilterError()
6 changes: 3 additions & 3 deletions common/icat/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from common.filters import WhereFilter, DistinctFieldFilter, OrderFilter, SkipFilter, LimitFilter, \
IncludeFilter
from common.exceptions import BadFilterError
from common.exceptions import FilterError
from common.icat.helpers import create_condition

log = logging.getLogger()
Expand All @@ -29,12 +29,12 @@ def apply_filter(self, query):
elif self.operation == "in":
where_filter = create_condition(self.field, 'in', tuple(self.value))
else:
raise BadFilterError(f"Bad operation given to where filter: {self.operation}")
raise FilterError(f"Bad operation given to where filter: {self.operation}")

try:
query.addConditions(where_filter)
except ValueError:
raise BadFilterError()
raise FilterError()


class PythonICATDistinctFieldFilter(DistinctFieldFilter):
Expand Down
6 changes: 3 additions & 3 deletions common/models/db_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from sqlalchemy.orm import relationship
from sqlalchemy.orm.collections import InstrumentedList

from common.exceptions import BadFilterError, DatabaseError
from common.exceptions import FilterError, DatabaseError

Base = declarative_base()

Expand Down Expand Up @@ -86,7 +86,7 @@ def to_nested_dict(self, includes):
elif type(include) is dict:
self._nest_dictionary_include(dictionary, include)
except TypeError:
raise BadFilterError(
raise FilterError(
f" Bad include relations provided: {includes}")
return dictionary

Expand Down Expand Up @@ -136,7 +136,7 @@ def get_related_entity(self, entity):
try:
return getattr(self, entity)
except AttributeError:
raise BadFilterError(f" No related entity: {entity}")
raise FilterError(f" No related entity: {entity}")

def update_from_dict(self, dictionary):
"""
Expand Down
8 changes: 4 additions & 4 deletions test/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from common.database.helpers import delete_row_by_id, insert_row_into_table, LimitFilter, DistinctFieldFilter, \
IncludeFilter, SkipFilter, WhereFilter, OrderFilter
from common.exceptions import MissingRecordError, BadFilterError, BadRequestError, MissingCredentialsError, \
from common.exceptions import MissingRecordError, FilterError, BadRequestError, MissingCredentialsError, \
AuthenticationError
from common.helpers import is_valid_json, queries_records, get_session_id_from_auth_header, \
get_filters_from_query_string
Expand Down Expand Up @@ -81,9 +81,9 @@ def raise_missing_record():
def test_bad_filter_error(self):
@queries_records
def raise_bad_filter_error():
raise BadFilterError()
raise FilterError()

with self.assertRaises(BadFilterError) as ctx:
with self.assertRaises(FilterError) as ctx:
raise_bad_filter_error()

self.assertEqual("Invalid filter requested", str(ctx.exception))
Expand Down Expand Up @@ -163,7 +163,7 @@ def test_no_filters(self):
def test_bad_filter(self):
with self.app:
self.app.get("/?test=\"test\"")
self.assertRaises(BadFilterError, get_filters_from_query_string)
self.assertRaises(FilterError, get_filters_from_query_string)

def test_limit_filter(self):
with self.app:
Expand Down

0 comments on commit e27c887

Please sign in to comment.