Spaces:
Running
Running
| import os | |
| import json | |
| import yaml | |
| import pickle | |
| import joblib | |
| from pathlib import Path | |
| from typing import Any, Dict | |
| from box import ConfigBox | |
| from ensure import ensure_annotations | |
| from mlpipeline.logging.logger import get_logger | |
| logger = get_logger(__name__) | |
| def read_yaml(path: Path) -> ConfigBox: | |
| try: | |
| with open(path) as yaml_file: | |
| content = yaml.safe_load(yaml_file) | |
| logger.info(f"YAML file loaded: {path}") | |
| return ConfigBox(content) | |
| except Exception as e: | |
| logger.error(f"Error reading YAML file {path}: {e}") | |
| raise e | |
| def create_directories(paths: list, verbose: bool = True): | |
| for path in paths: | |
| os.makedirs(path, exist_ok=True) | |
| if verbose: | |
| logger.info(f"Created directory: {path}") | |
| def save_json(path: Path, data: Dict): | |
| with open(path, "w") as f: | |
| json.dump(data, f, indent=4) | |
| logger.info(f"JSON file saved: {path}") | |
| def load_json(path: Path) -> ConfigBox: | |
| with open(path) as f: | |
| content = json.load(f) | |
| logger.info(f"JSON file loaded: {path}") | |
| return ConfigBox(content) | |
| def save_pickle(path: Path, obj: Any): | |
| with open(path, "wb") as f: | |
| pickle.dump(obj, f) | |
| logger.info(f"Pickle file saved: {path}") | |
| def load_pickle(path: Path) -> Any: | |
| with open(path, "rb") as f: | |
| obj = pickle.load(f) | |
| logger.info(f"Pickle file loaded: {path}") | |
| return obj | |
| def save_model(path: Path, model: Any): | |
| joblib.dump(model, path) | |
| logger.info(f"Model saved: {path}") | |
| def load_model(path: Path) -> Any: | |
| model = joblib.load(path) | |
| logger.info(f"Model loaded: {path}") | |
| return model | |
| def save_object(path: Path, obj): | |
| with open(path, "wb") as f: | |
| pickle.dump(obj, f) | |
| logger.info(f"Object saved: {path}") | |
| def load_object(path: Path): | |
| with open(path, "rb") as f: | |
| obj = pickle.load(f) | |
| logger.info(f"Object loaded: {path}") | |
| return obj | |
| def get_size(path: Path) -> str: | |
| size_in_kb = round(os.path.getsize(path) / 1024) | |
| return f"~ {size_in_kb} KB" |