Skip to content

Commit fecd29c

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent 2e6ad66 commit fecd29c

11 files changed

Lines changed: 46 additions & 48 deletions

File tree

.github/scripts/cleanup_staging_bucket.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
2+
from datetime import UTC, datetime, timedelta
3+
24
import boto3
3-
from datetime import datetime, timedelta, timezone
45

56
DELETION_THRESHOLD_DAYS = 7
67
# Load config from environment
@@ -25,7 +26,7 @@
2526
pages = paginator.paginate(Bucket=STAGING_BUCKET)
2627

2728
objects_to_delete = []
28-
now = datetime.now(timezone.utc)
29+
now = datetime.now(UTC)
2930
threshold = now - timedelta(days=DELETION_THRESHOLD_DAYS)
3031

3132
for page in pages:
@@ -50,7 +51,7 @@
5051
response = client.delete_objects(
5152
Bucket=STAGING_BUCKET, Delete={"Objects": chunk, "Quiet": True}
5253
)
53-
if "Errors" in response and response["Errors"]:
54+
if response.get("Errors"):
5455
print(" ❌ ERROR during batch deletion:")
5556
for error in response["Errors"]:
5657
print(

.github/scripts/publish_script.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import os
21
import json
2+
import os
33
import subprocess
4-
54
from typing import Any
5+
66
import boto3
77
from botocore.exceptions import ClientError
88

@@ -194,7 +194,7 @@ def handle_publications(manifest_data: list[dict[str, Any]]) -> bool:
194194
if entry.get("description") == "pending-merge":
195195
entry["description"] = commit_details["subject"]
196196

197-
if "staging_key" in entry and entry["staging_key"]:
197+
if entry.get("staging_key"):
198198
staging_key = entry.pop("staging_key")
199199
final_key = entry["r2_object_key"]
200200
print(f"Publishing: {dataset['fileName']} v{entry['version']}")

src/datamanager/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
from . import manifest as manifest
1717
from .__main__ import app as app # keeps `python -m datamanager` handy
1818

19-
__all__ = ["app", "core", "manifest", "__version__"]
19+
__all__ = ["__version__", "app", "core", "manifest"]
2020
__version__: str = _dist_version("datamanager")

src/datamanager/__main__.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
# datamanager/__main__.py
2+
import re
23
import subprocess
3-
from datetime import datetime, timezone
44
import tempfile
5-
import re
6-
from dateutil.parser import isoparse
5+
from collections.abc import Callable
6+
from datetime import UTC, datetime
77
from pathlib import Path
8+
from typing import Any
89

910
import questionary
1011
import typer
12+
from dateutil.parser import isoparse
1113
from rich.console import Console
1214
from rich.table import Table
1315

14-
from typing import Callable, Optional, Any
15-
16-
from datamanager.config import settings
1716
from datamanager import core, manifest
18-
17+
from datamanager.config import settings
1918

2019
# Common options for all commands
2120
COMMON_OPTIONS = dict(
@@ -31,13 +30,13 @@
3130
def _ask_confirm(ctx: typer.Context, prompt: str, default: bool = False) -> bool:
3231
if ctx.obj.get("no_prompt"):
3332
return True
34-
result: Optional[bool] = questionary.confirm(prompt, default=default).ask()
33+
result: bool | None = questionary.confirm(prompt, default=default).ask()
3534
return bool(result) # Cast to bool to avoid NoneType issues
3635

3736

3837
def _rel(iso: str) -> str:
3938
dt = isoparse(iso)
40-
delta = datetime.now(timezone.utc) - dt
39+
delta = datetime.now(UTC) - dt
4140
hours = int(delta.total_seconds() // 3600)
4241
return f"{hours} h ago"
4342

@@ -138,7 +137,7 @@ def list_datasets(ctx: typer.Context) -> None:
138137
console.print(table)
139138

140139

141-
def _run_pull_logic(name: str, version: str, output: Optional[Path]) -> None:
140+
def _run_pull_logic(name: str, version: str, output: Path | None) -> None:
142141
"""The core logic for pulling and verifying a dataset."""
143142
console.print(f"🔎 Locating version '{version}' for dataset '{name}'...")
144143
version_entry = manifest.get_version_entry(name, version)
@@ -188,7 +187,7 @@ def pull(
188187
"-v",
189188
help="Version to pull (e.g., 'v1'). Defaults to latest.",
190189
),
191-
output: Optional[Path] = typer.Option(
190+
output: Path | None = typer.Option(
192191
None,
193192
"--output",
194193
"-o",
@@ -330,7 +329,7 @@ def _run_prepare_logic(ctx: typer.Context, name: str, file: Path) -> None:
330329
console.print(f"Change detected! Preparing new version: {new_version}")
331330

332331
console.print("Downloading previous version to generate diff...")
333-
diff_git_path: Optional[Path] = None
332+
diff_git_path: Path | None = None
334333
with tempfile.TemporaryDirectory() as tempdir:
335334
old_path = Path(tempdir) / "prev.sqlite"
336335
# Download from the PRODUCTION bucket
@@ -355,7 +354,7 @@ def _run_prepare_logic(ctx: typer.Context, name: str, file: Path) -> None:
355354

356355
new_entry = {
357356
"version": new_version,
358-
"timestamp": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
357+
"timestamp": datetime.now(UTC).isoformat().replace("+00:00", "Z"),
359358
"sha256": new_hash,
360359
"r2_object_key": final_r2_key,
361360
"staging_key": staging_key,
@@ -376,9 +375,7 @@ def _run_prepare_logic(ctx: typer.Context, name: str, file: Path) -> None:
376375
"history": [
377376
{
378377
"version": "v1",
379-
"timestamp": datetime.now(timezone.utc)
380-
.isoformat()
381-
.replace("+00:00", "Z"),
378+
"timestamp": datetime.now(UTC).isoformat().replace("+00:00", "Z"),
382379
"sha256": new_hash,
383380
"r2_object_key": f"{Path(Path(name).stem)}/v1-{new_hash}.sqlite",
384381
"staging_key": staging_key,
@@ -492,7 +489,7 @@ def _run_rollback_logic(ctx: typer.Context, name: str, to_version: str) -> None:
492489

493490
rollback_entry = {
494491
"version": new_version,
495-
"timestamp": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
492+
"timestamp": datetime.now(UTC).isoformat().replace("+00:00", "Z"),
496493
"sha256": target_entry["sha256"],
497494
"r2_object_key": target_entry["r2_object_key"],
498495
"diffFromPrevious": None,

src/datamanager/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# src/datamanager/config.py
22
from __future__ import annotations
3+
4+
import warnings
35
from dataclasses import dataclass
46
from functools import cached_property
57
from pathlib import Path
6-
from dotenv import find_dotenv, dotenv_values
7-
import warnings
8+
9+
from dotenv import dotenv_values, find_dotenv
810

911
_ENV_PATH = Path(find_dotenv()) if find_dotenv() else None
1012
_ENV = dotenv_values(_ENV_PATH) if _ENV_PATH else {}

src/datamanager/core.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,22 @@
22
import difflib
33
import hashlib
44
import io
5+
import os
56
import shutil
67
import sqlite3
78
import subprocess
8-
from pathlib import Path, PurePath
9-
import os
109
import uuid
11-
12-
from botocore.exceptions import ClientError
10+
from pathlib import Path, PurePath
11+
from typing import Any, TypedDict
1312

1413
import boto3
15-
from rich.progress import Progress
14+
from botocore.exceptions import ClientError
1615
from rich.console import Console
17-
16+
from rich.progress import Progress
1817
from types_boto3_s3.client import S3Client
1918

20-
from typing import Any, TypedDict
21-
2219
from datamanager.config import settings
2320

24-
2521
console = Console()
2622

2723

src/datamanager/manifest.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66

77
import json
88
from pathlib import Path
9-
from typing import Any, Optional
9+
from typing import Any
1010

1111
from rich.console import Console
1212

1313
from datamanager.config import settings
1414

1515
__all__ = [
16-
"read_manifest",
17-
"write_manifest",
18-
"get_dataset",
1916
"add_history_entry",
20-
"update_latest_history_entry",
21-
"get_version_entry",
2217
"add_new_dataset",
18+
"get_dataset",
19+
"get_version_entry",
20+
"read_manifest",
2321
"update_dataset",
22+
"update_latest_history_entry",
23+
"write_manifest",
2424
]
2525

2626
# Initialize console for any feedback
@@ -73,7 +73,7 @@ def update_latest_version(name: str, new_version: str) -> None:
7373
write_manifest(data)
7474

7575

76-
def get_dataset(name: str) -> Optional[dict[str, Any]]:
76+
def get_dataset(name: str) -> dict[str, Any] | None:
7777
"""
7878
Finds and returns a single dataset from the manifest by its logical name.
7979
@@ -158,7 +158,7 @@ def update_latest_history_entry(name: str, final_entry: dict[str, Any]) -> None:
158158

159159
def get_version_entry(
160160
dataset_name: str, version: str = "latest"
161-
) -> Optional[dict[str, Any]]:
161+
) -> dict[str, Any] | None:
162162
"""
163163
Finds the history entry for a specific version of a dataset.
164164

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import shutil
44
import sqlite3
55
import subprocess
6+
from collections.abc import Generator
67
from pathlib import Path
7-
from typing import Any, Generator
8+
from typing import Any
89

910
import pytest
1011

tests/test_core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
from pathlib import Path
44
from typing import Any
55
from unittest.mock import MagicMock
6-
from pytest_mock import MockerFixture
7-
import pytest
86

7+
import pytest
98
from botocore.exceptions import ClientError
9+
from pytest_mock import MockerFixture
1010

1111
from datamanager import core
1212
from datamanager.config import settings

tests/test_main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from typer.testing import CliRunner
66

77
from datamanager import __main__ as main_app
8-
from datamanager.__main__ import app
98
from datamanager import manifest
9+
from datamanager.__main__ import app
1010
from datamanager.config import settings
1111

1212
runner = CliRunner()

0 commit comments

Comments
 (0)