Exemplo n.º 1
0
    def test_Modify(self):
        tabname = 'test_Modify'
        self.tdb.CreateTable(tabname, ['Name', 'Type', 'Access'])
        self.tdb.Insert(tabname, {
            'Name': 'Index to MP3 files.doc',
            'Type': 'Word',
            'Access': '8'
        })
        self.tdb.Insert(tabname, {'Name': 'Nifty.MP3', 'Access': '1'})
        self.tdb.Insert(tabname, {'Type': 'Unknown', 'Access': '0'})

        def set_type(type):
            if type is None:
                return 'MP3'
            else:
                return type

        def increment_access(count):
            return str(int(count) + 1)

        def remove_value(value):
            return None

        self.tdb.Modify(tabname,
                        conditions={'Access': dbtables.ExactCond('0')},
                        mappings={'Access': remove_value})
        self.tdb.Modify(tabname,
                        conditions={'Name': dbtables.LikeCond('%MP3%')},
                        mappings={'Type': set_type})
        self.tdb.Modify(tabname,
                        conditions={'Name': dbtables.LikeCond('%')},
                        mappings={'Access': increment_access})
        try:
            self.tdb.Modify(tabname,
                            conditions={'Name': dbtables.LikeCond('%')},
                            mappings={'Access': 'What is your quest?'})
        except TypeError:
            pass
        else:
            raise RuntimeError, 'why was TypeError not raised for bad callable?'

        values = self.tdb.Select(
            tabname, None, conditions={'Type': dbtables.ExactCond('Unknown')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Name'], None, values)
        self.assertEqual(values[0]['Access'], None, values)
        values = self.tdb.Select(
            tabname,
            None,
            conditions={'Name': dbtables.ExactCond('Nifty.MP3')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Type'], 'MP3', values)
        self.assertEqual(values[0]['Access'], '2', values)
        values = self.tdb.Select(
            tabname, None, conditions={'Name': dbtables.LikeCond('%doc%')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Type'], 'Word', values)
        self.assertEqual(values[0]['Access'], '9', values)
        return
Exemplo n.º 2
0
    def test_CondObjs(self):
        tabname = "test_CondObjs"

        self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e', 'p'])

        self.tdb.Insert(tabname, {
            'a': "the letter A",
            'b': "the letter B",
            'c': "is for cookie"
        })
        self.tdb.Insert(
            tabname, {
                'a': "is for aardvark",
                'e': "the letter E",
                'c': "is for cookie",
                'd': "is for dog"
            })
        self.tdb.Insert(
            tabname, {
                'a': "the letter A",
                'e': "the letter E",
                'c': "is for cookie",
                'p': "is for Python"
            })

        values = self.tdb.Select(
            tabname, ['p', 'e'],
            conditions={'e': dbtables.PrefixCond('the l')})
        self.assertEqual(len(values), 2, values)
        self.assertEqual(values[0]['e'], values[1]['e'], values)
        self.assertNotEqual(values[0]['p'], values[1]['p'], values)

        values = self.tdb.Select(
            tabname, ['d', 'a'],
            conditions={'a': dbtables.LikeCond('%aardvark%')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['d'], "is for dog", values)
        self.assertEqual(values[0]['a'], "is for aardvark", values)

        values = self.tdb.Select(
            tabname, None, {
                'b': dbtables.Cond(),
                'e': dbtables.LikeCond('%letter%'),
                'a': dbtables.PrefixCond('is'),
                'd': dbtables.ExactCond('is for dog'),
                'c': dbtables.PrefixCond('is for'),
                'p': lambda s: not s
            })
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['d'], "is for dog", values)
        self.assertEqual(values[0]['a'], "is for aardvark", values)
Exemplo n.º 3
0
    def test_Modify(self):
        tabname = "test_Modify"
        self.tdb.CreateTable(tabname, ['Name', 'Type', 'Access'])

        self.tdb.Insert(tabname, {
            'Name': 'Index to MP3 files.doc',
            'Type': 'Word',
            'Access': '8'
        })
        self.tdb.Insert(tabname, {'Name': 'Nifty.MP3', 'Access': '1'})
        self.tdb.Insert(tabname, {'Type': 'Unknown', 'Access': '0'})

        def set_type(type):
            if type is None:
                return 'MP3'
            return type

        def increment_access(count):
            return str(int(count) + 1)

        def remove_value(value):
            return None

        self.tdb.Modify(tabname,
                        conditions={'Access': dbtables.ExactCond('0')},
                        mappings={'Access': remove_value})
        self.tdb.Modify(tabname,
                        conditions={'Name': dbtables.LikeCond('%MP3%')},
                        mappings={'Type': set_type})
        self.tdb.Modify(tabname,
                        conditions={'Name': dbtables.LikeCond('%')},
                        mappings={'Access': increment_access})

        try:
            self.tdb.Modify(tabname,
                            conditions={'Name': dbtables.LikeCond('%')},
                            mappings={'Access': 'What is your quest?'})
        except TypeError:
            # success, the string value in mappings isn't callable
            pass
        else:
            raise RuntimeError, "why was TypeError not raised for bad callable?"

        # Delete key in select conditions
        values = self.tdb.Select(
            tabname, None, conditions={'Type': dbtables.ExactCond('Unknown')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Name'], None, values)
        self.assertEqual(values[0]['Access'], None, values)

        # Modify value by select conditions
        values = self.tdb.Select(
            tabname,
            None,
            conditions={'Name': dbtables.ExactCond('Nifty.MP3')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Type'], "MP3", values)
        self.assertEqual(values[0]['Access'], "2", values)

        # Make sure change applied only to select conditions
        values = self.tdb.Select(
            tabname, None, conditions={'Name': dbtables.LikeCond('%doc%')})
        self.assertEqual(len(values), 1, values)
        self.assertEqual(values[0]['Type'], "Word", values)
        self.assertEqual(values[0]['Access'], "9", values)