Adds YAML-based project configuration loader

Introduces a function to load and parse project configurations from a YAML file, returning a typed object for improved usability and type safety.
This commit is contained in:
2025-04-26 13:52:04 +02:00
parent 8b735c0d97
commit defd2345b1
4 changed files with 107 additions and 0 deletions

14
src/config.py Normal file
View File

@@ -0,0 +1,14 @@
from pydantic import BaseModel
class DirectoryConfig(BaseModel):
dependency: str = ".hdlbuild_deps"
build: str = ".working"
report: str = "reports"
copy_target: str = "output"
DIRECTORIES = DirectoryConfig()
class GitConfig(BaseModel):
timeout: int = 10
GIT = GitConfig()

36
src/models/project.py Normal file
View File

@@ -0,0 +1,36 @@
from pydantic import BaseModel, Field
from typing import List, Optional
class SourceFile(BaseModel):
path: str
library: str = "work" # Default auf 'work'
class Dependency(BaseModel):
name: str
git: str
rev: str
library: str = "work" # Default auf 'work'
class Sources(BaseModel):
vhdl: List[SourceFile] = Field(default_factory=list)
verilog: List[SourceFile] = Field(default_factory=list)
class Testbenches(BaseModel):
vhdl: List[SourceFile] = Field(default_factory=list)
verilog: List[SourceFile] = Field(default_factory=list)
class BuildOptions(BaseModel):
build_dir: Optional[str] = "working"
report_dir: Optional[str] = "reports"
copy_target_dir: Optional[str] = "output"
class ProjectConfig(BaseModel):
name: str
topmodule: Optional[str]
target_device: str
xilinx_path: str
sources: Sources
testbenches: Optional[Testbenches] = None
constraints: Optional[str] = None
build: Optional[BuildOptions] = None
dependencies: Optional[List[Dependency]] = Field(default_factory=list)

View File

@@ -0,0 +1,16 @@
import yaml
from models.project import ProjectConfig
def load_project_config(path: str = "project.yml") -> ProjectConfig:
"""
Lädt die Projektkonfiguration aus einer YAML-Datei und gibt ein typisiertes ProjectConfig-Objekt zurück.
Args:
path (str): Pfad zur project.yml Datei (Default: "project.yml")
Returns:
ProjectConfig: Geparstes und typisiertes Projektkonfigurationsobjekt
"""
with open(path, "r") as file:
raw_data = yaml.safe_load(file)
return ProjectConfig(**raw_data)