[0.9.15] - 2025-08-30
All checks were successful
Deploy on push / deploy (push) Successful in 5m42s

### 🔧 Fixed
- **🧾 Database Table Creation**: Унифицирован подход к созданию таблиц БД между продакшеном и тестами
  - Исправлена ошибка "no such table: author" в тестах
  - Обновлена функция `create_all_tables()` в `storage/schema.py` для использования стандартного SQLAlchemy подхода
  - Улучшены фикстуры тестов с принудительным импортом всех ORM моделей
  - Добавлена детальная диагностика создания таблиц в тестах
  - Добавлены fallback механизмы для создания таблиц в проблемных окружениях

### 🧪 Testing
- Все RBAC тесты теперь проходят успешно
- Исправлены фикстуры `test_engine`, `db_session` и `test_session_factory`
- Добавлены функции `ensure_all_tables_exist()` и `ensure_all_models_imported()` для диагностики

### 📝 Technical Details
- Заменен подход `create_table_if_not_exists()` на стандартный `Base.metadata.create_all()`
- Улучшена обработка ошибок при создании таблиц
- Добавлена проверка регистрации всех критических таблиц в metadata
This commit is contained in:
2025-08-30 22:20:58 +03:00
parent e1b0deeac0
commit 7325cdc5f5
5 changed files with 95 additions and 90 deletions

View File

@@ -112,7 +112,8 @@ def ensure_all_models_imported():
# Проверяем что все модели зарегистрированы
from orm.base import BaseModel as Base
registered_tables = list(Base.metadata.tables.keys())
print(f"🔍 All models imported, registered tables: {registered_tables}")
print(f"🔍 ensure_all_models_imported: {len(registered_tables)} tables registered")
print(f"📋 Registered tables: {registered_tables}")
# Проверяем что все критические таблицы зарегистрированы
required_tables = [
@@ -124,12 +125,15 @@ def ensure_all_models_imported():
]
missing_tables = [table for table in required_tables if table not in registered_tables]
if missing_tables:
print(f"⚠️ Missing tables in metadata: {missing_tables}")
print("🔄 Attempting to register missing models...")
print(f"⚠️ ensure_all_models_imported: missing tables: {missing_tables}")
print(f"Available tables: {registered_tables}")
# Пробуем импортировать модели явно
# Пробуем принудительно импортировать модели
try:
print("🔄 ensure_all_models_imported: attempting explicit model imports...")
# Явно импортируем все модели
from orm.community import Community, CommunityAuthor, CommunityFollower
from orm.author import Author, AuthorFollower, AuthorRating, AuthorBookmark
from orm.draft import Draft, DraftAuthor, DraftTopic
@@ -144,17 +148,17 @@ def ensure_all_models_imported():
updated_tables = list(Base.metadata.tables.keys())
still_missing = [table for table in required_tables if table not in updated_tables]
if still_missing:
print(f"⚠️ Still missing tables after explicit import: {still_missing}")
print(f"⚠️ ensure_all_models_imported: still missing tables: {still_missing}")
else:
print("All tables registered after explicit import")
print("ensure_all_models_imported: all tables registered after explicit import")
except Exception as e:
print(f"⚠️ Failed to import models explicitly: {e}")
print(f"⚠️ ensure_all_models_imported: failed to import models explicitly: {e}")
else:
print("All required tables registered in metadata")
print("ensure_all_models_imported: all required tables registered in metadata")
except Exception as e:
print(f"⚠️ Model import check failed: {e}")
print(f"⚠️ ensure_all_models_imported: model import check failed: {e}")
# Проверяем импорт моделей
ensure_all_models_imported()