Example #1
0
    def test_13_index_exists(self):

        db = Database(self._db_name)
        table = db.table(self._tb_name)
        table.index('by_age_name', '{age:03}{name}')
        table.index('by_name', '{name}')
        table.index('by_age', '{age:03}', duplicates=True)
        self.assertTrue(table.exists('by_name'))
        db.close()
        db = Database(self._db_name)
        table = db.table(self._tb_name)
        self.assertTrue(table.exists('by_name'))
Example #2
0
    def test_12_table_reopen(self):

        db = Database(self._db_name)
        table = db.table(self._tb_name)
        table.index('by_age_name', '{age:03}{name}')
        table.index('by_name', '{name}')
        table.index('by_age', '{age:03}', duplicates=True)
        self.generate_data(db, self._tb_name)
        db.close()
        db = Database(self._db_name)
        table = db.table(self._tb_name)
        self.assertEqual(['by_age', 'by_age_name', 'by_name'], table.indexes)
Example #3
0
    def test_08_delete_binlog(self):
        db = Database(self._db_name)
        db.binlog(True)
        self.generate_data(db, self._tb_name)
        self.assertEqual(db.tables_all,
                         ['__binlog__', '__metadata__', 'demo1'])
        db.close()

        db = Database(self._db_name)
        db.drop(self._tb_name)
        db.drop('__binlog__')
        self.assertEqual(db.tables_all, ['__metadata__'])
        with self.assertRaises(xTableMissing):
            db.drop('fred')
Example #4
0
db = Database("MyDatabase")  # Open (/create) a database
table = db.table('people')  # Open (/create) a table

print('>> Index table by name and age')
table.index('by_name', '{name}')
table.index('by_age', '{age:03}', duplicates=True)

print('>> Adding data')
for item in data:
    table.append(item)
print("Count=", table.records)

print('>> Scanning table sequentially')
for record in table.find():
    print('{name} is {age} years old'.format(**record))

print('>> Scanning tables in name order [string index]')
for record in table.find('by_name'):
    print('{name} sorted alphabetically'.format(**record))

print('>> Scanning table in age order [numerical index]')
for record in table.find('by_age'):
    print('{age} - {name} in ascending order of age'.format(**record))

print('>> Scanning on name index with filter')
for record in table.find('by_name', expression=lambda doc: doc['age'] > 40):
    print('{name} is {age} years old (filtered age>40)'.format(**record))

