summaryrefslogtreecommitdiff
path: root/dev-python/python-dsv
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /dev-python/python-dsv
reinit the tree, so we can have metadata
Diffstat (limited to 'dev-python/python-dsv')
-rw-r--r--dev-python/python-dsv/Manifest9
-rw-r--r--dev-python/python-dsv/files/python-dsv-1.4.1-env.patch21
-rw-r--r--dev-python/python-dsv/files/python-dsv-1.4.1-unicode.patch21
-rw-r--r--dev-python/python-dsv/files/python-dsv-1.4.1-wx-namespace.patch435
-rw-r--r--dev-python/python-dsv/files/python-dsv-1.4.1-wxpython30.patch21
-rw-r--r--dev-python/python-dsv/metadata.xml11
-rw-r--r--dev-python/python-dsv/python-dsv-1.4.1-r2.ebuild29
7 files changed, 547 insertions, 0 deletions
diff --git a/dev-python/python-dsv/Manifest b/dev-python/python-dsv/Manifest
new file mode 100644
index 000000000000..4551f8e76799
--- /dev/null
+++ b/dev-python/python-dsv/Manifest
@@ -0,0 +1,9 @@
+AUX python-dsv-1.4.1-env.patch 897 SHA256 1f8e9de931e2880c2d63613bb8d7e01e80a68db4a440e542e05761d702811720 SHA512 798498060977b51b733281a66eeb57ee0bedc21243dd4138e3d0ad7666b1c3581764866c7c721fbbaa49b2bf5579f2ab91de03427e65fef4ff00df4399677794 WHIRLPOOL 377d299fbf3298fa11ab082ffdc09a0a7d0272d5c631cee61d3e341b8a0ab8f48c066f5b1c506143ba76d0a53127e233ed57d953892b3e72ad67ddcbecadb51f
+AUX python-dsv-1.4.1-unicode.patch 880 SHA256 18b398023ba25aab1dbca63121815b88baaba5c883b3517ae9a5ea12628c2f77 SHA512 a4a4c1c912dcfbc3631f329b5a3e17b69d3c7e40c597691ce0b06ceaaa1829641a1474db3b66e39b414c9a55542cdb17633a390093226c91c9b20634c9f46b7d WHIRLPOOL 986823cd502d432e95ca29cbc8fa1de7431fc14fca5722d707d33e4974a35ce8f9d669965cd58b3f0fd3a6547d9c89fbefdb4bfff01f93a4c2afd2699ff716ac
+AUX python-dsv-1.4.1-wx-namespace.patch 21455 SHA256 4cc175ec1a1d84f640517257c132153494bfc33e73e22736a0a9b53d15315009 SHA512 ae7ab49b02775e98243a37198d8614c68dc1b94b935da035aa1d28227f8e1cfbf9865ffead8325a852bf01728e89fe4c0ccb92e07630983b9b5482a4b4a9094e WHIRLPOOL bc34aa933d5cf941d4d481bdee808700437210145e05a46e7ab1a8c6ad4ae7368c4d2f598bade1f472c8c4f59fcb32973215d31d0c8a6bf854de98744d01da9e
+AUX python-dsv-1.4.1-wxpython30.patch 688 SHA256 8a10ffb8bc658b6dc1c842fa4836c3dcd5c21a596e9e29c6ca8fdbb464397323 SHA512 96b9b013f04dd3acf72a94a8a77f1416831358a1fa79b69b8cef7fb10c99120d4f743a311b548df01817491b6a98e07bba92bbb23be1b6686e70d70557f0fe7a WHIRLPOOL 4c9f533ea87ea2fb466847672175e720191090500d87e586eed35d977f5031e0a747c350cff067c658492097978a77a759b20827b3b441a0d23b4e4c4af705d0
+DIST DSV-1.4.1.tar.gz 14682 SHA256 5d0ec99c45f8ea91ea920dcd2cdf2cdc9e721985551ea80718519ce70dc98f15 SHA512 c26df1efabff9e70b6dfd17f6ff928f022ad19cfa39af431ef7ac663687e8d80406b0ad471376e238eeb6fcbab31aa2a84eaeae2949173e22316eb92e51f7ada WHIRLPOOL 565ef07a5c87cc4090b8b75df0fb992561865563ac3a0a8adaac2d1bc893e664d0db4d66836d9f682b2e69f62b2fc1fb1c3cdb649d973672b87a731887ded97d
+EBUILD python-dsv-1.4.1-r2.ebuild 655 SHA256 ecc80de5d405e7b9202f5da543a130027916bce675012504396d82e27efcdac1 SHA512 6c1f87de9eb5ae0720936a66024b5ac06af2818f053a1ed703a83a8bdf76041adb0520986da62458927719162b37f1ab572936261b902514a04ca8557de1d777 WHIRLPOOL bd829c3611e12dab9fd0cfb0f570553d491cfa97d55e7cc8aa4db470be89aa4ddd8225fd1436ecc4ebbe515a32f703a6b14f385cf820eb54b324e2cdf9a74360
+MISC ChangeLog 3162 SHA256 cb55320cd59ce4b9f1a22326e9e46613dea31b9a52dd981c75bf594497897717 SHA512 45bfb4db754e87ae84524fa3488002cda37b80b4ef1c0333ff6ae32346cc541c79ca8f4b8eb1132ac188d666bac2767d12006510b8f76b35b971defc0b1b8217 WHIRLPOOL 4838e7aaba3483571c2d70b7ac7355b095491c8555b0041608ee83caf1794f44ec0b09246f29e0920a57fea407e9fd1b97eb13d3098b22fc24513ddafc2468cc
+MISC ChangeLog-2015 1931 SHA256 2b35eabb604876093b861d326236d428a04d96e65384ed9c4d6048c8dde6aa69 SHA512 d239ad3d4b129b31051b66cf7c7f0f6d48078db98adc6096e971bb1010f6235cda045f848dc00b1a64833625be21d3267d83e14c6378194b3b893c180782bd5c WHIRLPOOL 6300a40f5b7324b41ca8269aa9457c0384b53d4cb5ec4044eb0ab72b90f19f2b624056b5e34fe4a6a6c49f4277ded320f46c990fd307fb29adbe0f3798c70beb
+MISC metadata.xml 501 SHA256 0301b218dbc7055ebd2f516b6c0638ad2cd33ad6dc8d7ad8f8af6924e0053293 SHA512 e8094c00b37097b8f255a6f2ab3461340fcec715bbe63957369f2ee4c60c4e246ba53f3dcf0edcb248937e70316ef9c4c2ff3c2609c2f79ccdd485ceb54918f1 WHIRLPOOL 5a77570278c0091bea89be3e31dbfdbf1d7c378d73e4a5463347d70020a4facde5a8111d29b707696d957bfd76157619a47b0ab02658d70d489a89caedc090aa
diff --git a/dev-python/python-dsv/files/python-dsv-1.4.1-env.patch b/dev-python/python-dsv/files/python-dsv-1.4.1-env.patch
new file mode 100644
index 000000000000..c2e7aee946dc
--- /dev/null
+++ b/dev-python/python-dsv/files/python-dsv-1.4.1-env.patch
@@ -0,0 +1,21 @@
+Index: python-dsv-1.4.1/DSV/DSV.py
+===================================================================
+--- python-dsv-1.4.1.orig/DSV/DSV.py 2003-08-09 06:37:32.000000000 -0400
++++ python-dsv-1.4.1/DSV/DSV.py 2010-01-26 20:38:02.000000000 -0500
+@@ -127,11 +127,11 @@
+ import copy
+ import exceptions
+ import string
+-# RedHat 8.0 (or rather GTK2?) sets LANG = en_us.UTF-8 and apparently some
+-# older apps (including wxGTK) can't handle this. The fix is to set LANG=C
+-# before running the app. Thanks to Ahmad Baitalmal for supplying this info.
+-import os
+-os.putenv('LANG', 'C')
++## RedHat 8.0 (or rather GTK2?) sets LANG = en_us.UTF-8 and apparently some
++## older apps (including wxGTK) can't handle this. The fix is to set LANG=C
++## before running the app. Thanks to Ahmad Baitalmal for supplying this info.
++# import os
++# os.putenv('LANG', 'C')
+
+ try:
+ from wxPython import wx, grid
diff --git a/dev-python/python-dsv/files/python-dsv-1.4.1-unicode.patch b/dev-python/python-dsv/files/python-dsv-1.4.1-unicode.patch
new file mode 100644
index 000000000000..39faebe103b7
--- /dev/null
+++ b/dev-python/python-dsv/files/python-dsv-1.4.1-unicode.patch
@@ -0,0 +1,21 @@
+Index: python-dsv-1.4.1/DSV/DSV.py
+===================================================================
+--- python-dsv-1.4.1.orig/DSV/DSV.py 2010-01-26 20:35:23.000000000 -0500
++++ python-dsv-1.4.1/DSV/DSV.py 2010-01-26 20:35:23.000000000 -0500
+@@ -486,8 +486,14 @@
+ list of lists of data
+ """
+ if type(input) != type([]):
+- raise InvalidData, "expected list of lists of strings"
+- if type(delimiter) != type('') or not delimiter:
++ raise InvalidData, "expected list of lists of strings"
++ # Try to convert Unicode delimiters back to ASCII (wxPython can be
++ # overenthusiastic), but ultimately support either.
++ try:
++ delimiter = delimiter.encode()
++ except:
++ pass
++ if (type(delimiter) != str and type(delimiter) != unicode) or not delimiter:
+ raise InvalidDelimiter, `delimiter`
+
+ ## if textQualifier:
diff --git a/dev-python/python-dsv/files/python-dsv-1.4.1-wx-namespace.patch b/dev-python/python-dsv/files/python-dsv-1.4.1-wx-namespace.patch
new file mode 100644
index 000000000000..c4b819f6bb07
--- /dev/null
+++ b/dev-python/python-dsv/files/python-dsv-1.4.1-wx-namespace.patch
@@ -0,0 +1,435 @@
+Index: python-dsv-1.4.1/DSV/DSV.py
+===================================================================
+--- python-dsv-1.4.1.orig/DSV/DSV.py 2010-01-26 20:35:23.000000000 -0500
++++ python-dsv-1.4.1/DSV/DSV.py 2010-01-26 20:37:59.000000000 -0500
+@@ -2,6 +2,9 @@
+ DSV.py - Cliff Wells, 2002
+ Import/export DSV (delimiter separated values, a generalization of CSV).
+
++2007-01-09: Modified by Joe Pham <djpham@bitpim.org> to accommodate
++ wxPython 2.8+
++
+ Basic use:
+
+ from DSV import DSV
+@@ -133,8 +136,14 @@
+ # import os
+ # os.putenv('LANG', 'C')
+
++##try:
++## from wxPython import wx, grid
++##except ImportError:
++## wx = None
++
+ try:
+- from wxPython import wx, grid
++ import wx
++ import wx.grid as gridlib
+ except ImportError:
+ wx = None
+
+@@ -625,19 +634,19 @@
+
+ if wx is not None:
+ # ------------------------------------------------------------------------------
+- class ImportWizardPanel_Delimiters(wx.wxPanel):
++ class ImportWizardPanel_Delimiters(wx.Panel):
+ """
+ CLASS(SUPERCLASS):
+- ImportWizardPanel_Delimiters(wx.wxPanel)
++ ImportWizardPanel_Delimiters(wx.Panel)
+ DESCRIPTION:
+- A wx.wxPanel that provides a basic interface for validating and changing the
++ A wx.Panel that provides a basic interface for validating and changing the
+ parameters for importing a delimited text file. Similar to MS Excel's
+ CSV import wizard. Can be used in a series of wizards or embedded in an
+ application.
+ PROTOTYPE:
+ ImportWizardPanel_Delimiters(parent, id, file, data, isValidCallback = None,
+- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
+- style = wx.wxTAB_TRAVERSAL, name = 'ImportWizardPanel')
++ pos = wx.DefaultPosition, size = wx.DefaultSize,
++ style = wx.TAB_TRAVERSAL, name = 'ImportWizardPanel')
+ ARGUMENTS:
+ - parent is the parent window
+ - id is the id of this wizard panel
+@@ -657,24 +666,24 @@
+ """
+
+ def __init__(self, parent, id, file, data, isValidCallback = None,
+- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
+- style = wx.wxTAB_TRAVERSAL, name = "ImportWizardPanel"):
+- wx.wxPanel.__init__(self, parent, id, pos, size, style, name)
+- self.SetAutoLayout(wx.true)
+- mainSizer = wx.wxFlexGridSizer(3, 1)
++ pos = wx.DefaultPosition, size = wx.DefaultSize,
++ style = wx.TAB_TRAVERSAL, name = "ImportWizardPanel"):
++ wx.Panel.__init__(self, parent, id, pos, size, style, name)
++ self.SetAutoLayout(True)
++ mainSizer = wx.FlexGridSizer(3, 1)
+ self.SetSizer(mainSizer)
+ mainSizer.AddGrowableCol(0)
+
+- self.initialized = wx.false
++ self.initialized = False
+ self.data = data
+ self.isValidCallback = isValidCallback
+ self.Validate = (isValidCallback and self.Validate) or self.BuildPreview
+
+- dlg = wx.wxProgressDialog("Import Wizard",
++ dlg = wx.ProgressDialog("Import Wizard",
+ "Analyzing %s... Please wait." % file,
+ 3,
+ parent,
+- wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
++ wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
+ textQualifier = guessTextQualifier(data)
+ dlg.Update(1)
+ newdata = organizeIntoLines(data, textQualifier = textQualifier, limit = 100)
+@@ -686,13 +695,13 @@
+ # -------------
+ msg = ("This screen lets you set the delimiters your data contains.\n"
+ "You can see how your data is affected in the preview below.")
+- message1 = wx.wxStaticText(self, -1, msg)
++ message1 = wx.StaticText(self, -1, msg)
+
+ # -------------
+- delimiterBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
+- delimStaticBox = wx.wxStaticBox(self, -1, "Delimiters")
+- delimStaticSizer = wx.wxStaticBoxSizer(delimStaticBox, wx.wxVERTICAL)
+- delimGridSizer = wx.wxFlexGridSizer(2, 3)
++ delimiterBox = wx.BoxSizer(wx.HORIZONTAL)
++ delimStaticBox = wx.StaticBox(self, -1, "Delimiters")
++ delimStaticSizer = wx.StaticBoxSizer(delimStaticBox, wx.VERTICAL)
++ delimGridSizer = wx.FlexGridSizer(2, 3)
+
+ delims = {
+ 'Tab': '\t',
+@@ -704,36 +713,36 @@
+ self.delimChecks = {}
+
+ for label, value in delims.items():
+- self.delimChecks[value] = wx.wxCheckBox(self, -1, label)
+- delimGridSizer.Add(self.delimChecks[value], 0, wx.wxALL, 3)
++ self.delimChecks[value] = wx.CheckBox(self, -1, label)
++ delimGridSizer.Add(self.delimChecks[value], 0, wx.ALL, 3)
+ wx.EVT_CHECKBOX(self, self.delimChecks[value].GetId(), self.Validate)
+
+- otherSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
++ otherSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+- self.delimChecks['Other'] = wx.wxCheckBox(self, -1, 'Other:')
++ self.delimChecks['Other'] = wx.CheckBox(self, -1, 'Other:')
+ wx.EVT_CHECKBOX(self, self.delimChecks['Other'].GetId(), self.Validate)
+
+- self.otherDelim = wx.wxTextCtrl(self, -1, size = (20, -1))
++ self.otherDelim = wx.TextCtrl(self, -1, size = (20, -1))
+ wx.EVT_TEXT(self, self.otherDelim.GetId(), self.OnCustomDelim)
+
+ if self.delimChecks.has_key(delimiter):
+- self.delimChecks[delimiter].SetValue(wx.true)
++ self.delimChecks[delimiter].SetValue(True)
+ elif delimiter is not None:
+- self.delimChecks['Other'].SetValue(wx.true)
++ self.delimChecks['Other'].SetValue(True)
+ self.otherDelim.SetValue(delimiter)
+
+ otherSizer.AddMany([
+- (self.delimChecks['Other'], 0, wx.wxALL, 3),
+- (self.otherDelim, 0, wx.wxALIGN_CENTER),
++ (self.delimChecks['Other'], 0, wx.ALL, 3),
++ (self.otherDelim, 0, wx.ALIGN_CENTER),
+ ])
+
+ delimGridSizer.Add(otherSizer)
+- delimStaticSizer.Add(delimGridSizer, 1, wx.wxEXPAND)
+- delimOtherSizer = wx.wxBoxSizer(wx.wxVERTICAL)
+- self.consecutiveDelimsAs1 = wx.wxCheckBox(self, -1, "Treat consecutive delimiters as one")
+- self.consecutiveDelimsAs1.Enable(wx.false)
+- tqSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
+- self.textQualifierChoice = wx.wxChoice(self, -1, choices = ['"', "'", "{None}"])
++ delimStaticSizer.Add(delimGridSizer, 1, wx.EXPAND)
++ delimOtherSizer = wx.BoxSizer(wx.VERTICAL)
++ self.consecutiveDelimsAs1 = wx.CheckBox(self, -1, "Treat consecutive delimiters as one")
++ self.consecutiveDelimsAs1.Enable(False)
++ tqSizer = wx.BoxSizer(wx.HORIZONTAL)
++ self.textQualifierChoice = wx.Choice(self, -1, choices = ['"', "'", "{None}"])
+ wx.EVT_CHOICE(self, self.textQualifierChoice.GetId(), self.BuildPreview)
+ if textQualifier is not None:
+ self.textQualifierChoice.SetStringSelection(textQualifier)
+@@ -741,52 +750,52 @@
+ self.textQualifierChoice.SetStringSelection('{None}')
+
+ tqSizer.AddMany([
+- (wx.wxStaticText(self, -1, "Text qualifier:"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
+- (self.textQualifierChoice, 0, wx.wxALL | wx.wxALIGN_LEFT | wx.wxALIGN_CENTER_VERTICAL, 5),
++ (wx.StaticText(self, -1, "Text qualifier:"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
++ (self.textQualifierChoice, 0, wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5),
+ ])
+
+ delimOtherSizer.AddMany([
+- (self.consecutiveDelimsAs1, 1, wx.wxEXPAND | wx.wxALL, 5),
+- (tqSizer, 1, wx.wxALL | wx.wxALIGN_CENTER, 5),
++ (self.consecutiveDelimsAs1, 1, wx.EXPAND | wx.ALL, 5),
++ (tqSizer, 1, wx.ALL | wx.ALIGN_CENTER, 5),
+ ])
+
+ delimiterBox.AddMany([
+- (delimStaticSizer, 0, wx.wxALIGN_CENTER),
+- (delimOtherSizer, 0, wx.wxALIGN_CENTER),
++ (delimStaticSizer, 0, wx.ALIGN_CENTER),
++ (delimOtherSizer, 0, wx.ALIGN_CENTER),
+ ])
+
+ delimStaticBox.Fit()
+
+ # -------------
+ self.displayRows = 6
+- previewSettingsBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
+- self.hasHeaderRow = wx.wxCheckBox(self, -1, "First row is header")
++ previewSettingsBox = wx.BoxSizer(wx.HORIZONTAL)
++ self.hasHeaderRow = wx.CheckBox(self, -1, "First row is header")
+ wx.EVT_CHECKBOX(self, self.hasHeaderRow.GetId(), self.BuildPreview)
+
+- if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
+- # wx.wxSpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.wxSpinButton instead
+- self.previewRowsText = wx.wxTextCtrl(self, -1, str(self.displayRows),
+- size = (30, -1), style = wx.wxTE_PROCESS_ENTER)
++ if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
++ # wx.SpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.SpinButton instead
++ self.previewRowsText = wx.TextCtrl(self, -1, str(self.displayRows),
++ size = (30, -1), style = wx.TE_PROCESS_ENTER)
+ h = self.previewRowsText.GetSize().height
+- self.previewRows = wx.wxSpinButton(self, -1, size = (-1, h), style = wx.wxSP_VERTICAL)
++ self.previewRows = wx.SpinButton(self, -1, size = (-1, h), style = wx.SP_VERTICAL)
+ self.previewRows.SetRange(self.displayRows, 100)
+ self.previewRows.SetValue(self.displayRows)
+ wx.EVT_SPIN(self, self.previewRows.GetId(), self.OnSpinPreviewRows)
+ wx.EVT_TEXT_ENTER(self, self.previewRowsText.GetId(), self.OnTextPreviewRows)
+ else:
+- self.previewRows = wx.wxSpinCtrl(self, -1, str(self.displayRows),
++ self.previewRows = wx.SpinCtrl(self, -1, str(self.displayRows),
+ min = self.displayRows, max = 100, size = (50, -1))
+ wx.EVT_SPINCTRL(self, self.previewRows.GetId(), self.BuildPreview)
+
+ previewSettingsBox.AddMany([
+- (self.hasHeaderRow, 1, wx.wxALL | wx.wxEXPAND, 5),
+- (wx.wxStaticText(self, -1, "Preview"), 0, wx.wxWEST | wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL, 10),
++ (self.hasHeaderRow, 1, wx.ALL | wx.EXPAND, 5),
++ (wx.StaticText(self, -1, "Preview"), 0, wx.WEST | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 10),
+ ])
+- if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
+- previewSettingsBox.Add(self.previewRowsText, 0, wx.wxALIGN_CENTER | wx.wxALL, 3)
++ if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
++ previewSettingsBox.Add(self.previewRowsText, 0, wx.ALIGN_CENTER | wx.ALL, 3)
+ previewSettingsBox.AddMany([
+- (self.previewRows, 0, wx.wxALIGN_CENTER | wx.wxALL, 3),
+- (wx.wxStaticText(self, -1, "rows"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
++ (self.previewRows, 0, wx.ALIGN_CENTER | wx.ALL, 3),
++ (wx.StaticText(self, -1, "rows"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
+ ])
+
+ # -------------
+@@ -804,28 +813,28 @@
+ hasHeaders = 0
+ cols = 1
+
+- previewStaticBox = wx.wxStaticBox(self, -1, "Data Preview")
+- previewStaticSizer = wx.wxStaticBoxSizer(previewStaticBox, wx.wxVERTICAL)
+- self.preview = grid.wxGrid(self, -1)
++ previewStaticBox = wx.StaticBox(self, -1, "Data Preview")
++ previewStaticSizer = wx.StaticBoxSizer(previewStaticBox, wx.VERTICAL)
++ self.preview = gridlib.Grid(self, -1)
+ self.preview.CreateGrid(self.displayRows, cols)
+- self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, wx.true)
+- self.preview.EnableEditing(wx.false)
++ self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, True)
++ self.preview.EnableEditing(False)
+ self.preview.SetColLabelSize(0)
+ self.preview.SetRowLabelSize(0)
+ self.preview.SetMargins(1, 0)
+- self.initialized = wx.true
++ self.initialized = True
+ self.BuildPreview()
+
+ rowheight = self.preview.GetRowSize(0) + 2
+ self.preview.SetSize((-1, rowheight * self.displayRows))
+- previewStaticSizer.Add(self.preview, 0, wx.wxALL | wx.wxEXPAND, 5)
++ previewStaticSizer.Add(self.preview, 0, wx.ALL | wx.EXPAND, 5)
+
+ # -------------
+ mainSizer.AddMany([
+- (message1, 0, wx.wxALL, 5),
+- (delimiterBox, 0, wx.wxALL, 5),
+- (previewSettingsBox, 0, wx.wxALL, 5),
+- (previewStaticSizer, 0, wx.wxALL | wx.wxEXPAND, 5),
++ (message1, 0, wx.ALL, 5),
++ (delimiterBox, 0, wx.ALL, 5),
++ (previewSettingsBox, 0, wx.ALL, 5),
++ (previewStaticSizer, 0, wx.ALL | wx.EXPAND, 5),
+ ])
+
+ self.Layout()
+@@ -855,9 +864,9 @@
+ if not self.initialized:
+ return # got triggered before initialization was completed
+
+- if wx.wxPlatform != '__WX.WXGTK__':
+- wx.wxBeginBusyCursor() # causes a spurious spin event under GTK
+- wx.wxYield() # allow controls to update first, in case of slow preview
++ if wx.Platform != '__WX.WXGTK__':
++ wx.BeginBusyCursor() # causes a spurious spin event under GTK
++ wx.Yield() # allow controls to update first, in case of slow preview
+ self.preview.BeginBatch()
+ self.preview.DeleteCols(0, self.preview.GetNumberCols())
+ self.preview.DeleteRows(0, self.preview.GetNumberRows())
+@@ -892,7 +901,7 @@
+ for col in range(cols):
+ try: self.preview.SetColLabelValue(col, str(previewData[0][col]))
+ except: self.preview.SetColLabelValue(col, "")
+- # self.preview.AutoSizeColumns(wx.true) # size columns to headers
++ # self.preview.AutoSizeColumns(True) # size columns to headers
+ else:
+ self.preview.SetColLabelSize(0)
+
+@@ -902,13 +911,13 @@
+ except: pass
+
+ # if not hasHeaders:
+- self.preview.AutoSizeColumns(wx.true) # size columns to data
++ self.preview.AutoSizeColumns(True) # size columns to data
+
+ rowheight = self.preview.GetRowSize(0)
+ self.preview.SetRowSize(0, rowheight)
+ self.preview.EndBatch()
+- if wx.wxPlatform != '__WX.WXGTK__':
+- wx.wxEndBusyCursor()
++ if wx.Platform != '__WX.WXGTK__':
++ wx.EndBusyCursor()
+
+ self.delimiters = delimiter
+ self.textQualifier = textQualifier
+@@ -928,17 +937,17 @@
+ return self.hasHeaders
+
+ # ------------------------------------------------------------------------------
+- class ImportWizardDialog(wx.wxDialog):
++ class ImportWizardDialog(wx.Dialog):
+ """
+ CLASS(SUPERCLASS):
+- ImportWizardDialog(wx.wxDialog)
++ ImportWizardDialog(wx.Dialog)
+ DESCRIPTION:
+ A dialog allowing the user to preview and change the options for importing
+ a file.
+ PROTOTYPE:
+ ImportWizardDialog(parent, id, title, file,
+- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
+- style = wx.wxDEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
++ pos = wx.DefaultPosition, size = wx.DefaultSize,
++ style = wx.DEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
+ ARGUMENTS:
+ - parent: the parent window
+ - id: the id of this window
+@@ -955,22 +964,22 @@
+ """
+
+ def __init__(self, parent, id, title, file,
+- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
+- style = wx.wxDEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
+- wx.wxDialog.__init__(self, parent, id, title, pos, size, style, name)
+- self.SetAutoLayout(wx.true)
++ pos = wx.DefaultPosition, size = wx.DefaultSize,
++ style = wx.DEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
++ wx.Dialog.__init__(self, parent, id, title, pos, size, style, name)
++ self.SetAutoLayout(True)
+
+ self.file = file
+ f = open(file, 'r')
+ self.data = f.read()
+ f.close()
+
+- sizer = wx.wxBoxSizer(wx.wxVERTICAL)
++ sizer = wx.BoxSizer(wx.VERTICAL)
+ self.delimPanel = ImportWizardPanel_Delimiters(self, -1, file, self.data, self.ValidState)
+ buttonBox = self.ButtonBox()
+ sizer.AddMany([
+- (self.delimPanel, 0, wx.wxALL, 5),
+- (buttonBox, 0, wx.wxSOUTH | wx.wxALIGN_CENTER_HORIZONTAL | wx.wxALIGN_TOP, 0),
++ (self.delimPanel, 0, wx.ALL, 5),
++ (buttonBox, 0, wx.SOUTH | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_TOP, 0),
+ ])
+
+ self.SetSizer(sizer)
+@@ -980,15 +989,15 @@
+ self.Centre()
+
+ def ButtonBox(self):
+- panel = wx.wxPanel(self, -1)
+- panel.SetAutoLayout(wx.true)
+- sizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
++ panel = wx.Panel(self, -1)
++ panel.SetAutoLayout(True)
++ sizer = wx.BoxSizer(wx.HORIZONTAL)
+ panel.SetSizer(sizer)
+- self.ok = wx.wxButton(panel, wx.wxID_OK, "Ok")
+- cancel = wx.wxButton(panel, wx.wxID_CANCEL, "Cancel")
++ self.ok = wx.Button(panel, wx.ID_OK, "Ok")
++ cancel = wx.Button(panel, wx.ID_CANCEL, "Cancel")
+ sizer.AddMany([
+- (self.ok, 0, wx.wxALIGN_TOP | wx.wxEAST | wx.wxSOUTH, 10),
+- (cancel, 0, wx.wxALIGN_TOP | wx.wxWEST | wx.wxSOUTH, 10),
++ (self.ok, 0, wx.ALIGN_TOP | wx.EAST | wx.SOUTH, 10),
++ (cancel, 0, wx.ALIGN_TOP | wx.WEST | wx.SOUTH, 10),
+ ])
+ panel.Layout()
+ panel.Fit()
+@@ -1002,11 +1011,11 @@
+ def ImportData(self, errorHandler = skipRow):
+ delimiters, qualifier, hasHeaders = self.GetImportInfo()
+ self.data = organizeIntoLines(self.data, textQualifier = qualifier)
+- dlg = wx.wxProgressDialog("Import DSV File",
++ dlg = wx.ProgressDialog("Import DSV File",
+ self.file,
+ 100,
+ self,
+- wx.wxPD_CAN_ABORT | wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
++ wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
+ self.data = importDSV(self.data,
+ delimiter = delimiters,
+ textQualifier = qualifier,
+@@ -1034,12 +1043,12 @@
+
+
+ def demo():
+- class SampleApp(wx.wxApp):
++ class SampleApp(wx.App):
+ def OnInit(self):
+- dlg = wx.wxFileDialog(None, "Choose a file", ".", "",
++ dlg = wx.FileDialog(None, "Choose a file", ".", "",
+ "CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt|All files (*.*)|*.*",
+- wx.wxOPEN)
+- if dlg.ShowModal() == wx.wxID_OK:
++ wx.OPEN)
++ if dlg.ShowModal() == wx.ID_OK:
+ path = dlg.GetPath()
+ dlg.Destroy()
+
+@@ -1049,7 +1058,7 @@
+ file.write("LINE %d: %s\n" % (linenumber, oldrow))
+
+ dlg = ImportWizardDialog(None, -1, 'CSV Import Wizard (v.%s)' % __version__, path)
+- if dlg.ShowModal() == wx.wxID_OK:
++ if dlg.ShowModal() == wx.ID_OK:
+ results = dlg.ImportData(errorHandler = logErrors)
+ dlg.Destroy()
+ errorLog.close()
+@@ -1074,7 +1083,7 @@
+ else:
+ dlg.Destroy()
+
+- return wx.true
++ return True
+
+ app = SampleApp()
+ app.MainLoop()
diff --git a/dev-python/python-dsv/files/python-dsv-1.4.1-wxpython30.patch b/dev-python/python-dsv/files/python-dsv-1.4.1-wxpython30.patch
new file mode 100644
index 000000000000..c5ed57380843
--- /dev/null
+++ b/dev-python/python-dsv/files/python-dsv-1.4.1-wxpython30.patch
@@ -0,0 +1,21 @@
+--- a/DSV/DSV.py
++++ b/DSV/DSV.py
+@@ -676,7 +676,7 @@ if wx is not None:
+ style = wx.TAB_TRAVERSAL, name = "ImportWizardPanel"):
+ wx.Panel.__init__(self, parent, id, pos, size, style, name)
+ self.SetAutoLayout(True)
+- mainSizer = wx.FlexGridSizer(3, 1)
++ mainSizer = wx.FlexGridSizer(4, 1)
+ self.SetSizer(mainSizer)
+ mainSizer.AddGrowableCol(0)
+
+@@ -1089,7 +1089,8 @@ if __name__ == '__main__':
+ else:
+ dlg.Destroy()
+
+- return True
++ # return True
++ sys.exit()
+
+ app = SampleApp()
+ app.MainLoop()
diff --git a/dev-python/python-dsv/metadata.xml b/dev-python/python-dsv/metadata.xml
new file mode 100644
index 000000000000..0ae34c0a45ea
--- /dev/null
+++ b/dev-python/python-dsv/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <longdescription>Python module for importing and exporting DSV (delimiter separated values) files.
+DSV is a generalization of CSV (comma separated values) and it is a common file
+format used by many programs to import and export data.</longdescription>
+ <upstream>
+ <remote-id type="sourceforge">python-dsv</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-python/python-dsv/python-dsv-1.4.1-r2.ebuild b/dev-python/python-dsv/python-dsv-1.4.1-r2.ebuild
new file mode 100644
index 000000000000..5a4498fa70a6
--- /dev/null
+++ b/dev-python/python-dsv/python-dsv-1.4.1-r2.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=( python2_7 )
+
+inherit distutils-r1
+
+DESCRIPTION="Python module for importing and exporting DSV files"
+HOMEPAGE="http://python-dsv.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/DSV-${PV}.tar.gz"
+
+LICENSE="CNRI"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+RDEPEND="dev-python/wxpython:3.0[${PYTHON_USEDEP}]"
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/DSV-${PV}"
+
+PATCHES=(
+ # From Debian
+ "${FILESDIR}"/${P}-env.patch
+ "${FILESDIR}"/${P}-unicode.patch
+ "${FILESDIR}"/${P}-wx-namespace.patch
+ "${FILESDIR}"/${P}-wxpython30.patch
+)