mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-17 10:13:56 -05:00
API support for id args for documents & objects (#4519)
This commit is contained in:
parent
95ab3b99f8
commit
73cbf6c33d
@ -21,19 +21,38 @@ DATE_KWARGS = ["year", "month", "day", "date__gt", "gt", "date__lt", "lt"]
|
|||||||
class CorrespondentFilterSet(FilterSet):
|
class CorrespondentFilterSet(FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Correspondent
|
model = Correspondent
|
||||||
fields = {"name": CHAR_KWARGS}
|
fields = {
|
||||||
|
"id": ID_KWARGS,
|
||||||
|
"name": CHAR_KWARGS,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class TagFilterSet(FilterSet):
|
class TagFilterSet(FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Tag
|
model = Tag
|
||||||
fields = {"name": CHAR_KWARGS}
|
fields = {
|
||||||
|
"id": ID_KWARGS,
|
||||||
|
"name": CHAR_KWARGS,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeFilterSet(FilterSet):
|
class DocumentTypeFilterSet(FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DocumentType
|
model = DocumentType
|
||||||
fields = {"name": CHAR_KWARGS}
|
fields = {
|
||||||
|
"id": ID_KWARGS,
|
||||||
|
"name": CHAR_KWARGS,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class StoragePathFilterSet(FilterSet):
|
||||||
|
class Meta:
|
||||||
|
model = StoragePath
|
||||||
|
fields = {
|
||||||
|
"id": ID_KWARGS,
|
||||||
|
"name": CHAR_KWARGS,
|
||||||
|
"path": CHAR_KWARGS,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ObjectFilter(Filter):
|
class ObjectFilter(Filter):
|
||||||
@ -128,6 +147,7 @@ class DocumentFilterSet(FilterSet):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Document
|
model = Document
|
||||||
fields = {
|
fields = {
|
||||||
|
"id": ID_KWARGS,
|
||||||
"title": CHAR_KWARGS,
|
"title": CHAR_KWARGS,
|
||||||
"content": CHAR_KWARGS,
|
"content": CHAR_KWARGS,
|
||||||
"archive_serial_number": INT_KWARGS,
|
"archive_serial_number": INT_KWARGS,
|
||||||
@ -159,15 +179,6 @@ class LogFilterSet(FilterSet):
|
|||||||
fields = {"level": INT_KWARGS, "created": DATE_KWARGS, "group": ID_KWARGS}
|
fields = {"level": INT_KWARGS, "created": DATE_KWARGS, "group": ID_KWARGS}
|
||||||
|
|
||||||
|
|
||||||
class StoragePathFilterSet(FilterSet):
|
|
||||||
class Meta:
|
|
||||||
model = StoragePath
|
|
||||||
fields = {
|
|
||||||
"name": CHAR_KWARGS,
|
|
||||||
"path": CHAR_KWARGS,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class ShareLinkFilterSet(FilterSet):
|
class ShareLinkFilterSet(FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ShareLink
|
model = ShareLink
|
||||||
|
@ -450,6 +450,27 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
|
|||||||
results = response.data["results"]
|
results = response.data["results"]
|
||||||
self.assertEqual(len(results), 0)
|
self.assertEqual(len(results), 0)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/documents/?id__in={doc1.id},{doc2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/documents/?id__range={doc1.id},{doc3.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 3)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/documents/?id={doc2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
|
||||||
# custom field name
|
# custom field name
|
||||||
response = self.client.get(
|
response = self.client.get(
|
||||||
f"/api/documents/?custom_fields__icontains={cf1.name}",
|
f"/api/documents/?custom_fields__icontains={cf1.name}",
|
||||||
@ -4655,6 +4676,82 @@ class TestApiRemoteVersion(DirectoriesMixin, APITestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestApiObjects(DirectoriesMixin, APITestCase):
|
||||||
|
def setUp(self) -> None:
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
user = User.objects.create_superuser(username="temp_admin")
|
||||||
|
self.client.force_authenticate(user=user)
|
||||||
|
|
||||||
|
self.tag1 = Tag.objects.create(name="t1", is_inbox_tag=True)
|
||||||
|
self.tag2 = Tag.objects.create(name="t2")
|
||||||
|
self.tag3 = Tag.objects.create(name="t3")
|
||||||
|
self.c1 = Correspondent.objects.create(name="c1")
|
||||||
|
self.c2 = Correspondent.objects.create(name="c2")
|
||||||
|
self.c3 = Correspondent.objects.create(name="c3")
|
||||||
|
self.dt1 = DocumentType.objects.create(name="dt1")
|
||||||
|
self.dt2 = DocumentType.objects.create(name="dt2")
|
||||||
|
self.sp1 = StoragePath.objects.create(name="sp1", path="Something/{title}")
|
||||||
|
self.sp2 = StoragePath.objects.create(name="sp2", path="Something2/{title}")
|
||||||
|
|
||||||
|
def test_object_filters(self):
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/tags/?id={self.tag2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/tags/?id__in={self.tag1.id},{self.tag3.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/correspondents/?id={self.c2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/correspondents/?id__in={self.c1.id},{self.c3.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/document_types/?id={self.dt1.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/document_types/?id__in={self.dt1.id},{self.dt2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/storage_paths/?id={self.sp1.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
f"/api/storage_paths/?id__in={self.sp1.id},{self.sp2.id}",
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
results = response.data["results"]
|
||||||
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
|
||||||
class TestApiStoragePaths(DirectoriesMixin, APITestCase):
|
class TestApiStoragePaths(DirectoriesMixin, APITestCase):
|
||||||
ENDPOINT = "/api/storage_paths/"
|
ENDPOINT = "/api/storage_paths/"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user