db.drop('people')
db.close()
Example #5
0
class UnitTests(unittest.TestCase):

    def setUp(self):
        call(['rm', '-rf', 'databases/test_orm_addressbook'])
        self._db = Database('databases/test_orm_addressbook', size=size_mb(10))
        self.tbl_address_book = AddressBookModel(table=self._db.table('address_book'))
        self.tbl_business = BusinessModel(table=self._db.table('business'))
        self.tbl_person = PersonModel(table=self._db.table('person'))
        self.tbl_address = AddressModel(table=self._db.table('address'))

        ManyToMany(self._db, self.tbl_address_book, self.tbl_business)
        ManyToMany(self._db, self.tbl_address_book, self.tbl_person)
        ManyToMany(self._db, self.tbl_business, self.tbl_person)
        ManyToMany(self._db, self.tbl_business, self.tbl_address)
        ManyToMany(self._db, self.tbl_person, self.tbl_address)

    def tearDown(self):
        self._db.close()

    @pytest.fixture(autouse=True)
    def capfd(self, capfd):
        self.capfd = capfd

    def test_01_add_addressbook(self):
        self.tbl_address_book.add({'name': 'Personal'}).save()
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book.name, 'Personal')

    def test_02_add_business(self):
        book = self.tbl_address_book.add({'name': 'Personal'})
        book.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book.save()
        self.assertEqual(book.business[0].name, 'Business#1')
        self.assertEqual(book.business[1].name, 'Business#2')
        self.assertEqual(book.business[2].name, 'Business#3')
        self.assertEqual(book.business[0].person[0].name, 'Person#1')
        self.assertEqual(book.business[1].person[0].name, 'Person#2')
        self.assertEqual(book.business[2].person[0].name, 'Person#3')
        self.assertEqual(book.business[0].person[0].address[0].postcode, 'PC001')
        self.assertEqual(book.business[1].person[0].address[0].postcode, 'PC002')
        self.assertEqual(book.business[2].person[0].address[0].postcode, 'PC003')
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        print(book)
        print(book.business)
        self.assertEqual(book.business[0].name, 'Business#1')
        self.assertEqual(book.business[1].name, 'Business#2')
        self.assertEqual(book.business[2].name, 'Business#3')
        self.assertEqual(book.business[0].person[0].name, 'Person#1')
        self.assertEqual(book.business[1].person[0].name, 'Person#2')
        self.assertEqual(book.business[2].person[0].name, 'Person#3')
        self.assertEqual(book.business[0].person[0].address[0].postcode, 'PC001')
        self.assertEqual(book.business[1].person[0].address[0].postcode, 'PC002')
        self.assertEqual(book.business[2].person[0].address[0].postcode, 'PC003')

    def test_03_add_multiple_person(self):
        book = self.tbl_address_book.add({'name': 'Personal'})
        book.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book.save()
        business = list(self.tbl_business.find(expression=lambda doc: doc['name'] == 'Business#1'))[0]
        business.person.append({'name': 'Appended Person#1'})
        business.person.append({'name': 'Appended Person#2'})
        business.person.append({'name': 'Appended Person#3'})
        self.assertEqual(len(business.person), 4)
        business.save()
        self.assertEqual(len(business.person), 4)
        self.assertEqual(business.person[1].name, 'Appended Person#1')
        self.assertEqual(business.person[2].name, 'Appended Person#2')
        self.assertEqual(business.person[3].name, 'Appended Person#3')
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book.business[0].person[1].name, 'Appended Person#1')
        self.assertEqual(book.business[0].person[2].name, 'Appended Person#2')
        self.assertEqual(book.business[0].person[3].name, 'Appended Person#3')

    def test_04_add_and_delete(self):
        book = self.tbl_address_book.add({'name': 'Personal'})
        book.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book.save()
        business = list(self.tbl_business.find(expression=lambda doc: doc['name'] == 'Business#1'))[0]
        business.person.append({'name': 'Appended Person#1'})
        business.person.append({'name': 'Appended Person#2'})
        business.person.append({'name': 'Appended Person#3'})
        business.save()
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        del book.business[0].person[2]
        book.save()
        self.assertEqual(book.business[0].person[1].name, 'Appended Person#1')
        self.assertEqual(book.business[0].person[2].name, 'Appended Person#3')
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book.business[0].person[1].name, 'Appended Person#1')
        self.assertEqual(book.business[0].person[2].name, 'Appended Person#3')

    def test_04_add_and_delete_and_add(self):
        book = self.tbl_address_book.add({'name': 'Personal'})
        book.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode': 'PC001'})
        book.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode': 'PC002'})
        book.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode': 'PC003'})
        book.save()
        business = list(self.tbl_business.find(expression=lambda doc: doc['name'] == 'Business#1'))[0]
        business.person.append({'name': 'Appended Person#1'})
        business.person.append({'name': 'Appended Person#2'})
        business.person.append({'name': 'Appended Person#3'})
        business.save()
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        del book.business[0].person[2]
        book.save()
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        book.business[0].person.append({'name': 'Appended Person#2'})
        book.save()
        book = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book.business[0].person[1].name, 'Appended Person#1')
        self.assertEqual(book.business[0].person[2].name, 'Appended Person#3')
        self.assertEqual(book.business[0].person[3].name, 'Appended Person#2')
        self.assertEqual(len(book.business[0].person), 4)

    def test_05_traverse(self):
        book = self.tbl_address_book.add({'name': 'Personal'})
        book.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book.save()
        results = ([address.postcode
                    for book in self.tbl_address_book.find()
                    for business in book.business
                    for person in business.person
                    for address in person.address
        ])
        self.assertEqual(results, ['PC001', 'PC002', 'PC003'])
        books = list(set([book.name
                          for address in self.tbl_address.find()
                          for person in address.person
                          for business in person.business
                          for book in business.address_book
        ]))
        self.assertEqual(books, ['Personal'])

    def test_06_sharing_businesses(self):
        book1 = self.tbl_address_book.add({'name': 'Personal'})
        book1.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book1.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book1.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book1.save()
        book2 = self.tbl_address_book.add({'name': 'Business'})
        book2.business.append(book1.business[0])
        book2.business.append(book1.business[1])
        book2.business.append(book1.business[2])
        book2.save()
        self.tbl_address_book.list()
        self.tbl_business.list()
        self.tbl_person.list()
        self.tbl_address.list()
        results = ([address.postcode
                    for book in self.tbl_address_book.find()
                    for business in book.business
                    for person in business.person
                    for address in person.address
        ])
        self.assertEqual(results, ['PC001', 'PC002', 'PC003', 'PC001', 'PC002', 'PC003'])
        books = list(set([book.name
                          for address in self.tbl_address.find()
                          for person in address.person
                          for business in person.business
                          for book in business.address_book
        ]))
        books.sort()
        self.assertEqual(books, ['Business', 'Personal'])

    def test_07_crosspatch_book_person(self):
        book1 = self.tbl_address_book.add({'name': 'Personal'})
        book1.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book1.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book1.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book1.save()
        book2 = self.tbl_address_book.add({'name': 'Business'})
        book2.business.append(book1.business[0])
        book2.business.append(book1.business[1])
        book2.business.append(book1.business[2])
        book2.save()
        book1.person.append(list(self.tbl_person.find(expression=lambda doc: doc['name'] == 'Person#1'))[0])
        book1.person.append(list(self.tbl_person.find(expression=lambda doc: doc['name'] == 'Person#3'))[0])
        book1.save()
        book1 = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book1.person[0].name, "Person#1")
        self.assertEqual(book1.person[1].name, "Person#3")

    def test_08_amend_crosspatch(self):
        book1 = self.tbl_address_book.add({'name': 'Personal'})
        book1.business.append({'name': 'Business#1'}).person.append({'name': 'Person#1'}).address.append({'postcode':'PC001'})
        book1.business.append({'name': 'Business#2'}).person.append({'name': 'Person#2'}).address.append({'postcode':'PC002'})
        book1.business.append({'name': 'Business#3'}).person.append({'name': 'Person#3'}).address.append({'postcode':'PC003'})
        book1.save()
        book2 = self.tbl_address_book.add({'name': 'Business'})
        book2.business.append(book1.business[0])
        book2.business.append(book1.business[1])
        book2.business.append(book1.business[2])
        book2.save()
        book1.person.append(list(self.tbl_person.find(expression=lambda doc: doc['name'] == 'Person#1'))[0])
        book1.person.append(list(self.tbl_person.find(expression=lambda doc: doc['name'] == 'Person#3'))[0])
        book1.save()
        book1 = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        book1.person[0].name += "!!"
        book1.save()
        book1 = list(self.tbl_address_book.find(expression=lambda doc: doc['name'] == 'Personal'))[0]
        self.assertEqual(book1.person[0].name, "Person#1!!")
        self.assertEqual(book1.business[0].person[0].name, "Person#1!!")
