def test_service_name(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() settings['OPTIONS'] = {'service': 'my_service'} settings['NAME'] = '' params = DatabaseWrapper(settings).get_connection_params() self.assertEqual(params['service'], 'my_service') self.assertNotIn('database', params)
def test_service_name_default_db(self): # None is used to connect to the default 'postgres' db. from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() settings['NAME'] = None settings['OPTIONS'] = {'service': 'django_test'} params = DatabaseWrapper(settings).get_connection_params() self.assertEqual(params['database'], 'postgres') self.assertNotIn('service', params)
def test_database_name_empty(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() settings['NAME'] = '' msg = ( "settings.DATABASES is improperly configured. Please supply the " "NAME or OPTIONS['service'] value.") with self.assertRaisesMessage(ImproperlyConfigured, msg): DatabaseWrapper(settings).get_connection_params()
def setrole_connection(*, sender: Type[PostgreSQLDatabaseWrapper], connection: PostgreSQLDatabaseWrapper, **kwargs: Any) -> None: global warning_given role = None if "set_role" in connection.settings_dict: role = connection.settings_dict["set_role"] elif "SET_ROLE" in connection.settings_dict: role = connection.settings_dict["SET_ROLE"] if role: connection.cursor().execute("SET ROLE %s", (role, )) else: if not warning_given: warnings.warn( "postgresql_setrole app is installed, but no SET_ROLE value is in settings.DATABASE" ) warning_given = True # Once is enough
def test_service_name(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() settings["OPTIONS"] = {"service": "my_service"} settings["NAME"] = "" params = DatabaseWrapper(settings).get_connection_params() self.assertEqual(params["service"], "my_service") self.assertNotIn("database", params)
def test_service_name_default_db(self): # None is used to connect to the default 'postgres' db. from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() settings["NAME"] = None settings["OPTIONS"] = {"service": "django_test"} params = DatabaseWrapper(settings).get_connection_params() self.assertEqual(params["database"], "postgres") self.assertNotIn("service", params)
def test_database_name_too_long(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() max_name_length = connection.ops.max_name_length() settings['NAME'] = 'a' + (max_name_length * 'a') msg = ('Database names longer than %d characters are not supported by ' 'PostgreSQL. Supply a shorter NAME in settings.DATABASES.' ) % max_name_length with self.assertRaisesMessage(ImproperlyConfigured, msg): DatabaseWrapper(settings).get_connection_params()
def database_init_signal(signal, sender: DatabaseWrapper, connection: DatabaseWrapper, **kwargs): """ On database connection create Database """ database_name: str = f"{settings.DATABASES['default']['NAME']}" cursor = connection.cursor() try: cursor.execute(f'CREATE DATABASE "{database_name}"') except ProgrammingError: print("Database already exist")
def test_database_name_too_long(self): from django.db.backends.postgresql.base import DatabaseWrapper settings = connection.settings_dict.copy() max_name_length = connection.ops.max_name_length() settings['NAME'] = 'a' + (max_name_length * 'a') msg = ("The database name '%s' (%d characters) is longer than " "PostgreSQL's limit of %s characters. Supply a shorter NAME in " "settings.DATABASES.") % (settings['NAME'], max_name_length + 1, max_name_length) with self.assertRaisesMessage(ImproperlyConfigured, msg): DatabaseWrapper(settings).get_connection_params()