diff --git a/plugins/config.py b/plugins/config.py index 2c8c275..97767af 100644 --- a/plugins/config.py +++ b/plugins/config.py @@ -6,7 +6,7 @@ netlistFileName = 'netlist.ipc' designatorsFileName = 'designators.csv' placementFileName = 'positions.csv' bomFileName = 'bom.csv' -gerberArchiveName = 'gerber.zip' +gerberArchiveName = 'gerbers.zip' outputFolder = 'production' plotPlan = [ diff --git a/plugins/thread.py b/plugins/thread.py index 6e0bc1e..d9bf904 100644 --- a/plugins/thread.py +++ b/plugins/thread.py @@ -4,6 +4,7 @@ import pcbnew import shutil import tempfile import webbrowser +import datetime from threading import Thread from .events import StatusEvent from .process import ProcessManager @@ -20,46 +21,47 @@ class ProcessThread(Thread): def run(self): # initializing - self.report(0) + self.progress(0) - temp_dir = tempfile.mkdtemp() - gerber_dir = os.path.join(temp_dir, 'gerber') - assembly_dir = os.path.join(temp_dir, 'assembly') + timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') - os.makedirs(gerber_dir) - os.makedirs(assembly_dir) + temp_dir = tempfile.mkdtemp() + timestamp + os.makedirs(temp_dir) + os.makedirs(temp_dir + "_g") _, temp_file = tempfile.mkstemp() project_directory = os.path.dirname(self.process_manager.board.GetFileName()) - output_path = os.path.join(project_directory, outputFolder) try: - # configure and generate gerber - self.report(5) - self.process_manager.generate_gerber(gerber_dir) + # generate gerber + self.progress(5) + self.process_manager.generate_gerber(temp_dir + "_g") # generate drill file - self.report(15) - self.process_manager.generate_drills(gerber_dir) + self.progress(15) + self.process_manager.generate_drills(temp_dir + "_g") # generate netlist - self.report(25) - self.process_manager.generate_netlist(assembly_dir) + self.progress(25) + self.process_manager.generate_netlist(temp_dir) # generate pick and place file - self.report(40) - self.process_manager.generate_positions(assembly_dir) + self.progress(40) + self.process_manager.generate_positions(temp_dir) # generate BOM file - self.report(60) - self.process_manager.generate_bom(assembly_dir) + self.progress(60) + self.process_manager.generate_bom(temp_dir) # generate production archive - self.report(75) - temp_file = self.process_manager.generate_archive(gerber_dir, temp_file) + self.progress(75) + temp_file = self.process_manager.generate_archive(temp_dir + "_g", temp_file) + shutil.move(temp_file, temp_dir) + shutil.rmtree(temp_dir + "_g") + temp_file = os.path.join(temp_dir, os.path.basename(temp_file)) except Exception as e: wx.MessageBox(str(e), "Error", wx.OK | wx.ICON_ERROR) - self.report(-1) + self.progress(-1) return # progress bar done animation @@ -72,7 +74,7 @@ class ProcessThread(Thread): break read_so_far += len(data) percent = read_so_far * 1e2 / total_size - self.report(75 + percent / 8) + self.progress(75 + percent / 8) # generate gerber name title_block = self.process_manager.board.GetTitleBlock() @@ -88,23 +90,28 @@ class ProcessThread(Thread): company = pcbnew.ExpandTextVars(company, project) file_date = pcbnew.ExpandTextVars(file_date, project) + # make output dir filename = os.path.splitext(os.path.basename(self.process_manager.board.GetFileName()))[0] - gerberArchiveName = "_".join(("{} {}".format(title or filename, revision or '').strip() + '.zip').split()) + name = "_".join(("{} {} {}".format(title or filename, revision or '', timestamp).strip()).split()) + output_path = os.path.join(project_directory, outputFolder, name) + os.makedirs(output_path) # rename gerber archive - os.rename(temp_file, os.path.join(gerber_dir, gerberArchiveName)) + gerberArchiveName = "_".join(("{} {}".format(title or filename, revision or '').strip() + '.zip').split()) + os.rename(temp_file, os.path.join(temp_dir, gerberArchiveName)) - # copy & open cleaned output dir + # copy to & open output dir try: if os.path.exists(output_path): shutil.rmtree(output_path) shutil.copytree(temp_dir, output_path) webbrowser.open("file://%s" % (output_path)) + shutil.rmtree(temp_dir) except Exception as e: webbrowser.open("file://%s" % (temp_dir)) - self.report(-1) + self.progress(-1) - def report(self, status): - wx.PostEvent(self.wx, StatusEvent(status)) + def progress(self, percent): + wx.PostEvent(self.wx, StatusEvent(percent)) \ No newline at end of file