Example #6
0
class UnitTests(unittest.TestCase):

    def setUp(self):
        call(['rm', '-rf', "test_orm"])
        self._database = Database('test_orm', {'env': {'map_size': 1024 * 1024 * 10}})
        self._user_model = UserModel(table=self._database.table('users'))
        self._address_model = AddressModel(table=self._database.table('addresses'))
        self._links = ManyToMany(self._database, self._user_model, self._address_model)

    def tearDown(self):
        self._database.close()
        call(['rm', '-rf', "test_orm"])

    def generate_data_1(self):
        self._user_model.add({"forename":"tom", "surname": "smith", "dob_ddmmyyyy": "01/01/1971", "uid": 1})
        self._user_model.add({"forename":"dick", "surname": "smith", "dob_ddmmyyyy": "01/01/1972", "uid": 2})
        self._user_model.add({"forename":"harry", "surname": "smith", "dob_ddmmyyyy": "01/01/1973", "uid": 3})
        self._user_model.add({"forename":"sally", "surname": "jones", "dob_ddmmyyyy": "01/01/1969", "uid": 4})
        self._user_model.add({"forename":"mary", "surname": "jones", "dob_ddmmyyyy": "01/01/1968", "uid": 5})
        self._user_model.add({"forename":"sophie", "surname": "jones", "dob_ddmmyyyy": "01/01/1967", "uid": 6})
        self._user_model.add({"forename":"joker", "surname": "wildcard", "dob_ddmmyyyy": "01/01/1966", "uid": 7})
        self._address_model.add({"line1":"Address line 1 # 1", "line2": "Address line 21","postcode":"CFXX 1AA"})
        self._address_model.add({"line1":"Address line 1 # 2", "line2": "Address line 22","postcode":"CFXX 1BB"})
        self._address_model.add({"line1":"Address line 1 # 3", "line2": "Address line 23","postcode":"CFXX 1CC"})
        self._address_model.add({"line1":"Address line 1 # 4", "line2": "Address line 24","postcode":"CFXX 1DD"})

    @pytest.fixture(autouse=True)
    def capfd(self, capfd):
        self.capfd = capfd

    def test_01_check_records(self):
        self.generate_data_1()
        self.assertEqual(self._user_model._table.records, 7)
        self.assertEqual(self._address_model._table.records, 4)

    def test_02_add_new_address(self):
        self.generate_data_1()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({"line1": "Address line 1 # 5", "line2": "Address line 25","postcode": "CFXX 1DE"})
        doc.save()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({"line1": "Address line 1 # 6", "line2": "Address line 26", "postcode":"CFXX 1DF"})
        doc.save()
        doc = list(self._user_model.find())[0]
        self.assertEqual(doc.addresses[0].postcode, 'CFXX 1DE')
        self.assertEqual(doc.addresses[1].postcode, 'CFXX 1DF')
        doc.addresses[0].postcode += '!'

    def test_03_update_address(self):
        self.generate_data_1()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({"line1":"Address line 1 # 5", "line2": "Address line 25","postcode":"CFXX 1DE"})
        doc.addresses.append({"line1":"Address line 1 # 6", "line2": "Address line 26", "postcode":"CFXX 1DF"})
        doc.save()
        doc = list(self._user_model.find())[0]
        doc.addresses[0].postcode += '!'
        doc.addresses[1].postcode += '!'
        doc.save()
        doc = list(self._user_model.find())[0]
        self.assertEqual(doc.addresses[0].postcode, 'CFXX 1DE!')
        self.assertEqual(doc.addresses[1].postcode, 'CFXX 1DF!')

    def test_04_delete_address(self):
        self.generate_data_1()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({"line1": "Address line 1 # 5", "line2": "Address line 25", "postcode": "CFXX 1DE"})
        doc.addresses.append({"line1": "Address line 1 # 6", "line2": "Address line 26", "postcode": "CFXX 1DF"})
        doc.save()
        doc = list(self._user_model.find())[0]
        del doc.addresses[0]
        doc.save()
        doc = list(self._user_model.find())[0]
        self.assertEqual(doc.addresses[0].postcode, 'CFXX 1DF')
        self.assertEqual(len(doc.addresses), 1)

    def test_05_formatting_function(self):
        self.generate_data_1()
        self._user_model.list()
        out, err = self.capfd.readouterr()
        with open('tests/test_orm_table1.txt') as io:
            compare = io.read()
        self.maxDiff = None
        self.assertEqual(compare, out)

    def test_06_add_with_linked(self):
        self.generate_data_1()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({'line1': 'NEW LINE', 'postcode': 'NEW'})
        doc.addresses.append({'line1': 'NEW LINE1', 'postcode': 'NEW1'})
        doc.save()
        self.assertEqual(doc.addresses[0].postcode, 'NEW')
        self.assertEqual(len(doc.addresses), 2)

        doc = list(self._user_model.find())[0]
        self.assertEqual(doc.addresses[1].postcode, 'NEW1')
        self.assertEqual(len(doc.addresses), 2)

        self._database.close()
        self._database = Database('test_orm', {'env': {'map_size': 1024 * 1024 * 10}})
        self._user_model = UserModel(table=self._database.table('users'))
        self._address_model = AddressModel(table=self._database.table('addresses'))
        self._links = ManyToMany(self._database, self._user_model, self._address_model)

        doc = list(self._user_model.find())[0]
        self.assertEqual(doc.addresses[0].postcode, 'NEW')
        self.assertEqual(doc.addresses[1].postcode, 'NEW1')
        self.assertEqual(len(doc.addresses), 2)

    def test_07_complex(self):
        self.generate_data_1()
        doc = list(self._user_model.find())[0]
        doc.addresses.append({'address': 'address1', 'postcode': 'postcode1'})
        doc.addresses.append({'address': 'address2', 'postcode': 'postcode2'})
        doc.save()
        doc = list(self._user_model.find())[0]
        self.assertEqual(len(doc.addresses), 2)
        del doc.addresses[0]
        doc.save()
        doc = list(self._user_model.find())[0]
        self.assertEqual(len(doc.addresses), 1)
        self.assertEqual(doc.addresses[0].postcode, 'postcode2')
        address = list(self._address_model.find())[0]
        doc.addresses.append(address)
        doc.save()
        self.assertEqual(len(doc.addresses), 2)
        doc = list(self._user_model.find())[0]
        doc.addresses[0].postcode="GB"
        doc.save()

        self._database.close()
        self._database = Database('test_orm', {'env': {'map_size': 1024 * 1024 * 10}})
        self._user_model = UserModel(table=self._database.table('users'))
        self._address_model = AddressModel(table=self._database.table('addresses'))
        self._links = ManyToMany(self._database, self._user_model, self._address_model)

        doc = list(self._user_model.find())[0]
        self.assertEqual(len(doc.addresses), 2)
        self.assertEqual(doc.addresses[0].postcode, 'GB')