fix transaction
update pypi.yml
This commit is contained in:
parent
559d3707e5
commit
d876c7c84b
9
.github/workflows/pypi.yml
vendored
9
.github/workflows/pypi.yml
vendored
@ -1,9 +1,10 @@
|
|||||||
name: pypi
|
name: pypi
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
release:
|
||||||
paths:
|
types:
|
||||||
- 'aerich/__init__.py'
|
- created
|
||||||
- '.github/workflows/pypi.yml'
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -4,9 +4,14 @@ ChangeLog
|
|||||||
|
|
||||||
0.1
|
0.1
|
||||||
===
|
===
|
||||||
|
0.1.4
|
||||||
|
-----
|
||||||
|
- Fix transaction.
|
||||||
|
|
||||||
0.1.3
|
0.1.3
|
||||||
-----
|
-----
|
||||||
- Support indexes and unique_together.
|
- Support indexes and unique_together.
|
||||||
|
|
||||||
0.1.2
|
0.1.2
|
||||||
-----
|
-----
|
||||||
- Now aerich support m2m.
|
- Now aerich support m2m.
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = "0.1.3"
|
__version__ = "0.1.4"
|
||||||
|
@ -6,10 +6,11 @@ from enum import Enum
|
|||||||
|
|
||||||
import asyncclick as click
|
import asyncclick as click
|
||||||
from asyncclick import Context, UsageError
|
from asyncclick import Context, UsageError
|
||||||
from tortoise import Tortoise, generate_schema_for_client, ConfigurationError
|
from tortoise import ConfigurationError, Tortoise, generate_schema_for_client
|
||||||
|
from tortoise.transactions import in_transaction
|
||||||
|
|
||||||
from aerich.migrate import Migrate
|
from aerich.migrate import Migrate
|
||||||
from aerich.utils import get_app_connection, get_tortoise_config
|
from aerich.utils import get_app_connection, get_app_connection_name, get_tortoise_config
|
||||||
|
|
||||||
|
|
||||||
class Color(str, Enum):
|
class Color(str, Enum):
|
||||||
@ -57,7 +58,7 @@ async def cli(ctx: Context, config, app, name):
|
|||||||
try:
|
try:
|
||||||
await Migrate.init_with_old_models(tortoise_config, app, location)
|
await Migrate.init_with_old_models(tortoise_config, app, location)
|
||||||
except ConfigurationError:
|
except ConfigurationError:
|
||||||
raise UsageError(ctx=ctx, message='You must exec ini-db first')
|
raise UsageError(ctx=ctx, message="You must exec ini-db first")
|
||||||
|
|
||||||
|
|
||||||
@cli.command(help="Generate migrate changes file.")
|
@cli.command(help="Generate migrate changes file.")
|
||||||
@ -80,11 +81,10 @@ async def migrate(ctx: Context, name):
|
|||||||
async def upgrade(ctx: Context):
|
async def upgrade(ctx: Context):
|
||||||
app = ctx.obj["app"]
|
app = ctx.obj["app"]
|
||||||
config = ctx.obj["config"]
|
config = ctx.obj["config"]
|
||||||
connection = get_app_connection(config, app)
|
|
||||||
available_versions = Migrate.get_all_version_files(is_all=False)
|
available_versions = Migrate.get_all_version_files(is_all=False)
|
||||||
if not available_versions:
|
if not available_versions:
|
||||||
return click.secho("No migrate items", fg=Color.yellow)
|
return click.secho("No migrate items", fg=Color.yellow)
|
||||||
async with connection._in_transaction() as conn:
|
async with in_transaction(get_app_connection_name(config, app)) as conn:
|
||||||
for file in available_versions:
|
for file in available_versions:
|
||||||
file_path = os.path.join(Migrate.migrate_location, file)
|
file_path = os.path.join(Migrate.migrate_location, file)
|
||||||
with open(file_path, "r") as f:
|
with open(file_path, "r") as f:
|
||||||
@ -104,12 +104,11 @@ async def upgrade(ctx: Context):
|
|||||||
async def downgrade(ctx: Context):
|
async def downgrade(ctx: Context):
|
||||||
app = ctx.obj["app"]
|
app = ctx.obj["app"]
|
||||||
config = ctx.obj["config"]
|
config = ctx.obj["config"]
|
||||||
connection = get_app_connection(config, app)
|
|
||||||
available_versions = Migrate.get_all_version_files()
|
available_versions = Migrate.get_all_version_files()
|
||||||
if not available_versions:
|
if not available_versions:
|
||||||
return click.secho("No migrate items", fg=Color.yellow)
|
return click.secho("No migrate items", fg=Color.yellow)
|
||||||
|
|
||||||
async with connection._in_transaction() as conn:
|
async with in_transaction(get_app_connection_name(config, app)) as conn:
|
||||||
for file in reversed(available_versions):
|
for file in reversed(available_versions):
|
||||||
file_path = os.path.join(Migrate.migrate_location, file)
|
file_path = os.path.join(Migrate.migrate_location, file)
|
||||||
with open(file_path, "r") as f:
|
with open(file_path, "r") as f:
|
||||||
@ -152,7 +151,7 @@ def history(ctx):
|
|||||||
)
|
)
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
async def init(
|
async def init(
|
||||||
ctx: Context, tortoise_orm, location,
|
ctx: Context, tortoise_orm, location,
|
||||||
):
|
):
|
||||||
config = ctx.obj["config"]
|
config = ctx.obj["config"]
|
||||||
name = ctx.obj["name"]
|
name = ctx.obj["name"]
|
||||||
|
@ -137,7 +137,7 @@ class Migrate:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def cp_models(
|
def cp_models(
|
||||||
cls, app: str, model_files: List[str], old_model_file,
|
cls, app: str, model_files: List[str], old_model_file,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
cp currents models to old_model_files
|
cp currents models to old_model_files
|
||||||
@ -187,7 +187,7 @@ class Migrate:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _diff_models(
|
def _diff_models(
|
||||||
cls, old_models: Dict[str, Type[Model]], new_models: Dict[str, Type[Model]], upgrade=True
|
cls, old_models: Dict[str, Type[Model]], new_models: Dict[str, Type[Model]], upgrade=True
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
diff models and add operators
|
diff models and add operators
|
||||||
@ -248,7 +248,9 @@ class Migrate:
|
|||||||
old_field = old_fields_map.get(new_key)
|
old_field = old_fields_map.get(new_key)
|
||||||
if old_field.index and not new_field.index:
|
if old_field.index and not new_field.index:
|
||||||
cls._add_operator(
|
cls._add_operator(
|
||||||
cls._remove_index(old_model, [old_field.model_field_name], old_field.unique),
|
cls._remove_index(
|
||||||
|
old_model, [old_field.model_field_name], old_field.unique
|
||||||
|
),
|
||||||
upgrade,
|
upgrade,
|
||||||
isinstance(old_field, (ForeignKeyFieldInstance, ManyToManyFieldInstance)),
|
isinstance(old_field, (ForeignKeyFieldInstance, ManyToManyFieldInstance)),
|
||||||
)
|
)
|
||||||
@ -270,33 +272,25 @@ class Migrate:
|
|||||||
|
|
||||||
for new_index in new_indexes:
|
for new_index in new_indexes:
|
||||||
if new_index not in old_indexes:
|
if new_index not in old_indexes:
|
||||||
cls._add_operator(
|
cls._add_operator(cls._add_index(new_model, new_index,), upgrade)
|
||||||
cls._add_index(new_model, new_index, ), upgrade
|
|
||||||
)
|
|
||||||
for old_index in old_indexes:
|
for old_index in old_indexes:
|
||||||
if old_index not in new_indexes:
|
if old_index not in new_indexes:
|
||||||
cls._add_operator(
|
cls._add_operator(cls._remove_index(old_model, old_index), upgrade)
|
||||||
cls._remove_index(old_model, old_index), upgrade
|
|
||||||
)
|
|
||||||
|
|
||||||
for new_unique in new_unique_together:
|
for new_unique in new_unique_together:
|
||||||
if new_unique not in old_unique_together:
|
if new_unique not in old_unique_together:
|
||||||
cls._add_operator(
|
cls._add_operator(cls._add_index(new_model, new_unique, unique=True), upgrade)
|
||||||
cls._add_index(new_model, new_unique, unique=True), upgrade
|
|
||||||
)
|
|
||||||
|
|
||||||
for old_unique in old_unique_together:
|
for old_unique in old_unique_together:
|
||||||
if old_unique not in new_unique_together:
|
if old_unique not in new_unique_together:
|
||||||
cls._add_operator(
|
cls._add_operator(cls._remove_index(old_model, old_unique, unique=True), upgrade)
|
||||||
cls._remove_index(old_model, old_unique, unique=True), upgrade
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _resolve_fk_fields_name(cls, model: Type[Model], fields_name: List[str]):
|
def _resolve_fk_fields_name(cls, model: Type[Model], fields_name: List[str]):
|
||||||
ret = []
|
ret = []
|
||||||
for field_name in fields_name:
|
for field_name in fields_name:
|
||||||
if field_name in model._meta.fk_fields:
|
if field_name in model._meta.fk_fields:
|
||||||
ret.append(field_name + '_id')
|
ret.append(field_name + "_id")
|
||||||
else:
|
else:
|
||||||
ret.append(field_name)
|
ret.append(field_name)
|
||||||
return ret
|
return ret
|
||||||
|
@ -4,14 +4,24 @@ from asyncclick import BadOptionUsage, Context
|
|||||||
from tortoise import Tortoise
|
from tortoise import Tortoise
|
||||||
|
|
||||||
|
|
||||||
def get_app_connection(config, app):
|
def get_app_connection_name(config, app):
|
||||||
"""
|
"""
|
||||||
get tortoise app
|
get connection name
|
||||||
:param config:
|
:param config:
|
||||||
:param app:
|
:param app:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
return Tortoise.get_connection(config.get("apps").get(app).get("default_connection"))
|
return config.get("apps").get(app).get("default_connection")
|
||||||
|
|
||||||
|
|
||||||
|
def get_app_connection(config, app):
|
||||||
|
"""
|
||||||
|
get connection name
|
||||||
|
:param config:
|
||||||
|
:param app:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return Tortoise.get_connection(get_app_connection_name(config, app))
|
||||||
|
|
||||||
|
|
||||||
def get_tortoise_config(ctx: Context, tortoise_orm: str) -> dict:
|
def get_tortoise_config(ctx: Context, tortoise_orm: str) -> dict:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user