diff --git a/ereuse_devicehub/resources/documents/documents.py b/ereuse_devicehub/resources/documents/documents.py index b894e3a1..1a1584e8 100644 --- a/ereuse_devicehub/resources/documents/documents.py +++ b/ereuse_devicehub/resources/documents/documents.py @@ -65,7 +65,26 @@ class DocumentView(DeviceView): if 'filter' in request.args: filters = json.loads(request.args.get('filter', {})) ids = filters.get('ids', []) - query = devs.Device.query.filter(Device.id.in_(ids)) + + if not ids and not id: + msg = 'Document must be an ID or UUID.' + raise teal.marshmallow.ValidationError(msg) + + if id: + try: + id = uuid.UUID(id) + except ValueError: + try: + ids.append(int(id)) + except ValueError: + msg = 'Document must be an ID or UUID.' + raise teal.marshmallow.ValidationError(msg) + else: + query = devs.Device.query.filter(Device.id.in_(ids)) + else: + query = evs.Action.query.filter_by(id=id) + else: + query = devs.Device.query.filter(Device.id.in_(ids)) # if id: # # todo we assume we can pass both device id and action id @@ -99,7 +118,6 @@ class DocumentView(DeviceView): @staticmethod def erasure(query: db.Query): - # import pdb; pdb.set_trace() def erasures(): for model in query: if isinstance(model, devs.Computer): diff --git a/tests/test_documents.py b/tests/test_documents.py index bf11bb4a..0db7d716 100644 --- a/tests/test_documents.py +++ b/tests/test_documents.py @@ -70,7 +70,7 @@ def test_erasure_certificate_private_query(user: UserClient): doc, response = user.get(res=documents.DocumentDef.t, item='erasures/', query=[ - ('filter', {'id': [snapshot['device']['id']]})], + ('filter', {'ids': [snapshot['device']['id']]})], accept=ANY) assert 'html' in response.content_type assert '