# HG changeset patch # User GP Orcullo # Date 1666931955 -28800 # Node ID f62625418bffa234267b42f3c6d39ee4e3baf2b9 # Parent fda6c1a37662763a47ed0330c84a24d632990b4e automated conversion using 2to3-3.9 tool cmd used: 2to3-3.9 -w diff -r fda6c1a37662 -r f62625418bff Beremiz.py --- a/Beremiz.py Mon Mar 27 10:19:14 2023 +0200 +++ b/Beremiz.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import getopt @@ -158,7 +158,7 @@ sys.path.append(extension_folder) AddCatalog(os.path.join(extension_folder, "locale")) AddBitmapFolder(os.path.join(extension_folder, "images")) - execfile(extfilename, self.globals()) + exec(compile(open(extfilename, "rb").read(), extfilename, 'exec'), self.globals()) def CheckUpdates(self): if self.updateinfo_url is not None: @@ -166,8 +166,8 @@ def updateinfoproc(): try: - import urllib2 - self.updateinfo = urllib2.urlopen(self.updateinfo_url, None).read() + import urllib.request, urllib.error, urllib.parse + self.updateinfo = urllib.request.urlopen(self.updateinfo_url, None).read() except Exception: self.updateinfo = _("update info unavailable.") diff -r fda6c1a37662 -r f62625418bff BeremizIDE.py --- a/BeremizIDE.py Mon Mar 27 10:19:14 2023 +0200 +++ b/BeremizIDE.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import shutil @@ -246,9 +246,9 @@ def _init_coll_FileMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_NEW, - kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N') + kind=wx.ITEM_NORMAL, text=_('New') + '\tCTRL+N') AppendMenu(parent, help='', id=wx.ID_OPEN, - kind=wx.ITEM_NORMAL, text=_(u'Open') + '\tCTRL+O') + kind=wx.ITEM_NORMAL, text=_('Open') + '\tCTRL+O') parent.Append(ID_FILEMENURECENTPROJECTS, _("&Recent Projects"), self.RecentProjectsMenu) parent.AppendSeparator() parent.Append(wx.ID_ANY, _("&Tutorials and Examples"), self.TutorialsProjectsMenu) @@ -257,7 +257,7 @@ project_list = sorted(os.listdir(exemples_dir)) for idx, dirname in enumerate(project_list): - text = u'&%d: %s' % (idx + 1, dirname) + text = '&%d: %s' % (idx + 1, dirname) item = self.TutorialsProjectsMenu.Append(wx.ID_ANY, text, '') @@ -274,23 +274,23 @@ self.Bind(wx.EVT_MENU, OpenExemple, item) parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_SAVE, - kind=wx.ITEM_NORMAL, text=_(u'Save') + '\tCTRL+S') + kind=wx.ITEM_NORMAL, text=_('Save') + '\tCTRL+S') AppendMenu(parent, help='', id=wx.ID_SAVEAS, - kind=wx.ITEM_NORMAL, text=_(u'Save as') + '\tCTRL+SHIFT+S') + kind=wx.ITEM_NORMAL, text=_('Save as') + '\tCTRL+SHIFT+S') AppendMenu(parent, help='', id=wx.ID_CLOSE, - kind=wx.ITEM_NORMAL, text=_(u'Close Tab') + '\tCTRL+W') + kind=wx.ITEM_NORMAL, text=_('Close Tab') + '\tCTRL+W') AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL, - kind=wx.ITEM_NORMAL, text=_(u'Close Project') + '\tCTRL+SHIFT+W') + kind=wx.ITEM_NORMAL, text=_('Close Project') + '\tCTRL+SHIFT+W') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP, - kind=wx.ITEM_NORMAL, text=_(u'Page Setup') + '\tCTRL+ALT+P') + kind=wx.ITEM_NORMAL, text=_('Page Setup') + '\tCTRL+ALT+P') AppendMenu(parent, help='', id=wx.ID_PREVIEW, - kind=wx.ITEM_NORMAL, text=_(u'Preview') + '\tCTRL+SHIFT+P') + kind=wx.ITEM_NORMAL, text=_('Preview') + '\tCTRL+SHIFT+P') AppendMenu(parent, help='', id=wx.ID_PRINT, - kind=wx.ITEM_NORMAL, text=_(u'Print') + '\tCTRL+P') + kind=wx.ITEM_NORMAL, text=_('Print') + '\tCTRL+P') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_EXIT, - kind=wx.ITEM_NORMAL, text=_(u'Quit') + '\tCTRL+Q') + kind=wx.ITEM_NORMAL, text=_('Quit') + '\tCTRL+Q') self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW) self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN) @@ -303,11 +303,11 @@ self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) - self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None), - (wx.ID_OPEN, "open", _(u'Open'), None), - (wx.ID_SAVE, "save", _(u'Save'), None), - (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None), - (wx.ID_PRINT, "print", _(u'Print'), None)]) + self.AddToMenuToolBar([(wx.ID_NEW, "new", _('New'), None), + (wx.ID_OPEN, "open", _('Open'), None), + (wx.ID_SAVE, "save", _('Save'), None), + (wx.ID_SAVEAS, "saveas", _('Save As...'), None), + (wx.ID_PRINT, "print", _('Print'), None)]) def _RecursiveAddMenuItems(self, menu, items): for name, text, helpstr, children in items: @@ -327,14 +327,14 @@ def handler(event): return wx.MessageBox( version.GetCommunityHelpMsg(), - _(u'Community support'), + _('Community support'), wx.OK | wx.ICON_INFORMATION) - item = parent.Append(wx.ID_ANY, _(u'Community support'), '') + item = parent.Append(wx.ID_ANY, _('Community support'), '') self.Bind(wx.EVT_MENU, handler, item) parent.Append(wx.MenuItem(helpString='', id=wx.ID_ABOUT, - kind=wx.ITEM_NORMAL, text=_(u'About'))) + kind=wx.ITEM_NORMAL, text=_('About'))) self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT) def _init_coll_ConnectionStatusBar_Fields(self, parent): @@ -583,7 +583,7 @@ elif answer == wx.ID_CANCEL: return False - for idx in xrange(self.TabsOpened.GetPageCount()): + for idx in range(self.TabsOpened.GetPageCount()): window = self.TabsOpened.GetPage(idx) if not window.CheckSaveBeforeClosing(): return False @@ -700,8 +700,8 @@ def RefreshRecentProjectsMenu(self): try: - recent_projects = map(DecodeFileSystemPath, - self.GetConfigEntry("RecentProjects", [])) + recent_projects = list(map(DecodeFileSystemPath, + self.GetConfigEntry("RecentProjects", []))) except Exception: recent_projects = [] @@ -711,7 +711,7 @@ self.FileMenu.Enable(ID_FILEMENURECENTPROJECTS, len(recent_projects) > 0) for idx, projectpath in enumerate(recent_projects): - text = u'&%d: %s' % (idx + 1, projectpath) + text = '&%d: %s' % (idx + 1, projectpath) item = self.RecentProjectsMenu.Append(wx.ID_ANY, text, '') self.Bind(wx.EVT_MENU, self.GenerateOpenRecentProjectFunction(projectpath), item) @@ -781,7 +781,7 @@ else: panel = None if panel != self.LastPanelSelected: - for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): + for i in range(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): item = self.EditMenu.FindItemByPosition(self.EditMenuSize) if item is not None: if item.IsSeparator(): @@ -799,7 +799,7 @@ if panel is not None: panel.RefreshConfNodeMenu(self.EditMenu) else: - for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): + for i in range(self.EditMenuSize, self.EditMenu.GetMenuItemCount()): item = self.EditMenu.FindItemByPosition(i) if item is not None: if item.IsSeparator(): @@ -827,7 +827,7 @@ return cPickle.loads(str(self.Config.Read(entry_name, cPickle.dumps(default)))) def ResetConnectionStatusBar(self): - for field in xrange(self.ConnectionStatusBar.GetFieldsCount()): + for field in range(self.ConnectionStatusBar.GetFieldsCount()): self.ConnectionStatusBar.SetStatusText('', field) def ResetView(self): @@ -842,8 +842,8 @@ def RefreshConfigRecentProjects(self, projectpath, err=False): try: - recent_projects = map(DecodeFileSystemPath, - self.GetConfigEntry("RecentProjects", [])) + recent_projects = list(map(DecodeFileSystemPath, + self.GetConfigEntry("RecentProjects", []))) except Exception: recent_projects = [] if projectpath in recent_projects: @@ -851,7 +851,7 @@ if not err: recent_projects.insert(0, projectpath) self.Config.Write("RecentProjects", cPickle.dumps( - map(EncodeFileSystemPath, recent_projects[:MAX_RECENT_PROJECTS]))) + list(map(EncodeFileSystemPath, recent_projects[:MAX_RECENT_PROJECTS])))) self.Config.Flush() def ResetPerspective(self): diff -r fda6c1a37662 -r f62625418bff Beremiz_service.py --- a/Beremiz_service.py Mon Mar 27 10:19:14 2023 +0200 +++ b/Beremiz_service.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import getopt @@ -521,7 +521,7 @@ # Load extensions for extention_file, extension_folder in extensions: sys.path.append(extension_folder) - execfile(os.path.join(extension_folder, extention_file), locals()) + exec(compile(open(os.path.join(extension_folder, extention_file), "rb").read(), os.path.join(extension_folder, extention_file), 'exec'), locals()) # Service name is used as an ID for stunnel's PSK # Some extension may set 'servicename' to a computed ID or Serial Number diff -r fda6c1a37662 -r f62625418bff CLIController.py --- a/CLIController.py Mon Mar 27 10:19:14 2023 +0200 +++ b/CLIController.py Fri Oct 28 12:39:15 2022 +0800 @@ -117,7 +117,7 @@ new_messages = [] if connector: for level, count, prev in zip( - xrange(LogLevelsCount), log_count, self.previous_log_count): + range(LogLevelsCount), log_count, self.previous_log_count): if count is not None and prev != count: if prev is None: dump_end = max(-1, count - 10) diff -r fda6c1a37662 -r f62625418bff CodeFileTreeNode.py --- a/CodeFileTreeNode.py Mon Mar 27 10:19:14 2023 +0200 +++ b/CodeFileTreeNode.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import re import traceback diff -r fda6c1a37662 -r f62625418bff ConfigTreeNode.py --- a/ConfigTreeNode.py Mon Mar 27 10:19:14 2023 +0200 +++ b/ConfigTreeNode.py Fri Oct 28 12:39:15 2022 +0800 @@ -31,7 +31,7 @@ - ... TODO : document """ -from __future__ import absolute_import + import os import traceback import types @@ -319,7 +319,7 @@ return LocationCFilesAndCFLAGS, LDFLAGS, extra_files def IterChildren(self): - for _CTNType, Children in self.Children.items(): + for _CTNType, Children in list(self.Children.items()): for CTNInstance in Children: yield CTNInstance @@ -328,7 +328,7 @@ ordered = [(chld.BaseParams.getIEC_Channel(), chld) for chld in self.IterChildren()] if ordered: ordered.sort() - return zip(*ordered)[1] + return list(zip(*ordered))[1] else: return [] @@ -543,8 +543,8 @@ """ # reorganize self.CTNChildrenTypes tuples from (name, CTNClass, Help) # to ( name, (CTNClass, Help)), an make a dict - transpose = zip(*self.CTNChildrenTypes) - CTNChildrenTypes = dict(zip(transpose[0], zip(transpose[1], transpose[2]))) + transpose = list(zip(*self.CTNChildrenTypes)) + CTNChildrenTypes = dict(list(zip(transpose[0], list(zip(transpose[1], transpose[2]))))) # Check that adding this confnode is allowed try: CTNClass, CTNHelp = CTNChildrenTypes[CTNType] @@ -632,7 +632,7 @@ def LoadXMLParams(self, CTNName=None): methode_name = os.path.join(self.CTNPath(CTNName), "methods.py") if os.path.isfile(methode_name): - execfile(methode_name) + exec(compile(open(methode_name, "rb").read(), methode_name, 'exec')) ConfNodeName = CTNName if CTNName is not None else self.CTNName() diff -r fda6c1a37662 -r f62625418bff IDEFrame.py --- a/IDEFrame.py Mon Mar 27 10:19:14 2023 +0200 +++ b/IDEFrame.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,8 +22,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import sys import base64 from future.builtins import \ @@ -121,7 +121,7 @@ [ TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES -] = range(10) +] = list(range(10)) def GetShortcutKeyCallbackFunction(viewer_function): @@ -343,59 +343,59 @@ } def _init_coll_MenuBar_Menus(self, parent): - parent.Append(menu=self.FileMenu, title=_(u'&File')) - parent.Append(menu=self.EditMenu, title=_(u'&Edit')) - parent.Append(menu=self.DisplayMenu, title=_(u'&Display')) - parent.Append(menu=self.HelpMenu, title=_(u'&Help')) + parent.Append(menu=self.FileMenu, title=_('&File')) + parent.Append(menu=self.EditMenu, title=_('&Edit')) + parent.Append(menu=self.DisplayMenu, title=_('&Display')) + parent.Append(menu=self.HelpMenu, title=_('&Help')) def _init_coll_FileMenu_Items(self, parent): pass def _init_coll_AddMenu_Items(self, parent, add_config=True): AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, - kind=wx.ITEM_NORMAL, text=_(u'&Data Type')) + kind=wx.ITEM_NORMAL, text=_('&Data Type')) AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, - kind=wx.ITEM_NORMAL, text=_(u'&Function')) + kind=wx.ITEM_NORMAL, text=_('&Function')) AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, - kind=wx.ITEM_NORMAL, text=_(u'Function &Block')) + kind=wx.ITEM_NORMAL, text=_('Function &Block')) AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM, - kind=wx.ITEM_NORMAL, text=_(u'&Program')) + kind=wx.ITEM_NORMAL, text=_('&Program')) AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDRESOURCE, - kind=wx.ITEM_NORMAL, text=_(u'&Resource')) + kind=wx.ITEM_NORMAL, text=_('&Resource')) if add_config: AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, - kind=wx.ITEM_NORMAL, text=_(u'&Configuration')) + kind=wx.ITEM_NORMAL, text=_('&Configuration')) def _init_coll_EditMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_UNDO, - kind=wx.ITEM_NORMAL, text=_(u'Undo') + '\tCTRL+Z') + kind=wx.ITEM_NORMAL, text=_('Undo') + '\tCTRL+Z') AppendMenu(parent, help='', id=wx.ID_REDO, - kind=wx.ITEM_NORMAL, text=_(u'Redo') + '\tCTRL+Y') + kind=wx.ITEM_NORMAL, text=_('Redo') + '\tCTRL+Y') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_CUT, - kind=wx.ITEM_NORMAL, text=_(u'Cut') + '\tCTRL+X') + kind=wx.ITEM_NORMAL, text=_('Cut') + '\tCTRL+X') AppendMenu(parent, help='', id=wx.ID_COPY, - kind=wx.ITEM_NORMAL, text=_(u'Copy') + '\tCTRL+C') + kind=wx.ITEM_NORMAL, text=_('Copy') + '\tCTRL+C') AppendMenu(parent, help='', id=wx.ID_PASTE, - kind=wx.ITEM_NORMAL, text=_(u'Paste') + '\tCTRL+V') + kind=wx.ITEM_NORMAL, text=_('Paste') + '\tCTRL+V') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_FIND, - kind=wx.ITEM_NORMAL, text=_(u'Find') + '\tCTRL+F') + kind=wx.ITEM_NORMAL, text=_('Find') + '\tCTRL+F') AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDNEXT, - kind=wx.ITEM_NORMAL, text=_(u'Find Next') + '\tCTRL+K') + kind=wx.ITEM_NORMAL, text=_('Find Next') + '\tCTRL+K') AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, - kind=wx.ITEM_NORMAL, text=_(u'Find Previous') + '\tCTRL+SHIFT+K') + kind=wx.ITEM_NORMAL, text=_('Find Previous') + '\tCTRL+SHIFT+K') parent.AppendSeparator() AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, - kind=wx.ITEM_NORMAL, text=_(u'Search in Project') + '\tCTRL+SHIFT+F') + kind=wx.ITEM_NORMAL, text=_('Search in Project') + '\tCTRL+SHIFT+F') parent.AppendSeparator() add_menu = wx.Menu(title='') self._init_coll_AddMenu_Items(add_menu) - parent.Append(wx.ID_ADD, _(u"&Add Element"), add_menu) + parent.Append(wx.ID_ADD, _("&Add Element"), add_menu) AppendMenu(parent, help='', id=wx.ID_SELECTALL, - kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A') + kind=wx.ITEM_NORMAL, text=_('Select All') + '\tCTRL+A') AppendMenu(parent, help='', id=wx.ID_DELETE, - kind=wx.ITEM_NORMAL, text=_(u'&Delete')) + kind=wx.ITEM_NORMAL, text=_('&Delete')) self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) # self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) @@ -424,22 +424,22 @@ self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL) self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) - self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None), - (wx.ID_REDO, "redo", _(u'Redo'), None), + self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _('Undo'), None), + (wx.ID_REDO, "redo", _('Redo'), None), None, - (wx.ID_CUT, "cut", _(u'Cut'), None), - (wx.ID_COPY, "copy", _(u'Copy'), None), - (wx.ID_PASTE, "paste", _(u'Paste'), None), + (wx.ID_CUT, "cut", _('Cut'), None), + (wx.ID_COPY, "copy", _('Copy'), None), + (wx.ID_PASTE, "paste", _('Paste'), None), None, - (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find", _(u'Search in Project'), None), - (ID_PLCOPENEDITORDISPLAYMENUFULLSCREEN, "fullscreen", _(u'Toggle fullscreen mode'), None)]) + (ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, "find", _('Search in Project'), None), + (ID_PLCOPENEDITORDISPLAYMENUFULLSCREEN, "fullscreen", _('Toggle fullscreen mode'), None)]) def _init_coll_DisplayMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_REFRESH, - kind=wx.ITEM_NORMAL, text=_(u'Refresh') + '\tCTRL+R') + kind=wx.ITEM_NORMAL, text=_('Refresh') + '\tCTRL+R') if self.EnableDebug: AppendMenu(parent, help='', id=wx.ID_CLEAR, - kind=wx.ITEM_NORMAL, text=_(u'Clear Errors') + '\tCTRL+K') + kind=wx.ITEM_NORMAL, text=_('Clear Errors') + '\tCTRL+K') parent.AppendSeparator() zoommenu = wx.Menu(title='') parent.Append(wx.ID_ZOOM_FIT, _("Zoom"), zoommenu) @@ -450,15 +450,15 @@ parent.AppendSeparator() AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE, - kind=wx.ITEM_NORMAL, text=_(u'Switch perspective') + '\tF12') + kind=wx.ITEM_NORMAL, text=_('Switch perspective') + '\tF12') self.Bind(wx.EVT_MENU, self.SwitchPerspective, id=ID_PLCOPENEDITORDISPLAYMENUSWITCHPERSPECTIVE) AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENUFULLSCREEN, - kind=wx.ITEM_NORMAL, text=_(u'Full screen') + '\tShift-F12') + kind=wx.ITEM_NORMAL, text=_('Full screen') + '\tShift-F12') self.Bind(wx.EVT_MENU, self.SwitchFullScrMode, id=ID_PLCOPENEDITORDISPLAYMENUFULLSCREEN) AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, - kind=wx.ITEM_NORMAL, text=_(u'Reset Perspective')) + kind=wx.ITEM_NORMAL, text=_('Reset Perspective')) self.Bind(wx.EVT_MENU, self.OnResetPerspective, id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE) self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) @@ -792,7 +792,7 @@ # ------------------------------------------------------------------------------- def GetTabInfos(self, tab): - for page_name, (page_ref, _page_title) in self.MainTabs.iteritems(): + for page_name, (page_ref, _page_title) in self.MainTabs.items(): if page_ref == tab: return ("main", page_name) return None @@ -805,7 +805,7 @@ pos = child.GetPosition() tab = {"pos": (pos.x, pos.y), "pages": []} tab_size = child.GetSize() - for page_idx in xrange(child.GetPageCount()): + for page_idx in range(child.GetPageCount()): page = child.GetWindowFromIdx(page_idx) if "size" not in tab: tab["size"] = (tab_size[0], tab_size[1] + page.GetSize()[1]) @@ -871,7 +871,7 @@ self.AUIManager.LoadPerspective(self.DefaultPerspective["perspective"]) for notebook in [self.LeftNoteBook, self.BottomNoteBook, self.RightNoteBook]: - for dummy in xrange(notebook.GetPageCount()): + for dummy in range(notebook.GetPageCount()): notebook.RemovePage(0) notebooks = self.DefaultPerspective["notebooks"] @@ -982,7 +982,7 @@ return self.DrawingMode def RefreshScaling(self): - for i in xrange(self.TabsOpened.GetPageCount()): + for i in range(self.TabsOpened.GetPageCount()): editor = self.TabsOpened.GetPage(i) editor.RefreshScaling() @@ -1014,7 +1014,7 @@ self.RefreshTabCtrlEvent() def DeletePage(self, window): - for idx in xrange(self.TabsOpened.GetPageCount()): + for idx in range(self.TabsOpened.GetPageCount()): if self.TabsOpened.GetPage(idx) == window: self.TabsOpened.DeletePage(idx) self.RefreshTabCtrlEvent() @@ -1024,7 +1024,7 @@ """Function that fix difference in deleting all tabs between wx.Notebook and wx.aui.AUINotebook. """ - for dummy in xrange(self.TabsOpened.GetPageCount()): + for dummy in range(self.TabsOpened.GetPageCount()): self.TabsOpened.DeletePage(0) self.RefreshTabCtrlEvent() @@ -1065,7 +1065,7 @@ elif answer == wx.ID_CANCEL: return False - for idx in xrange(self.TabsOpened.GetPageCount()): + for idx in range(self.TabsOpened.GetPageCount()): window = self.TabsOpened.GetPage(idx) if not window.CheckSaveBeforeClosing(): return False @@ -1114,7 +1114,7 @@ window = self.TabsOpened.GetPage(selected) data = wx.PrintDialogData(self.PrintData) properties = self.Controler.GetProjectProperties(window.IsDebugging()) - page_size = map(int, properties["pageSize"]) + page_size = list(map(int, properties["pageSize"])) margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) printout = GraphicPrintout(window, page_size, margins, True) printout2 = GraphicPrintout(window, page_size, margins, True) @@ -1138,7 +1138,7 @@ dialog_data = wx.PrintDialogData(self.PrintData) dialog_data.SetToPage(1) properties = self.Controler.GetProjectProperties(window.IsDebugging()) - page_size = map(int, properties["pageSize"]) + page_size = list(map(int, properties["pageSize"])) margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) printer = wx.Printer(dialog_data) printout = GraphicPrintout(window, page_size, margins) @@ -1227,7 +1227,7 @@ self.EditMenu.Enable(wx.ID_DELETE, False) def CloseTabsWithoutModel(self, refresh=True): - idxs = range(self.TabsOpened.GetPageCount()) + idxs = list(range(self.TabsOpened.GetPageCount())) idxs.reverse() for idx in idxs: window = self.TabsOpened.GetPage(idx) @@ -1475,19 +1475,19 @@ self._Refresh(FILEMENU, EDITMENU, DISPLAYMENU, EDITORTOOLBAR) def RefreshEditorNames(self, old_tagname, new_tagname): - for i in xrange(self.TabsOpened.GetPageCount()): + for i in range(self.TabsOpened.GetPageCount()): editor = self.TabsOpened.GetPage(i) if editor.GetTagName() == old_tagname: editor.SetTagName(new_tagname) def IsOpened(self, tagname): - for idx in xrange(self.TabsOpened.GetPageCount()): + for idx in range(self.TabsOpened.GetPageCount()): if self.TabsOpened.GetPage(idx).IsViewing(tagname): return idx return None def RefreshPageTitles(self): - for idx in xrange(self.TabsOpened.GetPageCount()): + for idx in range(self.TabsOpened.GetPageCount()): window = self.TabsOpened.GetPage(idx) icon = window.GetIcon() if icon is not None: @@ -1601,7 +1601,7 @@ if root is not None and root.IsOk(): words = tagname.split("::") result = self.RecursiveProjectTreeItemSelection( - root, zip(words[1:], self.TagNamePartsItemTypes.get(words[0], []))) + root, list(zip(words[1:], self.TagNamePartsItemTypes.get(words[0], [])))) return result def RecursiveProjectTreeItemSelection(self, root, items): @@ -1890,7 +1890,7 @@ if old_selected != openedidx: if old_selected >= 0: self.TabsOpened.GetPage(old_selected).ResetBuffer() - for i in xrange(self.TabsOpened.GetPageCount()): + for i in range(self.TabsOpened.GetPageCount()): window = self.TabsOpened.GetPage(i) if window == new_window: self.TabsOpened.SetSelection(i) @@ -2083,7 +2083,7 @@ def CloseObsoleteDebugTabs(self): if self.EnableDebug: - idxs = range(self.TabsOpened.GetPageCount()) + idxs = list(range(self.TabsOpened.GetPageCount())) idxs.reverse() for idx in idxs: editor = self.TabsOpened.GetPage(idx) @@ -2572,9 +2572,9 @@ if highlight_type is None: self.Highlights = {} else: - self.Highlights = dict([(name, highlight) for name, highlight in self.Highlights.iteritems() if highlight != highlight_type]) + self.Highlights = dict([(name, highlight) for name, highlight in self.Highlights.items() if highlight != highlight_type]) self.RefreshProjectTree() - for i in xrange(self.TabsOpened.GetPageCount()): + for i in range(self.TabsOpened.GetPageCount()): viewer = self.TabsOpened.GetPage(i) viewer.ClearHighlights(highlight_type) diff -r fda6c1a37662 -r f62625418bff NativeLib.py --- a/NativeLib.py Mon Mar 27 10:19:14 2023 +0200 +++ b/NativeLib.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import util.paths as paths from POULibrary import SimplePOULibraryFactory diff -r fda6c1a37662 -r f62625418bff PLCControler.py --- a/PLCControler.py Mon Mar 27 10:19:14 2023 +0200 +++ b/PLCControler.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from copy import deepcopy import os import re @@ -74,7 +74,7 @@ self.MinIndex = 0 self.MaxIndex = 0 # Initialising buffer with currentstate at the first place - for i in xrange(UNDO_BUFFER_LENGTH): + for i in range(UNDO_BUFFER_LENGTH): if i == 0: self.Buffer.append(currentstate) else: @@ -1184,7 +1184,7 @@ for _sectioname, blocktype in self.TotalTypesDict.get(typename, []): if inputs is not None and inputs != "undefined": block_inputs = tuple([var_type for _name, var_type, _modifier in blocktype["inputs"]]) - if reduce(lambda x, y: x and y, map(lambda x: x[0] == "ANY" or self.IsOfType(*x), zip(inputs, block_inputs)), True): + if reduce(lambda x, y: x and y, [x[0] == "ANY" or self.IsOfType(*x) for x in zip(inputs, block_inputs)], True): return blocktype else: if result_blocktype: @@ -1247,7 +1247,7 @@ if project is not None and words[0] in ["P", "T", "A"]: name = words[1] blocktypes = [] - for blocks in self.TotalTypesDict.itervalues(): + for blocks in self.TotalTypesDict.values(): for _sectioname, block in blocks: if block["type"] == "functionBlock": blocktypes.append(block["name"]) @@ -1302,7 +1302,7 @@ result = project.getpou(typename) if result is not None: return result - for standardlibrary in StdBlckLibs.values(): + for standardlibrary in list(StdBlckLibs.values()): result = standardlibrary.getpou(typename) if result is not None: return result @@ -1455,7 +1455,7 @@ # Return Subrange types def GetSubrangeBaseTypes(self, exclude, debug=False): - subrange_basetypes = DataTypeRange.keys() + subrange_basetypes = list(DataTypeRange.keys()) project = self.GetProject(debug) if project is not None: subrange_basetypes.extend( @@ -1970,9 +1970,9 @@ new_pos[0] -= width // 2 new_pos[1] -= height // 2 else: - new_pos = map(lambda x: x + 30, new_pos) + new_pos = [x + 30 for x in new_pos] if scaling[0] != 0 and scaling[1] != 0: - min_pos = map(lambda x: 30 / x, scaling) + min_pos = [30 / x for x in scaling] minx = round(min_pos[0]) if int(min_pos[0]) == round(min_pos[0]): minx += 1 @@ -2118,7 +2118,7 @@ self.ChangeEditedElementPouVar(tagname, old_type, old_name, new_type, new_name) elif new_name != old_name: self.ChangeEditedElementPouVar(tagname, old_type, old_name, new_type, new_name) - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": if value != "": block.setinstanceName(value) @@ -2179,7 +2179,7 @@ variable = element.getinstance(id) if variable is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": variable.setexpression(value) elif param == "executionOrder" and variable.getexecutionOrderId() != value: @@ -2232,7 +2232,7 @@ connection = element.getinstance(id) if connection is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": connection.setname(value) elif param == "height": @@ -2264,7 +2264,7 @@ element = self.GetEditedElement(tagname) if element is not None: comment = element.getinstance(id) - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "content": comment.setcontentText(value) elif param == "height": @@ -2291,7 +2291,7 @@ powerrail = element.getinstance(id) if powerrail is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "height": powerrail.setheight(value) elif param == "width": @@ -2330,7 +2330,7 @@ contact = element.getinstance(id) if contact is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": contact.setvariable(value) elif param == "type": @@ -2373,7 +2373,7 @@ coil = element.getinstance(id) if coil is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": coil.setvariable(value) elif param == "type": @@ -2419,7 +2419,7 @@ step = element.getinstance(id) if step is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "name": step.setname(value) elif param == "initial": @@ -2469,7 +2469,7 @@ transition = element.getinstance(id) if transition is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "type" and value != "connection": transition.setconditionContent(value, infos["condition"]) elif param == "height": @@ -2529,7 +2529,7 @@ divergence = element.getinstance(id) if divergence is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "height": divergence.setheight(value) elif param == "width": @@ -2580,7 +2580,7 @@ jump = element.getinstance(id) if jump is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "target": jump.settargetName(value) elif param == "height": @@ -2610,7 +2610,7 @@ actionBlock = element.getinstance(id) if actionBlock is None: return - for param, value in infos.items(): + for param, value in list(infos.items()): if param == "actions": actionBlock.setactions(value) elif param == "height": diff -r fda6c1a37662 -r f62625418bff PLCGenerator.py --- a/PLCGenerator.py Mon Mar 27 10:19:14 2023 +0200 +++ b/PLCGenerator.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re from functools import reduce from six.moves import xrange @@ -65,7 +65,7 @@ while lines[line_num][spaces] == " ": spaces += 1 indent = "" - for dummy in xrange(spaces, nb_spaces): + for dummy in range(spaces, nb_spaces): indent += " " for line in lines: if line != "": @@ -264,7 +264,7 @@ # Generate a POU defined and used in text def GeneratePouProgramInText(self, text): - for pou_name in self.PouComputed.keys(): + for pou_name in list(self.PouComputed.keys()): model = re.compile("(?:^|[^0-9^A-Z])%s(?:$|[^0-9^A-Z])" % pou_name.upper()) if model.search(text) is not None: self.GeneratePouProgram(pou_name) @@ -472,12 +472,12 @@ if len(self.DatatypeComputed) > 0: self.Program += [("TYPE\n", ())] # Generate every data types defined - for datatype_name in self.DatatypeComputed.keys(): + for datatype_name in list(self.DatatypeComputed.keys()): log("Generate Data Type %s"%datatype_name) self.GenerateDataType(datatype_name) self.Program += [("END_TYPE\n\n", ())] # Generate every POUs defined - for pou_name in self.PouComputed.keys(): + for pou_name in list(self.PouComputed.keys()): log("Generate POU %s"%pou_name) self.GeneratePouProgram(pou_name) if noconfig: @@ -895,7 +895,7 @@ if connected is not None and connected not in self.ConnectionTypes: for connection in self.ExtractRelatedConnections(connected): self.ConnectionTypes[connection] = itype - for var_type, connections in undefined.items(): + for var_type, connections in list(undefined.items()): related = [] for connection in connections: connection_type = self.ConnectionTypes.get(connection) @@ -1055,7 +1055,7 @@ def FactorizePaths(self, paths): same_paths = {} - uncomputed_index = range(len(paths)) + uncomputed_index = list(range(len(paths))) factorized_paths = [] for num, path in enumerate(paths): if isinstance(path, list): @@ -1066,7 +1066,7 @@ else: factorized_paths.append(path) uncomputed_index.remove(num) - for same_path, elements in same_paths.items(): + for same_path, elements in list(same_paths.items()): if len(elements) > 1: elements_paths = self.FactorizePaths([path for path, num in elements]) if len(elements_paths) > 1: @@ -1452,7 +1452,7 @@ def GenerateSFCStep(self, step, pou): step_name = step.getname() - if step_name not in self.SFCNetworks["Steps"].keys(): + if step_name not in list(self.SFCNetworks["Steps"].keys()): if step.getinitialStep(): self.InitialSteps.append(step_name) step_infos = {"id": step.getlocalId(), @@ -1482,7 +1482,7 @@ instances.extend(self.ExtractConvergenceInputs(transition, pou)) for instance in instances: self.GenerateSFCTransition(instance, pou) - if instance in self.SFCNetworks["Transitions"].keys(): + if instance in list(self.SFCNetworks["Transitions"].keys()): target_info = (self.TagName, "transition", instance.getlocalId(), "to", step_infos["id"]) self.SFCNetworks["Transitions"][instance]["to"].append([(step_name, target_info)]) @@ -1516,7 +1516,7 @@ instances.extend(self.ExtractConvergenceInputs(transition, pou)) for instance in instances: self.GenerateSFCTransition(instance, pou) - if instance in self.SFCNetworks["Transitions"].keys(): + if instance in list(self.SFCNetworks["Transitions"].keys()): target_info = (self.TagName, "jump", jump.getlocalId(), "target") self.SFCNetworks["Transitions"][instance]["to"].append([(jump_target, target_info)]) @@ -1530,7 +1530,7 @@ step = body.getcontentInstance(stepLocalId) self.GenerateSFCStep(step, pou) step_name = step.getname() - if step_name in self.SFCNetworks["Steps"].keys(): + if step_name in list(self.SFCNetworks["Steps"].keys()): actions = actionBlock.getactions() for i, action in enumerate(actions): action_infos = {"id": actionBlock.getlocalId(), @@ -1555,7 +1555,7 @@ self.SFCNetworks["Steps"][step_name]["actions"].append(action_infos) def GenerateSFCAction(self, action_name, pou): - if action_name not in self.SFCNetworks["Actions"].keys(): + if action_name not in list(self.SFCNetworks["Actions"].keys()): actionContent = pou.getaction(action_name) if actionContent is not None: previous_tagname = self.TagName @@ -1566,7 +1566,7 @@ self.TagName = previous_tagname def GenerateSFCTransition(self, transition, pou): - if transition not in self.SFCNetworks["Transitions"].keys(): + if transition not in list(self.SFCNetworks["Transitions"].keys()): steps = [] connections = transition.connectionPointIn.getconnections() if connections is not None and len(connections) == 1: @@ -1639,12 +1639,12 @@ for step in steps: self.GenerateSFCStep(step, pou) step_name = step.getname() - if step_name in self.SFCNetworks["Steps"].keys(): + if step_name in list(self.SFCNetworks["Steps"].keys()): transition_infos["from"].append([(step_name, (self.TagName, "transition", transition.getlocalId(), "from", step.getlocalId()))]) self.SFCNetworks["Steps"][step_name]["transitions"].append(transition) def ComputeSFCStep(self, step_name): - if step_name in self.SFCNetworks["Steps"].keys(): + if step_name in list(self.SFCNetworks["Steps"].keys()): step_infos = self.SFCNetworks["Steps"].pop(step_name) self.Program += [(self.CurrentIndent, ())] if step_infos["initial"]: @@ -1679,7 +1679,7 @@ self.ComputeSFCTransition(transition) def ComputeSFCAction(self, action_name): - if action_name in self.SFCNetworks["Actions"].keys(): + if action_name in list(self.SFCNetworks["Actions"].keys()): action_content, action_info = self.SFCNetworks["Actions"].pop(action_name) self.Program += [("%sACTION " % self.CurrentIndent, ()), (action_name, action_info), @@ -1688,7 +1688,7 @@ self.Program += [("%sEND_ACTION\n\n" % self.CurrentIndent, ())] def ComputeSFCTransition(self, transition): - if transition in self.SFCNetworks["Transitions"].keys(): + if transition in list(self.SFCNetworks["Transitions"].keys()): transition_infos = self.SFCNetworks["Transitions"].pop(transition) self.Program += [("%sTRANSITION" % self.CurrentIndent, ())] if transition_infos["priority"] is not None: diff -r fda6c1a37662 -r f62625418bff PLCOpenEditor.py --- a/PLCOpenEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/PLCOpenEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import getopt @@ -74,35 +74,35 @@ def _init_coll_FileMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_NEW, - kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N') + kind=wx.ITEM_NORMAL, text=_('New') + '\tCTRL+N') AppendMenu(parent, help='', id=wx.ID_OPEN, - kind=wx.ITEM_NORMAL, text=_(u'Open') + '\tCTRL+O') + kind=wx.ITEM_NORMAL, text=_('Open') + '\tCTRL+O') AppendMenu(parent, help='', id=wx.ID_CLOSE, - kind=wx.ITEM_NORMAL, text=_(u'Close Tab') + '\tCTRL+W') + kind=wx.ITEM_NORMAL, text=_('Close Tab') + '\tCTRL+W') AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL, - kind=wx.ITEM_NORMAL, text=_(u'Close Project') + '\tCTRL+SHIFT+W') + kind=wx.ITEM_NORMAL, text=_('Close Project') + '\tCTRL+SHIFT+W') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_SAVE, - kind=wx.ITEM_NORMAL, text=_(u'Save') + '\tCTRL+S') + kind=wx.ITEM_NORMAL, text=_('Save') + '\tCTRL+S') AppendMenu(parent, help='', id=wx.ID_SAVEAS, - kind=wx.ITEM_NORMAL, text=_(u'Save As...') + '\tCTRL+SHIFT+S') + kind=wx.ITEM_NORMAL, text=_('Save As...') + '\tCTRL+SHIFT+S') AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATE, - kind=wx.ITEM_NORMAL, text=_(u'Generate Program') + '\tCTRL+G') + kind=wx.ITEM_NORMAL, text=_('Generate Program') + '\tCTRL+G') AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATEAS, - kind=wx.ITEM_NORMAL, text=_(u'Generate Program As...') + '\tCTRL+SHIFT+G') + kind=wx.ITEM_NORMAL, text=_('Generate Program As...') + '\tCTRL+SHIFT+G') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP, - kind=wx.ITEM_NORMAL, text=_(u'Page Setup') + '\tCTRL+ALT+P') + kind=wx.ITEM_NORMAL, text=_('Page Setup') + '\tCTRL+ALT+P') AppendMenu(parent, help='', id=wx.ID_PREVIEW, - kind=wx.ITEM_NORMAL, text=_(u'Preview') + '\tCTRL+SHIFT+P') + kind=wx.ITEM_NORMAL, text=_('Preview') + '\tCTRL+SHIFT+P') AppendMenu(parent, help='', id=wx.ID_PRINT, - kind=wx.ITEM_NORMAL, text=_(u'Print') + '\tCTRL+P') + kind=wx.ITEM_NORMAL, text=_('Print') + '\tCTRL+P') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PROPERTIES, - kind=wx.ITEM_NORMAL, text=_(u'&Properties')) + kind=wx.ITEM_NORMAL, text=_('&Properties')) parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_EXIT, - kind=wx.ITEM_NORMAL, text=_(u'Quit') + '\tCTRL+Q') + kind=wx.ITEM_NORMAL, text=_('Quit') + '\tCTRL+Q') self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW) self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN) @@ -120,16 +120,16 @@ self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES) self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) - self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None), - (wx.ID_OPEN, "open", _(u'Open'), None), - (wx.ID_SAVE, "save", _(u'Save'), None), - (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None), - (wx.ID_PRINT, "print", _(u'Print'), None), - (ID_PLCOPENEDITORFILEMENUGENERATE, "Build", _(u'Generate Program'), None)]) + self.AddToMenuToolBar([(wx.ID_NEW, "new", _('New'), None), + (wx.ID_OPEN, "open", _('Open'), None), + (wx.ID_SAVE, "save", _('Save'), None), + (wx.ID_SAVEAS, "saveas", _('Save As...'), None), + (wx.ID_PRINT, "print", _('Print'), None), + (ID_PLCOPENEDITORFILEMENUGENERATE, "Build", _('Generate Program'), None)]) def _init_coll_HelpMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_HELP, - kind=wx.ITEM_NORMAL, text=_(u'PLCOpenEditor') + '\tF1') + kind=wx.ITEM_NORMAL, text=_('PLCOpenEditor') + '\tF1') # AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS, # kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2') # AppendMenu(parent, help='', id=wx.ID_HELP_CONTEXT, @@ -138,14 +138,14 @@ def handler(event): return wx.MessageBox( version.GetCommunityHelpMsg(), - _(u'Community support'), + _('Community support'), wx.OK | wx.ICON_INFORMATION) - menu_entry = parent.Append(help='', id=wx.ID_ANY, kind=wx.ITEM_NORMAL, text=_(u'Community support')) + menu_entry = parent.Append(help='', id=wx.ID_ANY, kind=wx.ITEM_NORMAL, text=_('Community support')) self.Bind(wx.EVT_MENU, handler, menu_entry) AppendMenu(parent, help='', id=wx.ID_ABOUT, - kind=wx.ITEM_NORMAL, text=_(u'About')) + kind=wx.ITEM_NORMAL, text=_('About')) self.Bind(wx.EVT_MENU, self.OnPLCOpenEditorMenu, id=wx.ID_HELP) # self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu, id=wx.ID_HELP_CONTENTS) self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT) diff -r fda6c1a37662 -r f62625418bff POULibrary.py --- a/POULibrary.py Mon Mar 27 10:19:14 2023 +0200 +++ b/POULibrary.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from weakref import ref # Exception type for problems that user has to take action in order to fix diff -r fda6c1a37662 -r f62625418bff PSKManagement.py --- a/PSKManagement.py Mon Mar 27 10:19:14 2023 +0200 +++ b/PSKManagement.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + import os import time import json @@ -11,8 +11,8 @@ # PSK Management Data model : # [[ID,Desc, LastKnownURI, LastConnect]] -COL_ID, COL_URI, COL_DESC, COL_LAST = range(4) -REPLACE, REPLACE_ALL, KEEP, KEEP_ALL, CANCEL = range(5) +COL_ID, COL_URI, COL_DESC, COL_LAST = list(range(4)) +REPLACE, REPLACE_ALL, KEEP, KEEP_ALL, CANCEL = list(range(5)) def _pskpath(project_path): diff -r fda6c1a37662 -r f62625418bff ProjectController.py --- a/ProjectController.py Mon Mar 27 10:19:14 2023 +0200 +++ b/ProjectController.py Fri Oct 28 12:39:15 2022 +0800 @@ -28,7 +28,7 @@ """ -from __future__ import absolute_import + import os import traceback import time @@ -40,7 +40,7 @@ from datetime import datetime from weakref import WeakKeyDictionary from functools import reduce -from itertools import izip + from distutils.dir_util import copy_tree from six.moves import xrange @@ -634,7 +634,7 @@ LocatedCCodeAndFlags.append(res[:2]) if len(res) > 2: Extras.extend(res[2:]) - return map(list, zip(*LocatedCCodeAndFlags)) + [tuple(Extras)] + return list(map(list, list(zip(*LocatedCCodeAndFlags)))) + [tuple(Extras)] # Update PLCOpenEditor ConfNode Block types from loaded confnodes def RefreshConfNodesBlockLists(self): @@ -888,15 +888,13 @@ _("Error : At least one configuration and one resource must be declared in PLC !\n")) return False # transform those base names to full names with path - C_files = map( - lambda filename: os.path.join(buildpath, filename), C_files) + C_files = [os.path.join(buildpath, filename) for filename in C_files] # prepend beremiz include to configuration header H_files = [fname for fname in result.splitlines() if fname[ -2:] == ".h" or fname[-2:] == ".H"] H_files.remove("LOCATED_VARIABLES.h") - H_files = map( - lambda filename: os.path.join(buildpath, filename), H_files) + H_files = [os.path.join(buildpath, filename) for filename in H_files] for H_file in H_files: with open(H_file, 'r') as original: data = original.read() @@ -995,7 +993,7 @@ for line in ListGroup[0]: # Split and Maps each field to dictionnary entries attrs = dict( - zip(ProgramsListAttributeName, line.strip().split(';'))) + list(zip(ProgramsListAttributeName, line.strip().split(';')))) # Truncate "C_path" to remove conf an resources names attrs["C_path"] = '__'.join( attrs["C_path"].split(".", 2)[1:]) @@ -1008,7 +1006,7 @@ for line in ListGroup[1]: # Split and Maps each field to dictionnary entries attrs = dict( - zip(VariablesListAttributeName, line.strip().split(';'))) + list(zip(VariablesListAttributeName, line.strip().split(';')))) # Truncate "C_path" to remove conf an resources names parts = attrs["C_path"].split(".", 2) if len(parts) > 2: @@ -1098,9 +1096,8 @@ """ # filter location that are related to code that will be called # in retreive, publish, init, cleanup - locstrs = map(lambda x: "_".join(map(str, x)), - [loc for loc, _Cfiles, DoCalls in - self.LocationCFilesAndCFLAGS if loc and DoCalls]) + locstrs = ["_".join(map(str, x)) for x in [loc for loc, _Cfiles, DoCalls in + self.LocationCFilesAndCFLAGS if loc and DoCalls]] # Generate main, based on template if not self.BeremizRoot.getDisable_Extensions(): @@ -1113,7 +1110,7 @@ "retrieve_calls": "\n ".join([ "__retrieve_%s();" % locstr for locstr in locstrs]), "publish_calls": "\n ".join([ # Call publish in reverse order - "__publish_%s();" % locstrs[i - 1] for i in xrange(len(locstrs), 0, -1)]), + "__publish_%s();" % locstrs[i - 1] for i in range(len(locstrs), 0, -1)]), "init_calls": "\n ".join([ "init_level=%d; " % (i + 1) + "if((res = __init_%s(argc,argv))){" % locstr + @@ -1121,7 +1118,7 @@ "return res;}" for i, locstr in enumerate(locstrs)]), "cleanup_calls": "\n ".join([ "if(init_level >= %d) " % i + - "__cleanup_%s();" % locstrs[i - 1] for i in xrange(len(locstrs), 0, -1)]) + "__cleanup_%s();" % locstrs[i - 1] for i in range(len(locstrs), 0, -1)]) } else: plc_main_code = targets.GetCode("plc_main_head.c") % { @@ -1395,9 +1392,9 @@ if editor_name == "": if len(editors) == 1: - editor_name = editors.keys()[0] + editor_name = list(editors.keys())[0] elif len(editors) > 0: - names = editors.keys() + names = list(editors.keys()) dialog = wx.SingleChoiceDialog( self.AppFrame, _("Select an editor:"), @@ -1434,7 +1431,7 @@ self._IECRawCodeView = None if self._ProjectFilesView == view: self._ProjectFilesView = None - if view in self._FileEditors.values(): + if view in list(self._FileEditors.values()): self._FileEditors.pop(view.GetFilePath()) def _Clean(self): @@ -1506,7 +1503,7 @@ allmethods = self.DefaultMethods.copy() allmethods.update( self.MethodsFromStatus.get(status, {})) - for method, active in allmethods.items(): + for method, active in list(allmethods.items()): self.ShowMethod(method, active) self.previous_plcstate = status if self.AppFrame is not None: @@ -1552,7 +1549,7 @@ debug_vars = UnpackDebugBuffer( debug_buff, self.TracedIECTypes) if debug_vars is not None: - for IECPath, values_buffer, value in izip( + for IECPath, values_buffer, value in zip( self.TracedIECPath, self.DebugValuesBuffers, debug_vars): @@ -1578,7 +1575,7 @@ buffers, self.DebugValuesBuffers = (self.DebugValuesBuffers, - [list() for dummy in xrange(len(self.TracedIECPath))]) + [list() for dummy in range(len(self.TracedIECPath))]) ticks, self.DebugTicks = self.DebugTicks, [] @@ -1603,7 +1600,7 @@ self.TracedIECTypes = [] if self._connector is not None and self.debug_status != PlcStatus.Broken: IECPathsToPop = [] - for IECPath, data_tuple in self.IECdebug_datas.iteritems(): + for IECPath, data_tuple in self.IECdebug_datas.items(): WeakCallableDict, _data_log, _status, fvalue, _buffer_list = data_tuple if len(WeakCallableDict) == 0: # Callable Dict is empty. @@ -1627,10 +1624,10 @@ if Idxs: Idxs.sort() - IdxsT = zip(*Idxs) + IdxsT = list(zip(*Idxs)) self.TracedIECPath = IdxsT[3] self.TracedIECTypes = IdxsT[1] - res = self._connector.SetTraceVariablesList(zip(*IdxsT[0:3])) + res = self._connector.SetTraceVariablesList(list(zip(*IdxsT[0:3]))) if res is not None and res > 0: self.DebugToken = res else: @@ -1695,7 +1692,7 @@ else: IECdebug_data[4] = reduce( lambda x, y: x | y, - IECdebug_data[0].itervalues(), + iter(IECdebug_data[0].values()), False) self.AppendDebugUpdate() @@ -1732,7 +1729,7 @@ if data_tuple is not None: WeakCallableDict, _data_log, _status, _fvalue, buffer_list = data_tuple # data_log.append((debug_tick, value)) - for weakcallable, buffer_list in WeakCallableDict.iteritems(): + for weakcallable, buffer_list in WeakCallableDict.items(): function = getattr(weakcallable, function_name, None) if function is not None: # FIXME: apparently, despite of weak ref objects, diff -r fda6c1a37662 -r f62625418bff XSLTransform.py --- a/XSLTransform.py Mon Mar 27 10:19:14 2023 +0200 +++ b/XSLTransform.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from lxml import etree class XSLTransform(object): @@ -18,7 +18,7 @@ extensions={("beremiz", name): call for name, call in xsltext}) def transform(self, root, profile_run=False, **kwargs): - res = self.xslt(root, profile_run=profile_run, **{k: etree.XSLT.strparam(v) for k, v in kwargs.iteritems()}) + res = self.xslt(root, profile_run=profile_run, **{k: etree.XSLT.strparam(v) for k, v in kwargs.items()}) # print(self.xslt.error_log) return res diff -r fda6c1a37662 -r f62625418bff bacnet/__init__.py --- a/bacnet/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/bacnet/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,6 +23,6 @@ # used in safety-critical situations without a full and competent review. -from __future__ import absolute_import + from bacnet.bacnet import * diff -r fda6c1a37662 -r f62625418bff bacnet/bacnet.py --- a/bacnet/bacnet.py Mon Mar 27 10:19:14 2023 +0200 +++ b/bacnet/bacnet.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # This code is made available on the understanding that it will not be # used in safety-critical situations without a full and competent review. -from __future__ import absolute_import + import os from collections import Counter diff -r fda6c1a37662 -r f62625418bff c_ext/CFileEditor.py --- a/c_ext/CFileEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/c_ext/CFileEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx.stc as stc from controls.CustomStyledTextCtrl import faces diff -r fda6c1a37662 -r f62625418bff c_ext/__init__.py --- a/c_ext/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/c_ext/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,5 +22,5 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from c_ext.c_ext import * diff -r fda6c1a37662 -r f62625418bff c_ext/c_ext.py --- a/c_ext/c_ext.py Mon Mar 27 10:19:14 2023 +0200 +++ b/c_ext/c_ext.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os from c_ext.CFileEditor import CFileEditor diff -r fda6c1a37662 -r f62625418bff canfestival/NetworkEditor.py --- a/canfestival/NetworkEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/canfestival/NetworkEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from networkeditortemplate import NetworkEditorTemplate diff -r fda6c1a37662 -r f62625418bff canfestival/SlaveEditor.py --- a/canfestival/SlaveEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/canfestival/SlaveEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from subindextable import EditingPanel diff -r fda6c1a37662 -r f62625418bff canfestival/__init__.py --- a/canfestival/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/canfestival/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,5 +22,5 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from canfestival.canfestival import * diff -r fda6c1a37662 -r f62625418bff canfestival/canfestival.py --- a/canfestival/canfestival.py Mon Mar 27 10:19:14 2023 +0200 +++ b/canfestival/canfestival.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import os import sys import shutil @@ -352,7 +352,7 @@ def GetVariableLocationTree(self): current_location = self.GetCurrentLocation() - nodeindexes = self.SlaveNodes.keys() + nodeindexes = list(self.SlaveNodes.keys()) nodeindexes.sort() children = [] children += [GetSlaveLocationTree(self.Manager.GetCurrentNodeCopy(), diff -r fda6c1a37662 -r f62625418bff canfestival/config_utils.py --- a/canfestival/config_utils.py Mon Mar 27 10:19:14 2023 +0200 +++ b/canfestival/config_utils.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,12 +23,13 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import getopt -from past.builtins import long +from past.builtins import int +from functools import reduce # Translation between IEC types and Can Open types IECToCOType = { @@ -63,7 +64,7 @@ VariableIncrement = 0x100 VariableStartIndex = {TPDO: 0x2000, RPDO: 0x4000} VariableDirText = {TPDO: "__I", RPDO: "__Q"} -VariableTypeOffset = dict(zip(["", "X", "B", "W", "D", "L"], range(6))) +VariableTypeOffset = dict(list(zip(["", "X", "B", "W", "D", "L"], list(range(6))))) TrashVariables = [(1, 0x01), (8, 0x05), (16, 0x06), (32, 0x07), (64, 0x1B)] @@ -85,7 +86,7 @@ """ data = ("%" + str(size * 2) + "." + str(size * 2) + "X") % value - list_car = [data[i:i+2] for i in xrange(0, len(data), 2)] + list_car = [data[i:i+2] for i in range(0, len(data), 2)] list_car.reverse() return "".join([chr(int(car, 16)) for car in list_car]) @@ -170,7 +171,7 @@ # Dictionary of location informations classed by name self.MasterMapping = {} # List of COB IDs available - self.ListCobIDAvailable = range(0x180, 0x580) + self.ListCobIDAvailable = list(range(0x180, 0x580)) # Dictionary of mapping value where unexpected variables are stored self.TrashVariables = {} # Dictionary of pointed variables @@ -303,7 +304,7 @@ values = self.NodeList.GetSlaveNodeEntry(nodeid, index + 0x200) if values is not None and values[0] > 0: # Check that all subindex upper than 0 equal 0 => configurable PDO - if reduce(lambda x, y: x and y, map(lambda x: x == 0, values[1:]), True): + if reduce(lambda x, y: x and y, [x == 0 for x in values[1:]], True): cobid = self.NodeList.GetSlaveNodeEntry(nodeid, index, 1) # If no COB ID defined in PDO, generate a new one (not used) if cobid == 0: @@ -374,7 +375,7 @@ nodeid, index, subindex = loc[:3] # Check Id is in slave node list - if nodeid not in self.NodeList.SlaveNodes.keys(): + if nodeid not in list(self.NodeList.SlaveNodes.keys()): raise PDOmappingException( _("Non existing node ID : {a1} (variable {a2})"). format(a1=nodeid, a2=name)) @@ -430,7 +431,7 @@ # Search for locations already mapped # ------------------------------------------------------------------------------- - for name, locationinfos in self.IECLocations.items(): + for name, locationinfos in list(self.IECLocations.items()): node = self.NodeList.SlaveNodes[locationinfos["nodeid"]]["Node"] # Search if slave has a PDO mapping this locations @@ -441,7 +442,7 @@ cobid = self.NodeList.GetSlaveNodeEntry(locationinfos["nodeid"], index - 0x200, 1) # Add PDO to MasterMapping - if cobid not in self.MasterMapping.keys(): + if cobid not in list(self.MasterMapping.keys()): # Verify that PDO transmit type is conform to sync_TPDOs transmittype = self.NodeList.GetSlaveNodeEntry(locationinfos["nodeid"], index - 0x200, 2) if sync_TPDOs and transmittype != 0x01 or transmittype != 0xFF: @@ -474,7 +475,7 @@ else: # Add location to those that haven't been mapped yet - if locationinfos["nodeid"] not in self.LocationsNotMapped.keys(): + if locationinfos["nodeid"] not in list(self.LocationsNotMapped.keys()): self.LocationsNotMapped[locationinfos["nodeid"]] = {TPDO: [], RPDO: []} self.LocationsNotMapped[locationinfos["nodeid"]][locationinfos["pdotype"]].append((name, locationinfos)) @@ -482,7 +483,7 @@ # Build concise DCF for the others locations # ------------------------------------------------------------------------------- - for nodeid, locations in self.LocationsNotMapped.items(): + for nodeid, locations in list(self.LocationsNotMapped.items()): node = self.NodeList.SlaveNodes[nodeid]["Node"] # Initialize number of params and data to add to node DCF @@ -531,7 +532,7 @@ # ------------------------------------------------------------------------------- # Generate Master's Configuration from informations stored in MasterMapping - for cobid, pdo_infos in self.MasterMapping.items(): + for cobid, pdo_infos in list(self.MasterMapping.items()): # Get next PDO index in MasterNode for this PDO type current_idx = self.CurrentPDOParamsIdx[pdo_infos["type"]] @@ -572,7 +573,7 @@ continue new_index = False - if isinstance(variable, (int, long)): + if isinstance(variable, int): # If variable is an integer then variable is unexpected self.MasterNode.SetEntry(current_idx + 0x200, subindex, self.TrashVariables[variable]) else: @@ -735,7 +736,7 @@ # Extract workspace base folder base_folder = sys.path[0] - for i in xrange(3): + for i in range(3): base_folder = os.path.split(base_folder)[0] # Add CanFestival folder to search pathes sys.path.append(os.path.join(base_folder, "CanFestival-3", "objdictgen")) diff -r fda6c1a37662 -r f62625418bff connectors/ConnectorBase.py --- a/connectors/ConnectorBase.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/ConnectorBase.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + import hashlib diff -r fda6c1a37662 -r f62625418bff connectors/PYRO/PSK_Adapter.py --- a/connectors/PYRO/PSK_Adapter.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/PYRO/PSK_Adapter.py Fri Oct 28 12:39:15 2022 +0800 @@ -28,8 +28,8 @@ but using Pre Shared Keys instead of Certificates """ -from __future__ import absolute_import -from __future__ import print_function + + import socket import re diff -r fda6c1a37662 -r f62625418bff connectors/PYRO/__init__.py --- a/connectors/PYRO/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/PYRO/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import traceback from time import sleep import copy @@ -39,6 +39,7 @@ import PSKManagement as PSK from connectors.PYRO.PSK_Adapter import setupPSKAdapter from runtime import PlcStatus +import importlib def switch_pyro_adapter(use_ssl): @@ -47,7 +48,7 @@ This is workaround for Pyro, because it doesn't work with SSL wrapper. """ # Pyro.config.PYRO_BROKEN_MSGWAITALL = use_ssl - reload(Pyro.protocol) + importlib.reload(Pyro.protocol) if use_ssl: setupPSKAdapter() diff -r fda6c1a37662 -r f62625418bff connectors/PYRO_dialog.py --- a/connectors/PYRO_dialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/PYRO_dialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + from itertools import repeat, islice, chain diff -r fda6c1a37662 -r f62625418bff connectors/SchemeEditor.py --- a/connectors/SchemeEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/SchemeEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + from functools import partial import wx diff -r fda6c1a37662 -r f62625418bff connectors/WAMP/__init__.py --- a/connectors/WAMP/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/WAMP/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import sys import traceback from functools import partial diff -r fda6c1a37662 -r f62625418bff connectors/WAMP_dialog.py --- a/connectors/WAMP_dialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/WAMP_dialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + from itertools import repeat, islice, chain diff -r fda6c1a37662 -r f62625418bff connectors/__init__.py --- a/connectors/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/connectors/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -26,7 +26,6 @@ # Package initialisation -from __future__ import absolute_import import os from os import listdir, path from connectors.ConnectorBase import ConnectorBase diff -r fda6c1a37662 -r f62625418bff controls/CustomEditableListBox.py --- a/controls/CustomEditableListBox.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomEditableListBox.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.adv diff -r fda6c1a37662 -r f62625418bff controls/CustomGrid.py --- a/controls/CustomGrid.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomGrid.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.grid diff -r fda6c1a37662 -r f62625418bff controls/CustomIntCtrl.py --- a/controls/CustomIntCtrl.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomIntCtrl.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.lib.intctrl diff -r fda6c1a37662 -r f62625418bff controls/CustomStyledTextCtrl.py --- a/controls/CustomStyledTextCtrl.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomStyledTextCtrl.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from functools import reduce import wx import wx.stc @@ -72,7 +72,7 @@ new_length = len(new) common_length = min(old_length, new_length) i = 0 - for i in xrange(common_length): + for i in range(common_length): if old[i] != new[i]: break if old_length < new_length: @@ -102,7 +102,7 @@ x, _y = event.GetPosition() margin_width = reduce( lambda x, y: x + y, - [self.GetMarginWidth(i) for i in xrange(3)], + [self.GetMarginWidth(i) for i in range(3)], 0) if x <= margin_width: self.SetCursor(wx.Cursor(wx.CURSOR_ARROW)) diff -r fda6c1a37662 -r f62625418bff controls/CustomTable.py --- a/controls/CustomTable.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomTable.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.grid @@ -204,8 +204,8 @@ if highlight_type is None: self.Highlights = {} else: - for _row, row_highlights in self.Highlights.iteritems(): - row_items = row_highlights.items() + for _row, row_highlights in self.Highlights.items(): + row_items = list(row_highlights.items()) for col, col_highlights in row_items: if highlight_type in col_highlights: col_highlights.remove(highlight_type) diff -r fda6c1a37662 -r f62625418bff controls/CustomToolTip.py --- a/controls/CustomToolTip.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomToolTip.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from controls.CustomStyledTextCtrl import faces diff -r fda6c1a37662 -r f62625418bff controls/CustomTree.py --- a/controls/CustomTree.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/CustomTree.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx import wx.lib.agw.customtreectrl as CT diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/DebugVariableGraphicViewer.py --- a/controls/DebugVariablePanel/DebugVariableGraphicViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/DebugVariableGraphicViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from time import time as gettime from cycler import cycler @@ -44,7 +44,7 @@ # Graph variable display type -GRAPH_PARALLEL, GRAPH_ORTHOGONAL = range(2) +GRAPH_PARALLEL, GRAPH_ORTHOGONAL = list(range(2)) # Canvas height [SIZE_MINI, SIZE_MIDDLE, SIZE_MAXI] = [0, 100, 200] @@ -567,7 +567,7 @@ """ start_tick, end_tick = self.ParentWindow.GetRange() cursor_tick = None - items = self.ItemsDict.values() + items = list(self.ItemsDict.values()) # Graph is orthogonal if self.GraphType == GRAPH_ORTHOGONAL: @@ -641,7 +641,7 @@ # parent xw, yw = self.GetPosition() self.ParentWindow.StartDragNDrop( - self, self.ItemsDict.values()[item_idx], + self, list(self.ItemsDict.values())[item_idx], x + xw, y + yw, # Current mouse position x + xw, y + yw) # Mouse position when button was clicked @@ -679,7 +679,7 @@ if self.ParentWindow.IsDragging(): _width, height = self.GetSize() xw, yw = self.GetPosition() - item = self.ParentWindow.DraggingAxesPanel.ItemsDict.values()[0] + item = list(self.ParentWindow.DraggingAxesPanel.ItemsDict.values())[0] # Give mouse position in wx coordinate of parent self.ParentWindow.StopDragNDrop(item.GetVariable(), xw + event.x, yw + height - event.y) @@ -746,7 +746,7 @@ # If mouse is over an item label, if item_idx is not None: self.PopupContextualButtons( - self.ItemsDict.values()[item_idx], + list(self.ItemsDict.values())[item_idx], rect, menu_direction) return @@ -784,7 +784,7 @@ xw, yw = self.GetPosition() self.ParentWindow.SetCursorTick(self.StartCursorTick) self.ParentWindow.StartDragNDrop( - self, self.ItemsDict.values()[0], + self, list(self.ItemsDict.values())[0], # Current mouse position event.x + xw, height - event.y + yw, # Mouse position when button was clicked @@ -1029,7 +1029,7 @@ # Graph type is parallel or orthogonal in 3D if self.GraphType == GRAPH_PARALLEL or self.Is3DCanvas(): num_item = len(self.Items) - for idx in xrange(num_item): + for idx in range(num_item): # Get color from color cycle (black if only one item) color = ('k' if num_item == 1 else @@ -1093,7 +1093,7 @@ # Update position of items labels if self.GraphType == GRAPH_PARALLEL or self.Is3DCanvas(): num_item = len(self.Items) - for idx in xrange(num_item): + for idx in range(num_item): # In 3D graph items variable label are not displayed if not self.Is3DCanvas(): @@ -1189,7 +1189,7 @@ # each variable start_tick = max(start_tick, self.GetItemsMinCommonTick()) end_tick = max(end_tick, start_tick) - items = self.ItemsDict.values() + items = list(self.ItemsDict.values()) # Get data and range for first variable (X coordinate) x_data, x_min, x_max = items[0].GetDataAndValueRange( @@ -1331,7 +1331,7 @@ item.GetValue(self.CursorTick) if self.CursorTick is not None else (item.GetValue(), item.IsForced())) for item in self.Items] - values, forced = zip(*args) + values, forced = list(zip(*args)) # Get path of each variable displayed simplified using panel variable # name mask @@ -1339,7 +1339,7 @@ for item in self.Items] # Get style for each variable according to - styles = map(lambda x: {True: 'italic', False: 'normal'}[x], forced) + styles = [{True: 'italic', False: 'normal'}[x] for x in forced] # Graph is orthogonal 3D, set variables path as 3D axis label if self.Is3DCanvas(): diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/DebugVariableItem.py --- a/controls/DebugVariablePanel/DebugVariableItem.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/DebugVariableItem.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from datetime import timedelta import binascii import numpy as np diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/DebugVariablePanel.py --- a/controls/DebugVariablePanel/DebugVariablePanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/DebugVariablePanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from functools import reduce import numpy as np diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/DebugVariableTextViewer.py --- a/controls/DebugVariablePanel/DebugVariableTextViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/DebugVariableTextViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx @@ -207,7 +207,7 @@ gc = wx.GCDC(dc) # Get first item - item = self.ItemsDict.values()[0] + item = list(self.ItemsDict.values())[0] # Get item variable path masked according Debug Variable Panel mask item_path = item.GetVariable( @@ -239,7 +239,7 @@ @param event: wx.MouseEvent """ # Get first item - item = self.ItemsDict.values()[0] + item = list(self.ItemsDict.values())[0] # Calculate item path bounding box _width, height = self.GetSize() @@ -278,7 +278,7 @@ @param event: wx.MouseEvent """ # Only numeric variables can be toggled to graph canvas - if self.ItemsDict.values()[0].IsNumVariable(): + if list(self.ItemsDict.values())[0].IsNumVariable(): self.ParentWindow.ToggleViewerType(self) def OnPaint(self, event): diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/DebugVariableViewer.py --- a/controls/DebugVariablePanel/DebugVariableViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/DebugVariableViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from collections import OrderedDict from functools import reduce @@ -39,7 +39,7 @@ HIGHLIGHT_AFTER, HIGHLIGHT_LEFT, HIGHLIGHT_RIGHT, - HIGHLIGHT_RESIZE] = range(6) + HIGHLIGHT_RESIZE] = list(range(6)) # Viewer highlight styles HIGHLIGHT = { @@ -66,7 +66,7 @@ items = [] if items is None else items self.ItemsDict = OrderedDict([(item.GetVariable(), item) for item in items]) - self.Items = self.ItemsDict.viewvalues() + self.Items = self.ItemsDict.values() # Variable storing current highlight displayed in Viewer self.Highlight = HIGHLIGHT_NONE @@ -111,7 +111,7 @@ Return items displayed by Viewer @return: List of items displayed in Viewer """ - return self.ItemsDict.values() + return list(self.ItemsDict.values()) def AddItem(self, item): """ @@ -150,7 +150,7 @@ Function that unsubscribe and remove every item that store values of a variable that doesn't exist in PLC anymore """ - for item in self.ItemsDict.values()[:]: + for item in list(self.ItemsDict.values())[:]: iec_path = item.GetVariable() # Check that variablepath exist in PLC @@ -347,13 +347,13 @@ """ Function called when Force button is pressed """ - self.ForceValue(self.ItemsDict.values()[0]) + self.ForceValue(list(self.ItemsDict.values())[0]) def OnReleaseButton(self): """ Function called when Release button is pressed """ - self.ReleaseValue(self.ItemsDict.values()[0]) + self.ReleaseValue(list(self.ItemsDict.values())[0]) def OnMouseDragging(self, x, y): """ diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/GraphButton.py --- a/controls/DebugVariablePanel/GraphButton.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/GraphButton.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from util.BitmapLibrary import GetBitmap diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/RingBuffer.py --- a/controls/DebugVariablePanel/RingBuffer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/RingBuffer.py Fri Oct 28 12:39:15 2022 +0800 @@ -44,7 +44,7 @@ note: only when this function is called, is an O(size) performance hit incurred, and this cost is amortized over the whole padding space """ - print 'compacting' + print('compacting') self.buffer[:self.count] = self.view self.cursor -= self.size diff -r fda6c1a37662 -r f62625418bff controls/DebugVariablePanel/__init__.py --- a/controls/DebugVariablePanel/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DebugVariablePanel/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,5 +22,5 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from controls.DebugVariablePanel.DebugVariablePanel import DebugVariablePanel diff -r fda6c1a37662 -r f62625418bff controls/DiscoveryPanel.py --- a/controls/DiscoveryPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DiscoveryPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import socket from six.moves import xrange import wx @@ -203,8 +203,7 @@ if self.LatestSelection is not None: # if self.ByIPCheck.IsChecked(): svcname, scheme, host, port = \ - map(lambda col: self.getColumnText(self.LatestSelection, col), - range(4)) + [self.getColumnText(self.LatestSelection, col) for col in range(4)] return ("%s://%s:%s#%s" % (scheme, host, port, svcname)) \ if scheme[-1] == "S" \ else ("%s://%s:%s" % (scheme, host, port)) @@ -223,7 +222,7 @@ ''' # loop through the list items looking for the service that went offline - for idx in xrange(self.ServicesList.GetItemCount()): + for idx in range(self.ServicesList.GetItemCount()): # this is the unique identifier assigned to the item item_id = self.ServicesList.GetItemData(idx) diff -r fda6c1a37662 -r f62625418bff controls/DurationCellEditor.py --- a/controls/DurationCellEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/DurationCellEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from dialogs.DurationEditorDialog import DurationEditorDialog diff -r fda6c1a37662 -r f62625418bff controls/EnhancedStatusBar.py --- a/controls/EnhancedStatusBar.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/EnhancedStatusBar.py Fri Oct 28 12:39:15 2022 +0800 @@ -55,8 +55,8 @@ """ -from __future__ import absolute_import -from __future__ import division + + import wx # Horizontal Alignment Constants @@ -109,7 +109,7 @@ Actually, All The Calculations Linked To HorizontalAlignment And VerticalAlignment Are Done In This Function.""" - for pos, item in self._items.items(): + for pos, item in list(self._items.items()): widget, horizontalalignment, verticalalignment = item.widget, item.horizontalalignment, item.verticalalignment rect = self.GetFieldRect(pos) diff -r fda6c1a37662 -r f62625418bff controls/FolderTree.py --- a/controls/FolderTree.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/FolderTree.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import wx @@ -31,7 +31,7 @@ from util.BitmapLibrary import GetBitmap -DRIVE, FOLDER, FILE = range(3) +DRIVE, FOLDER, FILE = list(range(3)) def sort_folder(x, y): @@ -99,7 +99,7 @@ self.Filters = {} if self.Filter is not None: filter_parts = filter.split("|") - for idx in xrange(0, len(filter_parts), 2): + for idx in range(0, len(filter_parts), 2): if filter_parts[idx + 1] == "*.*": self.Filters[filter_parts[idx]] = "" else: @@ -115,7 +115,7 @@ def _GetFolderChildren(self, folderpath, recursive=True): items = [] if wx.Platform == '__WXMSW__' and folderpath == "/": - for c in xrange(ord('a'), ord('z')): + for c in range(ord('a'), ord('z')): drive = os.path.join("%s:\\" % chr(c)) if os.path.exists(drive): items.append((drive, DRIVE, self._GetFolderChildren(drive, False))) diff -r fda6c1a37662 -r f62625418bff controls/IDBrowser.py --- a/controls/IDBrowser.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/IDBrowser.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + import wx import wx.dataview as dv import PSKManagement as PSK diff -r fda6c1a37662 -r f62625418bff controls/LibraryPanel.py --- a/controls/LibraryPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/LibraryPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from functools import reduce import wx @@ -31,7 +31,7 @@ # ------------------------------------------------------------------------------- -[CATEGORY, BLOCK] = range(2) +[CATEGORY, BLOCK] = list(range(2)) # ------------------------------------------------------------------------------- @@ -346,12 +346,10 @@ if inputs is not None and type_inputs is not None: same_inputs = reduce( lambda x, y: x and y, - map( - lambda x: x[0] == x[1] or x[0] == 'ANY' or x[1] == 'ANY', - zip(type_inputs, + [x[0] == x[1] or x[0] == 'ANY' or x[1] == 'ANY' for x in zip(type_inputs, (inputs[:type_extension] if type_extension is not None - else inputs))), + else inputs))], True) else: same_inputs = True diff -r fda6c1a37662 -r f62625418bff controls/LocationCellEditor.py --- a/controls/LocationCellEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/LocationCellEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from dialogs.BrowseLocationsDialog import BrowseLocationsDialog diff -r fda6c1a37662 -r f62625418bff controls/LogViewer.py --- a/controls/LogViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/LogViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from datetime import datetime from time import time as gettime from weakref import proxy @@ -370,7 +370,7 @@ self.ParentWindow = window self.LevelIcons = [GetBitmap("LOG_" + level) for level in LogLevels] - self.LevelFilters = [range(i) for i in xrange(4, 0, -1)] + self.LevelFilters = [list(range(i)) for i in range(4, 0, -1)] self.CurrentFilter = self.LevelFilters[0] self.CurrentSearchValue = "" @@ -415,14 +415,14 @@ def SetLogCounters(self, log_count): new_messages = [] - for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count): + for level, count, prev in zip(range(LogLevelsCount), log_count, self.previous_log_count): if count is not None and prev != count: if prev is None: dump_end = max(-1, count - 10) oldest_message = (-1, None) else: dump_end = prev - 1 - for msgidx in xrange(count-1, dump_end, -1): + for msgidx in range(count-1, dump_end, -1): new_message = self.GetLogMessageFromSource(msgidx, level) if new_message is None: if prev is None: @@ -560,7 +560,7 @@ def IsPLCLogEmpty(self): empty = True - for _level, prev in zip(xrange(LogLevelsCount), self.previous_log_count): + for _level, prev in zip(range(LogLevelsCount), self.previous_log_count): if prev is not None: empty = False break diff -r fda6c1a37662 -r f62625418bff controls/PouInstanceVariablesPanel.py --- a/controls/PouInstanceVariablesPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/PouInstanceVariablesPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from collections import namedtuple import wx diff -r fda6c1a37662 -r f62625418bff controls/ProjectPropertiesPanel.py --- a/controls/ProjectPropertiesPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/ProjectPropertiesPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from wx.lib.scrolledpanel import ScrolledPanel @@ -38,7 +38,7 @@ [ TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES -] = range(10) +] = list(range(10)) # ------------------------------------------------------------------------------- @@ -246,7 +246,7 @@ def SetValues(self, values): self.Values = values - for item, value in values.items(): + for item, value in list(values.items()): if item == "language": self.Language.SetStringSelection(value) elif item == "contentDescription": @@ -255,7 +255,7 @@ self.PageWidth.SetValue(value[0]) self.PageHeight.SetValue(value[1]) elif item == "scaling": - for language, (x, y) in value.items(): + for language, (x, y) in list(value.items()): if language in self.Scalings: self.Scalings[language][0].SetValue(x) self.Scalings[language][1].SetValue(y) diff -r fda6c1a37662 -r f62625418bff controls/SearchResultPanel.py --- a/controls/SearchResultPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/SearchResultPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from functools import reduce import wx @@ -289,7 +289,7 @@ start, end = infos["data"][1:3] text_lines = infos["text"].splitlines() start_idx = start[1] - end_idx = reduce(lambda x, y: x + y, map(lambda x: len(x) + 1, text_lines[:end[0] - start[0]]), end[1] + 1) + end_idx = reduce(lambda x, y: x + y, [len(x) + 1 for x in text_lines[:end[0] - start[0]]], end[1] + 1) style = wx.TextAttr(wx.BLACK, wx.Colour(206, 204, 247)) elif infos["type"] is not None and infos["matches"] > 1: text = _("(%d matches)") % infos["matches"] diff -r fda6c1a37662 -r f62625418bff controls/TextCtrlAutoComplete.py --- a/controls/TextCtrlAutoComplete.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/TextCtrlAutoComplete.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from six.moves import cPickle import wx diff -r fda6c1a37662 -r f62625418bff controls/VariablePanel.py --- a/controls/VariablePanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/VariablePanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import re from builtins import str as text @@ -54,7 +54,7 @@ [ TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES -] = range(10) +] = list(range(10)) def GetVariableTableColnames(location): @@ -123,7 +123,7 @@ self.OPTIONS_DICT = dict([(_(option), option) for option in GetOptions()]) self.VARIABLE_CLASSES_DICT = dict([(_(_class), _class) - for _class in GetFilterChoiceTransfer().itervalues()]) + for _class in GetFilterChoiceTransfer().values()]) def GetValueByName(self, row, colname): if row < self.GetNumberRows(): @@ -200,7 +200,7 @@ retain=self.Parent.ElementType != "function" and var_class in ["Local", "Input", "Output", "Global"], non_retain=self.Parent.ElementType != "function" and var_class in ["Local", "Input", "Output"]) if len(options) > 1: - editor = wx.grid.GridCellChoiceEditor(map(_, options)) + editor = wx.grid.GridCellChoiceEditor(list(map(_, options))) else: grid.SetReadOnly(row, col, True) elif col != 0 and self._GetRowEdit(row): @@ -447,7 +447,7 @@ wx.Panel.__init__(self, parent, style=wx.TAB_TRAVERSAL) self.VARIABLE_CHOICES_DICT = dict([(_(_class), _class) for - _class in GetFilterChoiceTransfer().iterkeys()]) + _class in GetFilterChoiceTransfer().keys()]) self.MainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=0) self.MainSizer.AddGrowableCol(0) @@ -581,7 +581,7 @@ self.ClassFilter.Append(_(choice)) reverse_transfer = {} - for filter, choice in self.FilterChoiceTransfer.items(): + for filter, choice in list(self.FilterChoiceTransfer.items()): reverse_transfer[choice] = filter self.ClassFilter.SetStringSelection(_(reverse_transfer[self.Filter])) self.RefreshTypeList() @@ -995,7 +995,7 @@ def AddVariableHighlight(self, infos, highlight_type): if isinstance(infos[0], tuple): - for i in xrange(*infos[0]): + for i in range(*infos[0]): self.Table.AddHighlight((i,) + infos[1:], highlight_type) cell_visible = infos[0][0] else: @@ -1007,7 +1007,7 @@ def RemoveVariableHighlight(self, infos, highlight_type): if isinstance(infos[0], tuple): - for i in xrange(*infos[0]): + for i in range(*infos[0]): self.Table.RemoveHighlight((i,) + infos[1:], highlight_type) else: self.Table.RemoveHighlight(infos, highlight_type) diff -r fda6c1a37662 -r f62625418bff controls/__init__.py --- a/controls/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/controls/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Package initialization -from __future__ import absolute_import + from controls.CustomEditableListBox import CustomEditableListBox from controls.CustomGrid import CustomGrid diff -r fda6c1a37662 -r f62625418bff dialogs/AboutDialog.py --- a/dialogs/AboutDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/AboutDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -31,7 +31,7 @@ """ -from __future__ import absolute_import + import os import wx import wx.adv @@ -122,8 +122,8 @@ developer = wx.TextCtrl(notebook, style=wx.TE_READONLY | wx.TE_MULTILINE) translators = wx.TextCtrl(notebook, style=wx.TE_READONLY | wx.TE_MULTILINE) - developer.SetValue(u'\n'.join(info.Developers)) - translators.SetValue(u'\n'.join(info.Translators)) + developer.SetValue('\n'.join(info.Developers)) + translators.SetValue('\n'.join(info.Translators)) notebook.AddPage(developer, text=_("Written by")) notebook.AddPage(translators, text=_("Translated by")) diff -r fda6c1a37662 -r f62625418bff dialogs/ActionBlockDialog.py --- a/dialogs/ActionBlockDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/ActionBlockDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.grid import wx.lib.buttons @@ -162,7 +162,7 @@ self.Table = ActionTable(self, [], GetActionTableColnames()) typelist = GetTypeList() - self.TypeList = map(_, typelist) + self.TypeList = list(map(_, typelist)) self.TranslateType = dict([(_(value), value) for value in typelist]) self.ColSizes = [60, 90, 130, 200, 50] self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] diff -r fda6c1a37662 -r f62625418bff dialogs/ArrayTypeDialog.py --- a/dialogs/ArrayTypeDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/ArrayTypeDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re import wx @@ -84,7 +84,7 @@ if isinstance(infos, tuple) and infos[0] == "array": self.BaseType.SetStringSelection(infos[1]) - self.Dimensions.SetStrings(map("..".join, infos[2])) + self.Dimensions.SetStrings(list(map("..".join, infos[2]))) elif infos in datatypes: self.BaseType.SetStringSelection(infos) diff -r fda6c1a37662 -r f62625418bff dialogs/BlockPreviewDialog.py --- a/dialogs/BlockPreviewDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/BlockPreviewDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS diff -r fda6c1a37662 -r f62625418bff dialogs/BrowseLocationsDialog.py --- a/dialogs/BrowseLocationsDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/BrowseLocationsDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.# -from __future__ import absolute_import + import wx from plcopen.structures import LOCATIONDATATYPES @@ -54,7 +54,7 @@ # turn LOCATIONDATATYPES inside-out LOCATION_SIZES = {} -for size, types in LOCATIONDATATYPES.iteritems(): +for size, types in LOCATIONDATATYPES.items(): for type in types: LOCATION_SIZES[type] = size diff -r fda6c1a37662 -r f62625418bff dialogs/BrowseValuesLibraryDialog.py --- a/dialogs/BrowseValuesLibraryDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/BrowseValuesLibraryDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx diff -r fda6c1a37662 -r f62625418bff dialogs/CommentEditDialog.py --- a/dialogs/CommentEditDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/CommentEditDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -20,7 +20,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx diff -r fda6c1a37662 -r f62625418bff dialogs/ConnectionDialog.py --- a/dialogs/ConnectionDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/ConnectionDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import CONNECTOR, CONTINUATION @@ -127,7 +127,7 @@ @param values: Connection parameters values """ # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is connection type if name == "type": diff -r fda6c1a37662 -r f62625418bff dialogs/DurationEditorDialog.py --- a/dialogs/DurationEditorDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/DurationEditorDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import re import wx diff -r fda6c1a37662 -r f62625418bff dialogs/FBDBlockDialog.py --- a/dialogs/FBDBlockDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/FBDBlockDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re import wx @@ -177,7 +177,7 @@ default_name_model = GetBlockTypeDefaultNameModel(blocktype) # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is block name if name == "name": @@ -212,7 +212,7 @@ values["width"], values["height"] = self.Element.GetSize() values.update({ name: control.GetValue() - for name, control in self.ParamsControl.iteritems()}) + for name, control in self.ParamsControl.items()}) return values def OnOK(self, event): diff -r fda6c1a37662 -r f62625418bff dialogs/FBDVariableDialog.py --- a/dialogs/FBDVariableDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/FBDVariableDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import INPUT, INOUT, OUTPUT @@ -66,7 +66,7 @@ } self.VARIABLE_CLASSES_DICT_REVERSE = dict( - [(value, key) for key, value in self.VARIABLE_CLASSES_DICT.iteritems()]) + [(value, key) for key, value in self.VARIABLE_CLASSES_DICT.items()]) # Init common sizers self._init_sizers(4, 2, 4, None, 3, 2) @@ -120,7 +120,7 @@ flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT) # Set options that can be selected in class combo box - for var_class, choice in self.VARIABLE_CLASSES_DICT.iteritems(): + for var_class, choice in self.VARIABLE_CLASSES_DICT.items(): if not exclude_input or var_class != INPUT: self.Class.Append(choice) self.Class.SetSelection(0) @@ -148,7 +148,7 @@ # Refresh names in name list box by selecting variables in POU variables # list that can be applied to variable class self.VariableName.Clear() - for name, (var_type, _value_type) in self.VariableList.iteritems(): + for name, (var_type, _value_type) in self.VariableList.items(): if var_type != "Input" or var_class == INPUT: self.VariableName.Append(name) @@ -178,7 +178,7 @@ self.RefreshNameList() # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is variable expression if name == "expression": diff -r fda6c1a37662 -r f62625418bff dialogs/FindInPouDialog.py --- a/dialogs/FindInPouDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/FindInPouDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.plcopen import * diff -r fda6c1a37662 -r f62625418bff dialogs/ForceVariableDialog.py --- a/dialogs/ForceVariableDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/ForceVariableDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re import datetime from builtins import str as text diff -r fda6c1a37662 -r f62625418bff dialogs/IDManager.py --- a/dialogs/IDManager.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/IDManager.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,4 +1,4 @@ -from __future__ import absolute_import + import wx from controls.IDBrowser import IDBrowser diff -r fda6c1a37662 -r f62625418bff dialogs/IDMergeDialog.py --- a/dialogs/IDMergeDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/IDMergeDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + import wx diff -r fda6c1a37662 -r f62625418bff dialogs/LDElementDialog.py --- a/dialogs/LDElementDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/LDElementDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import CONTACT_NORMAL, CONTACT_REVERSE, \ @@ -117,7 +117,7 @@ self.RefreshVariableList() # Set values in ElementVariable - for name, (var_type, value_type) in self.VariableList.iteritems(): + for name, (var_type, value_type) in self.VariableList.items(): # Only select BOOL variable and avoid input for coil if (type == "contact" or var_type != "Input") and \ value_type == "BOOL": @@ -134,7 +134,7 @@ """ # Go through radio buttons and return modifier associated to the one # that is selected - for modifier, control in self.ModifierRadioButtons.iteritems(): + for modifier, control in self.ModifierRadioButtons.items(): if control.GetValue(): return modifier return None @@ -145,7 +145,7 @@ @param values: LD element parameters values """ # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is LD element variable if name == "variable": diff -r fda6c1a37662 -r f62625418bff dialogs/LDPowerRailDialog.py --- a/dialogs/LDPowerRailDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/LDPowerRailDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import LEFTRAIL, RIGHTRAIL @@ -118,7 +118,7 @@ @param values: Power rail parameters values """ # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is power rail type if name == "type": diff -r fda6c1a37662 -r f62625418bff dialogs/MessageBoxOnce.py --- a/dialogs/MessageBoxOnce.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/MessageBoxOnce.py Fri Oct 28 12:39:15 2022 +0800 @@ -7,7 +7,7 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import + import wx diff -r fda6c1a37662 -r f62625418bff dialogs/PouActionDialog.py --- a/dialogs/PouActionDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/PouActionDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS @@ -121,7 +121,7 @@ self.PouElementNames = [element_name.upper() for element_name in element_names] def SetValues(self, values): - for item, value in values.items(): + for item, value in list(values.items()): if item == "actionName": self.ActionName.SetValue(value) elif item == "language": diff -r fda6c1a37662 -r f62625418bff dialogs/PouDialog.py --- a/dialogs/PouDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/PouDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS @@ -201,7 +201,7 @@ self.PouElementNames = [element_name.upper() for element_name in element_names] def SetValues(self, values): - for item, value in values.items(): + for item, value in list(values.items()): if item == "pouName": self.PouName.SetValue(value) elif item == "pouType": diff -r fda6c1a37662 -r f62625418bff dialogs/PouNameDialog.py --- a/dialogs/PouNameDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/PouNameDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS diff -r fda6c1a37662 -r f62625418bff dialogs/PouTransitionDialog.py --- a/dialogs/PouTransitionDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/PouTransitionDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS @@ -123,7 +123,7 @@ self.PouElementNames = [pou_name.upper() for pou_name in pou_names] def SetValues(self, values): - for item, value in values.items(): + for item, value in list(values.items()): if item == "transitionName": self.TransitionName.SetValue(value) elif item == "language": diff -r fda6c1a37662 -r f62625418bff dialogs/ProjectDialog.py --- a/dialogs/ProjectDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/ProjectDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from controls.ProjectPropertiesPanel import ProjectPropertiesPanel diff -r fda6c1a37662 -r f62625418bff dialogs/SFCDivergenceDialog.py --- a/dialogs/SFCDivergenceDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/SFCDivergenceDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import SELECTION_DIVERGENCE, \ @@ -126,7 +126,7 @@ """ # Go through radio buttons and return type associated to the one that # is selected - for type, control in self.TypeRadioButtons.iteritems(): + for type, control in self.TypeRadioButtons.items(): if control.GetValue(): return type return None diff -r fda6c1a37662 -r f62625418bff dialogs/SFCStepDialog.py --- a/dialogs/SFCStepDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/SFCStepDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.SFC_Objects import SFC_Step @@ -107,7 +107,7 @@ @param values: Block parameters values """ # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is step name if name == "name": @@ -130,7 +130,7 @@ values = {"name": self.StepName.GetValue()} values.update({ name: control.IsChecked() - for name, control in self.ConnectorsCheckBox.iteritems()}) + for name, control in self.ConnectorsCheckBox.items()}) values["width"], values["height"] = self.Element.GetSize() return values @@ -185,7 +185,7 @@ self.Initial) # Update connectors of SFC step element according to check boxes value - for name, control in self.ConnectorsCheckBox.iteritems(): + for name, control in self.ConnectorsCheckBox.items(): if control.IsChecked(): getattr(self.Element, "Add" + name.capitalize())() else: diff -r fda6c1a37662 -r f62625418bff dialogs/SFCStepNameDialog.py --- a/dialogs/SFCStepNameDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/SFCStepNameDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.structures import TestIdentifier, IEC_KEYWORDS diff -r fda6c1a37662 -r f62625418bff dialogs/SFCTransitionDialog.py --- a/dialogs/SFCTransitionDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/SFCTransitionDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.SFC_Objects import SFC_Transition @@ -117,7 +117,7 @@ """ # Go through radio buttons and return type and value associated to the # one that is selected - for type, (radio, control) in self.TypeRadioButtons.iteritems(): + for type, (radio, control) in self.TypeRadioButtons.items(): if radio.GetValue(): if isinstance(control, wx.ComboBox): return type, control.GetStringSelection() @@ -136,7 +136,7 @@ type_value = values.get("value", None) # For each parameters defined, set corresponding control value - for name, value in values.items(): + for name, value in list(values.items()): # Parameter is SFC transition priority if name == "priority": @@ -144,7 +144,7 @@ # Parameter is SFC transition type elif name == "type": - for type, (radio, control) in self.TypeRadioButtons.iteritems(): + for type, (radio, control) in self.TypeRadioButtons.items(): radio.SetValue(type == value) if control is not None: # Enable associated control to type and set value @@ -197,7 +197,7 @@ @param event: wx.RadioButtonEvent """ # Refresh sensibility of control associated to transition types - for _type, (radio, control) in self.TypeRadioButtons.iteritems(): + for _type, (radio, control) in self.TypeRadioButtons.items(): if control is not None: control.Enable(radio.GetValue()) diff -r fda6c1a37662 -r f62625418bff dialogs/SearchInProjectDialog.py --- a/dialogs/SearchInProjectDialog.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/SearchInProjectDialog.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from plcopen.plcopen import * from util.TranslationCatalogs import NoTranslate diff -r fda6c1a37662 -r f62625418bff dialogs/UriEditor.py --- a/dialogs/UriEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/UriEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,4 +1,4 @@ -from __future__ import absolute_import + import wx from connectors import ConnectorSchemes, EditorClassFromScheme diff -r fda6c1a37662 -r f62625418bff dialogs/__init__.py --- a/dialogs/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/dialogs/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -25,7 +25,7 @@ # Package initialization -from __future__ import absolute_import + from dialogs.CommentEditDialog import CommentEditDialog from dialogs.ConnectionDialog import ConnectionDialog diff -r fda6c1a37662 -r f62625418bff docutil/__init__.py --- a/docutil/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/docutil/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from docutil.dochtml import * from docutil.docpdf import * from docutil.docsvg import * diff -r fda6c1a37662 -r f62625418bff docutil/dochtml.py --- a/docutil/dochtml.py Mon Mar 27 10:19:14 2023 +0200 +++ b/docutil/dochtml.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import subprocess import wx import wx.html diff -r fda6c1a37662 -r f62625418bff docutil/docpdf.py --- a/docutil/docpdf.py Mon Mar 27 10:19:14 2023 +0200 +++ b/docutil/docpdf.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import wx diff -r fda6c1a37662 -r f62625418bff docutil/docsvg.py --- a/docutil/docsvg.py Mon Mar 27 10:19:14 2023 +0200 +++ b/docutil/docsvg.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import wx import subprocess @@ -75,8 +75,8 @@ inkpath = get_inkscape_path() if inkpath is None: return None - return map(int, - subprocess.check_output([inkpath,"--version"]).split()[1].split('.')) + return list(map(int, + subprocess.check_output([inkpath,"--version"]).split()[1].split('.'))) _inkscape_version = None def get_inkscape_version(): @@ -88,7 +88,7 @@ _inkscape_version = _get_inkscape_version() return _inkscape_version -if os.environ.has_key("SNAP"): +if "SNAP" in os.environ: def open_svg(svgfile): MessageBoxOnce("Launching Inkscape with xdg-open", "Confined app can't launch Inkscape directly.\n"+ diff -r fda6c1a37662 -r f62625418bff editors/CodeFileEditor.py --- a/editors/CodeFileEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/CodeFileEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import re from builtins import str as text @@ -46,7 +46,7 @@ [STC_CODE_ERROR, STC_CODE_SEARCH_RESULT, - STC_CODE_SECTION] = range(15, 18) + STC_CODE_SECTION] = list(range(15, 18)) HIGHLIGHT_TYPES = { ERROR_HIGHLIGHT: STC_CODE_ERROR, @@ -285,7 +285,7 @@ def RefreshSectionStyling(self): self.Colourise(0, -1) - for line in xrange(self.GetLineCount()): + for line in range(self.GetLineCount()): self.SetLineState(line, 0) doc_end_pos = self.GetLength() @@ -627,8 +627,8 @@ super(VariablesTable, self).__init__(*args, **kwargs) self.columnTypes = dict(self.__defaultColumnType) if my_columns is not None: - for key in my_columns.keys(): - if key in self.columnTypes.keys(): + for key in list(my_columns.keys()): + if key in list(self.columnTypes.keys()): self.columnTypes[key] = my_columns[key] def GetValue(self, row, col): diff -r fda6c1a37662 -r f62625418bff editors/ConfTreeNodeEditor.py --- a/editors/ConfTreeNodeEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/ConfTreeNodeEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx diff -r fda6c1a37662 -r f62625418bff editors/DataTypeEditor.py --- a/editors/DataTypeEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/DataTypeEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re from six.moves import xrange @@ -239,7 +239,7 @@ subrange_panel_sizer.Add(self.SubrangeMinimum, 1, border=5, flag=wx.GROW | wx.ALL) - for dummy in xrange(2): + for dummy in range(2): subrange_panel_sizer.Add(wx.Size(0, 0), 1) subrange_maximum_label = wx.StaticText(self.SubrangePanel, @@ -512,7 +512,7 @@ self.EnumeratedInitialValue.SetStringSelection(type_infos["initial"]) elif type_infos["type"] == "Array": self.ArrayBaseType.SetStringSelection(type_infos["base_type"]) - self.ArrayDimensions.SetStrings(map("..".join, type_infos["dimensions"])) + self.ArrayDimensions.SetStrings(list(map("..".join, type_infos["dimensions"]))) self.ArrayInitialValue.SetValue(type_infos["initial"]) elif type_infos["type"] == "Structure": self.StructureElementsTable.SetData(type_infos["elements"]) @@ -778,7 +778,7 @@ self.Highlights = [] else: self.Highlights = [(infos, start, end, highlight) for (infos, start, end, highlight) in self.Highlights if highlight != highlight_type] - for control in self.HighlightControls.itervalues(): + for control in self.HighlightControls.values(): if isinstance(control, (wx.ComboBox, wx.SpinCtrl)): control.SetBackgroundColour(wx.NullColour) control.SetForegroundColour(wx.NullColour) @@ -788,7 +788,7 @@ control.SetStyle(0, len(value), wx.TextAttr(wx.NullColour)) elif isinstance(control, wx.adv.EditableListBox): listctrl = control.GetListCtrl() - for i in xrange(listctrl.GetItemCount()): + for i in range(listctrl.GetItemCount()): listctrl.SetItemBackgroundColour(i, wx.NullColour) listctrl.SetItemTextColour(i, wx.NullColour) self.StructureElementsTable.ClearHighlights(highlight_type) diff -r fda6c1a37662 -r f62625418bff editors/DebugViewer.py --- a/editors/DebugViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/DebugViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from threading import Lock, Timer from time import time as gettime @@ -130,7 +130,7 @@ @param inhibit: Inhibit flag """ # Inhibit every data consumers in list - for consumer, _iec_path in self.DataConsumers.iteritems(): + for consumer, _iec_path in self.DataConsumers.items(): consumer.Inhibit(inhibit) # Save inhibit flag @@ -192,7 +192,7 @@ self.DataProducer.UnsubscribeDebugIECVariable("__tick__", self) # Unsubscribe all data consumers in list - for consumer, iec_path in self.DataConsumers.iteritems(): + for consumer, iec_path in self.DataConsumers.items(): self.DataProducer.UnsubscribeDebugIECVariable(iec_path, consumer) self.DataConsumers = {} diff -r fda6c1a37662 -r f62625418bff editors/EditorPanel.py --- a/editors/EditorPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/EditorPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from controls import VariablePanel diff -r fda6c1a37662 -r f62625418bff editors/FileManagementPanel.py --- a/editors/FileManagementPanel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/FileManagementPanel.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import shutil diff -r fda6c1a37662 -r f62625418bff editors/IECCodeViewer.py --- a/editors/IECCodeViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/IECCodeViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from editors.TextViewer import TextViewer from plcopen.plcopen import TestTextElement diff -r fda6c1a37662 -r f62625418bff editors/LDViewer.py --- a/editors/LDViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/LDViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from future.builtins import round import wx @@ -69,7 +69,7 @@ elif element_tree[element]: element_tree[element]["parents"].append("start") remove_stops = {"start": [], "stop": []} - for element, values in element_tree.items(): + for element, values in list(element_tree.items()): if "stop" in values["children"]: removed = [] for child in values["children"]: @@ -88,7 +88,7 @@ element_tree[element]["parents"].remove("start") for element in remove_stops["stop"]: element_tree[element]["children"].remove("stop") - for element, values in element_tree.items(): + for element, values in list(element_tree.items()): if values and "stop" in values["children"]: CalcWeight(element, element_tree) if values["weight"]: @@ -301,7 +301,7 @@ return Viewer.SearchElements(self, bbox) elements = [] - for element in self.Blocks.values() + self.Comments.values(): + for element in list(self.Blocks.values()) + list(self.Comments.values()): if element.IsInSelection(bbox): elements.append(element) return elements @@ -1190,7 +1190,7 @@ def RefreshRungs(self, movey, fromidx): if movey != 0: - for i in xrange(fromidx, len(self.Rungs)): + for i in range(fromidx, len(self.Rungs)): self.RungComments[i].Move(0, movey) self.RungComments[i].RefreshModel() self.Rungs[i].Move(0, movey) diff -r fda6c1a37662 -r f62625418bff editors/ProjectNodeEditor.py --- a/editors/ProjectNodeEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/ProjectNodeEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from controls import ProjectPropertiesPanel, VariablePanel diff -r fda6c1a37662 -r f62625418bff editors/ResourceEditor.py --- a/editors/ResourceEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/ResourceEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx import wx.lib.buttons import wx.grid @@ -165,7 +165,7 @@ if single != "" and not CheckSingle(single, self.Parent.VariableList): error = True elif colname == "Triggering": - editor = wx.grid.GridCellChoiceEditor(map(_, GetTaskTriggeringOptions())) + editor = wx.grid.GridCellChoiceEditor(list(map(_, GetTaskTriggeringOptions()))) elif colname == "Type": editor = wx.grid.GridCellChoiceEditor(self.Parent.TypeList) elif colname == "Priority": @@ -198,8 +198,8 @@ if highlight_type is None: self.Highlights = {} else: - for _row, row_highlights in self.Highlights.iteritems(): - row_items = row_highlights.items() + for _row, row_highlights in self.Highlights.items(): + row_items = list(row_highlights.items()) for col, col_highlights in row_items: if highlight_type in col_highlights: col_highlights.remove(highlight_type) @@ -230,7 +230,7 @@ tasks_buttons_sizer.AddGrowableRow(0) tasks_sizer.Add(tasks_buttons_sizer, flag=wx.GROW) - tasks_label = wx.StaticText(self.Editor, label=_(u'Tasks:')) + tasks_label = wx.StaticText(self.Editor, label=_('Tasks:')) tasks_buttons_sizer.Add(tasks_label, flag=wx.ALIGN_BOTTOM) for name, bitmap, help in [ @@ -261,7 +261,7 @@ instances_buttons_sizer.AddGrowableRow(0) instances_sizer.Add(instances_buttons_sizer, flag=wx.GROW) - instances_label = wx.StaticText(self.Editor, label=_(u'Instances:')) + instances_label = wx.StaticText(self.Editor, label=_('Instances:')) instances_buttons_sizer.Add(instances_label, flag=wx.ALIGN_BOTTOM) for name, bitmap, help in [ @@ -404,7 +404,7 @@ def RefreshTaskList(self): self.TaskList = [] - for row in xrange(self.TasksTable.GetNumberRows()): + for row in range(self.TasksTable.GetNumberRows()): self.TaskList.append(self.TasksTable.GetValueByName(row, "Name")) def RefreshVariableList(self): @@ -474,14 +474,14 @@ return tasklist = [name for name in self.TaskList if name != ""] - for i in xrange(self.TasksTable.GetNumberRows()): + for i in range(self.TasksTable.GetNumberRows()): task = self.TasksTable.GetValueByName(i, "Name") if task in tasklist: tasklist.remove(task) if len(tasklist) > 0: old_name = tasklist[0].upper() new_name = self.TasksTable.GetValue(row, col) - for i in xrange(self.InstancesTable.GetNumberRows()): + for i in range(self.InstancesTable.GetNumberRows()): name = self.InstancesTable.GetValueByName(i, "Task").upper() if old_name == name: self.InstancesTable.SetValueByName(i, "Task", new_name) diff -r fda6c1a37662 -r f62625418bff editors/SFCViewer.py --- a/editors/SFCViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/SFCViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx diff -r fda6c1a37662 -r f62625418bff editors/TextViewer.py --- a/editors/TextViewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/TextViewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import re from functools import reduce @@ -43,17 +43,17 @@ NEWLINE = "\n" -NUMBERS = [str(i) for i in xrange(10)] +NUMBERS = [str(i) for i in range(10)] LETTERS = ['_'] -for i in xrange(26): +for i in range(26): LETTERS.append(chr(ord('a') + i)) LETTERS.append(chr(ord('A') + i)) [STC_PLC_WORD, STC_PLC_COMMENT, STC_PLC_NUMBER, STC_PLC_STRING, STC_PLC_VARIABLE, STC_PLC_PARAMETER, STC_PLC_FUNCTION, STC_PLC_JUMP, STC_PLC_ERROR, STC_PLC_SEARCH_RESULT, - STC_PLC_EMPTY] = range(11) -[SPACE, WORD, NUMBER, STRING, WSTRING, COMMENT, PRAGMA, DPRAGMA] = range(8) + STC_PLC_EMPTY] = list(range(11)) +[SPACE, WORD, NUMBER, STRING, WSTRING, COMMENT, PRAGMA, DPRAGMA] = list(range(8)) re_texts = {} re_texts["letter"] = "[A-Za-z]" @@ -70,7 +70,7 @@ def LineStartswith(line, symbols): - return reduce(lambda x, y: x or y, map(line.startswith, symbols), False) + return reduce(lambda x, y: x or y, list(map(line.startswith, symbols)), False) class TextViewer(EditorPanel): @@ -496,7 +496,7 @@ for category in self.Controler.GetBlockTypes(self.TagName, self.Debug): for blocktype in category["list"]: blockname = blocktype["name"].upper() - if blocktype["type"] == "function" and blockname not in self.Keywords and blockname not in self.Variables.keys(): + if blocktype["type"] == "function" and blockname not in self.Keywords and blockname not in list(self.Variables.keys()): interface = dict([(name, {}) for name, _type, _modifier in blocktype["inputs"] + blocktype["outputs"] if name != '']) for param in ["EN", "ENO"]: if param not in interface: @@ -899,9 +899,9 @@ elif words[0].upper() in ["JMP", "JMPC", "JMPNC"]: kw = self.Jumps else: - kw = self.Variables.keys() - else: - kw = self.Keywords + self.Variables.keys() + self.Functions.keys() + kw = list(self.Variables.keys()) + else: + kw = self.Keywords + list(self.Variables.keys()) + list(self.Functions.keys()) if len(kw) > 0: if len(words[-1]) > 0: kw = [keyword for keyword in kw if keyword.startswith(words[-1])] diff -r fda6c1a37662 -r f62625418bff editors/Viewer.py --- a/editors/Viewer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/editors/Viewer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import math from time import time as gettime from threading import Lock @@ -88,7 +88,7 @@ MAX_ZOOMIN = 4 else: MAX_ZOOMIN = 7 -ZOOM_FACTORS = [math.sqrt(2) ** x for x in xrange(-6, MAX_ZOOMIN)] +ZOOM_FACTORS = [math.sqrt(2) ** x for x in range(-6, MAX_ZOOMIN)] WX_NO_LOGICAL = "gtk3" in wx.PlatformInfo @@ -481,7 +481,7 @@ dc = self.Parent.GetLogicalDC() ipw, _iph = dc.GetTextExtent(self.GetInstanceName()) vw, vh = 0, 0 - for value in self.VALUE_TRANSLATION.itervalues(): + for value in self.VALUE_TRANSLATION.values(): w, h = dc.GetTextExtent(" (%s)" % value) vw = max(vw, w) vh = max(vh, h) @@ -526,10 +526,10 @@ # Add Block Pin Menu items to the given menu def AddBlockPinMenuItems(self, menu, connector): - no_modifier = self.AppendItem(menu, _(u'No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO) - negated = self.AppendItem(menu, _(u'Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO) - rising_edge = self.AppendItem(menu, _(u'Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO) - falling_edge = self.AppendItem(menu, _(u'Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO) + no_modifier = self.AppendItem(menu, _('No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO) + negated = self.AppendItem(menu, _('Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO) + rising_edge = self.AppendItem(menu, _('Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO) + falling_edge = self.AppendItem(menu, _('Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO) not_a_function = self.Controler.GetEditedElementType( self.TagName, self.Debug) != "function" @@ -547,20 +547,20 @@ # Add Alignment Menu items to the given menu def AddAlignmentMenuItems(self, menu): - self.AppendItem(menu, _(u'Left'), self.OnAlignLeftMenu) - self.AppendItem(menu, _(u'Center'), self.OnAlignCenterMenu) - self.AppendItem(menu, _(u'Right'), self.OnAlignRightMenu) + self.AppendItem(menu, _('Left'), self.OnAlignLeftMenu) + self.AppendItem(menu, _('Center'), self.OnAlignCenterMenu) + self.AppendItem(menu, _('Right'), self.OnAlignRightMenu) menu.AppendSeparator() - self.AppendItem(menu, _(u'Top'), self.OnAlignTopMenu) - self.AppendItem(menu, _(u'Middle'), self.OnAlignMiddleMenu) - self.AppendItem(menu, _(u'Bottom'), self.OnAlignBottomMenu) + self.AppendItem(menu, _('Top'), self.OnAlignTopMenu) + self.AppendItem(menu, _('Middle'), self.OnAlignMiddleMenu) + self.AppendItem(menu, _('Bottom'), self.OnAlignBottomMenu) # Add Wire Menu items to the given menu def AddWireMenuItems(self, menu, delete=False, replace=False): - self.AppendItem(menu, _(u'Add Wire Segment'), self.OnAddSegmentMenu) - delete_segment = self.AppendItem(menu, _(u'Delete Wire Segment'), + self.AppendItem(menu, _('Add Wire Segment'), self.OnAddSegmentMenu) + delete_segment = self.AppendItem(menu, _('Delete Wire Segment'), self.OnDeleteSegmentMenu) - replace_wire = self.AppendItem(menu, _(u'Replace Wire by connections'), + replace_wire = self.AppendItem(menu, _('Replace Wire by connections'), self.OnReplaceWireMenu) delete_segment.Enable(delete) @@ -568,81 +568,81 @@ # Add Divergence Menu items to the given menu def AddDivergenceMenuItems(self, menu, delete=False): - self.AppendItem(menu, _(u'Add Divergence Branch'), + self.AppendItem(menu, _('Add Divergence Branch'), self.OnAddBranchMenu) - delete_branch = self.AppendItem(menu, _(u'Delete Divergence Branch'), + delete_branch = self.AppendItem(menu, _('Delete Divergence Branch'), self.OnDeleteBranchMenu) delete_branch.Enable(delete) # Add Add Menu items to the given menu def AddAddMenuItems(self, menu): - self.AppendItem(menu, _(u'Block'), + self.AppendItem(menu, _('Block'), self.GetAddMenuCallBack(self.AddNewBlock)) - self.AppendItem(menu, _(u'Variable'), + self.AppendItem(menu, _('Variable'), self.GetAddMenuCallBack(self.AddNewVariable)) - self.AppendItem(menu, _(u'Connection'), + self.AppendItem(menu, _('Connection'), self.GetAddMenuCallBack(self.AddNewConnection)) menu.AppendSeparator() if self.CurrentLanguage != "FBD": - self.AppendItem(menu, _(u'Power Rail'), + self.AppendItem(menu, _('Power Rail'), self.GetAddMenuCallBack(self.AddNewPowerRail)) - self.AppendItem(menu, _(u'Contact'), + self.AppendItem(menu, _('Contact'), self.GetAddMenuCallBack(self.AddNewContact)) if self.CurrentLanguage != "SFC": - self.AppendItem(menu, _(u'Coil'), + self.AppendItem(menu, _('Coil'), self.GetAddMenuCallBack(self.AddNewCoil)) menu.AppendSeparator() if self.CurrentLanguage == "SFC": - self.AppendItem(menu, _(u'Initial Step'), + self.AppendItem(menu, _('Initial Step'), self.GetAddMenuCallBack(self.AddNewStep, True)) - self.AppendItem(menu, (u'Step'), + self.AppendItem(menu, ('Step'), self.GetAddMenuCallBack(self.AddNewStep)) - self.AppendItem(menu, (u'Transition'), + self.AppendItem(menu, ('Transition'), self.GetAddMenuCallBack(self.AddNewTransition)) - self.AppendItem(menu, (u'Action Block'), + self.AppendItem(menu, ('Action Block'), self.GetAddMenuCallBack(self.AddNewActionBlock)) - self.AppendItem(menu, (u'Divergence'), + self.AppendItem(menu, ('Divergence'), self.GetAddMenuCallBack(self.AddNewDivergence)) - self.AppendItem(menu, (u'Jump'), + self.AppendItem(menu, ('Jump'), self.GetAddMenuCallBack(self.AddNewJump)) menu.AppendSeparator() - self.AppendItem(menu, _(u'Comment'), + self.AppendItem(menu, _('Comment'), self.GetAddMenuCallBack(self.AddNewComment)) # Add Default Menu items to the given menu def AddDefaultMenuItems(self, menu, edit=False, block=False): if block: - edit_block = self.AppendItem(menu, _(u'Edit Block'), + edit_block = self.AppendItem(menu, _('Edit Block'), self.OnEditBlockMenu) - self.AppendItem(menu, _(u'Adjust Block Size'), + self.AppendItem(menu, _('Adjust Block Size'), self.OnAdjustBlockSizeMenu) - self.AppendItem(menu, _(u'Delete'), self.OnDeleteMenu) + self.AppendItem(menu, _('Delete'), self.OnDeleteMenu) edit_block.Enable(edit) else: if self.CurrentLanguage == 'FBD': - self.AppendItem(menu, _(u'Clear Execution Order'), + self.AppendItem(menu, _('Clear Execution Order'), self.OnClearExecutionOrderMenu) - self.AppendItem(menu, _(u'Reset Execution Order'), + self.AppendItem(menu, _('Reset Execution Order'), self.OnResetExecutionOrderMenu) menu.AppendSeparator() add_menu = wx.Menu(title='') self.AddAddMenuItems(add_menu) - menu.AppendMenu(-1, _(u'Add'), add_menu) + menu.AppendMenu(-1, _('Add'), add_menu) menu.AppendSeparator() - cut = self.AppendItem(menu, _(u'Cut'), self.GetClipboardCallBack(self.Cut)) - copy = self.AppendItem(menu, _(u'Copy'), self.GetClipboardCallBack(self.Copy)) - paste = self.AppendItem(menu, _(u'Paste'), self.GetAddMenuCallBack(self.Paste)) + cut = self.AppendItem(menu, _('Cut'), self.GetClipboardCallBack(self.Cut)) + copy = self.AppendItem(menu, _('Copy'), self.GetClipboardCallBack(self.Copy)) + paste = self.AppendItem(menu, _('Paste'), self.GetAddMenuCallBack(self.Paste)) cut.Enable(block) copy.Enable(block) @@ -920,9 +920,9 @@ self.Comments.pop(comment.GetId()) def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): - blocks = self.Blocks.values() - wires = self.Wires.keys() - comments = self.Comments.values() + blocks = list(self.Blocks.values()) + wires = list(self.Wires.keys()) + comments = list(self.Comments.values()) if sort_blocks: blocks.sort(lambda x, y: cmp(x.GetId(), y.GetId())) if sort_wires: @@ -933,7 +933,7 @@ def GetContinuationByName(self, name): blocks = [] - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, FBD_Connector) and\ block.GetType() == CONTINUATION and\ block.GetName() == name: @@ -941,7 +941,7 @@ return blocks def GetConnectorByName(self, name): - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, FBD_Connector) and\ block.GetType() == CONNECTOR and\ block.GetName() == name: @@ -957,11 +957,11 @@ width, height = self.Editor.GetClientSize() screen = wx.Rect(int(x / self.ViewScale[0]), int(y / self.ViewScale[1]), int(width / self.ViewScale[0]), int(height / self.ViewScale[1])) - for comment in self.Comments.itervalues(): + for comment in self.Comments.values(): comment.TestVisible(screen) - for wire in self.Wires.iterkeys(): + for wire in self.Wires.keys(): wire.TestVisible(screen) - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): block.TestVisible(screen) def GetElementIECPath(self, element): @@ -1042,12 +1042,12 @@ def Flush(self): self.UnsubscribeAllDataConsumers(tick=False) - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): block.Flush() # Remove all elements def CleanView(self): - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): block.Clean() self.ResetView() @@ -1137,7 +1137,7 @@ self.GridBrush = wx.TRANSPARENT_BRUSH page_size = properties["pageSize"] if page_size != (0, 0): - self.PageSize = map(int, page_size) + self.PageSize = list(map(int, page_size)) self.PagePen = MiterPen(wx.Colour(180, 180, 180)) else: self.PageSize = None @@ -1219,7 +1219,7 @@ wire.SetModifier(self.GetWireModifier(wire)) if self.Debug: - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): block.SpreadCurrent() if isinstance(block, FBD_Block): for output_connector in block.GetConnectors()["outputs"]: @@ -1479,7 +1479,7 @@ def FindBlock(self, event): dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if block.HitTest(pos) or block.TestHandle(event) != (0, 0): return block return None @@ -1510,7 +1510,7 @@ def FindBlockConnectorWithError(self, pos, direction=None, exclude=None): error = False startblock = None - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): connector = block.TestConnector(pos, direction, exclude) if connector: if self.IsWire(self.SelectedElement): @@ -1670,7 +1670,7 @@ menu = wx.Menu(title='') align_menu = wx.Menu(title='') self.AddAlignmentMenuItems(align_menu) - menu.AppendMenu(-1, _(u'Alignment'), align_menu) + menu.AppendMenu(-1, _('Alignment'), align_menu) menu.AppendSeparator() self.AddDefaultMenuItems(menu, block=True) self.Editor.PopupMenu(menu) @@ -1999,10 +1999,10 @@ NORTH: [NORTH, SOUTH], SOUTH: [SOUTH, NORTH]}[connector.GetDirection()] wire = Wire(self, - *map(list, zip( + *list(map(list, list(zip( [wx.Point(pos.x, pos.y), wx.Point(scaled_pos.x, scaled_pos.y)], - directions))) + directions))))) wire.oldPos = scaled_pos wire.Handle = (HANDLE_POINT, 0) wire.ProcessDragging(0, 0, event, None) @@ -2372,10 +2372,10 @@ poss_div_types = [] SFC_WireMenu_Buttons = { - 'SFC_Step': (_(u'Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, False)), - 'SFC_Jump': (_(u'Jump'), self.GetAddToWireMenuCallBack(self.AddNewJump)), - 'SFC_Transition': (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, False)), - 'SFC_ActionBlock': (_(u'Action Block'), self.GetAddToWireMenuCallBack(self.AddNewActionBlock))} + 'SFC_Step': (_('Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, False)), + 'SFC_Jump': (_('Jump'), self.GetAddToWireMenuCallBack(self.AddNewJump)), + 'SFC_Transition': (_('Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, False)), + 'SFC_ActionBlock': (_('Action Block'), self.GetAddToWireMenuCallBack(self.AddNewActionBlock))} for endblock in self.SFC_StandardRules.get(startblockname): if start_direction in endblock: @@ -2384,27 +2384,27 @@ else: items.append(SFC_WireMenu_Buttons[endblock[0]]) if len(poss_div_types) > 0: - items.append((_(u'Divergence'), self.GetAddToWireMenuCallBack(self.AddNewDivergence, + items.append((_('Divergence'), self.GetAddToWireMenuCallBack(self.AddNewDivergence, poss_div_types))) elif start_direction == EAST: items.extend([ - (_(u'Block'), self.GetAddToWireMenuCallBack(self.AddNewBlock)), - (_(u'Connection'), self.GetAddToWireMenuCallBack(self.AddNewConnection))]) + (_('Block'), self.GetAddToWireMenuCallBack(self.AddNewBlock)), + (_('Connection'), self.GetAddToWireMenuCallBack(self.AddNewConnection))]) if self.CurrentLanguage != "FBD": - items.append((_(u'Contact'), self.GetAddToWireMenuCallBack(self.AddNewContact))) + items.append((_('Contact'), self.GetAddToWireMenuCallBack(self.AddNewContact))) if self.CurrentLanguage == "LD": items.extend([ - (_(u'Coil'), self.GetAddToWireMenuCallBack(self.AddNewCoil)), - (_(u'Power Rail'), self.GetAddToWireMenuCallBack(self.AddNewPowerRail))]) + (_('Coil'), self.GetAddToWireMenuCallBack(self.AddNewCoil)), + (_('Power Rail'), self.GetAddToWireMenuCallBack(self.AddNewPowerRail))]) if self.CurrentLanguage == "SFC": items.append( - (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, True))) + (_('Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, True))) else: items.append( - (_(u'Variable'), self.GetAddToWireMenuCallBack(self.AddNewVariable, True))) + (_('Variable'), self.GetAddToWireMenuCallBack(self.AddNewVariable, True))) return items # ------------------------------------------------------------------------------- @@ -2732,7 +2732,7 @@ def AddNewJump(self, bbox, wire=None): choices = [] - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, SFC_Step): choices.append(block.GetName()) dialog = wx.SingleChoiceDialog(self.ParentWindow, @@ -2947,7 +2947,7 @@ if self.GetDrawingMode() == DRIVENDRAWING_MODE: old_name = step.GetName().upper() if new_name.upper() != old_name: - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, SFC_Jump): if old_name == block.GetTarget().upper(): block.SetTarget(new_name) @@ -3000,7 +3000,7 @@ def EditJumpContent(self, jump): choices = [] - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, SFC_Step): choices.append(block.GetName()) dialog = wx.SingleChoiceDialog(self.ParentWindow, @@ -3314,7 +3314,7 @@ if self.GetDrawingMode() == DRIVENDRAWING_MODE: name = step.GetName().upper() remove_jumps = [] - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if isinstance(block, SFC_Jump): if name == block.GetTarget().upper(): remove_jumps.append(block) @@ -3658,27 +3658,27 @@ xstart, ystart = self.GetViewStart() window_size = self.Editor.GetClientSize() if self.PageSize[0] != 0: - for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): + for x in range(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0])) if self.PageSize[1] != 0: - for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): + for y in range(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) # Draw all elements - for comment in self.Comments.itervalues(): + for comment in self.Comments.values(): if comment != self.SelectedElement and (comment.IsVisible() or printing): comment.Draw(dc) - for wire in self.Wires.iterkeys(): + for wire in self.Wires.keys(): if wire != self.SelectedElement and (wire.IsVisible() or printing): if not self.Debug or not wire.GetValue(): wire.Draw(dc) if self.Debug: - for wire in self.Wires.iterkeys(): + for wire in self.Wires.keys(): if wire != self.SelectedElement and (wire.IsVisible() or printing) and wire.GetValue(): wire.Draw(dc) - for block in self.Blocks.itervalues(): + for block in self.Blocks.values(): if block != self.SelectedElement and (block.IsVisible() or printing): block.Draw(dc) diff -r fda6c1a37662 -r f62625418bff etherlab/ConfigEditor.py --- a/etherlab/ConfigEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/ConfigEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,8 +9,8 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import -from __future__ import division + + import os import re @@ -30,7 +30,7 @@ from etherlab.EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass # ----------------------------------------------------------------------- -[ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3) +[ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = list(range(3)) def GetVariablesTableColnames(position=False): @@ -421,7 +421,7 @@ if values[1] == "location": result = LOCATION_MODEL.match(values[0]) if result is not None: - location = map(int, result.group(1).split('.')) + location = list(map(int, result.group(1).split('.'))) master_location = self.ParentWindow.GetMasterLocation() if master_location == tuple(location[:len(master_location)]) and \ len(location) - len(master_location) == 3: @@ -485,7 +485,7 @@ if values[1] == "location": result = LOCATION_MODEL.match(values[0]) if result is not None and len(values) > 5: - location = map(int, result.group(1).split('.')) + location = list(map(int, result.group(1).split('.'))) access = values[5] elif values[1] == "variable": location = values[0] diff -r fda6c1a37662 -r f62625418bff etherlab/EtherCATManagementEditor.py --- a/etherlab/EtherCATManagementEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/EtherCATManagementEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -7,8 +7,8 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import -from __future__ import division + + import os import string from xml.dom import minidom @@ -331,7 +331,7 @@ wx.Panel.__init__(self, parent, -1) self.DatatypeDescription, self.CommunicationObject, self.ManufacturerSpecific, \ - self.ProfileSpecific, self.Reserved, self.AllSDOData = range(6) + self.ProfileSpecific, self.Reserved, self.AllSDOData = list(range(6)) self.Controler = controler @@ -418,7 +418,7 @@ If the off is selected, the monitor thread gets off. @param event: wx.EVT_RADIOBOX object """ - on, off = range(2) + on, off = list(range(2)) if event.GetInt() == on: CheckThreadFlag = self.SDOMonitoringThreadOn() @@ -455,7 +455,7 @@ def SDOMonitorThreadProc(self): while self.SDOMonitoringFlag and self.Controler.GetCTRoot()._connector.PLCStatus != "Started": self.SDOValuesList = self.Controler.GetCTRoot()._connector.GetSDOData() - LocalData = self.SDOValuesList[0].items() + LocalData = list(self.SDOValuesList[0].items()) LocalData.sort() if self.SDOValuesList[1] != self.Controler.GetSlavePos(): continue @@ -508,7 +508,7 @@ Parse SDO data set that obtain "ESI file" @param entries: SDO entry list """ - entries_list = entries.items() + entries_list = list(entries.items()) entries_list.sort() self.ForDefaultValueFlag = False self.CompareValue = "" @@ -518,7 +518,7 @@ # exclude entry that isn't in the objects check_mapping = entry["PDOMapping"] if check_mapping is "T" or check_mapping is "R": - if "PDO index" not in entry.keys(): + if "PDO index" not in list(entry.keys()): continue idx = "0" + entry["Index"].strip("#") @@ -793,7 +793,7 @@ SDOPanel.SDOMonitorGrid.AppendRows(len(SDOPanel.SDOMonitorEntries)) SDOPanel.SetSDOTraceValues(SDOPanel.SDOMonitorEntries) - SME_list = SDOPanel.SDOMonitorEntries.items() + SME_list = list(SDOPanel.SDOMonitorEntries.items()) SME_list.sort() gridRow = 0 @@ -1547,7 +1547,7 @@ # Config Data: EEPROM Size, PDI Type, Device Emulation # Find PDI Type in pdiType dictionary cnt_pdi_type = self.Controler.CommonMethod.SmartViewInfosFromXML["pdi_type"] - for i in self.PDIType.keys(): + for i in list(self.PDIType.keys()): if cnt_pdi_type == i: cnt_pdi_type = self.PDIType[i][0] break @@ -1627,7 +1627,7 @@ eeprom_size = str((int(self.GetWordAddressData(sii_dict.get('Size'), 10))+1)//8*1024) # Find PDI Type in pdiType dictionary cnt_pdi_type = int(self.GetWordAddressData(sii_dict.get('PDIControl'), 16).split('x')[1][2:4], 16) - for i in self.PDIType.keys(): + for i in list(self.PDIType.keys()): if cnt_pdi_type == i: cnt_pdi_type = self.PDIType[i][0] break @@ -2106,7 +2106,7 @@ ("pdi", "type", self.PDIType), ("fmmu", "number", self.FMMUNumber), ("sm", "number", self.SMNumber)]: - if property in register.attributes.keys(): + if property in list(register.attributes.keys()): if type == "type": if register.attributes[property].value == value: self.GetRegisterInfo(reg_info_tree, register) @@ -2153,7 +2153,7 @@ ("pdi", "type", self.PDIType), ("fmmu", "number", self.FMMUNumber), ("sm", "number", self.SMNumber)]: - if property in detail.attributes.keys(): + if property in list(detail.attributes.keys()): if type == "type": if detail.attributes[property].value == value: self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail) @@ -2522,7 +2522,7 @@ reg_sub_grid_data = [] - BIT_RANGE, NAME, DESCRIPTIONS = range(3) + BIT_RANGE, NAME, DESCRIPTIONS = list(range(3)) # Check if this register's detail description is exist or not, # and create data structure for the detail description table ; sub grid @@ -2817,7 +2817,7 @@ """ Update the data of the slave information. """ - position, not_used, state, not_used, name = range(5) + position, not_used, state, not_used, name = list(range(5)) slave_node = [] slave_info_list = [] @@ -2933,7 +2933,7 @@ ec_idx += 1 # set texts in "error" column. - ec_info_list = error_counter.items() + ec_info_list = list(error_counter.items()) ec_info_list.sort() err_checker = "none" diff -r fda6c1a37662 -r f62625418bff etherlab/EthercatCIA402Slave.py --- a/etherlab/EthercatCIA402Slave.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/EthercatCIA402Slave.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,7 +9,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + import os import wx @@ -424,7 +424,7 @@ if variable in check_variable: continue - var_infos = dict(zip(["name", "index", "subindex", "var_type", "dir"], variable)) + var_infos = dict(list(zip(["name", "index", "subindex", "var_type", "dir"], variable))) var_infos["location"] = location_str var_infos["var_size"] = self.GetSizeOfType(var_infos["var_type"]) var_infos["var_name"] = "__%(dir)s%(var_size)s%(location)s_%(index)d_%(subindex)d" % var_infos diff -r fda6c1a37662 -r f62625418bff etherlab/EthercatMaster.py --- a/etherlab/EthercatMaster.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/EthercatMaster.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,7 +9,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + import os from copy import deepcopy from functools import reduce @@ -298,7 +298,7 @@ EtherCATConfigParser.LoadXMLString(config_xmlfile.read()) if error is None: config_is_saved = True - except Exception, e: + except Exception as e: error = e.message config_xmlfile.close() @@ -651,7 +651,7 @@ # Test OD entries = device.GetEntriesList(limits) #entries = self.CTNParent.GetEntriesList() - entries_list = entries.items() + entries_list = list(entries.items()) entries_list.sort() entries = [] current_index = None @@ -817,7 +817,7 @@ else: sync_managers.append(LOCATION_VAR_INPUT) - entries = device.GetEntriesList().items() + entries = list(device.GetEntriesList().items()) entries.sort() for (index, subindex), entry in entries: var_size = self.GetSizeOfType(entry["Type"]) diff -r fda6c1a37662 -r f62625418bff etherlab/EthercatSlave.py --- a/etherlab/EthercatSlave.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/EthercatSlave.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,7 +9,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + from PLCControler import LOCATION_CONFNODE, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY from ConfigTreeNode import ConfigTreeNode diff -r fda6c1a37662 -r f62625418bff etherlab/__init__.py --- a/etherlab/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,4 +1,4 @@ -from __future__ import absolute_import + from etherlab.etherlab import * from util.BitmapLibrary import AddBitmapFolder diff -r fda6c1a37662 -r f62625418bff etherlab/runtime_etherlab.py --- a/etherlab/runtime_etherlab.py Mon Mar 27 10:19:14 2023 +0200 +++ b/etherlab/runtime_etherlab.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,7 +9,7 @@ # # see copying file for copyrights details. -from __future__ import absolute_import + import os import signal import subprocess diff -r fda6c1a37662 -r f62625418bff graphics/DebugDataConsumer.py --- a/graphics/DebugDataConsumer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/DebugDataConsumer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import datetime diff -r fda6c1a37662 -r f62625418bff graphics/FBD_Objects.py --- a/graphics/FBD_Objects.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/FBD_Objects.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx from six.moves import xrange @@ -78,7 +78,7 @@ return block def GetConnectorTranslation(self, element): - return dict(zip(self.Inputs + self.Outputs, element.Inputs + element.Outputs)) + return dict(list(zip(self.Inputs + self.Outputs, element.Inputs + element.Outputs))) def Flush(self): for input in self.Inputs: @@ -165,7 +165,7 @@ linesize = max((self.Size[1] - BLOCK_LINE_SIZE) // lines, BLOCK_LINE_SIZE) # Update inputs and outputs positions position = BLOCK_LINE_SIZE + linesize // 2 - for i in xrange(lines): + for i in range(lines): if scaling is not None: ypos = round_scaling(self.Pos.y + position, scaling[1]) - self.Pos.y else: @@ -256,7 +256,7 @@ outputs = [output for output in blocktype["outputs"]] if blocktype["extensible"]: start = int(inputs[-1][0].replace("IN", "")) - for dummy in xrange(self.Extension - len(blocktype["inputs"])): + for dummy in range(self.Extension - len(blocktype["inputs"])): start += 1 inputs.append(("IN%d" % start, inputs[-1][1], inputs[-1][2])) comment = blocktype["comment"] @@ -451,7 +451,7 @@ if highlight_type is None: self.Highlights = {} else: - highlight_items = self.Highlights.items() + highlight_items = list(self.Highlights.items()) for name, highlights in highlight_items: highlights = ClearHighlights(highlights, highlight_type) if len(highlights) == 0: diff -r fda6c1a37662 -r f62625418bff graphics/GraphicCommons.py --- a/graphics/GraphicCommons.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/GraphicCommons.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from math import * from future.builtins import round from six import string_types @@ -68,15 +68,15 @@ SFC_ACTION_MIN_SIZE = (100, 30) # Minimum size of an action block line # Type definition constants for graphic elements -[INPUT, OUTPUT, INOUT] = range(3) -[CONNECTOR, CONTINUATION] = range(2) -[LEFTRAIL, RIGHTRAIL] = range(2) -[CONTACT_NORMAL, CONTACT_REVERSE, CONTACT_RISING, CONTACT_FALLING] = range(4) -[COIL_NORMAL, COIL_REVERSE, COIL_SET, COIL_RESET, COIL_RISING, COIL_FALLING] = range(6) -[SELECTION_DIVERGENCE, SELECTION_CONVERGENCE, SIMULTANEOUS_DIVERGENCE, SIMULTANEOUS_CONVERGENCE] = range(4) +[INPUT, OUTPUT, INOUT] = list(range(3)) +[CONNECTOR, CONTINUATION] = list(range(2)) +[LEFTRAIL, RIGHTRAIL] = list(range(2)) +[CONTACT_NORMAL, CONTACT_REVERSE, CONTACT_RISING, CONTACT_FALLING] = list(range(4)) +[COIL_NORMAL, COIL_REVERSE, COIL_SET, COIL_RESET, COIL_RISING, COIL_FALLING] = list(range(6)) +[SELECTION_DIVERGENCE, SELECTION_CONVERGENCE, SIMULTANEOUS_DIVERGENCE, SIMULTANEOUS_CONVERGENCE] = list(range(4)) # Constants for defining the type of dragging that has been selected -[HANDLE_MOVE, HANDLE_RESIZE, HANDLE_POINT, HANDLE_SEGMENT, HANDLE_CONNECTOR] = range(5) +[HANDLE_MOVE, HANDLE_RESIZE, HANDLE_POINT, HANDLE_SEGMENT, HANDLE_CONNECTOR] = list(range(5)) # List of value for resize handle that are valid VALID_HANDLES = [(1, 1), (1, 2), (1, 3), (2, 3), (3, 3), (3, 2), (3, 1), (2, 1)] @@ -87,10 +87,10 @@ # Contants for defining which mode is selected for each view [MODE_SELECTION, MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, MODE_COIL, MODE_CONTACT, MODE_POWERRAIL, MODE_INITIALSTEP, MODE_STEP, - MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION, MODE_MOTION] = range(15) + MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION, MODE_MOTION] = list(range(15)) # Contants for defining alignment types for graphic group -[ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM] = range(6) +[ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM] = list(range(6)) # Contants for defining which drawing mode is selected for app [FREEDRAWING_MODE, DRIVENDRAWING_MODE] = [1, 2] @@ -1918,7 +1918,7 @@ # Returns if the point given is on one of the wire segments def HitTest(self, pt, connectors=True): test = False - for i in xrange(len(self.Points) - 1): + for i in range(len(self.Points) - 1): rect = wx.Rect(0, 0, 0, 0) if i == 0 and self.StartConnected is not None: x1 = self.Points[i].x - self.Segments[0][0] * CONNECTOR_SIZE @@ -1953,7 +1953,7 @@ # Returns the wire segment if the point given is on it def TestSegment(self, pt, all=False): - for i in xrange(len(self.Segments)): + for i in range(len(self.Segments)): # If wire is not in a Ladder Diagram, first and last segments are excluded if all or 0 < i < len(self.Segments) - 1: x1, y1 = self.Points[i].x, self.Points[i].y @@ -2233,7 +2233,7 @@ i = 1 while i < len(points) - 1: if points[i] == points[i + 1] and segments[i - 1] == segments[i + 1]: - for dummy in xrange(2): + for dummy in range(2): points.pop(i) segments.pop(i) else: @@ -2459,7 +2459,7 @@ handle_type, handle = self.Handle if handle_type == HANDLE_SEGMENT: segment, _dir = handle - for dummy in xrange(2): + for dummy in range(2): self.Points.pop(segment) self.Segments.pop(segment) self.GeneratePoints() diff -r fda6c1a37662 -r f62625418bff graphics/LD_Objects.py --- a/graphics/LD_Objects.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/LD_Objects.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import wx from future.builtins import round from six.moves import xrange @@ -73,8 +73,8 @@ return powerrail def GetConnectorTranslation(self, element): - return dict(zip([connector for connector in self.Connectors], - [connector for connector in element.Connectors])) + return dict(list(zip([connector for connector in self.Connectors], + [connector for connector in element.Connectors]))) # Returns the RedrawRect def GetRedrawRect(self, movex=0, movey=0): @@ -238,7 +238,7 @@ self.Type = type self.Clean() self.Connectors = [] - for dummy in xrange(connectors): + for dummy in range(connectors): self.AddConnector() self.RefreshSize() @@ -255,7 +255,7 @@ position = connector.GetRelPosition() self.RealConnectors.append(max(0., min((position.y - self.Extensions[0]) / height, 1.))) elif len(self.Connectors) > 1: - self.RealConnectors = map(lambda x: x * 1 / (len(self.Connectors) - 1), xrange(len(self.Connectors))) + self.RealConnectors = [x * 1 / (len(self.Connectors) - 1) for x in range(len(self.Connectors))] else: self.RealConnectors = [0.5] Graphic_Element.OnLeftDown(self, event, dc, scaling) @@ -626,7 +626,7 @@ if highlight_type is None: self.Highlights = {} else: - highlight_items = self.Highlights.items() + highlight_items = list(self.Highlights.items()) for name, highlights in highlight_items: highlights = ClearHighlights(highlights, highlight_type) if len(highlights) == 0: @@ -687,7 +687,7 @@ self.Output.Draw(dc) if not getattr(dc, "printing", False): - for name, highlights in self.Highlights.iteritems(): + for name, highlights in self.Highlights.items(): if name == "reference": DrawHighlightedText(dc, self.Name, highlights, name_pos[0], name_pos[1]) elif typetext != "": @@ -948,7 +948,7 @@ if highlight_type is None: self.Highlights = {} else: - highlight_items = self.Highlights.items() + highlight_items = list(self.Highlights.items()) for name, highlights in highlight_items: highlights = ClearHighlights(highlights, highlight_type) if len(highlights) == 0: @@ -1016,7 +1016,7 @@ self.Output.Draw(dc) if not getattr(dc, "printing", False): - for name, highlights in self.Highlights.iteritems(): + for name, highlights in self.Highlights.items(): if name == "reference": DrawHighlightedText(dc, self.Name, highlights, name_pos[0], name_pos[1]) elif typetext != "": diff -r fda6c1a37662 -r f62625418bff graphics/RubberBand.py --- a/graphics/RubberBand.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/RubberBand.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from graphics.GraphicCommons import GetScaledEventPosition diff -r fda6c1a37662 -r f62625418bff graphics/SFC_Objects.py --- a/graphics/SFC_Objects.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/SFC_Objects.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + from future.builtins import round import wx @@ -976,7 +976,7 @@ if highlight_type is None: self.Highlights = {} else: - highlight_items = self.Highlights.items() + highlight_items = list(self.Highlights.items()) for name, highlights in highlight_items: highlights = ClearHighlights(highlights, highlight_type) if len(highlights) == 0: @@ -1037,7 +1037,7 @@ self.Condition.Draw(dc) if not getattr(dc, "printing", False): - for name, highlights in self.Highlights.iteritems(): + for name, highlights in self.Highlights.items(): if name == "priority": DrawHighlightedText(dc, str(self.Priority), highlights, priority_pos[0], priority_pos[1]) else: @@ -1067,11 +1067,11 @@ if self.Type in [SELECTION_DIVERGENCE, SIMULTANEOUS_DIVERGENCE]: self.Inputs = [Connector(self, "", None, wx.Point(self.Size[0] // 2, 0), NORTH, onlyone=True)] self.Outputs = [] - for i in xrange(number): + for i in range(number): self.Outputs.append(Connector(self, "", None, wx.Point(i * SFC_DEFAULT_SEQUENCE_INTERVAL, self.Size[1]), SOUTH, onlyone=True)) elif self.Type in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]: self.Inputs = [] - for i in xrange(number): + for i in range(number): self.Inputs.append(Connector(self, "", None, wx.Point(i * SFC_DEFAULT_SEQUENCE_INTERVAL, 0), NORTH, onlyone=True)) self.Outputs = [Connector(self, "", None, wx.Point(self.Size[0] // 2, self.Size[1]), SOUTH, onlyone=True)] self.Value = None @@ -1124,7 +1124,7 @@ return divergence def GetConnectorTranslation(self, element): - return dict(zip(self.Inputs + self.Outputs, element.Inputs + element.Outputs)) + return dict(list(zip(self.Inputs + self.Outputs, element.Inputs + element.Outputs))) # Returns the RedrawRect def GetRedrawRect(self, movex=0, movey=0): @@ -2004,9 +2004,9 @@ if highlight_type is None: self.Highlights = {} else: - highlight_items = self.Highlights.items() + highlight_items = list(self.Highlights.items()) for number, action_highlights in highlight_items: - action_highlight_items = action_highlights.items() + action_highlight_items = list(action_highlights.items()) for name, attribute_highlights in action_highlight_items: attribute_highlights = ClearHighlights(attribute_highlights, highlight_type) if len(attribute_highlights) == 0: @@ -2058,7 +2058,7 @@ if not getattr(dc, "printing", False): action_highlights = self.Highlights.get(i, {}) - for name, attribute_highlights in action_highlights.iteritems(): + for name, attribute_highlights in action_highlights.items(): if name == "qualifier": DrawHighlightedText(dc, action.qualifier, attribute_highlights, qualifier_pos[0], qualifier_pos[1]) elif name == "duration": diff -r fda6c1a37662 -r f62625418bff graphics/ToolTipProducer.py --- a/graphics/ToolTipProducer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/graphics/ToolTipProducer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import wx from controls.CustomToolTip import CustomToolTip, TOOLTIP_WAIT_PERIOD diff -r fda6c1a37662 -r f62625418bff i18n/mki18n.py --- a/i18n/mki18n.py Mon Mar 27 10:19:14 2023 +0200 +++ b/i18n/mki18n.py Fri Oct 28 12:39:15 2022 +0800 @@ -79,8 +79,8 @@ # ------------- # -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import re @@ -229,7 +229,7 @@ languageDict = getSupportedLanguageDict(applicationName) - for langCode in languageDict.keys(): + for langCode in list(languageDict.keys()): if langCode == 'en': pass else: @@ -254,7 +254,7 @@ languageDict = getSupportedLanguageDict(applicationName) - for langCode in languageDict.keys(): + for langCode in list(languageDict.keys()): if langCode == 'en': pass else: @@ -308,7 +308,7 @@ languageDict = getSupportedLanguageDict(applicationName) - for langCode in languageDict.keys(): + for langCode in list(languageDict.keys()): if (langCode == 'en') and (forceEnglish == 0): pass else: @@ -414,7 +414,7 @@ # translate the path separators directory = unixpath(directory) # build a list of all directory elements - aList = filter(lambda x: len(x) > 0, directory.split('/')) + aList = [x for x in directory.split('/') if len(x) > 0] theLen = len(aList) # if the first element is a Windows-style disk drive # concatenate it with the first directory diff -r fda6c1a37662 -r f62625418bff modbus/mb_utils.py --- a/modbus/mb_utils.py Mon Mar 27 10:19:14 2023 +0200 +++ b/modbus/mb_utils.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,8 +22,8 @@ # This code is made available on the understanding that it will not be # used in safety-critical situations without a full and competent review. -from __future__ import absolute_import -from __future__ import division + + from six.moves import xrange # dictionary implementing: @@ -48,7 +48,7 @@ # Configuration tree value acces helper, for multiple values def GetCTVals(child, indexes): - return map(lambda index: GetCTVal(child, index), indexes) + return [GetCTVal(child, index) for index in indexes] def GetTCPServerNodePrinted(self, child): @@ -60,7 +60,7 @@ {"%(locnodestr)s", "%(config_name)s", "%(host)s", "%(port)s", %(slaveid)s, {naf_tcp, {.tcp = {NULL, NULL, DEF_CLOSE_ON_SILENCE}}}, -1 /* mb_nd */, 0 /* init_state */}''' location = ".".join(map(str, child.GetCurrentLocation())) - config_name, host, port, slaveid = GetCTVals(child, range(4)) + config_name, host, port, slaveid = GetCTVals(child, list(range(4))) if host == "#ANY#": host = '' # slaveid = GetCTVal(child, 2) @@ -90,16 +90,16 @@ request_dict["locreqstr"] = "_".join(map(str, child.GetCurrentLocation())) request_dict["nodeid"] = str(nodeid) request_dict["address"] = GetCTVal(child, 2) - if int(request_dict["address"]) not in xrange(65536): + if int(request_dict["address"]) not in range(65536): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid Start Address in server memory area node %(locreqstr)s (Must be in the range [0..65535])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None request_dict["count"] = GetCTVal(child, 1) - if int(request_dict["count"]) not in xrange(1, 65537): + if int(request_dict["count"]) not in range(1, 65537): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid number of channels in server memory area node %(locreqstr)s (Must be in the range [1..65536-start_address])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None - if (int(request_dict["address"]) + int(request_dict["count"])) not in xrange(1, 65537): + if (int(request_dict["address"]) + int(request_dict["count"])) not in range(1, 65537): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid number of channels in server memory area node %(locreqstr)s (Must be in the range [1..65536-start_address])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None @@ -122,7 +122,7 @@ {"%(locnodestr)s", "%(config_name)s", "%(device)s", "",%(slaveid)s, {naf_rtu, {.rtu = {NULL, %(baud)s /*baud*/, %(parity)s /*parity*/, 8 /*data bits*/, %(stopbits)s, 0 /* ignore echo */}}}, -1 /* mb_nd */, 0 /* init_state */}''' location = ".".join(map(str, child.GetCurrentLocation())) - config_name, device, baud, parity, stopbits, slaveid = GetCTVals(child, range(6)) + config_name, device, baud, parity, stopbits, slaveid = GetCTVals(child, list(range(6))) node_dict = {"locnodestr": location, "config_name": config_name, @@ -143,7 +143,7 @@ {"%(locnodestr)s", "%(config_name)s", "%(device)s", "", {naf_rtu, {.rtu = {NULL, %(baud)s /*baud*/, %(parity)s /*parity*/, 8 /*data bits*/, %(stopbits)s, 0 /* ignore echo */}}}, -1 /* mb_nd */, 0 /* init_state */, %(coms_period)s /* communication period (ms)*/, %(coms_delay)s /* inter request delay (ms)*/, 0 /* prev_error */}''' location = ".".join(map(str, child.GetCurrentLocation())) - config_name, device, baud, parity, stopbits, coms_period, coms_delay = GetCTVals(child, range(7)) + config_name, device, baud, parity, stopbits, coms_period, coms_delay = GetCTVals(child, list(range(7))) node_dict = {"locnodestr": location, "config_name": config_name, @@ -165,7 +165,7 @@ {"%(locnodestr)s", "%(config_name)s", "%(host)s", "%(port)s", {naf_tcp, {.tcp = {NULL, NULL, DEF_CLOSE_ON_SILENCE}}}, -1 /* mb_nd */, 0 /* init_state */, %(coms_period)s /* communication period (ms)*/, %(coms_delay)s /* inter request delay (ms)*/, 0 /* prev_error */}''' location = ".".join(map(str, child.GetCurrentLocation())) - config_name, host, port, coms_period, coms_delay = GetCTVals(child, range(5)) + config_name, host, port, coms_period, coms_delay = GetCTVals(child, list(range(5))) node_dict = {"locnodestr": location, "config_name": config_name, @@ -211,19 +211,19 @@ "iotype": modbus_function_dict[GetCTVal(child, 0)][1], "maxcount": modbus_function_dict[GetCTVal(child, 0)][2]} - if int(request_dict["slaveid"]) not in xrange(256): + if int(request_dict["slaveid"]) not in range(256): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid slaveID in TCP client request node %(locreqstr)s (Must be in the range [0..255])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None - if int(request_dict["address"]) not in xrange(65536): + if int(request_dict["address"]) not in range(65536): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid Start Address in TCP client request node %(locreqstr)s (Must be in the range [0..65535])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None - if int(request_dict["count"]) not in xrange(1, 1 + int(request_dict["maxcount"])): + if int(request_dict["count"]) not in range(1, 1 + int(request_dict["maxcount"])): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid number of channels in TCP client request node %(locreqstr)s (Must be in the range [1..%(maxcount)s])\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None - if (int(request_dict["address"]) + int(request_dict["count"])) not in xrange(1, 65537): + if (int(request_dict["address"]) + int(request_dict["count"])) not in range(1, 65537): self.GetCTRoot().logger.write_error( "Modbus plugin: Invalid number of channels in TCP client request node %(locreqstr)s (start_address + nr_channels must be less than 65536)\nModbus plugin: Aborting C code generation for this node\n" % request_dict) return None diff -r fda6c1a37662 -r f62625418bff modbus/modbus.py --- a/modbus/modbus.py Mon Mar 27 10:19:14 2023 +0200 +++ b/modbus/modbus.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # used in safety-critical situations without a full and competent review. -from __future__ import absolute_import + import os from six.moves import xrange @@ -94,7 +94,7 @@ if element["name"] == "ModbusRequest": for child in element["children"]: if child["name"] == "Function": - list = modbus_function_dict.keys() + list = list(modbus_function_dict.keys()) list.sort() child["type"] = list return infos @@ -240,7 +240,7 @@ if element["name"] == "MemoryArea": for child in element["children"]: if child["name"] == "MemoryAreaType": - list = modbus_memtype_dict.keys() + list = list(modbus_memtype_dict.keys()) list.sort() child["type"] = list return infos @@ -618,7 +618,7 @@ if child["name"] == "Stop_Bits": child["type"] = modbus_serial_stopbits_list if child["name"] == "Parity": - child["type"] = modbus_serial_parity_dict.keys() + child["type"] = list(modbus_serial_parity_dict.keys()) return infos # Return the number of (modbus library) nodes this specific RTU client will need @@ -709,7 +709,7 @@ if child["name"] == "Stop_Bits": child["type"] = modbus_serial_stopbits_list if child["name"] == "Parity": - child["type"] = modbus_serial_parity_dict.keys() + child["type"] = list(modbus_serial_parity_dict.keys()) return infos # Return the number of (modbus library) nodes this specific RTU slave will need @@ -1026,7 +1026,7 @@ start_address = int(GetCTVal(subchild, 2)) relative_addr = absloute_address - start_address # test if relative address in request specified range - if relative_addr in xrange(int(GetCTVal(subchild, 1))): + if relative_addr in range(int(GetCTVal(subchild, 1))): if str(iecvar["NAME"]) not in loc_vars_list: loc_vars.append("u16 *" + str(iecvar["NAME"]) + " = &server_nodes[%d].mem_area.%s[%d];" % ( server_id, memarea, absloute_address)) @@ -1080,7 +1080,7 @@ start_address = int(GetCTVal(subchild, 2)) relative_addr = absloute_address - start_address # test if relative address in request specified range - if relative_addr in xrange(int(GetCTVal(subchild, 1))): + if relative_addr in range(int(GetCTVal(subchild, 1))): if str(iecvar["NAME"]) not in loc_vars_list: loc_vars.append("u16 *" + str(iecvar["NAME"]) + " = &server_nodes[%d].mem_area.%s[%d];" % ( server_id, memarea, absloute_address)) @@ -1116,7 +1116,7 @@ # two numbers are always '0.0', and the first two identify the request. # In the following if, we check for this condition by checking # if there are at least 4 or more number in the location's address. - if ( relative_addr in xrange(int(GetCTVal(subchild, 2))) # condition (a) explained above + if ( relative_addr in range(int(GetCTVal(subchild, 2))) # condition (a) explained above and len(iecvar["LOC"]) < 5): # condition (b) explained above if str(iecvar["NAME"]) not in loc_vars_list: loc_vars.append("u16 *" + str(iecvar["NAME"]) + " = &client_requests[%d].plcv_buffer[%d];" % (client_requestid, relative_addr)) @@ -1177,7 +1177,7 @@ # two numbers are always '0.0', and the first two identify the request. # In the following if, we check for this condition by checking # if there are at least 4 or more number in the location's address. - if ( relative_addr in xrange(int(GetCTVal(subchild, 2))) # condition (a) explained above + if ( relative_addr in range(int(GetCTVal(subchild, 2))) # condition (a) explained above and len(iecvar["LOC"]) < 5): # condition (b) explained above if str(iecvar["NAME"]) not in loc_vars_list: loc_vars.append( diff -r fda6c1a37662 -r f62625418bff opc_ua/__init__.py --- a/opc_ua/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/opc_ua/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,6 +1,6 @@ # opcua/__init__.py -from __future__ import absolute_import + from .client import OPCUAClient diff -r fda6c1a37662 -r f62625418bff opc_ua/client.py --- a/opc_ua/client.py Mon Mar 27 10:19:14 2023 +0200 +++ b/opc_ua/client.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,6 +1,6 @@ # opcua/client.py -from __future__ import absolute_import + import os @@ -158,7 +158,7 @@ locstr = "_".join(map(str, current_location)) name = self.BaseParams.getName() entries = [] - for direction, data in self.modeldata.iteritems(): + for direction, data in self.modeldata.items(): iec_direction_prefix = {"input": "__I", "output": "__Q"}[direction] for row in data: dname, ua_nsidx, ua_nodeid_type, _ua_node_id, ua_type, iec_number = row diff -r fda6c1a37662 -r f62625418bff opc_ua/opcua_client_maker.py --- a/opc_ua/opcua_client_maker.py Mon Mar 27 10:19:14 2023 +0200 +++ b/opc_ua/opcua_client_maker.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,5 +1,5 @@ -from __future__ import print_function -from __future__ import absolute_import + + import csv @@ -453,7 +453,7 @@ self.change_callback = change_callback def append(self, value): - v = dict(zip(lstcolnames, value)) + v = dict(list(zip(lstcolnames, value))) if type(v["IEC"]) != int: if len(self) == 0: @@ -475,7 +475,7 @@ self.log("Variable {} (Id={}) has invalid type\n".format(v["Name"],v["Id"])) return False - if len(self)>0 and v["Id"] in zip(*self)[lstcolnames.index("Id")]: + if len(self)>0 and v["Id"] in list(zip(*self))[lstcolnames.index("Id")]: self.log("Variable {} (Id={}) already in list\n".format(v["Name"],v["Id"])) return False @@ -498,8 +498,8 @@ def LoadCSV(self,path): with open(path, 'rb') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') - buf = {direction:[] for direction, _model in self.iteritems()} - for direction, model in self.iteritems(): + buf = {direction:[] for direction, _model in self.items()} + for direction, model in self.items(): self[direction][:] = [] for row in reader: direction = row[0] @@ -508,7 +508,7 @@ def SaveCSV(self,path): with open(path, 'wb') as csvfile: - for direction, data in self.iteritems(): + for direction, data in self.items(): writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) for row in data: @@ -706,7 +706,7 @@ formatdict["init"] += """ INIT_NoAuth()""" - for direction, data in self.iteritems(): + for direction, data in self.items(): iec_direction_prefix = {"input": "__I", "output": "__Q"}[direction] for row in data: name, ua_nsidx, ua_nodeid_type, _ua_node_id, ua_type, iec_number = row @@ -751,7 +751,7 @@ if argc > 2: AuthType = sys.argv[2] config["AuthType"] = AuthType - for (name, default), value in izip_longest(authParams[AuthType], sys.argv[3:]): + for (name, default), value in zip_longest(authParams[AuthType], sys.argv[3:]): if value is None: if default is None: raise Exception(name+" param expected") diff -r fda6c1a37662 -r f62625418bff plcopen/BlockInstanceCollector.py --- a/plcopen/BlockInstanceCollector.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/BlockInstanceCollector.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from collections import OrderedDict, namedtuple from plcopen.XSLTModelQuery import XSLTModelQuery, _StringValue, _BoolValue, _translate_args diff -r fda6c1a37662 -r f62625418bff plcopen/InstanceTagnameCollector.py --- a/plcopen/InstanceTagnameCollector.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/InstanceTagnameCollector.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from plcopen.XSLTModelQuery import XSLTModelQuery from plcopen.types_enums import * diff -r fda6c1a37662 -r f62625418bff plcopen/InstancesPathCollector.py --- a/plcopen/InstancesPathCollector.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/InstancesPathCollector.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from plcopen.XSLTModelQuery import XSLTModelQuery diff -r fda6c1a37662 -r f62625418bff plcopen/POUVariablesCollector.py --- a/plcopen/POUVariablesCollector.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/POUVariablesCollector.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from plcopen.XSLTModelQuery import XSLTModelQuery, _StringValue, _BoolValue, _translate_args from plcopen.types_enums import CLASS_TYPES, POU_TYPES, VAR_CLASS_INFOS diff -r fda6c1a37662 -r f62625418bff plcopen/VariableInfoCollector.py --- a/plcopen/VariableInfoCollector.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/VariableInfoCollector.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + from plcopen.XSLTModelQuery import XSLTModelQuery, _StringValue, _BoolValue, _translate_args # ------------------------------------------------------------------------------- diff -r fda6c1a37662 -r f62625418bff plcopen/XSLTModelQuery.py --- a/plcopen/XSLTModelQuery.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/XSLTModelQuery.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz. # See COPYING file for copyrights details. -from __future__ import absolute_import + import os from lxml import etree import util.paths as paths @@ -24,7 +24,7 @@ ("GetProject", lambda *_ignored: [controller.GetProject(self.debug)]), ("GetStdLibs", lambda *_ignored: - [lib for lib in StdBlckLibs.values()]), + [lib for lib in list(StdBlckLibs.values())]), ("GetExtensions", lambda *_ignored: [ctn["types"] for ctn in controller.ConfNodeTypes]) ] diff -r fda6c1a37662 -r f62625418bff plcopen/__init__.py --- a/plcopen/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -26,7 +26,7 @@ # plcopen module dynamically creates its classes -from __future__ import absolute_import + from plcopen.plcopen import \ PLCOpenParser, LoadProject, SaveProject, LoadPou, \ LoadPouInstances, VarOrder, QualifierList, rect diff -r fda6c1a37662 -r f62625418bff plcopen/definitions.py --- a/plcopen/definitions.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/definitions.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from os.path import join import util.paths as paths from util.TranslationCatalogs import NoTranslate diff -r fda6c1a37662 -r f62625418bff plcopen/plcopen.py --- a/plcopen/plcopen.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/plcopen.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,8 +24,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import re from collections import OrderedDict @@ -440,7 +440,7 @@ def setcontentHeader(self, contentheader): contentheader_obj = self.contentHeader - for attr, value in contentheader.iteritems(): + for attr, value in contentheader.items(): func = {"projectName": contentheader_obj.setname, "projectVersion": contentheader_obj.setversion, "authorName": contentheader_obj.setauthor, @@ -495,7 +495,7 @@ "ppx:types/ppx:pous/ppx:pou%s%s" % (("[@name!='%s']" % exclude) if exclude is not None else '', ("[%s]" % " or ".join( - map(lambda x: "@pouType='%s'" % x, filter))) + ["@pouType='%s'" % x for x in filter])) if len(filter) > 0 else ""), namespaces=PLCOpenParser.NSMAP) setattr(cls, "getpous", getpous) @@ -650,7 +650,7 @@ setattr(cls, "getpageSize", getpageSize) def setscaling(self, scaling): - for language, (x, y) in scaling.items(): + for language, (x, y) in list(scaling.items()): self.coordinateInfo.setscaling(language, x, y) setattr(cls, "setscaling", setscaling) @@ -749,7 +749,7 @@ def _removeConfigurationResourceVariableByAddress(self, address): for varlist in self.getglobalVars(): variables = varlist.getvariable() - for i in xrange(len(variables)-1, -1, -1): + for i in range(len(variables)-1, -1, -1): if variables[i].getaddress() == address: variables.remove(variables[i]) @@ -757,7 +757,7 @@ def _removeConfigurationResourceVariableByFilter(self, address_model): for varlist in self.getglobalVars(): variables = varlist.getvariable() - for i in xrange(len(variables)-1, -1, -1): + for i in range(len(variables)-1, -1, -1): var_address = variables[i].getaddress() if var_address is not None: result = address_model.match(var_address) @@ -971,7 +971,7 @@ # Array derived directly from an elementary type else: basetype_name = base_type_name - return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name) + return "ARRAY [%s] OF %s" % (",".join(["%s..%s" % (x.getlower(), x.getupper()) for x in vartype_content.getdimension()]), basetype_name) # Variable type is an elementary type return vartype_content_name setattr(cls, "gettypeAsText", gettypeAsText) @@ -1380,7 +1380,7 @@ vars = [] if self.interface is not None: reverse_types = {} - for name, value in VarTypes.items(): + for name, value in list(VarTypes.items()): reverse_types[value] = name for varlist in self.interface.getcontent(): vars.append((reverse_types[varlist.getLocalTag()], varlist)) diff -r fda6c1a37662 -r f62625418bff plcopen/structures.py --- a/plcopen/structures.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/structures.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import re from collections import OrderedDict from functools import reduce @@ -53,7 +53,7 @@ """ Returns list of all types that correspont to the ANY* meta type """ - return [typename for typename, _parenttype in TypeHierarchy.items() if not typename.startswith("ANY") and IsOfType(typename, type)] + return [typename for typename, _parenttype in list(TypeHierarchy.items()) if not typename.startswith("ANY") and IsOfType(typename, type)] DataTypeRange = dict(DataTypeRange_list) @@ -78,7 +78,7 @@ for libname, tc6fname in StdTC6Libs} StdBlckLst = [{"name": libname, "list": [GetBlockInfos(pous) for pous in lib.getpous()]} - for libname, lib in StdBlckLibs.iteritems()] + for libname, lib in StdBlckLibs.items()] # ------------------------------------------------------------------------------- # Test identifier @@ -148,7 +148,7 @@ len_of_not_predifined_variable = len([True for param_type in decl if param_type not in variables]) for param_type in decl: - if param_type in variables.keys(): + if param_type in list(variables.keys()): param_name = param_type param_type = variables[param_type] elif len_of_not_predifined_variable > 1: @@ -202,7 +202,7 @@ Function_decl = dict([(champ, val) for champ, val in zip(fonctions, fields[1:]) if champ]) baseinputnumber = int(Function_decl.get("baseinputnumber", 1)) Function_decl["baseinputnumber"] = baseinputnumber - for param, value in Function_decl.iteritems(): + for param, value in Function_decl.items(): if param in translate: Function_decl[param] = translate[param](value) Function_decl["type"] = "function" @@ -250,13 +250,13 @@ store = True for (InTypes, OutTypes) in ANY_TO_ANY_FILTERS.get(filter_name, []): outs = reduce(lambda a, b: a or b, - map(lambda testtype: IsOfType( + [IsOfType( Function_decl["outputs"][0][1], - testtype), OutTypes)) + testtype) for testtype in OutTypes]) inps = reduce(lambda a, b: a or b, - map(lambda testtype: IsOfType( + [IsOfType( Function_decl["inputs"][0][1], - testtype), InTypes)) + testtype) for testtype in InTypes]) if inps and outs and Function_decl["outputs"][0][1] != Function_decl["inputs"][0][1]: store = True break @@ -308,7 +308,7 @@ TYPE_BLOCK_START_KEYWORDS = ["TYPE", "STRUCT"] TYPE_BLOCK_END_KEYWORDS = ["END_TYPE", "END_STRUCT"] TYPE_KEYWORDS = ["ARRAY", "OF", "T", "D", "TIME_OF_DAY", "DATE_AND_TIME"] + TYPE_BLOCK_START_KEYWORDS + TYPE_BLOCK_END_KEYWORDS -TYPE_KEYWORDS.extend([keyword for keyword in TypeHierarchy.keys() if keyword not in TYPE_KEYWORDS]) +TYPE_KEYWORDS.extend([keyword for keyword in list(TypeHierarchy.keys()) if keyword not in TYPE_KEYWORDS]) # Keywords for Variable Declaration diff -r fda6c1a37662 -r f62625418bff plcopen/types_enums.py --- a/plcopen/types_enums.py Mon Mar 27 10:19:14 2023 +0200 +++ b/plcopen/types_enums.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,7 +3,7 @@ # This file is part of Beremiz # See COPYING file for copyrights details. -from __future__ import absolute_import + from util.TranslationCatalogs import NoTranslate _ = NoTranslate @@ -16,7 +16,7 @@ ITEM_CONFIGURATION, ITEM_RESOURCE, ITEM_DATATYPE -] = range(8) +] = list(range(8)) ITEMS_UNEDITABLE = [ ITEM_DATATYPES, @@ -28,7 +28,7 @@ ITEM_CONFIGURATIONS, ITEM_RESOURCES, ITEM_PROPERTIES -] = range(8, 17) +] = list(range(8, 17)) ITEMS_VARIABLE = [ ITEM_VAR_LOCAL, @@ -38,7 +38,7 @@ ITEM_VAR_INPUT, ITEM_VAR_OUTPUT, ITEM_VAR_INOUT -] = range(17, 24) +] = list(range(17, 24)) ITEM_CONFNODE = 25 @@ -70,7 +70,7 @@ LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, - LOCATION_VAR_MEMORY] = range(6) + LOCATION_VAR_MEMORY] = list(range(6)) UNEDITABLE_NAMES = [_("User-defined POUs"), _("Functions"), _("Function Blocks"), _("Programs"), _("Data Types"), _("Transitions"), _("Actions"), diff -r fda6c1a37662 -r f62625418bff py_ext/PythonEditor.py --- a/py_ext/PythonEditor.py Mon Mar 27 10:19:14 2023 +0200 +++ b/py_ext/PythonEditor.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import keyword import wx.stc as stc diff -r fda6c1a37662 -r f62625418bff py_ext/PythonFileCTNMixin.py --- a/py_ext/PythonFileCTNMixin.py Mon Mar 27 10:19:14 2023 +0200 +++ b/py_ext/PythonFileCTNMixin.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import re from builtins import str as text @@ -134,8 +134,7 @@ return repr(content) if content else None pyextname = self.CTNName() - varinfos = map( - lambda variable: { + varinfos = [{ "name": variable.getname(), "desc": repr(variable.getdesc()), "onchangecode": _onchangecode(variable), @@ -146,8 +145,7 @@ "IECtype": self.GetCTRoot().GetBaseType(variable.gettype()), "initial": repr(variable.getinitial()), "pyextname": pyextname - }, - self.CodeFile.variables.variable) + } for variable in self.CodeFile.variables.variable] onchange_var_count = len([None for varinfo in varinfos if varinfo["onchange"]]) diff -r fda6c1a37662 -r f62625418bff py_ext/__init__.py --- a/py_ext/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/py_ext/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from .py_ext import * from .PythonEditor import PythonEditor from .PythonFileCTNMixin import PythonFileCTNMixin diff -r fda6c1a37662 -r f62625418bff py_ext/py_ext.py --- a/py_ext/py_ext.py Mon Mar 27 10:19:14 2023 +0200 +++ b/py_ext/py_ext.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os from POULibrary import POULibrary from py_ext.PythonFileCTNMixin import PythonFileCTNMixin diff -r fda6c1a37662 -r f62625418bff runtime/NevowServer.py --- a/runtime/NevowServer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/NevowServer.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -from __future__ import absolute_import -from __future__ import print_function + + import os import collections import shutil @@ -78,7 +78,7 @@ class MainPage(athena.LiveElement): - jsClass = u"WebInterface.PLC" + jsClass = "WebInterface.PLC" docFactory = loaders.stan( tags.invisible[ tags.div(render=tags.directive('liveElement'))[ @@ -356,7 +356,7 @@ def __init__(self, plcState=False, *a, **kw): super(WebInterface, self).__init__(*a, **kw) - self.jsModules.mapping[u'WebInterface'] = paths.AbsNeighbourFile( + self.jsModules.mapping['WebInterface'] = paths.AbsNeighbourFile( __file__, 'webinterface.js') self.plcState = plcState self.MainPage.setPLCState(plcState) @@ -365,7 +365,7 @@ return self.MainPage.getHMI() def LoadHMI(self, hmi, jsmodules): - for name, path in jsmodules.iteritems(): + for name, path in jsmodules.items(): self.jsModules.mapping[name] = os.path.join(WorkingDir, path) self.MainPage.setPLCStartedHMI(hmi) diff -r fda6c1a37662 -r f62625418bff runtime/PLCObject.py --- a/runtime/PLCObject.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/PLCObject.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,7 +22,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -from __future__ import absolute_import + from threading import Thread, Lock, Event, Condition import ctypes import os @@ -393,7 +393,7 @@ for filename in filenames: name, ext = os.path.splitext(filename) if name.upper().startswith("RUNTIME") and ext.upper() == ".PY": - execfile(os.path.join(self.workingdir, filename), self.python_runtime_vars) + exec(compile(open(os.path.join(self.workingdir, filename), "rb").read(), os.path.join(self.workingdir, filename), 'exec'), self.python_runtime_vars) for methodname in MethodNames: method = self.python_runtime_vars.get("_%s_%s" % (name, methodname), None) if method is not None: @@ -561,7 +561,7 @@ @RunInMain def _GetPLCstatus(self): - return self.PLCStatus, map(self.GetLogCount, xrange(LogLevelsCount)) + return self.PLCStatus, list(map(self.GetLogCount, range(LogLevelsCount))) @RunInMain def GetPLCID(self): @@ -598,7 +598,7 @@ @RunInMain def PurgeBlobs(self): - for fd, _path, _md5sum in self.blobs.values(): + for fd, _path, _md5sum in list(self.blobs.values()): os.close(fd) self._init_blobs() diff -r fda6c1a37662 -r f62625418bff runtime/PyroServer.py --- a/runtime/PyroServer.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/PyroServer.py Fri Oct 28 12:39:15 2022 +0800 @@ -9,8 +9,8 @@ # See COPYING file for copyrights details. -from __future__ import absolute_import -from __future__ import print_function + + import sys import os diff -r fda6c1a37662 -r f62625418bff runtime/ServicePublisher.py --- a/runtime/ServicePublisher.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/ServicePublisher.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,8 +22,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -from __future__ import absolute_import -from __future__ import print_function + + import socket import threading import zeroconf diff -r fda6c1a37662 -r f62625418bff runtime/Stunnel.py --- a/runtime/Stunnel.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/Stunnel.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,5 +1,5 @@ -from __future__ import absolute_import -from __future__ import print_function + + import os from binascii import b2a_hqx try: diff -r fda6c1a37662 -r f62625418bff runtime/WampClient.py --- a/runtime/WampClient.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/WampClient.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,8 +22,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -from __future__ import absolute_import -from __future__ import print_function + + import time import json import os @@ -110,12 +110,12 @@ def onConnect(self): if "secret" in self.config.extra: user = self.config.extra["ID"] - self.join(u"Automation", [u"wampcra"], user) + self.join("Automation", ["wampcra"], user) else: - self.join(u"Automation") + self.join("Automation") def onChallenge(self, challenge): - if challenge.method == u"wampcra": + if challenge.method == "wampcra": if "secret" in self.config.extra: secret = self.config.extra["secret"].encode('utf8') signature = auth.compute_wcs( @@ -139,7 +139,7 @@ registerOptions = None print(_("TypeError register option: {}".format(e))) - self.register(GetCallee(name), u'.'.join((ID, name)), registerOptions) + self.register(GetCallee(name), '.'.join((ID, name)), registerOptions) for name in SubscribedEvents: self.subscribe(GetCallee(name), text(name)) @@ -185,7 +185,7 @@ _transportFactory = None def setClientFactoryOptions(self, options): - for key, value in options.items(): + for key, value in list(options.items()): if key in ["maxDelay", "initialDelay", "maxRetries", "factor", "jitter"]: setattr(self, key, value) @@ -214,7 +214,7 @@ _("WAMP configuration error:")) def UpdateWithDefault(d1, d2): - for k, v in d2.items(): + for k, v in list(d2.items()): d1.setdefault(k, v) def GetConfiguration(): diff -r fda6c1a37662 -r f62625418bff runtime/Worker.py --- a/runtime/Worker.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/Worker.py Fri Oct 28 12:39:15 2022 +0800 @@ -7,7 +7,7 @@ # # See COPYING.Runtime file for copyrights details. -from __future__ import absolute_import + import sys from threading import Lock, Condition, Thread diff -r fda6c1a37662 -r f62625418bff runtime/__init__.py --- a/runtime/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from __future__ import absolute_import -from __future__ import print_function + + import traceback import sys diff -r fda6c1a37662 -r f62625418bff runtime/monotonic_time.py --- a/runtime/monotonic_time.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/monotonic_time.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ SOFTWARE. ''' -from __future__ import print_function -from __future__ import unicode_literals + + __author__ = 'Gavin Beatty ' __version__ = '2.1.0.dev0' diff -r fda6c1a37662 -r f62625418bff runtime/spawn_subprocess.py --- a/runtime/spawn_subprocess.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/spawn_subprocess.py Fri Oct 28 12:39:15 2022 +0800 @@ -3,8 +3,8 @@ # subset of subprocess built-in module using posix_spawn rather than fork. -from __future__ import print_function -from __future__ import absolute_import + + import os import signal import shlex diff -r fda6c1a37662 -r f62625418bff runtime/typemapping.py --- a/runtime/typemapping.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/typemapping.py Fri Oct 28 12:39:15 2022 +0800 @@ -4,7 +4,7 @@ # See COPYING.Runtime file for copyrights details. # -from __future__ import absolute_import + import ctypes from ctypes import * from datetime import timedelta as td @@ -74,7 +74,7 @@ TypeTranslator = SameEndianessTypeTranslator # Construct debugger natively supported types -DebugTypesSize = dict([(key, sizeof(t)) for key, (t, p, u) in SameEndianessTypeTranslator.iteritems() if t is not None]) +DebugTypesSize = dict([(key, sizeof(t)) for key, (t, p, u) in SameEndianessTypeTranslator.items() if t is not None]) def UnpackDebugBuffer(buff, indexes): diff -r fda6c1a37662 -r f62625418bff runtime/xenomai.py --- a/runtime/xenomai.py Mon Mar 27 10:19:14 2023 +0200 +++ b/runtime/xenomai.py Fri Oct 28 12:39:15 2022 +0800 @@ -4,7 +4,7 @@ # See COPYING.Runtime file for copyrights details. # -from __future__ import absolute_import + from ctypes import CDLL, RTLD_GLOBAL, pointer, c_int, POINTER, c_char, create_string_buffer diff -r fda6c1a37662 -r f62625418bff svghmi/__init__.py --- a/svghmi/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -6,5 +6,5 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + from svghmi.svghmi import * diff -r fda6c1a37662 -r f62625418bff svghmi/hmi_tree.py --- a/svghmi/hmi_tree.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/hmi_tree.py Fri Oct 28 12:39:15 2022 +0800 @@ -6,8 +6,8 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import -from itertools import izip, imap + + from pprint import pformat import weakref import hashlib @@ -22,7 +22,7 @@ "HMI_REAL":{} } -HMI_TYPES = HMI_TYPES_DESC.keys() +HMI_TYPES = list(HMI_TYPES_DESC.keys()) class HMITreeNode(object): def __init__(self, path, name, nodetype, iectype = None, vartype = None, cpath = None, hmiclass = None): @@ -56,7 +56,7 @@ for child in self.children: if child.path is not None: in_common = 0 - for child_path_item, node_path_item in izip(child.path, node.path): + for child_path_item, node_path_item in zip(child.path, node.path): if child_path_item == node_path_item: in_common +=1 else: @@ -105,7 +105,7 @@ res = etree.Element(self.nodetype, **attribs) if hasattr(self, "children"): - for child_etree in imap(lambda c:c.etree(), self.children): + for child_etree in map(lambda c:c.etree(), self.children): res.append(child_etree) return res @@ -150,7 +150,7 @@ s = hashlib.new('md5') self._hash(s) # limit size to HMI_HASH_SIZE as in svghmi.c - return map(ord,s.digest())[:8] + return list(map(ord,s.digest()))[:8] def _hash(self, s): s.update(str((self.name,self.nodetype))) diff -r fda6c1a37662 -r f62625418bff svghmi/i18n.py --- a/svghmi/i18n.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/i18n.py Fri Oct 28 12:39:15 2022 +0800 @@ -6,7 +6,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + from lxml import etree import os import sys @@ -40,7 +40,7 @@ poedit_path = None else: - if os.environ.has_key("SNAP"): + if "SNAP" in os.environ: MessageBoxOnce("Launching POEdit with xdg-open", "Confined app can't launch POEdit directly.\n"+ "Instead, PO/POT file is passed to xdg-open.\n"+ @@ -131,7 +131,7 @@ langs.append((langname,langcode)) broken = False - for msgid, msg in translation.iteritems(): + for msgid, msg in translation.items(): broken = True errcallback(_('{}: Unused translation "{}":"{}"\n').format(langcode,msgid,msg)) if broken or langcode in broken_lang: @@ -246,13 +246,13 @@ def write(self, fp): timestamp = time.strftime('%Y-%m-%d %H:%M+%Z') - print >> fp, pot_header % {'time': timestamp} + print(pot_header % {'time': timestamp}, file=fp) reverse = {} - for k, v in self.__messages.items(): + for k, v in list(self.__messages.items()): keys = list(v) keys.sort() reverse.setdefault(tuple(keys), []).append((k, v)) - rkeys = reverse.keys() + rkeys = list(reverse.keys()) rkeys.sort() for rkey in rkeys: rentries = reverse[rkey] @@ -267,12 +267,12 @@ if len(locline) + len(s) <= 78: locline = locline + s else: - print >> fp, locline + print(locline, file=fp) locline = locpfx + s if len(locline) > len(locpfx): - print >> fp, locline - print >> fp, 'msgid', normalize(k) - print >> fp, 'msgstr ""\n' + print(locline, file=fp) + print('msgid', normalize(k), file=fp) + print('msgstr ""\n', file=fp) class POReader: @@ -321,8 +321,8 @@ # This is a message with plural forms elif l.startswith('msgid_plural'): if section != ID: - print >> sys.stderr, 'msgid_plural not preceded by msgid on %s:%d' %\ - (infile, lno) + print('msgid_plural not preceded by msgid on %s:%d' %\ + (infile, lno), file=sys.stderr) sys.exit(1) l = l[12:] msgid += '\0' # separator of singular and plural @@ -332,16 +332,16 @@ section = STR if l.startswith('msgstr['): if not is_plural: - print >> sys.stderr, 'plural without msgid_plural on %s:%d' %\ - (infile, lno) + print('plural without msgid_plural on %s:%d' %\ + (infile, lno), file=sys.stderr) sys.exit(1) l = l.split(']', 1)[1] if msgstr: msgstr += '\0' # Separator of the various plural forms else: if is_plural: - print >> sys.stderr, 'indexed msgstr required for plural on %s:%d' %\ - (infile, lno) + print('indexed msgstr required for plural on %s:%d' %\ + (infile, lno), file=sys.stderr) sys.exit(1) l = l[6:] # Skip empty lines @@ -354,9 +354,9 @@ elif section == STR: msgstr += l else: - print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \ - 'before:' - print >> sys.stderr, l + print('Syntax error on %s:%d' % (infile, lno), \ + 'before:', file=sys.stderr) + print(l, file=sys.stderr) sys.exit(1) # Add last entry if section == STR: diff -r fda6c1a37662 -r f62625418bff svghmi/svghmi.py --- a/svghmi/svghmi.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/svghmi.py Fri Oct 28 12:39:15 2022 +0800 @@ -6,7 +6,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + import os import sys import shutil @@ -307,7 +307,7 @@ default_cmds={ "launch":"cmd.exe /c 'start msedge {url}'", "watchdog":"cmd.exe /k 'echo watchdog for {url} !'"} -elif os.environ.has_key("SNAP"): +elif "SNAP" in os.environ: default_cmds={ "launch":"xdg-open {url}", "watchdog":"echo Watchdog for {name} !"} @@ -443,7 +443,7 @@ for line in result.split(): strippedline = line.strip() attrs = dict( - zip(InkscapeGeomColumns, line.strip().split(','))) + list(zip(InkscapeGeomColumns, line.strip().split(',')))) res.append(etree.Element("bbox", **attrs)) diff -r fda6c1a37662 -r f62625418bff svghmi/svghmi_server.py --- a/svghmi/svghmi_server.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/svghmi_server.py Fri Oct 28 12:39:15 2022 +0800 @@ -5,7 +5,7 @@ # Copyright (C) 2019: Edouard TISSERANT # See COPYING file for copyrights details. -from __future__ import absolute_import + import errno from threading import RLock, Timer import os, time @@ -273,7 +273,7 @@ break def AddPathToSVGHMIServers(path, factory, *args, **kwargs): - for k,v in svghmi_servers.iteritems(): + for k,v in svghmi_servers.items(): svghmi_root, svghmi_listener, path_list = v svghmi_root.putChild(path, factory(*args, **kwargs)) diff -r fda6c1a37662 -r f62625418bff svghmi/ui.py --- a/svghmi/ui.py Mon Mar 27 10:19:14 2023 +0200 +++ b/svghmi/ui.py Fri Oct 28 12:39:15 2022 +0800 @@ -6,7 +6,7 @@ # # See COPYING file for copyrights details. -from __future__ import absolute_import + import os import hashlib import weakref @@ -14,7 +14,7 @@ import tempfile from threading import Thread, Lock from functools import reduce -from itertools import izip + from operator import or_ from tempfile import NamedTemporaryFile @@ -34,7 +34,7 @@ # When running as a confined Snap, /tmp isn't accessible from the outside # and Widget DnD to Inkscape can't work, since it can't find generated svg # This forces tmp directory in $SNAP_USER_DATA, accessible from other apps -if os.environ.has_key("SNAP"): +if "SNAP" in os.environ: NamedTemporaryFile_orig = NamedTemporaryFile tmpdir = os.path.join(os.environ["SNAP_USER_DATA"], ".tmp") if not os.path.exists(tmpdir): @@ -249,9 +249,7 @@ accepts = self.argdesc.get("accepts").split(',') self.setValidity( reduce(or_, - map(lambda typename: - models[typename].match(txt) is not None, - accepts), + [models[typename].match(txt) is not None for typename in accepts], False) if accepts and txt else None) self.ParentObj.RegenSVGLater() @@ -283,9 +281,7 @@ event.Skip() def KeepDoubleNewLines(txt): - return "\n\n".join(map( - lambda s:re.sub(r'\s+',' ',s), - txt.split("\n\n"))) + return "\n\n".join([re.sub(r'\s+',' ',s) for s in txt.split("\n\n")]) _conf_key = "SVGHMIWidgetLib" _preview_height = 200 @@ -653,7 +649,7 @@ # TODO: check that only last arg has multiple ordinality args += [args[-1]]*(len(prefillargs)-len(args)) self.args_box.Show(len(args)!=0) - for arg, prefillarg in izip(args,prefillargs): + for arg, prefillarg in zip(args,prefillargs): self.AddArgToSignature(arg, prefillarg) # TODO support predefined path count (as for XYGraph) diff -r fda6c1a37662 -r f62625418bff targets/Generic/__init__.py --- a/targets/Generic/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/Generic/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from ..toolchain_makefile import toolchain_makefile diff -r fda6c1a37662 -r f62625418bff targets/Linux/__init__.py --- a/targets/Linux/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/Linux/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from ..toolchain_gcc import toolchain_gcc diff -r fda6c1a37662 -r f62625418bff targets/Win32/__init__.py --- a/targets/Win32/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/Win32/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from ..toolchain_gcc import toolchain_gcc diff -r fda6c1a37662 -r f62625418bff targets/Xenomai/__init__.py --- a/targets/Xenomai/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/Xenomai/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from ..toolchain_gcc import toolchain_gcc diff -r fda6c1a37662 -r f62625418bff targets/__init__.py --- a/targets/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -35,7 +35,7 @@ """ -from __future__ import absolute_import + from os import listdir, path import util.paths as paths @@ -69,12 +69,12 @@ targetchoices = "" # Get all xsd toolchains - for toolchainname, xsdfilename in toolchains.iteritems(): + for toolchainname, xsdfilename in toolchains.items(): if path.isfile(xsdfilename): DictXSD_toolchain["toolchain_"+toolchainname] = open(xsdfilename).read() # Get all xsd targets - for target_name, nfo in targets.iteritems(): + for target_name, nfo in targets.items(): xsd_string = open(nfo["xsd"]).read() targetchoices += xsd_string % dict(DictXSD_toolchain, target_name=target_name) diff -r fda6c1a37662 -r f62625418bff targets/toolchain_gcc.py --- a/targets/toolchain_gcc.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/toolchain_gcc.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import re import operator @@ -52,9 +52,9 @@ Returns list of builder specific CFLAGS """ cflags = [self.CTRInstance.GetTarget().getcontent().getCFLAGS()] - if os.environ.has_key("CFLAGS"): + if "CFLAGS" in os.environ: cflags.append(os.environ["CFLAGS"]) - if os.environ.has_key("SYSROOT"): + if "SYSROOT" in os.environ: cflags.append("--sysroot="+os.environ["SYSROOT"]) return cflags @@ -64,9 +64,9 @@ """ ldflags = self.CTRInstance.LDFLAGS + \ [self.CTRInstance.GetTarget().getcontent().getLDFLAGS()] - if os.environ.has_key("LDFLAGS"): - ldflags.append(os.environ["LDFLAGS"]) - if os.environ.has_key("SYSROOT"): + if "LDLAGS" in os.environ: + ldflags.append(os.environ["LDLAGS"]) + if "SYSROOT" in os.environ: ldflags.append("--sysroot="+os.environ["SYSROOT"]) return ldflags @@ -128,7 +128,7 @@ self.append_cfile_deps(src, deps) # recurse through deps # TODO detect cicular deps. - return reduce(operator.concat, map(self.concat_deps, deps), src) + return reduce(operator.concat, list(map(self.concat_deps, deps)), src) def check_and_update_hash_and_deps(self, bn): # Get latest computed hash and deps @@ -148,7 +148,7 @@ self.srcmd5[bn] = (newhash, deps) # recurse through deps # TODO detect cicular deps. - return reduce(operator.and_, map(self.check_and_update_hash_and_deps, deps), match) + return reduce(operator.and_, list(map(self.check_and_update_hash_and_deps, deps)), match) def calc_source_md5(self): wholesrcdata = "" diff -r fda6c1a37662 -r f62625418bff targets/toolchain_makefile.py --- a/targets/toolchain_makefile.py Mon Mar 27 10:19:14 2023 +0200 +++ b/targets/toolchain_makefile.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import re import operator @@ -83,7 +83,7 @@ deps.append(depfn) # recurse through deps # TODO detect cicular deps. - return reduce(operator.concat, map(self.concat_deps, deps), src) + return reduce(operator.concat, list(map(self.concat_deps, deps)), src) def build(self): srcfiles = [] diff -r fda6c1a37662 -r f62625418bff tests/ide_tests/conftest.py --- a/tests/ide_tests/conftest.py Mon Mar 27 10:19:14 2023 +0200 +++ b/tests/ide_tests/conftest.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import sys diff -r fda6c1a37662 -r f62625418bff tests/ide_tests/load_and_build_tests.pytest/test_application.py --- a/tests/ide_tests/load_and_build_tests.pytest/test_application.py Mon Mar 27 10:19:14 2023 +0200 +++ b/tests/ide_tests/load_and_build_tests.pytest/test_application.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import sys import unittest diff -r fda6c1a37662 -r f62625418bff tests/ide_tests/wx_widgets.pytest/test_CustomIntCtrl.py --- a/tests/ide_tests/wx_widgets.pytest/test_CustomIntCtrl.py Mon Mar 27 10:19:14 2023 +0200 +++ b/tests/ide_tests/wx_widgets.pytest/test_CustomIntCtrl.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import division + + import unittest import time diff -r fda6c1a37662 -r f62625418bff util/BitmapLibrary.py --- a/util/BitmapLibrary.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/BitmapLibrary.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import wx diff -r fda6c1a37662 -r f62625418bff util/ExceptionHandler.py --- a/util/ExceptionHandler.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/ExceptionHandler.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import sys import time @@ -93,7 +93,7 @@ def format_namespace(d, indent=' '): - return '\n'.join(['%s%s: %s' % (indent, k, repr(v)[:10000]) for k, v in d.iteritems()]) + return '\n'.join(['%s%s: %s' % (indent, k, repr(v)[:10000]) for k, v in d.items()]) ignored_exceptions = [] # a problem with a line in a module is only reported once per session @@ -129,7 +129,7 @@ if not os.path.exists(path): os.mkdir(path) output = open(bug_report_path, 'w') - lst = info.keys() + lst = list(info.keys()) lst.sort() for a in lst: line = a + ":\n" + str(info[a]) + "\n\n" diff -r fda6c1a37662 -r f62625418bff util/MiniTextControler.py --- a/util/MiniTextControler.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/MiniTextControler.py Fri Oct 28 12:39:15 2022 +0800 @@ -27,7 +27,7 @@ """ -from __future__ import absolute_import + import os diff -r fda6c1a37662 -r f62625418bff util/ProcessLogger.py --- a/util/ProcessLogger.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/ProcessLogger.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import sys import subprocess @@ -100,8 +100,7 @@ if encoding is None: encoding = fsencoding - self.Command = [self.Command[0].encode(fsencoding)]+map( - lambda x: x.encode(encoding), self.Command[1:]) + self.Command = [self.Command[0].encode(fsencoding)]+[x.encode(encoding) for x in self.Command[1:]] self.finish_callback = finish_callback self.no_stdout = no_stdout diff -r fda6c1a37662 -r f62625418bff util/TranslationCatalogs.py --- a/util/TranslationCatalogs.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/TranslationCatalogs.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os from six.moves import builtins import wx diff -r fda6c1a37662 -r f62625418bff util/misc.py --- a/util/misc.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/misc.py Fri Oct 28 12:39:15 2022 +0800 @@ -27,7 +27,7 @@ """ -from __future__ import absolute_import + import os,sys import random from functools import reduce diff -r fda6c1a37662 -r f62625418bff util/paths.py --- a/util/paths.py Mon Mar 27 10:19:14 2023 +0200 +++ b/util/paths.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import sys from builtins import str as text diff -r fda6c1a37662 -r f62625418bff version.py --- a/version.py Mon Mar 27 10:19:14 2023 +0200 +++ b/version.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,9 +23,9 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function + + + import os diff -r fda6c1a37662 -r f62625418bff wxglade_hmi/__init__.py --- a/wxglade_hmi/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/wxglade_hmi/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -22,5 +22,5 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + from wxglade_hmi.wxglade_hmi import * diff -r fda6c1a37662 -r f62625418bff wxglade_hmi/wxglade_hmi.py --- a/wxglade_hmi/wxglade_hmi.py Mon Mar 27 10:19:14 2023 +0200 +++ b/wxglade_hmi/wxglade_hmi.py Fri Oct 28 12:39:15 2022 +0800 @@ -24,7 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import + import os import sys import shutil diff -r fda6c1a37662 -r f62625418bff xmlclass/__init__.py --- a/xmlclass/__init__.py Mon Mar 27 10:19:14 2023 +0200 +++ b/xmlclass/__init__.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,7 +23,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Package initialisation -from __future__ import absolute_import + from .xmlclass import (ClassFactory, GenerateParser, DefaultElementClass, diff -r fda6c1a37662 -r f62625418bff xmlclass/xmlclass.py --- a/xmlclass/xmlclass.py Mon Mar 27 10:19:14 2023 +0200 +++ b/xmlclass/xmlclass.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import re import datetime @@ -107,7 +107,7 @@ [ SYNTAXELEMENT, SYNTAXATTRIBUTE, SIMPLETYPE, COMPLEXTYPE, COMPILEDCOMPLEXTYPE, ATTRIBUTESGROUP, ELEMENTSGROUP, ATTRIBUTE, ELEMENT, CHOICE, ANY, TAG, CONSTRAINT, -] = range(13) +] = list(range(13)) def NotSupportedYet(type): @@ -128,7 +128,7 @@ """ first = indent * 2 second = first + len(balise) + 1 - return u'\t'.expandtabs(first), u'\t'.expandtabs(second) + return '\t'.expandtabs(first), '\t'.expandtabs(second) def GetAttributeValue(attr, extract=True): @@ -144,9 +144,9 @@ return text(unescape(attr.childNodes[0].data)) else: # content is a CDATA - txt = u'' + txt = '' for node in attr.childNodes: - if not (node.nodeName == "#text" and node.data.strip() == u''): + if not (node.nodeName == "#text" and node.data.strip() == ''): txt += text(unescape(node.data)) return text @@ -634,7 +634,7 @@ if infos["type"] != ANY: DefaultElementClass.__setattr__(value, "tag", element_name) return value - return [initial_value() for dummy in xrange(infos["minOccurs"])] + return [initial_value() for dummy in range(infos["minOccurs"])] else: return [] @@ -691,13 +691,13 @@ choices_dict[choice_name] = infos prefix = ("%s:" % factory.TargetNamespace if factory.TargetNamespace is not None else "") - choices_xpath = "|".join(map(lambda x: prefix + x, choices_dict.keys())) + choices_xpath = "|".join([prefix + x for x in list(choices_dict.keys())]) def GetContentInitial(): content_name, infos = choices[0] if content_name == "sequence": content_value = [] - for dummy in xrange(infos["minOccurs"]): + for dummy in range(infos["minOccurs"]): for element_infos in infos["elements"]: content_value.extend(GetElementInitialValue(factory, element_infos)) else: @@ -801,7 +801,7 @@ if namespace is None: if name in self.Namespaces[self.SchemaNamespace]: return self.Namespaces[self.SchemaNamespace][name] - for space, elements in self.Namespaces.iteritems(): + for space, elements in self.Namespaces.items(): if space != self.SchemaNamespace and name in elements: return elements[name] parts = name.split("_", 1) @@ -843,7 +843,7 @@ if namespace is None: if name in self.Namespaces[self.SchemaNamespace]: return name, None - for space, elements in self.Namespaces.items(): + for space, elements in list(self.Namespaces.items()): if space != self.SchemaNamespace and name in elements: return name, None parts = name.split("_", 1) @@ -883,7 +883,7 @@ def ExtractNodeAttrs(self, element_name, node, valid_attrs): attrs = {} - for qualified_name, attr in node._attrs.items(): + for qualified_name, attr in list(node._attrs.items()): namespace, name = DecomposeQualifiedName(qualified_name) if name in valid_attrs: infos = self.GetQualifiedNameInfos(name, namespace) @@ -1016,14 +1016,14 @@ def GetEquivalentParents(self, parent): return reduce(lambda x, y: x + y, [[p] + self.GetEquivalentParents(p) - for p in self.EquivalentClassesParent.get(parent, {}).keys()], []) + for p in list(self.EquivalentClassesParent.get(parent, {}).keys())], []) def CreateClasses(self): """ Method that generates the classes """ self.ParseSchema() - for name, infos in self.Namespaces[self.TargetNamespace].items(): + for name, infos in list(self.Namespaces[self.TargetNamespace].items()): if infos["type"] == ELEMENT: if not isinstance(infos["elmt_type"], string_types) and \ infos["elmt_type"]["type"] == COMPLEXTYPE: @@ -1055,9 +1055,9 @@ not isinstance(result, string_types): self.Namespaces[self.TargetNamespace][result["name"]] = result - for name, parents in self.ComputedClassesLookUp.iteritems(): + for name, parents in self.ComputedClassesLookUp.items(): if isinstance(parents, dict): - computed_classes = parents.items() + computed_classes = list(parents.items()) elif parents[1] is not None: computed_classes = [(self.etreeNamespaceFormat % parents[1], parents[0])] else: @@ -1101,7 +1101,7 @@ if self.FileName is not None: classinfos["base"] = self.ComputedClasses[self.FileName].get(result["name"], None) if classinfos["base"] is None: - for filename, classes in self.ComputedClasses.iteritems(): + for filename, classes in self.ComputedClasses.items(): if filename != self.FileName: classinfos["base"] = classes.get(result["name"], None) if classinfos["base"] is not None: @@ -1197,12 +1197,12 @@ """ Method that print the classes generated """ - items = self.ComputedClasses.items() + items = list(self.ComputedClasses.items()) items.sort() if self.FileName is not None: for filename, classes in items: print("File '%s':" % filename) - class_items = classes.items() + class_items = list(classes.items()) class_items.sort() for classname, xmlclass in class_items: print("%s: %s" % (classname, str(xmlclass))) @@ -1211,7 +1211,7 @@ print("%s: %s" % (classname, str(xmlclass))) def PrintClassNames(self): - classnames = self.XMLClassDefinitions.keys() + classnames = list(self.XMLClassDefinitions.keys()) classnames.sort() for classname in classnames: print(classname) @@ -1319,9 +1319,7 @@ if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: values = self.findall(element_name) if element_infos["elmt_type"]["type"] == SIMPLETYPE: - return map(lambda value: - element_infos["elmt_type"]["extract"](value.text, extract=False), - values) + return [element_infos["elmt_type"]["extract"](value.text, extract=False) for value in values] return values else: value = self.find(element_name) @@ -1375,13 +1373,11 @@ self.remove(element) if value is not None: - element_idx = elements.keys().index(name) + element_idx = list(elements.keys()).index(name) if element_idx > 0: - previous_elements_xpath = "|".join(map( - lambda x: prefix + x + previous_elements_xpath = "|".join([prefix + x if x != "content" - else elements["content"]["elmt_type"]["choices_xpath"].path, - elements.keys()[:element_idx])) + else elements["content"]["elmt_type"]["choices_xpath"].path for x in list(elements.keys())[:element_idx]]) insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP)) else: @@ -1487,7 +1483,7 @@ children.extend(self.getElementAttributes()) if "base" in classinfos: children.extend(classinfos["base"].getElementInfos(self, name, derived=True)["children"]) - for element_name, element in elements.items(): + for element_name, element in list(elements.items()): if element["minOccurs"] == 0: use = "optional" if element_name == "content" and element["type"] == CHOICE: @@ -1587,7 +1583,7 @@ if element["type"] != CHOICE: initial = GetElementInitialValue(factory, element) if initial is not None: - map(self.append, initial) + list(map(self.append, initial)) return initMethod @@ -1842,7 +1838,7 @@ if targetNamespace is not None: self.RootNSMAP = { name if targetNamespace != uri else None: uri - for name, uri in namespaces.iteritems()} + for name, uri in namespaces.items()} else: self.RootNSMAP = namespaces self.BaseClass = base_class @@ -1945,7 +1941,7 @@ ComputedClasses = factory.CreateClasses() if factory.FileName is not None: ComputedClasses = ComputedClasses[factory.FileName] - BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass] + BaseClass = [(name, XSDclass) for name, XSDclass in list(ComputedClasses.items()) if XSDclass.IsBaseClass] parser.initMembers( factory.NSMAP, diff -r fda6c1a37662 -r f62625418bff xmlclass/xsdschema.py --- a/xmlclass/xsdschema.py Mon Mar 27 10:19:14 2023 +0200 +++ b/xmlclass/xsdschema.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import re import datetime @@ -32,7 +32,7 @@ from xml.dom import minidom from future.builtins import round from six import string_types -from past.builtins import long +from past.builtins import int from xmlclass.xmlclass import * @@ -77,9 +77,9 @@ DEFAULT_FACETS = GenerateDictFacets(["pattern", "whiteSpace", "enumeration"]) -NUMBER_FACETS = GenerateDictFacets(DEFAULT_FACETS.keys() + ["maxInclusive", "maxExclusive", "minInclusive", "minExclusive"]) -DECIMAL_FACETS = GenerateDictFacets(NUMBER_FACETS.keys() + ["totalDigits", "fractionDigits"]) -STRING_FACETS = GenerateDictFacets(DEFAULT_FACETS.keys() + ["length", "minLength", "maxLength"]) +NUMBER_FACETS = GenerateDictFacets(list(DEFAULT_FACETS.keys()) + ["maxInclusive", "maxExclusive", "minInclusive", "minExclusive"]) +DECIMAL_FACETS = GenerateDictFacets(list(NUMBER_FACETS.keys()) + ["totalDigits", "fractionDigits"]) +STRING_FACETS = GenerateDictFacets(list(DEFAULT_FACETS.keys()) + ["length", "minLength", "maxLength"]) ALL_FACETS = ["pattern", "whiteSpace", "enumeration", "maxInclusive", "maxExclusive", "minInclusive", "minExclusive", "totalDigits", @@ -204,7 +204,7 @@ if len(facets) == 0: facets[facettype] = ([value], False) continue - elif facets.keys() == [facettype]: + elif list(facets.keys()) == [facettype]: facets[facettype][0].append(value) continue else: @@ -302,14 +302,14 @@ facets[facettype] = (value, facet.get("fixed", False)) # Report not redefined facet from base type to new created type - for facettype, facetvalue in basetypeinfos["facets"].items(): + for facettype, facetvalue in list(basetypeinfos["facets"].items()): if facettype not in facets: facets[facettype] = facetvalue # Generate extract value for new created type def ExtractSimpleTypeValue(attr, extract=True): value = basetypeinfos["extract"](attr, extract) - for facetname, (facetvalue, _facetfixed) in facets.items(): + for facetname, (facetvalue, _facetfixed) in list(facets.items()): if facetvalue is not None: if facetname == "enumeration" and value not in facetvalue: raise ValueError("\"%s\" not in enumerated values" % value) @@ -328,7 +328,7 @@ elif facetname == "maxExclusive" and value >= facetvalue: raise ValueError("value must be lesser than %s" % str(facetvalue)) elif facetname == "pattern": - model = re.compile("(?:%s)?$" % "|".join(map(lambda x: "(?:%s)" % x, facetvalue))) + model = re.compile("(?:%s)?$" % "|".join(["(?:%s)" % x for x in facetvalue])) result = model.match(value) if result is None: if len(facetvalue) > 1: @@ -343,7 +343,7 @@ return value def CheckSimpleTypeValue(value): - for facetname, (facetvalue, _facetfixed) in facets.items(): + for facetname, (facetvalue, _facetfixed) in list(facets.items()): if facetvalue is not None: if facetname == "enumeration" and value not in facetvalue: return False @@ -362,7 +362,7 @@ elif facetname == "maxExclusive" and value >= facetvalue: return False elif facetname == "pattern": - model = re.compile("(?:%s)?$" % "|".join(map(lambda x: "(?:%s)" % x, facetvalue))) + model = re.compile("(?:%s)?$" % "|".join(["(?:%s)" % x for x in facetvalue])) result = model.match(value) if result is None: if len(facetvalue) > 1: @@ -372,7 +372,7 @@ return True def SimpleTypeInitialValue(): - for facetname, (facetvalue, _facetfixed) in facets.items(): + for facetname, (facetvalue, _facetfixed) in list(facets.items()): if facetvalue is not None: if facetname == "enumeration": return facetvalue[0] @@ -515,7 +515,7 @@ if base is not None: basetypeinfos = factory.FindSchemaElement(base) if not isinstance(basetypeinfos, string_types) and basetypeinfos["type"] == COMPLEXTYPE: - attrnames = dict(map(lambda x: (x["name"], True), basetypeinfos["attributes"])) + attrnames = dict([(x["name"], True) for x in basetypeinfos["attributes"]]) for element in elements: if element["type"] == ATTRIBUTE: @@ -996,7 +996,7 @@ elif isinstance(schema, dict): if not isinstance(reference, dict) or len(schema) != len(reference): return False - for name, value in schema.items(): + for name, value in list(schema.items()): ref_value = reference.get(name, None) if ref_value is None and value is not None: return False @@ -1061,7 +1061,7 @@ if child.nodeType == self.Document.ELEMENT_NODE: schema = child break - for qualified_name, attr in schema._attrs.items(): + for qualified_name, attr in list(schema._attrs.items()): namespace, name = DecomposeQualifiedName(qualified_name) if namespace == "xmlns": value = GetAttributeValue(attr) @@ -2244,7 +2244,7 @@ "facets": STRING_FACETS, "generate": GenerateSimpleTypeXMLText(str), "initial": lambda: 0, - "check": lambda x: isinstance(x, (int, long)) + "check": lambda x: isinstance(x, int) }, "hexBinary": { @@ -2254,7 +2254,7 @@ "facets": STRING_FACETS, "generate": GenerateSimpleTypeXMLText(lambda x: ("%."+str(int(round(len("%X" % x)/2.)*2))+"X") % x), "initial": lambda: 0, - "check": lambda x: isinstance(x, (int, long)) + "check": lambda x: isinstance(x, int) }, "integer": {