Skip to content

Commit 4c86fe5

Browse files
Updated ingest_wistia_events.py to use a specific manifest_prefix
1 parent 96ec764 commit 4c86fe5

3 files changed

Lines changed: 69 additions & 2 deletions

File tree

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ workflow. The ingestion job publishes `INGESTION_MANIFEST_URI` for its run. The
1313
validation job reads that property, so it processes the exact manifest produced by
1414
the preceding ingestion job.
1515

16+
The ingestion job stores manifests separately from temporary ingestion data. Its
17+
default manifest prefix is:
18+
19+
```text
20+
metadata/wistia/events/manifests
21+
```
22+
23+
Override it with the ingestion job parameter `--MANIFEST_PREFIX`.
24+
1625
For a manual validation run outside the workflow, provide:
1726

1827
```text

glue_jobs/ingest_wistia_events.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
99
Optional arguments:
1010
--S3_PREFIX Default: ingestion/wistia/events
11+
--MANIFEST_PREFIX Default: metadata/wistia/events/manifests
1112
--SECRET_REGION Default: the Glue job's AWS region
1213
--WORKFLOW_NAME Supplied by AWS Glue when run in a workflow
1314
--WORKFLOW_RUN_ID Supplied by AWS Glue when run in a workflow
@@ -62,6 +63,7 @@ class JobConfig:
6263
secret_region: str | None
6364
s3_bucket: str
6465
s3_prefix: str
66+
manifest_prefix: str
6567
media_ids: tuple[str, ...]
6668
workflow_name: str | None
6769
workflow_run_id: str | None
@@ -109,14 +111,19 @@ def load_config() -> JobConfig:
109111
["JOB_NAME", "SECRET_ID", "S3_BUCKET", "MEDIA_IDS"],
110112
)
111113
prefix = parse_optional_argument("S3_PREFIX", "ingestion/wistia/events")
114+
manifest_prefix = parse_optional_argument(
115+
"MANIFEST_PREFIX", "metadata/wistia/events/manifests"
116+
)
112117
assert prefix is not None
118+
assert manifest_prefix is not None
113119

114120
return JobConfig(
115121
job_name=required["JOB_NAME"],
116122
secret_id=required["SECRET_ID"],
117123
secret_region=parse_optional_argument("SECRET_REGION"),
118124
s3_bucket=required["S3_BUCKET"],
119125
s3_prefix=prefix.strip("/"),
126+
manifest_prefix=manifest_prefix.strip("/"),
120127
media_ids=parse_media_ids(required["MEDIA_IDS"]),
121128
workflow_name=parse_optional_argument("WORKFLOW_NAME"),
122129
workflow_run_id=parse_optional_argument("WORKFLOW_RUN_ID"),
@@ -400,8 +407,8 @@ def write_manifest(
400407
results: list[dict[str, Any]],
401408
) -> str:
402409
manifest_key = (
403-
f"{config.s3_prefix}/extraction_date={extraction_time:%Y-%m-%d}/"
404-
f"_manifests/manifest_{extraction_time:%Y%m%dT%H%M%SZ}_{run_id}.json"
410+
f"{config.manifest_prefix}/extraction_date={extraction_time:%Y-%m-%d}/"
411+
f"manifest_{extraction_time:%Y%m%dT%H%M%SZ}_{run_id}.json"
405412
)
406413
manifest = {
407414
"api_url": API_URL,

tests/test_ingest_wistia_events.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import importlib.util
2+
import json
23
import sys
34
import types
45
import unittest
6+
from datetime import date, datetime, timezone
57
from pathlib import Path
68
from unittest.mock import Mock
79

@@ -32,6 +34,7 @@ def config(self, workflow_name=None, workflow_run_id=None):
3234
secret_region=None,
3335
s3_bucket="bucket",
3436
s3_prefix="ingestion/wistia/events",
37+
manifest_prefix="metadata/wistia/events/manifests",
3538
media_ids=("media-1", "media-2"),
3639
workflow_name=workflow_name,
3740
workflow_run_id=workflow_run_id,
@@ -74,5 +77,53 @@ def test_partial_workflow_context_fails(self):
7477
)
7578

7679

80+
class ManifestTests(unittest.TestCase):
81+
def test_manifest_uses_metadata_prefix(self):
82+
config = ingestion.JobConfig(
83+
job_name="ingestion",
84+
secret_id="secret",
85+
secret_region=None,
86+
s3_bucket="bucket",
87+
s3_prefix="ingestion/wistia/events",
88+
manifest_prefix="metadata/wistia/events/manifests",
89+
media_ids=("media-1",),
90+
workflow_name=None,
91+
workflow_run_id=None,
92+
)
93+
s3_client = Mock()
94+
manifest_uri = ingestion.write_manifest(
95+
s3_client=s3_client,
96+
config=config,
97+
extraction_time=datetime(2026, 6, 5, 17, 30, tzinfo=timezone.utc),
98+
run_id="run-123",
99+
start_date=date(2024, 6, 5),
100+
end_date=date(2026, 6, 5),
101+
results=[
102+
{
103+
"event_count": 1,
104+
"media_id": "media-1",
105+
"page_count": 1,
106+
"s3_uri": "s3://bucket/ingestion/events.jsonl.gz",
107+
"status": "succeeded",
108+
}
109+
],
110+
)
111+
112+
self.assertEqual(
113+
"s3://bucket/metadata/wistia/events/manifests/"
114+
"extraction_date=2026-06-05/"
115+
"manifest_20260605T173000Z_run-123.json",
116+
manifest_uri,
117+
)
118+
put_call = s3_client.put_object.call_args.kwargs
119+
self.assertEqual("bucket", put_call["Bucket"])
120+
self.assertEqual(
121+
"metadata/wistia/events/manifests/extraction_date=2026-06-05/"
122+
"manifest_20260605T173000Z_run-123.json",
123+
put_call["Key"],
124+
)
125+
self.assertEqual("run-123", json.loads(put_call["Body"])["run_id"])
126+
127+
77128
if __name__ == "__main__":
78129
unittest.main()

0 commit comments

Comments
 (0)