assemblyline-core 4.4.1.dev279__tar.gz → 4.4.1.dev281__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of assemblyline-core might be problematic. Click here for more details.
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/PKG-INFO +1 -1
- assemblyline-core-4.4.1.dev281/assemblyline_core/VERSION +1 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/plumber/run_plumber.py +47 -5
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core.egg-info/PKG-INFO +1 -1
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_plumber.py +40 -5
- assemblyline-core-4.4.1.dev279/assemblyline_core/VERSION +0 -1
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/LICENCE.md +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/README.md +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/alerter/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/alerter/processing.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/alerter/run_alerter.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/archiver/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/archiver/run_archiver.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/__main__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/client.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/dispatcher.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/schedules.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/dispatching/timeout.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/expiry/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/expiry/run_expiry.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/ingester/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/ingester/__main__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/ingester/constants.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/ingester/ingester.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/es_metrics.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/helper.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/metrics_server.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/plumber/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/client.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/creator/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/creator/run.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/creator/run_worker.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/loader/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/loader/run.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/loader/run_worker.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/replay.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/safelist_client.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/collection.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/controllers/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/controllers/interface.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/run_scaler.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/scaler/scaler_server.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/server_base.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/submission_client.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/tasking_client.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/updater/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/updater/helper.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/updater/run_updater.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/crawler.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/department_map.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/safelist.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/stream_map.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/worker.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/workflow/__init__.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/workflow/run_workflow.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core.egg-info/SOURCES.txt +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core.egg-info/dependency_links.txt +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core.egg-info/requires.txt +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core.egg-info/top_level.txt +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/setup.cfg +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/setup.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_alerter.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_dispatcher.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_expiry.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_replay.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_scaler.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_scheduler.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_simulation.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_vacuum.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_worker_ingest.py +0 -0
- {assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_worker_submit.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.4.1.dev281
|
|
@@ -7,18 +7,21 @@ disabled or deleted for which a service queue exists, the dispatcher will be inf
|
|
|
7
7
|
had an error.
|
|
8
8
|
"""
|
|
9
9
|
import threading
|
|
10
|
+
import warnings
|
|
10
11
|
from typing import Optional
|
|
11
|
-
from assemblyline.common.forge import get_service_queue
|
|
12
12
|
|
|
13
|
-
from assemblyline.odm.models.error import Error
|
|
14
|
-
from assemblyline.common.isotime import now_as_iso
|
|
15
13
|
from assemblyline.common.constants import service_queue_name
|
|
14
|
+
from assemblyline.common.forge import get_service_queue
|
|
15
|
+
from assemblyline.common.isotime import now, now_as_iso
|
|
16
|
+
from assemblyline.common.security import generate_random_secret
|
|
17
|
+
from assemblyline.datastore.store import TRANSPORT_TIMEOUT
|
|
18
|
+
from assemblyline.odm.models.error import Error
|
|
16
19
|
from assemblyline.odm.models.service import Service
|
|
17
20
|
from assemblyline.remote.datatypes import retry_call
|
|
18
21
|
from assemblyline.remote.datatypes.queues.named import NamedQueue
|
|
19
|
-
|
|
20
22
|
from assemblyline_core.dispatching.client import DispatchClient
|
|
21
23
|
from assemblyline_core.server_base import CoreBase, ServiceStage
|
|
24
|
+
from elasticsearch import Elasticsearch
|
|
22
25
|
|
|
23
26
|
DAY = 60 * 60 * 24
|
|
24
27
|
TASK_DELETE_CHUNK = 10000
|
|
@@ -37,6 +40,31 @@ class Plumber(CoreBase):
|
|
|
37
40
|
self.stop_signals: dict[str, threading.Event] = {}
|
|
38
41
|
self.service_limit: dict[str, int] = {}
|
|
39
42
|
|
|
43
|
+
# Ensure roles for "plumber" user are created
|
|
44
|
+
self.datastore.ds.with_retries(
|
|
45
|
+
self.datastore.ds.client.security.put_role,
|
|
46
|
+
name="manage_tasks",
|
|
47
|
+
indices=[{"names": [".tasks"], "privileges": ["all"], "allow_restricted_indices": True}])
|
|
48
|
+
|
|
49
|
+
# Initialize/update 'plumber' user in Elasticsearch to perform cleanup
|
|
50
|
+
password = generate_random_secret()
|
|
51
|
+
self.datastore.ds.with_retries(
|
|
52
|
+
self.datastore.ds.client.security.put_user,
|
|
53
|
+
username="plumber",
|
|
54
|
+
password=password,
|
|
55
|
+
roles=["manage_tasks", "superuser"]
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Close existing connection and re-connect to the datastore as "plumber" user
|
|
59
|
+
self.datastore.ds.client.close()
|
|
60
|
+
self.datastore.ds.client = Elasticsearch(hosts=self.datastore.ds.get_hosts(),
|
|
61
|
+
basic_auth=("plumber", password),
|
|
62
|
+
max_retries=0,
|
|
63
|
+
request_timeout=TRANSPORT_TIMEOUT,
|
|
64
|
+
ca_certs=self.datastore.ds.ca_certs)
|
|
65
|
+
if not self.datastore.ds.ping():
|
|
66
|
+
raise Exception("Unable to connect to datastore as 'plumber'")
|
|
67
|
+
|
|
40
68
|
def stop(self):
|
|
41
69
|
for sig in self.stop_signals.values():
|
|
42
70
|
sig.set()
|
|
@@ -151,7 +179,21 @@ class Plumber(CoreBase):
|
|
|
151
179
|
def cleanup_old_tasks(self):
|
|
152
180
|
self.log.info("Cleaning up task index for old completed tasks...")
|
|
153
181
|
while self.running:
|
|
154
|
-
|
|
182
|
+
# Create a new task to delete expired tasks
|
|
183
|
+
# NOTE: This will delete up to 10000 completed tasks older then a day
|
|
184
|
+
q = f"completed:true AND task.start_time_in_millis:<{now(-1 * DAY) * 1000}"
|
|
185
|
+
with warnings.catch_warnings():
|
|
186
|
+
warnings.simplefilter("ignore")
|
|
187
|
+
task = self.datastore.ds.with_retries(self.datastore.ds.client.delete_by_query, index='.tasks',
|
|
188
|
+
q=q, wait_for_completion=False, conflicts='proceed',
|
|
189
|
+
max_docs=TASK_DELETE_CHUNK)
|
|
190
|
+
|
|
191
|
+
# Wait until the tasks deletion task is over
|
|
192
|
+
res = self.datastore.ds._get_task_results(task)
|
|
193
|
+
|
|
194
|
+
# Get the number of deleted items
|
|
195
|
+
deleted = res['deleted']
|
|
196
|
+
|
|
155
197
|
if not deleted:
|
|
156
198
|
self.sleep(self.delay)
|
|
157
199
|
else:
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
+
from time import sleep
|
|
1
2
|
from unittest import mock
|
|
2
|
-
from redis import Redis
|
|
3
3
|
|
|
4
4
|
from assemblyline.odm.messages.task import Task
|
|
5
|
-
|
|
6
|
-
from assemblyline.odm.random_data import random_model_obj
|
|
7
5
|
from assemblyline.odm.models.service import Service
|
|
8
|
-
|
|
6
|
+
from assemblyline.odm.random_data import random_model_obj
|
|
9
7
|
from assemblyline_core.plumber.run_plumber import Plumber
|
|
10
8
|
from assemblyline_core.server_base import ServiceStage
|
|
11
|
-
|
|
12
9
|
from mocking import TrueCountTimes
|
|
10
|
+
from redis import Redis
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
def test_expire_missing_service():
|
|
@@ -24,6 +22,9 @@ def test_expire_missing_service():
|
|
|
24
22
|
service_a.enabled = True
|
|
25
23
|
|
|
26
24
|
datastore.list_all_services.return_value = [service_a]
|
|
25
|
+
datastore.ds.ca_certs = None
|
|
26
|
+
datastore.ds.get_hosts.return_value = ["http://localhost:9200"]
|
|
27
|
+
|
|
27
28
|
plumber = Plumber(redis=redis, redis_persist=redis_persist, datastore=datastore, delay=1)
|
|
28
29
|
plumber.get_service_stage = mock.MagicMock(return_value=ServiceStage.Running)
|
|
29
30
|
plumber.dispatch_client = mock.MagicMock()
|
|
@@ -51,6 +52,8 @@ def test_flush_paused_queues():
|
|
|
51
52
|
service_a.enabled = True
|
|
52
53
|
|
|
53
54
|
datastore.list_all_services.return_value = [service_a]
|
|
55
|
+
datastore.ds.ca_certs = None
|
|
56
|
+
datastore.ds.get_hosts.return_value = ["http://localhost:9200"]
|
|
54
57
|
|
|
55
58
|
plumber = Plumber(redis=redis, redis_persist=redis_persist, datastore=datastore, delay=1)
|
|
56
59
|
plumber.get_service_stage = mock.MagicMock(return_value=ServiceStage.Running)
|
|
@@ -72,3 +75,35 @@ def test_flush_paused_queues():
|
|
|
72
75
|
assert plumber.dispatch_client.service_failed.call_count == 1
|
|
73
76
|
args = plumber.dispatch_client.service_failed.call_args
|
|
74
77
|
assert args[0][0] == task.sid
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_cleanup_old_tasks(datastore_connection):
|
|
81
|
+
# Create a bunch of random "old" tasks and clean them up
|
|
82
|
+
redis = mock.MagicMock(spec=Redis)
|
|
83
|
+
redis_persist = mock.MagicMock(spec=Redis)
|
|
84
|
+
plumber = Plumber(redis=redis, redis_persist=redis_persist, datastore=datastore_connection, delay=1)
|
|
85
|
+
|
|
86
|
+
# Generate new documents in .tasks index
|
|
87
|
+
num_old_tasks = 10
|
|
88
|
+
[plumber.datastore.ds.client.index(index=".tasks", document={
|
|
89
|
+
"completed": True,
|
|
90
|
+
"task": {
|
|
91
|
+
"start_time_in_millis": 0
|
|
92
|
+
}
|
|
93
|
+
}) for _ in range(num_old_tasks)]
|
|
94
|
+
sleep(1)
|
|
95
|
+
|
|
96
|
+
# Assert that these have been indeed committed to the tasks index
|
|
97
|
+
assert plumber.datastore.ds.client.search(index='.tasks',
|
|
98
|
+
q="task.start_time_in_millis:0",
|
|
99
|
+
track_total_hits=True,
|
|
100
|
+
size=0)['hits']['total']['value'] == num_old_tasks
|
|
101
|
+
|
|
102
|
+
# Run task cleanup, we should return to no more "old" completed tasks
|
|
103
|
+
plumber.running = TrueCountTimes(count=1)
|
|
104
|
+
plumber.cleanup_old_tasks()
|
|
105
|
+
sleep(1)
|
|
106
|
+
assert plumber.datastore.ds.client.search(index='.tasks',
|
|
107
|
+
q="task.start_time_in_millis:0",
|
|
108
|
+
track_total_hits=True,
|
|
109
|
+
size=0)['hits']['total']['value'] == 0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4.4.1.dev279
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/replay/replay.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/server_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/assemblyline_core/vacuum/worker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_worker_ingest.py
RENAMED
|
File without changes
|
{assemblyline-core-4.4.1.dev279 → assemblyline-core-4.4.1.dev281}/test/test_worker_submit.py
RENAMED
|
File without changes
|