import json import uuid from datetime import datetime from pathlib import Path from typing import Optional, Any from pydantic import BaseModel, Field from iottb.definitions import ReturnCodes class KydcapCaptureMetadata(BaseModel): # Required Fields device_id: str capture_id: uuid.UUID = Field(default_factory=lambda: str(uuid.uuid4())) capture_date: str = Field(default_factory=lambda: datetime.now().strftime('%d-%m-%YT%H:%M:%S').lower()) # Statistics start_time: str stop_time: str packet_count: Optional[int] pcap_filter: str = "" # Optional Fields device_ip_address: Optional[str] = None device_mac_address: Optional[str] = None app: Optional[str] = None app_version: Optional[str] = None firmware_version: Optional[str] = None def __init__(self, device_id: str, start_time: str, stop_time: str, /, **data: Any): super().__init__(**data) # Pycharms orders assert isinstance(device_id, str) assert isinstance(start_time, str) assert isinstance(stop_time, str) self.device_id = device_id self.start_time = start_time self.stop_time = stop_time def save_to_json(self, file_path: Path): if file_path.is_file(): print(f"File {file_path} already exists, update instead.") return ReturnCodes.FILE_ALREADY_EXISTS metadata = self.model_dump_json(indent=2) with file_path.open('w') as file: json.dump(metadata, file) return ReturnCodes.SUCCESS