def handle_app(self, app, **options): print('install app') from keops.db import scripts db = options['database'] if scripts.install('.'.join(app.__name__.split('.')[:-1]), db): scripts.syncdb(db) print('Application "%s" successfully installed on database "%s".' % (app.__name__.split('.')[-2], db))
def handle(self, *args, **options): from keops.db import scripts db = options['database'] verbosity = options['verbosity'] scripts.createdb(db) scripts.syncdb(db) call_command('installapps', database=db, verbosity=verbosity)
def test_multi_db(self): from keops.modules.base import models # add db2 alias dbs = settings.DATABASES dbs['db2'] = { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', 'USER': '******', 'SCHEMA': '', 'PASSWORD': '******', 'HOST': 'localhost', 'PORT': '', } self.settings(DATABASES=dbs) from keops.db import scripts scripts.syncdb('db2') u = models.User(username='******') u.set_password('db2testpwd') u.save(using='db2') response = self.client.get('/db/?alias=default') assert response.status_code == 200 assert response.content == b'default' response = self.client.get('/db/?alias=default&next=/admin/') assert response.status_code == 302 # try to login response = self.client.post(settings.LOGIN_URL + '?next=/admin/', {'username': '******', 'password': '******'}) assert response.status_code == 302 # test db2 alias response = self.client2.get('/db/?alias=db2') assert response.status_code == 200 assert response.content == b'db2' response = self.client2.get('/db/?alias=db2&next=/admin/') # must redirect to login assert response.status_code == 302 # try to login response = self.client2.post(settings.LOGIN_URL + '?next=/admin/', {'username': '******', 'password': '******'}) assert response.status_code == 302 response = self.client2.get(settings.LOGOUT_URL) response = self.client2.get('/db/?alias=db2&next=/admin/') # try invalid login response = self.client2.post(settings.LOGIN_URL + '?next=/admin/', {'username': '******', 'password': '******'}) assert response.status_code == 200 # try login response = self.client2.post(settings.LOGIN_URL + '?next=/admin/', {'username': '******', 'password': '******'}) assert response.status_code == 302 response = self.client.get('/db/') assert response.content == b'default' response = self.client2.get('/db/') assert response.content == b'db2' # CRUD tests # CREATE company = {'model': 'base.company', 'data': json.dumps({'name': 'My test company on default alias'})} response = self.client.post('/db/submit/', company) assert response.status_code == 200 company = {'model': 'base.company', 'data': json.dumps({'name': 'My test company on db2 alias'})} response = self.client2.post('/db/submit/', company) assert response.status_code == 200 # Check data exists # READ cp1 = models.Company.objects.using('default').get(name='My test company on default alias') cp2 = models.Company.objects.using('db2').get(name='My test company on db2 alias') # UPDATE company = {'model': 'base.company', 'pk': cp1.pk, 'data': json.dumps({'name': 'default alias'})} response = self.client.post('/db/submit/', company) assert response.status_code == 200 company = {'model': 'base.company', 'pk': cp2.pk, 'data': json.dumps({'name': 'db2 alias'})} response = self.client2.post('/db/submit/', company) assert response.status_code == 200 # DELETE cp1 = models.Company.objects.using('default').get(name='default alias') cp2 = models.Company.objects.using('db2').get(name='db2 alias') response = self.client.delete('/db/submit/?model=base.company&pk=%d' % cp1.pk) assert response.status_code == 200 response = self.client2.delete('/db/submit/?model=base.company&pk=%d' % cp2.pk) assert response.status_code == 200
def handle(self, *args, **options): from keops.db import scripts scripts.dropdb(options['database']) scripts.createdb(options['database']) scripts.syncdb(options['database'])