migrations sync fix

This commit is contained in:
2026-08-21 14:12:45 +03:00
parent 1ed602eeae
commit 6d1459f4d5
6 changed files with 56 additions and 15 deletions
+6 -11
View File
@@ -1,13 +1,13 @@
from logging.config import fileConfig from logging.config import fileConfig
from alembic import context
from sqlalchemy import create_engine, pool
from src.models.database_models import Model from src.models.database_models import Model
from src.models.database_models.model import engine from src.models.database_models.model import engine
from sqlalchemy import engine_from_config sync_url = engine.url.render_as_string(hide_password=False).replace("+aiosqlite", "")
from sqlalchemy import pool sync_engine = create_engine(sync_url, poolclass=pool.NullPool)
from alembic import context
# this is the Alembic Config object, which provides # this is the Alembic Config object, which provides
# access to the values within the .ini file in use. # access to the values within the .ini file in use.
@@ -23,7 +23,7 @@ if config.config_file_name is not None:
# from myapp import mymodel # from myapp import mymodel
# target_metadata = mymodel.Base.metadata # target_metadata = mymodel.Base.metadata
target_metadata = Model.metadata target_metadata = Model.metadata
config.set_main_option("sqlalchemy.url", engine.url.render_as_string(hide_password=False)) config.set_main_option("sqlalchemy.url", sync_url)
# other values from the config, defined by the needs of env.py, # other values from the config, defined by the needs of env.py,
# can be acquired: # can be acquired:
@@ -62,13 +62,8 @@ def run_migrations_online() -> None:
and associate a connection with the context. and associate a connection with the context.
""" """
connectable = engine_from_config(
config.get_section(config.config_ini_section, {}),
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)
with connectable.connect() as connection: with sync_engine.connect() as connection:
context.configure( context.configure(
connection=connection, target_metadata=target_metadata, render_as_batch=True connection=connection, target_metadata=target_metadata, render_as_batch=True
) )
+46
View File
@@ -0,0 +1,46 @@
"""empty message
Revision ID: ebe80cd28822
Revises: 74814eb1b7f8
Create Date: 2026-08-21 13:52:49.788041
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'ebe80cd28822'
down_revision: Union[str, Sequence[str], None] = '74814eb1b7f8'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('user_direct_permissions', schema=None) as batch_op:
batch_op.drop_constraint(batch_op.f('fk_user_direct_permissions_user_id_users'), type_='foreignkey')
batch_op.create_foreign_key(batch_op.f('fk_user_direct_permissions_user_id_users'), 'users', ['user_id'], ['id'], ondelete='CASCADE')
with op.batch_alter_table('user_group', schema=None) as batch_op:
batch_op.drop_constraint(batch_op.f('fk_user_group_user_id_users'), type_='foreignkey')
batch_op.create_foreign_key(batch_op.f('fk_user_group_user_id_users'), 'users', ['user_id'], ['id'], ondelete='CASCADE')
# ### end Alembic commands ###
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('user_group', schema=None) as batch_op:
batch_op.drop_constraint(batch_op.f('fk_user_group_user_id_users'), type_='foreignkey')
batch_op.create_foreign_key(batch_op.f('fk_user_group_user_id_users'), 'users', ['user_id'], ['id'])
with op.batch_alter_table('user_direct_permissions', schema=None) as batch_op:
batch_op.drop_constraint(batch_op.f('fk_user_direct_permissions_user_id_users'), type_='foreignkey')
batch_op.create_foreign_key(batch_op.f('fk_user_direct_permissions_user_id_users'), 'users', ['user_id'], ['id'])
# ### end Alembic commands ###
+2 -2
View File
@@ -75,14 +75,14 @@ class Permissions(Model):
user_group_of_permissions=Table( user_group_of_permissions=Table(
"user_group", "user_group",
Model.metadata, Model.metadata,
Column("user_id", ForeignKey("users.id"), primary_key=True), Column("user_id", ForeignKey("users.id", ondelete="CASCADE"), primary_key=True),
Column("permission_group_id", ForeignKey("groups_of_permissions.id"), primary_key=True) Column("permission_group_id", ForeignKey("groups_of_permissions.id"), primary_key=True)
) )
user_permission=Table( user_permission=Table(
"user_direct_permissions", "user_direct_permissions",
Model.metadata, Model.metadata,
Column("user_id",ForeignKey("users.id"), primary_key=True), Column("user_id",ForeignKey("users.id", ondelete="CASCADE"), primary_key=True),
Column("permission_id", ForeignKey("permissions.id"), primary_key=True) Column("permission_id", ForeignKey("permissions.id"), primary_key=True)
) )
+1 -1
View File
@@ -241,7 +241,7 @@ class TestCrud:
@pytest.mark.parametrize("test_user_fixture", [ @pytest.mark.parametrize("test_user_fixture", [
([], []) (["admin"], ["admin_group"])
], indirect=True) ], indirect=True)
@pytest.mark.parametrize("user_record_to_update, expected_exception, expected_status",[ @pytest.mark.parametrize("user_record_to_update, expected_exception, expected_status",[
pytest.param({"plain_password": "Wrong_pass"},HTTPStatusError,422,id="Wrong_password"), pytest.param({"plain_password": "Wrong_pass"},HTTPStatusError,422,id="Wrong_password"),
+1 -1
View File
@@ -48,7 +48,7 @@ class TestAuth:
@pytest.mark.parametrize("user_data, uuid, expected_exception,expected_status",[ @pytest.mark.parametrize("user_data, uuid, expected_exception,expected_status",[
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[],status=False), uuid4(), HTTPException,401, id="false_status"), pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[],status=False), uuid4(), HTTPException,401, id="false_status"),
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[],status=True),1234, HTTPException,401, id="wrong_id"), pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[],status=True),1234, HTTPException,401, id="wrong_id"),
pytest.param(SimpleNamespace(status=True),uuid4(), ValidationError,None,id="empty_model_data") pytest.param(SimpleNamespace(status=True,direct_permissions=[],group=[]),uuid4(), ValidationError,None,id="empty_model_data")
]) ])
async def test_get_current_user_negative(self,current_user_service:CurrentUserService, jwt_service:JwtService, monkeypatch, user_data:SimpleNamespace,expected_exception, expected_status:int, uuid)->None: async def test_get_current_user_negative(self,current_user_service:CurrentUserService, jwt_service:JwtService, monkeypatch, user_data:SimpleNamespace,expected_exception, expected_status:int, uuid)->None: