Source code for perda.server.config

from typing import Dict, List

from pydantic import BaseModel


[docs] class S3Credentials(BaseModel): """Read-only S3 credentials returned by the server.""" access_key: str secret_key: str bucket_name: str endpoint: str
[docs] class LogEntry(BaseModel): """A single S3 object (file or folder) with optional metadata. Combines S3 listing info with server-side metadata for display when browsing available logs. """ key: str name: str is_folder: bool size: int | None = None last_modified: str | None = None # Metadata fields (populated when metadata exists on server) title: str = "" description: str = "" tags: List[str] = [] string_metadata: Dict[str, str] = {} numeric_metadata: Dict[str, float] = {} def __str__(self) -> str: if self.is_folder: return f"[DIR] {self.name}/" parts = [f"[FILE] {self.name}"] if self.title: parts.append(f' title: "{self.title}"') if self.tags: parts.append(f" tags: [{', '.join(self.tags)}]") if self.size is not None: size_mb = self.size / (1024 * 1024) parts.append(f" size: {size_mb:.1f} MB") if self.last_modified: parts.append(f" modified: {self.last_modified}") if self.description: desc = self.description[:80] + ("..." if len(self.description) > 80 else "") parts.append(f' desc: "{desc}"') if self.string_metadata: for k, v in self.string_metadata.items(): parts.append(f" {k}: {v}") if self.numeric_metadata: for nk, nv in self.numeric_metadata.items(): parts.append(f" {nk}: {nv}") return "\n".join(parts)