From cfcc9bea3997252561157940361684824c31f86a Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 16 Nov 2021 13:11:35 -0300 Subject: [PATCH] Fixed PCB Print: to show the real name of the PCB file. Fixes #102 --- CHANGELOG.md | 1 + kibot/out_pdf_pcb_print.py | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ac2ebf0..a1b7171c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - KiCost variants: empty DNF fields shouldn't be excluded. (#101) - KiCost variants: problems when setting a field in a variant that doesn't exist when no variant is selected. (#105) +- PCB Print: to show the real name of the PCB file. (#102) ## [0.11.0] - 2021-04-25 diff --git a/kibot/out_pdf_pcb_print.py b/kibot/out_pdf_pcb_print.py index 5106b8dc..05424ab4 100644 --- a/kibot/out_pdf_pcb_print.py +++ b/kibot/out_pdf_pcb_print.py @@ -4,8 +4,8 @@ # License: GPL-3.0 # Project: KiBot (formerly KiPlot) import os -from shutil import copy2 -from tempfile import NamedTemporaryFile +from shutil import copy2, rmtree +from tempfile import mkdtemp from .pre_base import BasePreFlight from .error import (KiPlotConfigurationError) from .gs import (GS) @@ -79,9 +79,9 @@ class PDF_Pcb_PrintOptions(VariantOptions): self.remove_paste_and_glue(board, comps_hash) if self.hide_excluded: self.remove_fab(board, comps_hash) - # Save the PCB to a temporal file - with NamedTemporaryFile(mode='w', suffix='.kicad_pcb', delete=False) as f: - fname = f.name + # Save the PCB to a temporal dir + pcb_dir = mkdtemp(prefix='tmp-kibot-pdf_pcb_print-') + fname = os.path.join(pcb_dir, GS.pcb_basename+'.kicad_pcb') logger.debug('Storing filtered PCB to `{}`'.format(fname)) GS.board.Save(fname) # Copy the project: avoids warnings, could carry some options @@ -90,14 +90,14 @@ class PDF_Pcb_PrintOptions(VariantOptions): self.restore_paste_and_glue(board, comps_hash) if self.hide_excluded: self.restore_fab(board, comps_hash) - return fname, fproj + return fname, pcb_dir def get_targets(self, out_dir): return [self._parent.expand_filename(out_dir, self.output)] def run(self, output): super().run(self._layers) - check_script(CMD_PCBNEW_PRINT_LAYERS, URL_PCBNEW_PRINT_LAYERS, '1.5.2') + check_script(CMD_PCBNEW_PRINT_LAYERS, URL_PCBNEW_PRINT_LAYERS, '1.5.10') # Output file name cmd = [CMD_PCBNEW_PRINT_LAYERS, 'export', '--output_name', output] if BasePreFlight.get_option('check_zone_fills'): @@ -111,7 +111,7 @@ class PDF_Pcb_PrintOptions(VariantOptions): cmd.append('--separate') if self.mirror: cmd.append('--mirror') - board_name, proj_name = self.filter_components(GS.board) + board_name, board_dir = self.filter_components(GS.board) cmd.extend([board_name, os.path.dirname(output)]) cmd, video_remove = add_extra_options(cmd) # Add the layers @@ -119,10 +119,9 @@ class PDF_Pcb_PrintOptions(VariantOptions): # Execute it ret = exec_with_retry(cmd) # Remove the temporal PCB - if board_name != GS.pcb_file: - os.remove(board_name) - if proj_name: - os.remove(proj_name) + if board_dir: + logger.debug('Removing temporal variant dir `{}`'.format(board_dir)) + rmtree(board_dir) if ret: logger.error(CMD_PCBNEW_PRINT_LAYERS+' returned %d', ret) exit(PDF_PCB_PRINT)