def test_0020_pickling(self): ''' Test if the lazy rendering object can be pickled and rendered with a totally different context (when no application, request or transaction bound objects are present). ''' with Transaction().start(DB_NAME, USER, CONTEXT) as txn: self.setup_defaults() app = self.get_app() with app.test_request_context('/'): response = render_template( 'tests/test-changing-context.html', variable="a" ) self.assertEqual(response, 'a') pickled_response = pickle.dumps(response) txn.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME) with Transaction().start(DB_NAME, USER, CONTEXT) as txn: self.setup_defaults() app = self.get_app() with app.test_request_context('/'): response = pickle.loads(pickled_response) self.assertEqual(response, 'a') txn.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME)
def test_0020_pickling(self): ''' Test if the lazy rendering object can be pickled and rendered with a totally different context (when no application, request or transaction bound objects are present). ''' with Transaction().start(DB_NAME, USER, CONTEXT) as txn: self.setup_defaults() app = self.get_app() with app.test_request_context('/'): response = render_template('tests/test-changing-context.html', variable="a") self.assertEqual(response, 'a') pickled_response = pickle.dumps(response) txn.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME) with Transaction().start(DB_NAME, USER, CONTEXT) as txn: self.setup_defaults() app = self.get_app() with app.test_request_context('/'): response = pickle.loads(pickled_response) self.assertEqual(response, 'a') txn.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME)
def test_0040_inheritance(self): '''Test if templates are read in the order of the tryton module dependency graph. To test this we install the test module now and then try to load a template which is different with the test module. ''' trytond.tests.test_tryton.install_module('nereid_test') with Transaction().start(DB_NAME, USER, CONTEXT) as txn: # noqa # Add nereid_test also to list of modules installed so # that it is also added to the templates path self.setup_defaults() app = self.get_app() self.assertEqual(len(app.jinja_loader.loaders), 3) with app.test_request_context('/'): self.assertEqual( render_template('tests/from-module.html'), 'from-nereid-test-module' ) txn.rollback() Cache.drop(DB_NAME)
def wrapper(*args, **kwargs): transaction = Transaction() with transaction.start(DB_NAME, user, context=context): result = func(*args, **kwargs) transaction.cursor.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME) return result
def wrapper(*args, **kwargs): transaction = Transaction() with transaction.start(DB_NAME, user, context=context): result = func(*args, **kwargs) transaction.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME) return result
def drop_db(name=DB_NAME): if db_exist(name): database = backend.Database(name) database.close() with Transaction().start(None, 0, close=True, autocommit=True) as transaction: database.drop(transaction.connection, name) Pool.stop(name) Cache.drop(name)
def drop_db(name=DB_NAME): if db_exist(name): Database = backend.get('Database') database = Database(name) database.close() with Transaction().start( None, 0, close=True, autocommit=True, _nocache=True) \ as transaction: database.kill_other_sessions(transaction.connection, name) database.drop(transaction.connection, name) Pool.stop(name) Cache.drop(name)
def drop_db(name=DB_NAME): if db_exist(name): Database = backend.get('Database') database = Database(name) database.close() if name in Cache._listener: del Cache._listener[name] with Transaction().start(None, 0, close=True, autocommit=True) as transaction: Cache.drop(name) database.drop(transaction.connection, name) Pool.stop(name)
def test_0040_headers(self): ''' Change registrations headers and check ''' trytond.tests.test_tryton.install_module('nereid_test') with Transaction().start(DB_NAME, USER, CONTEXT) as txn: self.setup_defaults() app = self.get_app() with app.test_client() as c: response = c.get('/test-lazy-renderer') self.assertEqual(response.headers['X-Test-Header'], 'TestValue') self.assertEqual(response.status_code, 201) txn.rollback() # Drop the cache as the transaction is rollbacked Cache.drop(DB_NAME)
def drop(request, database_name, password): Database = backend.get('Database') security.check_super(password) database = Database(database_name) database.close() # Sleep to let connections close time.sleep(1) with Transaction().start(None, 0, close=True, autocommit=True) \ as transaction: try: database.drop(transaction.connection, database_name) except Exception: logger.error('DROP DB: %s failed', database_name, exc_info=True) raise else: logger.info('DROP DB: %s', database_name) Pool.stop(database_name) Cache.drop(database_name) return True
def transaction(request): """Yields transaction with installed module. """ # Importing transaction directly causes cyclic dependency in 3.6 from trytond.tests.test_tryton import USER, CONTEXT, DB_NAME, POOL from trytond.tools.singleton import Singleton # noqa from trytond.transaction import Transaction from trytond.cache import Cache # Inject helper functions in instance on which test function was collected. request.instance.POOL = POOL request.instance.USER = USER request.instance.CONTEXT = CONTEXT request.instance.DB_NAME = DB_NAME transaction = Transaction() with transaction.start(DB_NAME, USER, context=CONTEXT) as txn: yield txn transaction.rollback() Cache.drop(DB_NAME)
def test_0040_inheritance(self): '''Test if templates are read in the order of the tryton module dependency graph. To test this we install the test module now and then try to load a template which is different with the test module. ''' trytond.tests.test_tryton.install_module('nereid_test') with Transaction().start(DB_NAME, USER, CONTEXT) as txn: # noqa # Add nereid_test also to list of modules installed so # that it is also added to the templates path self.setup_defaults() app = self.get_app() self.assertEqual(len(app.jinja_loader.loaders), 3) with app.test_request_context('/'): self.assertEqual(render_template('tests/from-module.html'), 'from-nereid-test-module') txn.rollback() Cache.drop(DB_NAME)
def threaded_send_email(email, smtp_server): """ A new threaded email sender. This is required because there is no transaction in the new thread that is spawned and sendemail tries to create a new cursor from an existing transaction. So create the new transaction here, refresh the active record objects and call sendmail like the cron would have """ with Transaction().start(DB_NAME, USER, context=CONTEXT): # email active record is from old transaction, so referesh it. email = EmailQueue(email.id) database = backend.get('database') try: # Now send the email email.send(smtp_server) except database.DatabaseOperationalError: # This specific email could not be sent because of a # transaction serialization error searialization_error_q.put(email.id) finally: Cache.drop(DB_NAME)
def drop_db(name=DB_NAME): if db_exist(name): Database = backend.get('Database') database = Database(name) database.close() with Transaction().start( None, 0, close=True, autocommit=True, _nocache=True) \ as transaction: # PJA: fix concurrent access when dropping database attempt = 0 max_attempts = 10 while True: attempt += 1 try: database.drop(transaction.connection, name) break except: if attempt > max_attempts: raise else: time.sleep(3) Pool.stop(name) Cache.drop(name)