实际上,我在 Django 中有一个 API 端点,我在其中运行一个脚本,该脚本在运行时创建数据库并在设置文件中添加配置。 当我为该端点编写测试用例时,它在拆除测试用例时抛出以下错误。
错误:tearDownClass(tenants.tests.test_apis.test_tenant_apis.TenantCreationTests)
回溯(最后一次通话): 文件“/home/dev/Documents/MUSEAPI/muse-api/venv/lib/python3.8/site-packages/django/test/testcases.py”,第 372 行,在 _remove_databases_failures setattr(连接,名称,方法。包装) AttributeError: 'function' 对象没有属性 'wrapped'
下面是脚本,我用它来配置数据库
import json
import environ
import psycopg2
from django.conf import settings
from django.core.management import call_command
env = environ.Env(
DEBUG=(bool, False)
)
environ.Env.read_env()
def configure_db_script(db_name):
db_configuration = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': db_name,
'USER': env('DATABASE_USER'),
'PASSWORD': env('DATABASE_PASSWORD'),
'HOST': env('DATABASE_HOST'),
'PORT': env('DATABASE_PORT'),
}
db_configuration1 = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': db_name,
'USER': env('DATABASE_USER'),
'PASSWORD': env('DATABASE_PASSWORD'),
'HOST': env('DATABASE_HOST'),
'PORT': env('DATABASE_PORT'),
'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_MAX_AGE': 0,
'CONN_HEALTH_CHECKS': False,
'OPTIONS': {},
'TIME_ZONE': None,
'TEST': {
'CHARSET': None,
'COLLATION': None,
'MIGRATE': True,
'MIRROR': None,
'NAME': None
}
}
default_connection = psycopg2.connect(
database='postgres',
user=env('DATABASE_USER'),
password=env('DATABASE_PASSWORD'),
host=env('DATABASE_HOST'),
port=env('DATABASE_PORT'),
)
settings.DATABASES[db_name] = db_configuration1
with default_connection.cursor() as cursor:
default_connection.autocommit = True
cursor.execute(f'CREATE DATABASE {db_name}')
with open('settings.py', 'r') as f:
data = f.readlines()
with open('settings.py', 'w') as f:
for line in data:
if line.startswith('DATABASES'):
db_json = json.dumps(db_configuration, indent=4)
configured_json = configure_json(db_json, db_name)
f.write('DATABASES = ' + '{' + configured_json + '\n')
elif line.startswith('ALLOWED_HOSTS'):
f.write('ALLOWED_HOSTS = ' + '[\n' + '\'' + db_name + '\'' + ',')
else:
f.write(line)
call_command('migrate', database=db_name, app_label='users')
settings.ALLOWED_HOSTS.append(db_name)
def configure_json(data, db_name):
data = '\n' + '\'' + str(db_name) + '\'' + ': ' + str(data) + ','
return data
我不明白实际的错误。我试过模拟端点,但做不到。 任何有帮助的人都将不胜感激