def OnSaveIds(self, event):
        try:
            dbi = DBI(self.iddb)
            data = self.m_grid1.GetTable()
            addids = []
            for rownum in range(0, data.GetRowsCount()):
                if not data.IsEmptyCell(rownum, 0):
                    addids.append((self.m_grid1.GetCellValue(rownum, 0),
                                   self.m_grid1.GetCellValue(rownum, 1)))
            dbi.addIDs(addids)
            dlg = wx.MessageDialog(self, "IDs file saved", "Incorrect IDs",
                                   wx.OK)

        except Exception as e:
            dlg = wx.MessageDialog(self, e.args[0], "Incorrect IDs", wx.OK)

        finally:
            dlg.ShowModal()  # Show it
            dlg.Destroy()
            self.Close()
class TestDBquery(unittest.TestCase):
    def setUp(self):
        self.resourcedir = findResourceDir()
        configdb = join(self.resourcedir, 'opexconfig_test.db')
        self.dbi = DBI(configdb)
        self.dbi.getconn()

    def tearDown(self):
        self.dbi.conn.close()

    def test_getIDs(self):
        data = self.dbi.getIDs()
        self.assertGreater(len(data), 0)

    def test_updateIDs(self):
        df = pandas.read_csv(join('..', 'resources', 'incorrectIds.csv'))
        idlist = [(d['INCORRECT'], d['CORRECT']) for i, d in df.iterrows()]
        cnt = self.dbi.addIDs(idlist)
        expected = len(idlist)
        self.assertEqual(expected, cnt)

    def test_getRunOptions(self):
        data = self.dbi.getRunOptions()
        self.assertGreater(len(data), 0)

    def test_getFields(self):
        etype = 'CANTAB MOT'
        expected = [u'MOTML', u'MOTSDL', u'MOTTC', u'MOTTE']
        data = self.dbi.getFields(etype)
        print(etype, ": ", data)
        self.assertGreater(len(data), 0)
        self.assertListEqual(expected, data)

    def test_getInfo(self):
        etype = 'MULTIPLEX'
        expected = {'prefix': u'MPX', 'xsitype': u'opex:bloodMultiplexData'}
        data = self.dbi.getInfo(etype)
        print(etype, ": ", data)
        self.assertGreater(len(data), 0)
        self.assertDictEqual(expected, data)

    def test_getInfo_missing(self):
        etype = 'CANTAB'
        data = self.dbi.getInfo(etype)
        print(etype, ": ", data)
        self.assertIsNone(data)

    def test_getCorrectID(self):
        incorrectid = '1040DR'
        correctid = '1040DA'
        cid = self.dbi.getCorrectID(incorrectid)
        self.assertEqual(correctid, cid)

    def test_getCorrectID_missing(self):
        incorrectid = '1020HC'
        cid = self.dbi.getCorrectID(incorrectid)
        self.assertEqual(incorrectid, cid)

    def test_getDatelessExpts(self):
        data = self.dbi.getDatelessExpts()
        self.assertGreater(len(data), 0)

    def test_getExpts(self):
        data = self.dbi.getExpts()
        self.assertGreater(len(data), 0)

    def test_getXsitypeFromPrefix(self):
        prefix = 'MPX'
        expected = 'opex:bloodMultiplexData'
        data = self.dbi.getXsitypeFromPrefix(prefix)
        self.assertEqual(expected, data)

    def test_getTotal(self):
        expt = 'GODIN'
        expected = 5
        data = self.dbi.getTotal(expt)
        self.assertEqual(expected, data)

    def test_getInterval(self):
        expt = 'GODIN'
        expected = 3
        data = self.dbi.getInterval(expt)
        self.assertEqual(expected, data)

    def test_getInfo_TASK(self):
        """ Checking taskret and taskencode """
        expt = 'TASKRET'
        expected = 'opex:fmritaskret'
        data = self.dbi.getInfo(expt)
        self.assertEqual(expected, data['xsitype'])
        fields = self.dbi.getFields(expt)
        self.assertGreater(len(fields), 0)
        expt = 'TASKENCODE'
        expected = 'opex:fmritaskencode'
        data = self.dbi.getInfo(expt)
        self.assertEqual(expected, data['xsitype'])
        fields = self.dbi.getFields(expt)
        self.assertGreater(len(fields), 0)