Compare commits

...

8 Commits

Author SHA1 Message Date
8cf9b909e2 auto commited 2025-12-31 14:51:04 +13:00
ff063efde7 auto commited 2025-12-31 14:51:04 +13:00
577b9e11e0 auto commited 2025-12-31 14:51:04 +13:00
53a395af71 not needed 2025-12-31 14:50:55 +13:00
b1d4a80a2f fixed generation for the .rpt plain text format 2025-12-31 14:50:42 +13:00
9cd18828eb auto commited 2025-12-31 14:49:36 +13:00
4df8d34871 auto commited 2025-12-31 14:49:36 +13:00
3c7968bdcd auto commited 2025-12-31 14:49:36 +13:00
5 changed files with 39 additions and 14 deletions

View File

@@ -28,14 +28,21 @@ TEMP_DRC_REPORT_NAME = "_drc"
TEMP_ERC_REPORT_NAME = "_erc"
# quiet
STDOUT=subprocess.DEVNULL
KICAD_CLI_STDOUT=subprocess.DEVNULL
# verbose
# STDOUT=subprocess.STDOUT
# KICAD_CLI_STDOUT=subprocess.STDOUT
class OutputReportType(Enum):
JSON = 1
REPORT = 2
def get_file_extension(self) -> str:
if (self == OutputReportType.JSON):
return "json"
if (self == OutputReportType.REPORT):
return "rpt"
return "txt"
# this is a thin vale on the kicad cli tool
class KicadProject:
@@ -53,12 +60,12 @@ class KicadProject:
) -> None | dict | str:
format_type = report_format.name.lower()
pcb_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}.{format_type}"
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}',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
if (retcode != 0):
@@ -81,13 +88,14 @@ class KicadProject:
) -> 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}.{format_type}"
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}',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
print(f"{retcode=}")
if (retcode != 0):
print(f"drc check failed return code {retcode}")
exit(1)
@@ -110,7 +118,7 @@ class KicadProject:
retcode = subprocess.call(
f'{KICAD_CLI_PATH} sch export bom {sch_file_path} --output {bom_output_path}',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
if (retcode != 0):
@@ -142,7 +150,7 @@ class KicadProject:
retcode = subprocess.call(
f'{KICAD_CLI_PATH} pcb render {pcb_file_path} --output {render_output_path} --preset {preset} --zoom {zoom} ',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
if (retcode != 0):
@@ -158,7 +166,7 @@ class KicadProject:
retcode = subprocess.call(
f'{KICAD_CLI_PATH} sch export pdf {sch_file_path} --output {sch_report_path}',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
if (retcode != 0):
@@ -173,7 +181,7 @@ class KicadProject:
retcode = subprocess.call(
f'{KICAD_CLI_PATH} pcb export pdf {pcb_file_path} --output {pcb_report_path} --layers {",".join(layers)}',
shell=True,
stdout=STDOUT
stdout=KICAD_CLI_STDOUT
)
if (retcode != 0):
@@ -189,13 +197,12 @@ def commit_files(files: list[Path], commit_message : str) -> None:
ret_add = subprocess.call(f"git add {file}", shell=True)
ret_commit = subprocess.call(f"git commit -m \"{commit_message}\"", shell=True)
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.RPT)
k.erc_check(report_format=OutputReportType.RPT)
k.drc_check(report_format= OutputReportType.REPORT)
k.erc_check(report_format= OutputReportType.REPORT)
k.process_bom()
k.create_schmatic_pdf()
k.get_image()

13
docs/test_drc.rpt Normal file
View File

@@ -0,0 +1,13 @@
** Drc report for test.kicad_pcb **
** Created on 2025-12-31T14:51:04+1300 **
** Found 1 DRC violations **
[invalid_outline]: Board has malformed outline (no edges found on Edge.Cuts layer)
Local override; error
@(0.0000 mm, 0.0000 mm): PCB
** Found 0 unconnected pads **
** Found 0 Footprint errors **
** End of Report **

5
docs/test_erc.rpt Normal file
View File

@@ -0,0 +1,5 @@
ERC report (2025-12-31T14:51:04+1300, Encoding UTF8)
***** Sheet /
** ERC messages: 0 Errors 0 Warnings 0

Binary file not shown.

Binary file not shown.