43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Dict, List, Optional
|
|
from datetime import datetime
|
|
import structlog
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
class FileEntry(BaseModel):
|
|
path: str # относительный путь (mods/jei.jar)
|
|
hash: str # sha256
|
|
size: int
|
|
added_at: datetime
|
|
modified_at: datetime
|
|
|
|
class PackMeta(BaseModel):
|
|
pack_name: str
|
|
version: int = 1
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow)
|
|
|
|
files: Dict[str, FileEntry] = Field(default_factory=dict)
|
|
ignored_dirs: List[str] = Field(
|
|
default_factory=lambda: [
|
|
"resourcepacks", "shaderpacks", "saves", "logs",
|
|
"crash-reports", "screenshots", "journeymap", "config"
|
|
]
|
|
)
|
|
|
|
minecraft_version: str
|
|
loader_type: str
|
|
loader_version: Optional[str] = None
|
|
|
|
class MinecraftVersion(BaseModel):
|
|
version: str
|
|
type: str # release, snapshot, old_alpha, old_beta
|
|
release_time: datetime
|
|
url: Optional[str] = None
|
|
|
|
class ModLoader(BaseModel):
|
|
type: str
|
|
version: str
|
|
minecraft_version: str
|
|
installer_url: Optional[str] = None
|
|
libraries: List[str] = Field(default_factory=list) |