mirror of https://github.com/sgoudham/Enso-Bot.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.5 KiB
Python
85 lines
3.5 KiB
Python
|
|
# Establish the common DatabaseOperations instance, which we call 'db'.
|
|
# Much thanks to cmkmrr for a lot of the code base here
|
|
|
|
from django.conf import settings
|
|
import sys
|
|
|
|
# A few aliases, because there's FQMNs now
|
|
engine_modules = {
|
|
'django.db.backends.postgresql_psycopg2': 'postgresql_psycopg2',
|
|
'django.db.backends.sqlite3': 'sqlite3',
|
|
'django.db.backends.mysql': 'mysql',
|
|
'mysql_oursql.standard': 'mysql',
|
|
'django.db.backends.oracle': 'oracle',
|
|
'sql_server.pyodbc': 'sql_server.pyodbc', #django-pyodbc-azure
|
|
'django_pyodbc': 'sql_server.pyodbc', #django-pyodbc
|
|
'sqlserver_ado': 'sql_server.pyodbc', #django-mssql
|
|
'firebird': 'firebird', #django-firebird
|
|
'django.contrib.gis.db.backends.postgis': 'postgresql_psycopg2',
|
|
'django.contrib.gis.db.backends.spatialite': 'sqlite3',
|
|
'django.contrib.gis.db.backends.mysql': 'mysql',
|
|
'django.contrib.gis.db.backends.oracle': 'oracle',
|
|
'doj.backends.zxjdbc.postgresql': 'postgresql_psycopg2', #django-jython
|
|
'doj.backends.zxjdbc.mysql': 'mysql', #django-jython
|
|
'doj.backends.zxjdbc.oracle': 'oracle', #django-jython
|
|
'mysql.connector.django': 'mysql', # MySQL Connector/Python
|
|
}
|
|
|
|
# First, work out if we're multi-db or not, and which databases we have
|
|
try:
|
|
from django.db import DEFAULT_DB_ALIAS
|
|
except ImportError:
|
|
#### 1.1 or below ####
|
|
# We'll 'fake' multi-db; set the default alias
|
|
DEFAULT_DB_ALIAS = 'default'
|
|
# SOUTH_DATABASE_ADAPTER is an optional override if you have a different module
|
|
engine = getattr(settings, "SOUTH_DATABASE_ADAPTER", "south.db.%s" % settings.DATABASE_ENGINE)
|
|
# And then, we have one database with one engine
|
|
db_engines = {DEFAULT_DB_ALIAS: engine}
|
|
else:
|
|
#### 1.2 or above ####
|
|
# Loop over the defined databases, gathering up their engines
|
|
db_engines = dict([
|
|
# Note we check to see if contrib.gis has overridden us.
|
|
(alias, "south.db.%s" % engine_modules[db_settings['ENGINE']])
|
|
for alias, db_settings in settings.DATABASES.items()
|
|
if db_settings['ENGINE'] in engine_modules
|
|
])
|
|
# Update with any overrides
|
|
db_engines.update(getattr(settings, "SOUTH_DATABASE_ADAPTERS", {}))
|
|
# Check there's no None engines, or...
|
|
for alias, engine in db_engines.items():
|
|
if engine is None:
|
|
# They've used a backend we don't support
|
|
sys.stderr.write(
|
|
(
|
|
"There is no South database module for your database backend '%s'. " + \
|
|
"Please either choose a supported database, check for " + \
|
|
"SOUTH_DATABASE_ADAPTER[S] settings, " + \
|
|
"or remove South from INSTALLED_APPS.\n"
|
|
) % (settings.DATABASES[alias]['ENGINE'],)
|
|
)
|
|
sys.exit(1)
|
|
|
|
# Now, turn that into a dict of <alias: south db module>
|
|
dbs = {}
|
|
try:
|
|
for alias, module_name in db_engines.items():
|
|
module = __import__(module_name, {}, {}, [''])
|
|
dbs[alias] = module.DatabaseOperations(alias)
|
|
except ImportError:
|
|
# This error should only be triggered on 1.1 and below.
|
|
sys.stderr.write(
|
|
(
|
|
"There is no South database module '%s' for your database. " + \
|
|
"Please either choose a supported database, check for " + \
|
|
"SOUTH_DATABASE_ADAPTER[S] settings, " + \
|
|
"or remove South from INSTALLED_APPS.\n"
|
|
) % (module_name,)
|
|
)
|
|
sys.exit(1)
|
|
|
|
# Finally, to make old migrations work, keep 'db' around as the default database
|
|
db = dbs[DEFAULT_DB_ALIAS]
|