Skip to content

Commit 68617fa

Browse files
authored
Allow multiple values in job.state filter (#480)
* allow multiple filters in jobs view #479 * add tests for job state filter #90 #91
1 parent 151de98 commit 68617fa

3 files changed

Lines changed: 46 additions & 22 deletions

File tree

obstracts/server/values/values.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
from stix2 import IPv4Address
2-
from stix2extensions import BankAccount
3-
from datetime import datetime
4-
from typing import List, Dict, Tuple, Callable
1+
from typing import Callable
52
import logging
63

7-
from dogesec_commons.objects.helpers import TLP_VISIBLE_TO_ALL
84
from stix2arango.stix2arango.stix2arango import post_upload_hook
95
from obstracts.server.models import ObjectValue
106

@@ -215,22 +211,6 @@ def guess_kb_data(obj: dict) -> str | None:
215211
return kb_name, extra
216212

217213

218-
def get_visibility(obj: dict) -> str:
219-
"""
220-
Determine the visibility of a STIX object based on its properties.
221-
222-
Returns:
223-
- "public" if the object is marked as public
224-
- "private" if the object is marked as private
225-
- "unknown" if visibility cannot be determined
226-
"""
227-
if not obj.get("created_by_ref") or set(obj.get("object_marking_refs", [])).intersection(
228-
TLP_VISIBLE_TO_ALL
229-
):
230-
return "public"
231-
return "private"
232-
233-
234214
def extract_object_metadata(obj: dict) -> dict:
235215
"""
236216
Extract key metadata from a STIX object.

obstracts/server/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,8 +1213,9 @@ class filterset_class(FilterSet):
12131213
label="Filter by Feed ID (e.g. `6c6e6448-04d4-42a3-9214-4f0f7d02694e`.",
12141214
lookup_expr="in",
12151215
)
1216-
state = Filter(
1216+
state = BaseCSVFilter(
12171217
label="Filter by state.",
1218+
lookup_expr="in",
12181219
)
12191220
post_id = UUIDFilter(
12201221
label="Filter by Post ID",

tests/src/views/test_views.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from unittest.mock import patch
22
import uuid
3+
import pytest
34
from tests.utils import Transport
45

56

@@ -34,3 +35,45 @@ def test_update_vulnerabilities_action(client, monkeypatch, db, celery_always_ea
3435
assert job.type == ob_models.JobType.SYNC_VULNERABILITIES
3536
assert job.state == ob_models.JobState.PROCESSING
3637
mock_update_vulnerabilities.assert_called_once_with(uuid.UUID(job_id))
38+
39+
@pytest.mark.parametrize(
40+
"states,expected_ids",
41+
[
42+
(["in-queue"], {"9e0d79ed-94d9-42a3-aa41-4772ae922176"}),
43+
(["processing"], {"2583d09b-6535-4f15-9fd1-5dcb55230f08"}),
44+
(["in-queue", "processing"], {"9e0d79ed-94d9-42a3-aa41-4772ae922176", "2583d09b-6535-4f15-9fd1-5dcb55230f08"}),
45+
(["cancelled"], {"0014c5a1-7a5e-408f-88ea-83ec5a1b8af1"}),
46+
(["processed"], set()),
47+
([], {"9e0d79ed-94d9-42a3-aa41-4772ae922176", "2583d09b-6535-4f15-9fd1-5dcb55230f08", "0014c5a1-7a5e-408f-88ea-83ec5a1b8af1"}),
48+
]
49+
)
50+
@pytest.mark.django_db
51+
def test_jobs_filter_by_multiple_states(client, api_schema, states, expected_ids):
52+
from obstracts.server import models as ob_models
53+
54+
keep_1 = ob_models.Job.objects.create(
55+
id='9e0d79ed-94d9-42a3-aa41-4772ae922176',
56+
type=ob_models.JobType.FEED_INDEX,
57+
state=ob_models.JobState.QUEUED,
58+
)
59+
keep_2 = ob_models.Job.objects.create(
60+
id='2583d09b-6535-4f15-9fd1-5dcb55230f08',
61+
type=ob_models.JobType.PDF_INDEX,
62+
state=ob_models.JobState.PROCESSING,
63+
)
64+
ob_models.Job.objects.create(
65+
id='0014c5a1-7a5e-408f-88ea-83ec5a1b8af1',
66+
type=ob_models.JobType.REPROCESS_POSTS,
67+
state=ob_models.JobState.CANCELLED,
68+
)
69+
70+
resp = client.get(
71+
f"/api/v1/jobs/?state={','.join(states)}"
72+
)
73+
assert resp.status_code == 200
74+
assert resp.data["total_results_count"] == len(expected_ids)
75+
76+
returned = {item["id"] for item in resp.data["jobs"]}
77+
assert returned == expected_ids
78+
79+
api_schema["/api/v1/jobs/"]["GET"].validate_response(Transport.get_st_response(resp))

0 commit comments

Comments
 (0)