Просмотр исходного кода

- some PEP8 cleanup in FlatCAMApp.py

Marius Stanciu 6 лет назад
Родитель
Сommit
4c49348aef
2 измененных файлов с 146 добавлено и 138 удалено
  1. 145 138
      FlatCAMApp.py
  2. 1 0
      README.md

+ 145 - 138
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

+ 1 - 0
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