File size: 1,115 Bytes
42029e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c66d1b
 
42029e4
 
 
 
 
8c66d1b
42029e4
8c66d1b
42029e4
 
8c66d1b
42029e4
 
8c66d1b
42029e4
 
 
 
 
8c66d1b
42029e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from __future__ import annotations
import json
from pathlib import Path
from typing import Any
import joblib
from .logging import get_logger
log = get_logger(__name__)

def ensure_dir(path: str | Path) -> Path:
    p = Path(path)
    p.mkdir(parents=True, exist_ok=True)
    return p

def save_joblib(obj: Any, path: str | Path) -> Path:
    path = Path(path)
    ensure_dir(path.parent)
    joblib.dump(obj, path, compress=('zlib', 3))
    log.info(f'Saved artifact -> {path} ({path.stat().st_size / 1024:.1f} KB)')
    return path

def load_joblib(path: str | Path) -> Any:
    path = Path(path)
    if not path.exists():
        raise FileNotFoundError(f'Artifact not found: {path}')
    obj = joblib.load(path)
    log.info(f'Loaded artifact <- {path}')
    return obj

def save_json(obj: Any, path: str | Path, indent: int=2) -> Path:
    path = Path(path)
    ensure_dir(path.parent)
    with path.open('w') as fh:
        json.dump(obj, fh, indent=indent, default=str)
    return path

def load_json(path: str | Path) -> Any:
    path = Path(path)
    with path.open('r') as fh:
        return json.load(fh)