Ticket #46351: patch-DSV-DSV.py.diff

File patch-DSV-DSV.py.diff, 20.8 KB (added by mojca (Mojca Miklavec), 9 years ago)

preliminary attempt to make py-dsv work with wxPython 3.0

  • DSV/DSV.py

    preliminary attempt to make py-dsv work with wxPython 3.0
    
    old new import os 
    134134os.putenv('LANG', 'C')
    135135
    136136try:
    137     from wxPython import wx, grid
     137    from wx import wx, grid
    138138except ImportError:
    139139    wx = None
    140140
    def exportDSV(input, delimiter = ',', textQualifier = '"', quoteall = 0, newline 
    625625
    626626if wx is not None:
    627627    # ------------------------------------------------------------------------------
    628     class ImportWizardPanel_Delimiters(wx.wxPanel):
     628    class ImportWizardPanel_Delimiters(wx.Panel):
    629629        """
    630630        CLASS(SUPERCLASS):
    631           ImportWizardPanel_Delimiters(wx.wxPanel)
     631          ImportWizardPanel_Delimiters(wx.Panel)
    632632        DESCRIPTION:
    633           A wx.wxPanel that provides a basic interface for validating and changing the
     633          A wx.Panel that provides a basic interface for validating and changing the
    634634          parameters for importing a delimited text file. Similar to MS Excel's
    635635          CSV import wizard. Can be used in a series of wizards or embedded in an
    636636          application.
    637637        PROTOTYPE:
    638638          ImportWizardPanel_Delimiters(parent, id, file, data, isValidCallback = None,
    639                                        pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
    640                                        style = wx.wxTAB_TRAVERSAL, name = 'ImportWizardPanel')
     639                                       pos = wx.DefaultPosition, size = wx.DefaultSize,
     640                                       style = wx.TAB_TRAVERSAL, name = 'ImportWizardPanel')
    641641        ARGUMENTS:
    642642          - parent is the parent window
    643643          - id is the id of this wizard panel
    if wx is not None: 
    657657        """
    658658
    659659        def __init__(self, parent, id, file, data, isValidCallback = None,
    660                      pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
    661                      style = wx.wxTAB_TRAVERSAL, name = "ImportWizardPanel"):
    662             wx.wxPanel.__init__(self, parent, id, pos, size, style, name)
    663             self.SetAutoLayout(wx.true)
    664             mainSizer = wx.wxFlexGridSizer(3, 1)
     660                     pos = wx.DefaultPosition, size = wx.DefaultSize,
     661                     style = wx.TAB_TRAVERSAL, name = "ImportWizardPanel"):
     662            wx.Panel.__init__(self, parent, id, pos, size, style, name)
     663            self.SetAutoLayout(True)
     664            mainSizer = wx.FlexGridSizer(3, 1)
    665665            self.SetSizer(mainSizer)
    666666            mainSizer.AddGrowableCol(0)
    667667
    668             self.initialized = wx.false
     668            self.initialized = False
    669669            self.data = data
    670670            self.isValidCallback = isValidCallback
    671671            self.Validate = (isValidCallback and self.Validate) or self.BuildPreview
    672672
    673             dlg = wx.wxProgressDialog("Import Wizard",
     673            dlg = wx.ProgressDialog("Import Wizard",
    674674                                   "Analyzing %s... Please wait." % file,
    675675                                   3,
    676676                                   parent,
    677                                    wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
     677                                   wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
    678678            textQualifier = guessTextQualifier(data)
    679679            dlg.Update(1)
    680680            newdata = organizeIntoLines(data, textQualifier = textQualifier, limit = 100)
    if wx is not None: 
    686686            # -------------
    687687            msg = ("This screen lets you set the delimiters your data contains.\n"
    688688                   "You can see how your data is affected in the preview below.")
    689             message1 = wx.wxStaticText(self, -1, msg)
     689            message1 = wx.StaticText(self, -1, msg)
    690690
    691691            # -------------
    692             delimiterBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
    693             delimStaticBox = wx.wxStaticBox(self, -1, "Delimiters")
    694             delimStaticSizer = wx.wxStaticBoxSizer(delimStaticBox, wx.wxVERTICAL)
    695             delimGridSizer = wx.wxFlexGridSizer(2, 3)
     692            delimiterBox = wx.BoxSizer(wx.HORIZONTAL)
     693            delimStaticBox = wx.StaticBox(self, -1, "Delimiters")
     694            delimStaticSizer = wx.StaticBoxSizer(delimStaticBox, wx.VERTICAL)
     695            delimGridSizer = wx.FlexGridSizer(2, 3)
    696696
    697697            delims = {
    698698                'Tab':       '\t',
    if wx is not None: 
    704704            self.delimChecks = {}
    705705
    706706            for label, value in delims.items():
    707                 self.delimChecks[value] = wx.wxCheckBox(self, -1, label)
    708                 delimGridSizer.Add(self.delimChecks[value], 0, wx.wxALL, 3)
     707                self.delimChecks[value] = wx.CheckBox(self, -1, label)
     708                delimGridSizer.Add(self.delimChecks[value], 0, wx.ALL, 3)
    709709                wx.EVT_CHECKBOX(self, self.delimChecks[value].GetId(), self.Validate)
    710710
    711             otherSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
     711            otherSizer = wx.BoxSizer(wx.HORIZONTAL)
    712712
    713             self.delimChecks['Other'] = wx.wxCheckBox(self, -1, 'Other:')
     713            self.delimChecks['Other'] = wx.CheckBox(self, -1, 'Other:')
    714714            wx.EVT_CHECKBOX(self, self.delimChecks['Other'].GetId(), self.Validate)
    715715
    716             self.otherDelim = wx.wxTextCtrl(self, -1, size = (20, -1))
     716            self.otherDelim = wx.TextCtrl(self, -1, size = (20, -1))
    717717            wx.EVT_TEXT(self, self.otherDelim.GetId(), self.OnCustomDelim)
    718718
    719719            if self.delimChecks.has_key(delimiter):
    720                 self.delimChecks[delimiter].SetValue(wx.true)
     720                self.delimChecks[delimiter].SetValue(True)
    721721            elif delimiter is not None:
    722                 self.delimChecks['Other'].SetValue(wx.true)
     722                self.delimChecks['Other'].SetValue(True)
    723723                self.otherDelim.SetValue(delimiter)
    724724
    725725            otherSizer.AddMany([
    726                 (self.delimChecks['Other'], 0, wx.wxALL, 3),
    727                 (self.otherDelim, 0, wx.wxALIGN_CENTER),
     726                (self.delimChecks['Other'], 0, wx.ALL, 3),
     727                (self.otherDelim, 0, wx.ALIGN_CENTER),
    728728                ])
    729729           
    730730            delimGridSizer.Add(otherSizer)
    731             delimStaticSizer.Add(delimGridSizer, 1, wx.wxEXPAND)
    732             delimOtherSizer = wx.wxBoxSizer(wx.wxVERTICAL)
    733             self.consecutiveDelimsAs1 = wx.wxCheckBox(self, -1, "Treat consecutive delimiters as one")
    734             self.consecutiveDelimsAs1.Enable(wx.false)
    735             tqSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
    736             self.textQualifierChoice = wx.wxChoice(self, -1, choices = ['"', "'", "{None}"])
     731            delimStaticSizer.Add(delimGridSizer, 1, wx.EXPAND)
     732            delimOtherSizer = wx.BoxSizer(wx.VERTICAL)
     733            self.consecutiveDelimsAs1 = wx.CheckBox(self, -1, "Treat consecutive delimiters as one")
     734            self.consecutiveDelimsAs1.Enable(False)
     735            tqSizer = wx.BoxSizer(wx.HORIZONTAL)
     736            self.textQualifierChoice = wx.Choice(self, -1, choices = ['"', "'", "{None}"])
    737737            wx.EVT_CHOICE(self, self.textQualifierChoice.GetId(), self.BuildPreview)
    738738            if textQualifier is not None:
    739739                self.textQualifierChoice.SetStringSelection(textQualifier)
    if wx is not None: 
    741741                self.textQualifierChoice.SetStringSelection('{None}')
    742742               
    743743            tqSizer.AddMany([
    744                 (wx.wxStaticText(self, -1, "Text qualifier:"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
    745                 (self.textQualifierChoice, 0, wx.wxALL | wx.wxALIGN_LEFT | wx.wxALIGN_CENTER_VERTICAL, 5),
     744                (wx.StaticText(self, -1, "Text qualifier:"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
     745                (self.textQualifierChoice, 0, wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5),
    746746                ])
    747747           
    748748            delimOtherSizer.AddMany([
    749                 (self.consecutiveDelimsAs1, 1, wx.wxEXPAND | wx.wxALL, 5),
    750                 (tqSizer, 1, wx.wxALL | wx.wxALIGN_CENTER, 5),
     749                (self.consecutiveDelimsAs1, 1, wx.EXPAND | wx.ALL, 5),
     750                (tqSizer, 1, wx.ALL | wx.ALIGN_CENTER, 5),
    751751                ])
    752752
    753753            delimiterBox.AddMany([
    754                 (delimStaticSizer, 0, wx.wxALIGN_CENTER),
    755                 (delimOtherSizer,  0, wx.wxALIGN_CENTER),
     754                (delimStaticSizer, 0, wx.ALIGN_CENTER),
     755                (delimOtherSizer,  0, wx.ALIGN_CENTER),
    756756                ])
    757757           
    758758            delimStaticBox.Fit()
    759759
    760760            # -------------
    761761            self.displayRows = 6
    762             previewSettingsBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
    763             self.hasHeaderRow = wx.wxCheckBox(self, -1, "First row is header")
     762            previewSettingsBox = wx.BoxSizer(wx.HORIZONTAL)
     763            self.hasHeaderRow = wx.CheckBox(self, -1, "First row is header")
    764764            wx.EVT_CHECKBOX(self, self.hasHeaderRow.GetId(), self.BuildPreview)
    765765
    766             if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
    767                 # wx.wxSpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.wxSpinButton instead
    768                 self.previewRowsText = wx.wxTextCtrl(self, -1, str(self.displayRows),
    769                                                   size = (30, -1), style = wx.wxTE_PROCESS_ENTER)
     766            if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
     767                # wx.SpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.SpinButton instead
     768                self.previewRowsText = wx.TextCtrl(self, -1, str(self.displayRows),
     769                                                  size = (30, -1), style = wx.TE_PROCESS_ENTER)
    770770                h = self.previewRowsText.GetSize().height
    771                 self.previewRows = wx.wxSpinButton(self, -1, size = (-1, h), style = wx.wxSP_VERTICAL)
     771                self.previewRows = wx.SpinButton(self, -1, size = (-1, h), style = wx.SP_VERTICAL)
    772772                self.previewRows.SetRange(self.displayRows, 100)
    773773                self.previewRows.SetValue(self.displayRows)
    774774                wx.EVT_SPIN(self, self.previewRows.GetId(), self.OnSpinPreviewRows)
    775775                wx.EVT_TEXT_ENTER(self, self.previewRowsText.GetId(), self.OnTextPreviewRows)
    776776            else:
    777                 self.previewRows = wx.wxSpinCtrl(self, -1, str(self.displayRows),
     777                self.previewRows = wx.SpinCtrl(self, -1, str(self.displayRows),
    778778                                              min = self.displayRows, max = 100, size = (50, -1))
    779779                wx.EVT_SPINCTRL(self, self.previewRows.GetId(), self.BuildPreview)
    780780
    781781            previewSettingsBox.AddMany([
    782                 (self.hasHeaderRow, 1, wx.wxALL | wx.wxEXPAND, 5),
    783                 (wx.wxStaticText(self, -1, "Preview"), 0, wx.wxWEST | wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL, 10),
     782                (self.hasHeaderRow, 1, wx.ALL | wx.EXPAND, 5),
     783                (wx.StaticText(self, -1, "Preview"), 0, wx.WEST | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 10),
    784784                ])
    785             if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
    786                 previewSettingsBox.Add(self.previewRowsText, 0, wx.wxALIGN_CENTER | wx.wxALL, 3)
     785            if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
     786                previewSettingsBox.Add(self.previewRowsText, 0, wx.ALIGN_CENTER | wx.ALL, 3)
    787787            previewSettingsBox.AddMany([
    788                 (self.previewRows, 0, wx.wxALIGN_CENTER | wx.wxALL, 3),
    789                 (wx.wxStaticText(self, -1, "rows"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
     788                (self.previewRows, 0, wx.ALIGN_CENTER | wx.ALL, 3),
     789                (wx.StaticText(self, -1, "rows"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
    790790                ])
    791791
    792792            # -------------
    if wx is not None: 
    804804                hasHeaders = 0
    805805                cols = 1
    806806
    807             previewStaticBox = wx.wxStaticBox(self, -1, "Data Preview")
    808             previewStaticSizer = wx.wxStaticBoxSizer(previewStaticBox, wx.wxVERTICAL)
    809             self.preview = grid.wxGrid(self, -1)
     807            previewStaticBox = wx.StaticBox(self, -1, "Data Preview")
     808            previewStaticSizer = wx.StaticBoxSizer(previewStaticBox, wx.VERTICAL)
     809            self.preview = grid.Grid(self, -1)
    810810            self.preview.CreateGrid(self.displayRows, cols)
    811             self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, wx.true)
    812             self.preview.EnableEditing(wx.false)
     811            self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, True)
     812            self.preview.EnableEditing(False)
    813813            self.preview.SetColLabelSize(0)
    814814            self.preview.SetRowLabelSize(0)
    815815            self.preview.SetMargins(1, 0)
    816             self.initialized = wx.true
     816            self.initialized = True
    817817            self.BuildPreview()
    818818
    819819            rowheight = self.preview.GetRowSize(0) + 2
    820820            self.preview.SetSize((-1, rowheight * self.displayRows))
    821             previewStaticSizer.Add(self.preview, 0, wx.wxALL | wx.wxEXPAND, 5)
     821            previewStaticSizer.Add(self.preview, 0, wx.ALL | wx.EXPAND, 5)
    822822
    823823            # -------------
    824824            mainSizer.AddMany([
    825                 (message1,     0, wx.wxALL, 5),
    826                 (delimiterBox, 0, wx.wxALL, 5),
    827                 (previewSettingsBox, 0, wx.wxALL, 5),
    828                 (previewStaticSizer, 0, wx.wxALL | wx.wxEXPAND, 5),
     825                (message1,     0, wx.ALL, 5),
     826                (delimiterBox, 0, wx.ALL, 5),
     827                (previewSettingsBox, 0, wx.ALL, 5),
     828                (previewStaticSizer, 0, wx.ALL | wx.EXPAND, 5),
    829829                ])
    830830
    831831            self.Layout()
    if wx is not None: 
    855855            if not self.initialized:
    856856                return # got triggered before initialization was completed
    857857
    858             if wx.wxPlatform != '__WX.WXGTK__':
    859                 wx.wxBeginBusyCursor() # causes a spurious spin event under GTK
    860             wx.wxYield() # allow controls to update first, in case of slow preview
     858            if wx.Platform != '__WX.WXGTK__':
     859                wx.BeginBusyCursor() # causes a spurious spin event under GTK
     860            wx.Yield() # allow controls to update first, in case of slow preview
    861861            self.preview.BeginBatch()
    862862            self.preview.DeleteCols(0, self.preview.GetNumberCols())
    863863            self.preview.DeleteRows(0, self.preview.GetNumberRows())
    if wx is not None: 
    892892                for col in range(cols):
    893893                    try:    self.preview.SetColLabelValue(col, str(previewData[0][col]))
    894894                    except: self.preview.SetColLabelValue(col, "")
    895                 # self.preview.AutoSizeColumns(wx.true) # size columns to headers
     895                # self.preview.AutoSizeColumns(True) # size columns to headers
    896896            else:
    897897                self.preview.SetColLabelSize(0)
    898898
    if wx is not None: 
    902902                    except: pass
    903903
    904904            # if not hasHeaders:
    905             self.preview.AutoSizeColumns(wx.true) # size columns to data
     905            self.preview.AutoSizeColumns(True) # size columns to data
    906906
    907907            rowheight = self.preview.GetRowSize(0)
    908908            self.preview.SetRowSize(0, rowheight)
    909909            self.preview.EndBatch()
    910             if wx.wxPlatform != '__WX.WXGTK__':
    911                 wx.wxEndBusyCursor()
     910            if wx.Platform != '__WX.WXGTK__':
     911                wx.EndBusyCursor()
    912912
    913913            self.delimiters = delimiter
    914914            self.textQualifier = textQualifier
    if wx is not None: 
    928928            return self.hasHeaders
    929929
    930930    # ------------------------------------------------------------------------------       
    931     class ImportWizardDialog(wx.wxDialog):
     931    class ImportWizardDialog(wx.Dialog):
    932932        """
    933933        CLASS(SUPERCLASS):
    934           ImportWizardDialog(wx.wxDialog)
     934          ImportWizardDialog(wx.Dialog)
    935935        DESCRIPTION:
    936936          A dialog allowing the user to preview and change the options for importing
    937937          a file.
    938938        PROTOTYPE:
    939939          ImportWizardDialog(parent, id, title, file,
    940                              pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
    941                              style = wx.wxDEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
     940                             pos = wx.DefaultPosition, size = wx.DefaultSize,
     941                             style = wx.DEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
    942942        ARGUMENTS:
    943943          - parent: the parent window
    944944          - id: the id of this window
    if wx is not None: 
    955955        """
    956956
    957957        def __init__(self, parent, id, title, file,
    958                      pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
    959                      style = wx.wxDEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
    960             wx.wxDialog.__init__(self, parent, id, title, pos, size, style, name)
    961             self.SetAutoLayout(wx.true)
     958                     pos = wx.DefaultPosition, size = wx.DefaultSize,
     959                     style = wx.DEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
     960            wx.Dialog.__init__(self, parent, id, title, pos, size, style, name)
     961            self.SetAutoLayout(True)
    962962
    963963            self.file = file
    964964            f = open(file, 'r')
    965965            self.data = f.read()
    966966            f.close()
    967967
    968             sizer = wx.wxBoxSizer(wx.wxVERTICAL)
     968            sizer = wx.BoxSizer(wx.VERTICAL)
    969969            self.delimPanel = ImportWizardPanel_Delimiters(self, -1, file, self.data, self.ValidState)
    970970            buttonBox = self.ButtonBox()
    971971            sizer.AddMany([
    972                 (self.delimPanel, 0, wx.wxALL, 5),
    973                 (buttonBox, 0, wx.wxSOUTH | wx.wxALIGN_CENTER_HORIZONTAL | wx.wxALIGN_TOP, 0),
     972                (self.delimPanel, 0, wx.ALL, 5),
     973                (buttonBox, 0, wx.SOUTH | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_TOP, 0),
    974974                ])
    975975
    976976            self.SetSizer(sizer)
    if wx is not None: 
    980980            self.Centre()
    981981
    982982        def ButtonBox(self):
    983             panel = wx.wxPanel(self, -1)
    984             panel.SetAutoLayout(wx.true)
    985             sizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
     983            panel = wx.Panel(self, -1)
     984            panel.SetAutoLayout(True)
     985            sizer = wx.BoxSizer(wx.HORIZONTAL)
    986986            panel.SetSizer(sizer)
    987             self.ok = wx.wxButton(panel, wx.wxID_OK, "Ok")
    988             cancel = wx.wxButton(panel, wx.wxID_CANCEL, "Cancel")
     987            self.ok = wx.Button(panel, wx.ID_OK, "Ok")
     988            cancel = wx.Button(panel, wx.ID_CANCEL, "Cancel")
    989989            sizer.AddMany([
    990                 (self.ok, 0, wx.wxALIGN_TOP | wx.wxEAST | wx.wxSOUTH, 10),
    991                 (cancel, 0, wx.wxALIGN_TOP | wx.wxWEST | wx.wxSOUTH, 10),
     990                (self.ok, 0, wx.ALIGN_TOP | wx.EAST | wx.SOUTH, 10),
     991                (cancel, 0, wx.ALIGN_TOP | wx.WEST | wx.SOUTH, 10),
    992992                ])
    993993            panel.Layout()
    994994            panel.Fit()
    if wx is not None: 
    10021002        def ImportData(self, errorHandler = skipRow):
    10031003            delimiters, qualifier, hasHeaders = self.GetImportInfo()
    10041004            self.data = organizeIntoLines(self.data, textQualifier = qualifier)
    1005             dlg = wx.wxProgressDialog("Import DSV File",
     1005            dlg = wx.ProgressDialog("Import DSV File",
    10061006                                   self.file,
    10071007                                   100,
    10081008                                   self,
    1009                                    wx.wxPD_CAN_ABORT | wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
     1009                                   wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
    10101010            self.data = importDSV(self.data,
    10111011                                  delimiter = delimiters,
    10121012                                  textQualifier = qualifier,
    if __name__ == '__main__': 
    10341034
    10351035
    10361036    def demo():
    1037         class SampleApp(wx.wxApp):
     1037        class SampleApp(wx.App):
    10381038            def OnInit(self):
    1039                 dlg = wx.wxFileDialog(None, "Choose a file", ".", "",
     1039                dlg = wx.FileDialog(None, "Choose a file", ".", "",
    10401040                                   "CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt|All files (*.*)|*.*",
    1041                                    wx.wxOPEN)
    1042                 if dlg.ShowModal() == wx.wxID_OK:
     1041                                   wx.OPEN)
     1042                if dlg.ShowModal() == wx.ID_OK:
    10431043                    path = dlg.GetPath()
    10441044                    dlg.Destroy()
    10451045
    if __name__ == '__main__': 
    10491049                        file.write("LINE %d: %s\n" % (linenumber, oldrow))
    10501050
    10511051                    dlg = ImportWizardDialog(None, -1, 'CSV Import Wizard (v.%s)' % __version__, path)
    1052                     if dlg.ShowModal() == wx.wxID_OK:
     1052                    if dlg.ShowModal() == wx.ID_OK:
    10531053                        results = dlg.ImportData(errorHandler = logErrors)
    10541054                        dlg.Destroy()
    10551055                        errorLog.close()
    if __name__ == '__main__': 
    10741074                else:
    10751075                    dlg.Destroy()
    10761076
    1077                 return wx.true
     1077                return True
    10781078
    10791079        app = SampleApp()
    10801080        app.MainLoop()