From 4c49348aefdb6337401e385056de62cd0ac30a56 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 22 May 2019 23:40:26 +0300 Subject: [PATCH] - some PEP8 cleanup in FlatCAMApp.py --- FlatCAMApp.py | 283 ++++++++++++++++++++++++++------------------------ README.md | 1 + 2 files changed, 146 insertions(+), 138 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 99e107fa..e178af27 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -1,10 +1,10 @@ -############################################################ -# FlatCAM: 2D Post-processing for Manufacturing # -# http://flatcam.org # -# Author: Juan Pablo Caram (c) # -# Date: 2/5/2014 # -# MIT Licence # -############################################################ +# ########################################################### +# FlatCAM: 2D Post-processing for Manufacturing # +# http://flatcam.org # +# Author: Juan Pablo Caram (c) # +# Date: 2/5/2014 # +# MIT Licence # +# ########################################################### import urllib.request, urllib.parse, urllib.error import getopt @@ -25,9 +25,9 @@ import gc from xml.dom.minidom import parseString as parse_xml_string -######################################## -## Imports part of FlatCAM ## -######################################## +# ####################################### +# # Imports part of FlatCAM ## +# ####################################### from ObjectCollection import * from FlatCAMObj import * from flatcamGUI.PlotCanvas import * @@ -52,15 +52,15 @@ import tclCommands import gettext import FlatCAMTranslation as fcTranslate +import builtins fcTranslate.apply_language('strings') -import builtins if '_' not in builtins.__dict__: _ = gettext.gettext -######################################## -## App ## -######################################## +# ####################################### +# # App ## +# ####################################### class App(QtCore.QObject): @@ -120,9 +120,9 @@ class App(QtCore.QObject): # flag is True if saving action has been triggered save_in_progress = False - ################## - ## Signals ## - ################## + # ################# + # # Signals ## + # ################# # Inform the user # Handled by: @@ -191,9 +191,9 @@ class App(QtCore.QObject): self.main_thread = QtWidgets.QApplication.instance().thread() - ################### - ### OS-specific ### - ################### + # ################## + # ## OS-specific ### + # ################## # Folder for user settings. if sys.platform == 'win32': @@ -209,9 +209,9 @@ class App(QtCore.QObject): self.data_path = os.path.expanduser('~') + '/.FlatCAM' self.os = 'unix' - ############################### - ### Setup folders and files ### - ############################### + # ############################## + # ## Setup folders and files ### + # ############################## if not os.path.exists(self.data_path): os.makedirs(self.data_path) @@ -272,9 +272,9 @@ class App(QtCore.QObject): # variable to store mouse coordinates self.mouse = [0, 0] - #################### - ## Initialize GUI ## - #################### + # ################### + # # Initialize GUI ## + # ################### # FlatCAM colors used in plotting self.FC_light_green = '#BBF268BF' @@ -285,16 +285,15 @@ class App(QtCore.QObject): QtCore.QObject.__init__(self) self.ui = FlatCAMGUI(self.version, self.beta, self) - # self.connect(self.ui, # QtCore.SIGNAL("geomUpdate(int, int, int, int, int)"), # self.save_geometry) PyQt4 self.ui.geom_update[int, int, int, int, int].connect(self.save_geometry) self.ui.final_save.connect(self.final_save) - ############## - #### Data #### - ############## + # ############# + # ### Data #### + # ############# self.recent = [] self.clipboard = QtWidgets.QApplication.clipboard() self.proc_container = FCVisibleProcessContainer(self.ui.activity_view) @@ -567,9 +566,9 @@ class App(QtCore.QObject): } - ############################# - #### LOAD POSTPROCESSORS #### - ############################# + # ############################ + # ### LOAD POSTPROCESSORS #### + # ############################ self.postprocessors = load_postprocessors(self) @@ -586,9 +585,9 @@ class App(QtCore.QObject): self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) - ############################# - #### LOAD LANGUAGES #### - ############################# + # ############################ + # ### LOAD LANGUAGES #### + # ############################ self.languages = fcTranslate.load_languages() for name in sorted(self.languages.values()): @@ -644,7 +643,7 @@ class App(QtCore.QObject): "global_background_timeout": 300000, # Default value is 5 minutes "global_verbose_error_level": 0, # Shell verbosity 0 = default # (python trace only for unknown errors), - # 1 = show trace(show trace allways), + # 1 = show trace(show trace always), # 2 = (For the future). # Persistence @@ -881,16 +880,16 @@ class App(QtCore.QObject): "tools_solderpaste_pp": 'Paste_1' }) - ############################### - ### Load defaults from file ### - ############################### + # ############################## + # ## Load defaults from file ### + # ############################## if user_defaults: self.load_defaults(filename='current_defaults') - ############################ - ##### APPLY APP LANGUAGE ### - ############################ + # ########################### + # #### APPLY APP LANGUAGE ### + # ########################### ret_val = fcTranslate.apply_language('strings') @@ -903,9 +902,9 @@ class App(QtCore.QObject): log.debug("App.__init__() --> Applied %s language." % str(ret_val).capitalize()) - ################################### - ### CREATE UNIQUE SERIAL NUMBER ### - ################################### + # ################################## + # ## CREATE UNIQUE SERIAL NUMBER ### + # ################################## chars = 'abcdefghijklmnopqrstuvwxyz0123456789' if self.defaults['global_serial'] == 0 or len(str(self.defaults['global_serial'])) < 10: @@ -1172,14 +1171,14 @@ class App(QtCore.QObject): self.tools_form = None self.on_options_combo_change(0) # Will show the initial form - ### Define OBJECT COLLECTION ### + # ## Define OBJECT COLLECTION ### self.collection = ObjectCollection(self) self.ui.project_tab_layout.addWidget(self.collection.view) - ### + # ## self.log.debug("Finished creating Object Collection.") - ### Initialize the color box's color in Preferences -> Global -> Color + # ## Initialize the color box's color in Preferences -> Global -> Color # Init Plot Colors self.ui.general_defaults_form.general_gui_group.pf_color_entry.set_value(self.defaults['global_plot_fill']) self.ui.general_defaults_form.general_gui_group.pf_color_button.setStyleSheet( @@ -1242,10 +1241,9 @@ class App(QtCore.QObject): self.defaults['global_proj_item_dis_color']) self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet( "background-color:%s" % str(self.defaults['global_proj_item_dis_color'])[:7]) + # ### End of Data #### - #### End of Data #### - - #### Plot Area #### + # ### Plot Area #### start_plot_time = time.time() # debug self.plotcanvas = PlotCanvas(self.ui.right_layout, self) @@ -1272,28 +1270,27 @@ class App(QtCore.QObject): end_plot_time = time.time() self.log.debug("Finished Canvas initialization in %s seconds." % (str(end_plot_time - start_plot_time))) - ### EDITOR section + # ## EDITOR section self.geo_editor = FlatCAMGeoEditor(self, disabled=True) self.exc_editor = FlatCAMExcEditor(self) self.grb_editor = FlatCAMGrbEditor(self) - #### Adjust tabs width #### + # ### Adjust tabs width #### # self.collection.view.setMinimumWidth(self.ui.options_scroll_area.widget().sizeHint().width() + # self.ui.options_scroll_area.verticalScrollBar().sizeHint().width()) self.collection.view.setMinimumWidth(290) self.log.debug("Finished adding FlatCAM Editor's.") - #### Worker #### + # ### Worker #### if self.defaults["global_worker_number"]: self.workers = WorkerStack(workers_number=int(self.defaults["global_worker_number"])) else: self.workers = WorkerStack(workers_number=2) self.worker_task.connect(self.workers.add_task) - - ### Signal handling ### - ## Custom signals + # ## Signal handling ### + # ## Custom signals self.inform.connect(self.info) self.app_quit.connect(self.quit_application) self.message.connect(self.message_dialog) @@ -1306,9 +1303,8 @@ class App(QtCore.QObject): self.file_opened.connect(lambda kind, filename: self.register_folder(filename)) self.file_saved.connect(lambda kind, filename: self.register_save_folder(filename)) - - ## Standard signals - # Menu + # ## Standard signals + # ## Menu self.ui.menufilenewproject.triggered.connect(self.on_file_new_click) self.ui.menufilenewgeo.triggered.connect(self.new_geometry_object) self.ui.menufilenewgrb.triggered.connect(self.new_gerber_object) @@ -1448,19 +1444,19 @@ class App(QtCore.QObject): self.ui.pref_export_button.clicked.connect(self.on_export_preferences) self.ui.pref_open_button.clicked.connect(self.on_preferences_open_folder) - ############################### - ### GUI PREFERENCES SIGNALS ### - ############################### + # ############################## + # ## GUI PREFERENCES SIGNALS ### + # ############################## self.ui.general_options_form.general_app_group.units_radio.group_toggle_fn = self.on_toggle_units self.ui.general_defaults_form.general_app_group.language_apply_btn.clicked.connect( lambda: fcTranslate.on_language_apply_click(self, restart=True) ) self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( - lambda :self.on_toggle_units(no_pref=False)) + lambda: self.on_toggle_units(no_pref=False)) - ############################### - ### GUI PREFERENCES SIGNALS ### - ############################### + # ############################## + # ## GUI PREFERENCES SIGNALS ### + # ############################## # Setting plot colors signals self.ui.general_defaults_form.general_gui_group.pf_color_entry.editingFinished.connect( @@ -1562,21 +1558,20 @@ class App(QtCore.QObject): else: self.ui.splitter.setSizes([0, 1]) - - #################### - ### Other setups ### - #################### + # ################### + # ## Other setups ### + # ################### # Sets up FlatCAMObj, FCProcess and FCProcessContainer. self.setup_obj_classes() self.setup_recent_items() self.setup_component_editor() - ############# - ### Shell ### - ############# + # ############ + # ## Shell ### + # ############ - ### + # ## # Auto-complete KEYWORDS self.tcl_commands_list = ['add_circle', 'add_poly', 'add_polygon', 'add_polyline', 'add_rectangle', 'aligndrill', 'clear', @@ -1589,18 +1584,18 @@ class App(QtCore.QObject): 'open_gerber', 'open_project', 'options', 'paint', 'pan', 'panel', 'panelize', 'plot', 'save', 'save_project', 'save_sys', 'scale', 'set_active', 'set_sys', 'setsys', 'skew', 'subtract_poly', 'subtract_rectangle', 'version', 'write_gcode' - ] + ] self.ordinary_keywords = ['name', 'center_x', 'center_y', 'radius', 'x0', 'y0', 'x1', 'y1', 'box', 'axis', - 'holes','grid', 'minoffset', 'gridoffset','axisoffset', 'dia', 'dist', 'gridoffsetx', - 'gridoffsety', 'columns', 'rows', 'z_cut', 'z_move', 'feedrate', 'feedrate_rapid', - 'tooldia', 'multidepth', 'extracut', 'depthperpass', 'ppname_g', 'outname', 'margin', - 'gaps', 'gapsize', 'tools', 'drillz', 'travelz', 'spindlespeed', 'toolchange', - 'toolchangez', 'endz', 'ppname_e', 'opt_type', 'preamble', 'postamble', 'filename', - 'scale_factor', 'type', 'passes', 'overlap', 'combine', 'use_threads', 'x', 'y', - 'follow', 'all', 'spacing_columns', 'spacing_rows', 'factor', 'value', 'angle_x', - 'angle_y', 'gridx', 'gridy', 'True', 'False' - ] + 'holes', 'grid', 'minoffset', 'gridoffset', 'axisoffset', 'dia', 'dist', + 'gridoffsetx', 'gridoffsety', 'columns', 'rows', 'z_cut', 'z_move', 'feedrate', + 'feedrate_rapid', 'tooldia', 'multidepth', 'extracut', 'depthperpass', 'ppname_g', + 'outname', 'margin', 'gaps', 'gapsize', 'tools', 'drillz', 'travelz', 'spindlespeed', + 'toolchange', 'toolchangez', 'endz', 'ppname_e', 'opt_type', 'preamble', 'postamble', + 'filename', 'scale_factor', 'type', 'passes', 'overlap', 'combine', 'use_threads', + 'x', 'y', 'follow', 'all', 'spacing_columns', 'spacing_rows', 'factor', 'value', + 'angle_x', 'angle_y', 'gridx', 'gridy', 'True', 'False' + ] self.tcl_keywords = [ "after", "append", "apply", "array", "auto_execok", "auto_import", "auto_load", "auto_mkindex", @@ -1813,14 +1808,31 @@ class App(QtCore.QObject): else: self.ui.shell_dock.hide() - ######################### - ### Tools and Plugins ### - ######################### + # ######################## + # ## Tools and Plugins ### + # ######################## + + self.dblsidedtool = None + self.measurement_tool = None + self.panelize_tool = None + self.film_tool = None + self.paste_tool = None + self.calculator_tool = None + self.sub_tool = None + self.move_tool = None + self.cutout_tool = None + self.ncclear_tool = None + self.paint_tool = None + self.transform_tool = None + self.properties_tool = None + self.pdf_tool = None + self.image_tool = None + self.pcb_wizard_tool = None # always install tools only after the shell is initialized because the self.inform.emit() depends on shell self.install_tools() - ### System Font Parsing ### + # ## System Font Parsing ### # self.f_parse = ParseFont(self) # self.parse_system_fonts() @@ -1834,9 +1846,9 @@ class App(QtCore.QObject): print("ERROR: ", ext) sys.exit(2) - ########################### - #### Check for updates #### - ########################### + # ########################## + # ### Check for updates #### + # ########################## # Separate thread (Not worker) # Check for updates on startup but only if the user consent and the app is not in Beta version @@ -1849,10 +1861,9 @@ class App(QtCore.QObject): 'params': []}) self.thr2.start(QtCore.QThread.LowPriority) - - #################################### - #### Variables for global usage #### - #################################### + # ################################### + # ### Variables for global usage #### + # ################################### # coordinates for relative position display self.rel_point1 = (0, 0) @@ -1907,8 +1918,9 @@ class App(QtCore.QObject): ] self.exc_list = ['drl', 'txt', 'xln', 'drd', 'tap', 'exc', 'ncd'] self.gcode_list = ['nc', 'ncc', 'tap', 'gcode', 'cnc', 'ecs', 'fnc', 'dnc', 'ncg', 'gc', 'fan', 'fgc', 'din', - 'xpi', 'hnc', 'h', 'i', 'ncp', 'min', 'gcd', 'rol', 'mpr', 'ply', 'out', 'eia', 'plt', 'sbp', - 'mpf'] + 'xpi', 'hnc', 'h', 'i', 'ncp', 'min', 'gcd', 'rol', 'mpr', 'ply', 'out', 'eia', 'plt', 'sbp', + 'mpf' + ] self.svg_list = ['svg'] self.dxf_list = ['dxf'] self.pdf_list = ['pdf'] @@ -1923,8 +1935,8 @@ class App(QtCore.QObject): self.isHovering = False self.notHovering = True - ### Save defaults to factory_defaults.FlatConfig file ### - ### It's done only once after install ############# + # ## Save defaults to factory_defaults.FlatConfig file ### + # ## It's done only once after install ############# factory_file = open(self.data_path + '/factory_defaults.FlatConfig') fac_def_from_file = factory_file.read() factory_defaults = json.loads(fac_def_from_file) @@ -2000,8 +2012,8 @@ class App(QtCore.QObject): for option in self.defaults_form_fields: try: self.defaults[option] = self.defaults_form_fields[option].get_value() - except: - pass + except Exception as e: + log.debug("App.defaults_read_form() --> %s" % str(e)) def defaults_write_form(self, factor=None): for option in self.defaults: @@ -2019,9 +2031,8 @@ class App(QtCore.QObject): self.defaults_form_fields[field].set_value(self.defaults[field]) else: self.defaults_form_fields[field].set_value(self.defaults[field] * factor) - except KeyError: - #self.log.debug("defaults_write_form(): No field for: %s" % option) + # self.log.debug("defaults_write_form(): No field for: %s" % option) # TODO: Rethink this? pass except AttributeError: @@ -2055,7 +2066,6 @@ class App(QtCore.QObject): self.calculator_tool = ToolCalculator(self) self.calculator_tool.install(icon=QtGui.QIcon('share/calculator24.png')) - self.sub_tool = ToolSub(self) self.sub_tool.install(icon=QtGui.QIcon('share/sub32.png'), pos=self.ui.menuedit_convert, before=self.ui.menuedit_convert_sg2mg) @@ -2070,11 +2080,11 @@ class App(QtCore.QObject): self.ncclear_tool = NonCopperClear(self) self.ncclear_tool.install(icon=QtGui.QIcon('share/ncc16.png'), pos=self.ui.menutool, - before=self.measurement_tool.menuAction, separator=True) + before=self.measurement_tool.menuAction, separator=True) self.paint_tool = ToolPaint(self) self.paint_tool.install(icon=QtGui.QIcon('share/paint16.png'), pos=self.ui.menutool, - before=self.measurement_tool.menuAction, separator=True) + before=self.measurement_tool.menuAction, separator=True) self.transform_tool = ToolTransform(self) self.transform_tool.install(icon=QtGui.QIcon('share/transform.png'), pos=self.ui.menuoptions, separator=True) @@ -2247,7 +2257,6 @@ class App(QtCore.QObject): # do not update a geometry or excellon object unless it comes out of an editor if self.call_source != 'app': edited_obj = self.collection.get_active() - obj_type = "" if cleanup is None: msgbox = QtWidgets.QMessageBox() @@ -2381,7 +2390,7 @@ class App(QtCore.QObject): self.defaults['global_stats'][resource] = 1 def init_tcl(self): - if hasattr(self,'tcl'): + if hasattr(self, 'tcl'): # self.tcl = None # TODO we need to clean non default variables and procedures here # new object cannot be used here as it will not remember values created for next passes, @@ -2395,7 +2404,7 @@ class App(QtCore.QObject): # TODO: This shouldn't be here. class TclErrorException(Exception): """ - this exception is deffined here, to be able catch it if we sucessfully handle all errors from shell command + this exception is defined here, to be able catch it if we ssuccessfully handle all errors from shell command """ pass @@ -2406,6 +2415,9 @@ class App(QtCore.QObject): :param msg: Message to display. :param show: Opens the shell. :param error: Shows the message as an error. + :param warning: Shows the message as an warning. + :param warning: Shows the message as an success. + :param selected: Indicate that something was selected on canvas :return: None """ if show: @@ -2440,14 +2452,15 @@ class App(QtCore.QObject): def display_tcl_error(self, error, error_info=None): """ - escape bracket [ with \ otherwise there is error + Escape bracket [ with '\' otherwise there is error "ERROR: missing close-bracket" instead of real error + :param error: it may be text or exception + :param error_info: Some informations about the error :return: None """ if isinstance(error, Exception): - exc_type, exc_value, exc_traceback = error_info if not isinstance(error, self.TclErrorException): show_trace = 1 @@ -2459,22 +2472,19 @@ class App(QtCore.QObject): trc_formated = [] for a in reversed(trc): trc_formated.append(a.replace(" ", " > ").replace("\n", "")) - text = "%s\nPython traceback: %s\n%s" % (exc_value, - exc_type, - "\n".join(trc_formated)) - + text = "%s\nPython traceback: %s\n%s" % (exc_value, exc_type, "\n".join(trc_formated)) else: text = "%s" % error else: text = error text = text.replace('[', '\\[').replace('"', '\\"') - self.tcl.eval('return -code error "%s"' % text) def raise_tcl_error(self, text): """ - this method pass exception from python into TCL as error, so we get stacktrace and reason + This method pass exception from python into TCL as error, so we get stacktrace and reason + :param text: text of error :return: raise exception """ @@ -2495,8 +2505,7 @@ class App(QtCore.QObject): result = self.exec_command_test(text, False) - #MS: added this method call so the geometry is updated once the TCL - #command is executed + # MS: added this method call so the geometry is updated once the TCL command is executed self.plot_all() return result @@ -2579,7 +2588,7 @@ class App(QtCore.QObject): :return: None """ - # Type of message in brackets at the begining of the message. + # Type of message in brackets at the beginning of the message. match = re.search("\[([^\]]+)\](.*)", msg) if match: level = match.group(1) @@ -2708,9 +2717,11 @@ class App(QtCore.QObject): filter = "Config File (*.FlatConfig);;All Files (*.*)" try: filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Preferences"), - directory=self.data_path, filter=filter) + directory=self.data_path, + filter=filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Preferences"), filter=filter) + filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import FlatCAM Preferences"), + filter=filter) filename = str(filename) @@ -2741,14 +2752,18 @@ class App(QtCore.QObject): self.report_usage("on_export_preferences") App.log.debug("on_export_preferences()") + defaults_file_content = None + filter = "Config File (*.FlatConfig);;All Files (*.*)" try: filename, _f = QtWidgets.QFileDialog.getSaveFileName( caption=_("Export FlatCAM Preferences"), - directory=self.data_path + '/preferences_' + self.date, filter=filter + directory=self.data_path + '/preferences_' + self.date, + filter=filter ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export FlatCAM Preferences"), filter=filter) + filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export FlatCAM Preferences"), + filter=filter) filename = str(filename) defaults_from_file = {} @@ -2845,16 +2860,10 @@ class App(QtCore.QObject): self.inform.emit(_('[ERROR_NOTCL] Failed to open recent files file for writing.')) return - #try: json.dump(self.recent, f, default=to_dict, indent=2, sort_keys=True) - # except: - # App.log.error("Failed to write to recent items file.") - # self.inform.emit('ERROR: Failed to write to recent items file.') - # f.close() - f.close() - # Re-buid the recent items menu + # Re-build the recent items menu self.setup_recent_items() def new_object(self, kind, name, initialize, active=True, fit=True, plot=True, autoselected=True): @@ -2868,14 +2877,12 @@ class App(QtCore.QObject): when appending it to the collection. There is no need to handle name conflicts here. - :param kind: The kind of object to create. One of 'gerber', - 'excellon', 'cncjob' and 'geometry'. + :param kind: The kind of object to create. One of 'gerber', 'excellon', 'cncjob' and 'geometry'. :type kind: str :param name: Name for the object. :type name: str - :param initialize: Function to run after creation of the object - but before it is attached to the application. The function is - called with 2 parameters: the new object and the App instance. + :param initialize: Function to run after creation of the object but before it is attached to the application. + The function is called with 2 parameters: the new object and the App instance. :type initialize: function :return: None :rtype: None diff --git a/README.md b/README.md index 75b4edd3..09cfb9e1 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing. - fixed bug in Gerber editor FCDisk and FCSemiDisc that the resulting geometry was not stored into the '0' aperture where all the solids are stored - fixed minor issue in Gerber Editor where apertures were included in the saved object even if there was no geometric data for that aperture +- some PEP8 cleanup in FlatCAMApp.py 22.05.2019