updated kicad project to allow the parsing of raw args

This commit is contained in:
sirlilpanda
2026-02-18 17:37:22 +13:00
parent 8cf9b909e2
commit aefd0879c3

View File

@@ -37,11 +37,11 @@ class OutputReportType(Enum):
REPORT = 2
def get_file_extension(self) -> str:
if (self == OutputReportType.JSON):
return "json"
if (self == OutputReportType.REPORT):
return "rpt"
return "txt"
match self:
case OutputReportType.JSON: return "json"
case OutputReportType.REPORT: return "rpt"
# dont trust it
case _: return "txt"
# this is a thin vale on the kicad cli tool
class KicadProject:
@@ -56,14 +56,15 @@ class KicadProject:
def erc_check(
self,
report_format : OutputReportType = OutputReportType.JSON,
return_report : bool = False
return_report : bool = False,
additional_args : str = ""
) -> None | dict | str:
format_type = report_format.name.lower()
pcb_file_path = self.project_path / f"{self.project_name}.kicad_sch"
sch_file_path = self.project_path / f"{self.project_name}.kicad_sch"
erc_report_path = Path(TEMP_FILE_PATH) / f"{self.project_name}{TEMP_ERC_REPORT_NAME}.{report_format.get_file_extension()}"
retcode = subprocess.call(
f'{KICAD_CLI_PATH} sch erc {pcb_file_path} --output {erc_report_path} --format {format_type}',
f'{KICAD_CLI_PATH} sch erc {sch_file_path} --output {erc_report_path} --format {format_type} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -84,14 +85,15 @@ class KicadProject:
def drc_check(
self,
report_format : OutputReportType = OutputReportType.JSON,
return_report : bool = False
return_report : bool = False,
additional_args : str = ""
) -> None | dict | str:
format_type = report_format.name.lower()
pcb_file_path = self.project_path / f"{self.project_name}.kicad_pcb"
drc_report_path = Path(TEMP_FILE_PATH) / f"{self.project_name}{TEMP_DRC_REPORT_NAME}.{report_format.get_file_extension()}"
print(f"{format_type=}, {drc_report_path=}")
retcode = subprocess.call(
f'{KICAD_CLI_PATH} pcb drc {pcb_file_path} --output {drc_report_path} --format {format_type}',
f'{KICAD_CLI_PATH} pcb drc {pcb_file_path} --output {drc_report_path} --format {format_type} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -111,12 +113,13 @@ class KicadProject:
def process_bom(
self,
return_csv : bool = False
return_csv : bool = False,
additional_args : str = ""
) -> None | list[list[str]]:
sch_file_path = self.project_path / f"{self.project_name}.kicad_sch"
bom_output_path = Path(BOM_OUTPUT_PATH) / f"{self.project_name}{BOM_REPORT_NAME}.csv"
retcode = subprocess.call(
f'{KICAD_CLI_PATH} sch export bom {sch_file_path} --output {bom_output_path}',
f'{KICAD_CLI_PATH} sch export bom {sch_file_path} --output {bom_output_path} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -139,6 +142,7 @@ class KicadProject:
background : str = "default",
preset : str = "follow_pcb_editor",
zoom : int = 2,
additional_args : str = ""
) -> None:
"""
image_typ = "png" | "jpg"
@@ -148,7 +152,7 @@ class KicadProject:
pcb_file_path = self.project_path / f"{self.project_name}.kicad_pcb"
render_output_path = Path(PCB_IMAGE_OUTPUT_PATH) / f"{self.project_name}_render.{image_type}"
retcode = subprocess.call(
f'{KICAD_CLI_PATH} pcb render {pcb_file_path} --output {render_output_path} --preset {preset} --zoom {zoom} ',
f'{KICAD_CLI_PATH} pcb render {pcb_file_path} --output {render_output_path} --preset {preset} --zoom {zoom} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -160,11 +164,11 @@ class KicadProject:
self.created_files.append(render_output_path)
# i am not giving you the pdf to output if you want to do that yourself go ahead
def create_schmatic_pdf(self) -> None:
def create_schmatic_pdf(self, additional_args="") -> None:
sch_file_path = self.project_path / f"{self.project_name}.kicad_sch"
sch_report_path = Path(SCHEMATIC_OUTPUT_PATH) / f"{self.project_name}{SCHEMATIC_FILE_SUFFIX}.pdf"
retcode = subprocess.call(
f'{KICAD_CLI_PATH} sch export pdf {sch_file_path} --output {sch_report_path}',
f'{KICAD_CLI_PATH} sch export pdf {sch_file_path} --output {sch_report_path} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -175,11 +179,12 @@ class KicadProject:
self.created_files.append(sch_report_path)
def create_pcb_pdf(self, layers : list[str] = ["F.Cu", "B.Cu"]) -> None:
def create_pcb_pdf(self, layers : list[str] = ["F.Cu", "B.Cu"], additional_args : str = "") -> None:
pcb_file_path = self.project_path / f"{self.project_name}.kicad_pcb"
pcb_report_path = Path(PCB_PDF_OUTPUT_PATH) / f"{self.project_name}{PCB_PDF_FILE_SUFFIX}.pdf"
retcode = subprocess.call(
f'{KICAD_CLI_PATH} pcb export pdf {pcb_file_path} --output {pcb_report_path} --layers {",".join(layers)}',
f'{KICAD_CLI_PATH} pcb export pdf {pcb_file_path} --output {pcb_report_path} --layers {",".join(layers)} {additional_args}',
shell=True,
stdout=KICAD_CLI_STDOUT
)
@@ -201,8 +206,8 @@ def main() -> None:
# find all kicad project files to operate on
for path in Path(".").rglob('*.kicad_pro'):
k = KicadProject(path)
k.drc_check(report_format= OutputReportType.REPORT)
k.erc_check(report_format= OutputReportType.REPORT)
k.drc_check(report_format = OutputReportType.REPORT)
k.erc_check(report_format = OutputReportType.REPORT)
k.process_bom()
k.create_schmatic_pdf()
k.get_image()