diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index 44f27d3..2419a4d 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v2 with: python-version: '3.x' + - uses: dschep/install-poetry-action@v1.3 - name: Build dists - run: | - python3 setup.py sdist + run: make build - name: Pypi Publish uses: pypa/gh-action-pypi-publish@master with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 37c5c98..1dd1bf2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,10 +19,7 @@ jobs: - uses: actions/setup-python@v2 with: python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements-dev.txt + - uses: dschep/install-poetry-action@v1.3 - name: CI env: MYSQL_PASS: root @@ -31,4 +28,4 @@ jobs: POSTGRES_PASS: 123456 POSTGRES_HOST: 127.0.0.1 POSTGRES_PORT: 5432 - run: make testall \ No newline at end of file + run: make ci \ No newline at end of file diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bb26271..693a619 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,12 @@ ========= ChangeLog ========= +0.2 +=== +0.2.0 +----- +- Update model file find method. +- Set ``--safe`` bool. 0.1 === diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 5f9c2e9..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include LICENSE -include README.rst -include requirements.txt \ No newline at end of file diff --git a/Makefile b/Makefile index 2eda6d1..1441828 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,11 @@ help: @echo " test Runs all tests" @echo " style Auto-formats the code" +up: + @poetry update + deps: - @which pip-sync > /dev/null || pip install -q pip-tools - @pip install -r requirements-dev.txt + @poetry install -E dbdrivers style: deps isort -rc $(checkfiles) @@ -50,10 +52,10 @@ test_postgres: testall: deps test_sqlite test_postgres test_mysql -publish: deps - rm -fR dist/ - python setup.py sdist - twine upload dist/* +build: deps + @poetry build -ci: - @act -P ubuntu-latest=nektos/act-environments-ubuntu:18.04 -b \ No newline at end of file +publish: deps + @poetry publish --build + +ci: testall \ No newline at end of file diff --git a/aerich/cli.py b/aerich/cli.py index af4e19d..f279c34 100644 --- a/aerich/cli.py +++ b/aerich/cli.py @@ -28,7 +28,7 @@ parser = ConfigParser() @click.group(context_settings={"help_option_names": ["-h", "--help"]}) -@click.version_option(__version__) +@click.version_option(__version__, "-V", "--version") @click.option( "-c", "--config", default="aerich.ini", show_default=True, help="Config file.", ) @@ -190,7 +190,7 @@ async def init( @cli.command(help="Generate schema and generate app migrate location.") @click.option( "--safe", - is_flag=True, + type=bool, default=True, help="When set to true, creates the table only when it does not already exist.", show_default=True, diff --git a/aerich/migrate.py b/aerich/migrate.py index 891217e..0cb77dc 100644 --- a/aerich/migrate.py +++ b/aerich/migrate.py @@ -3,6 +3,7 @@ import os import re from copy import deepcopy from datetime import datetime +from importlib import import_module from typing import Dict, List, Tuple, Type from tortoise import ( @@ -71,8 +72,6 @@ class Migrate: from aerich.ddl.postgres import PostgresDDL cls.ddl = PostgresDDL(connection) - else: - raise NotImplementedError("Current only support MySQL") @classmethod async def _get_last_version_num(cls): @@ -194,8 +193,7 @@ class Migrate: old_model_files = [] models = config.get("apps").get(app).get("models") for model in models: - if model != "aerich.models": - old_model_files.append(model.replace(".", "/") + ".py") + old_model_files.append(import_module(model).__file__) cls.cp_models(app, old_model_files, os.path.join(location, app, cls.get_old_model_file())) diff --git a/poetry.lock b/poetry.lock index 6e024d8..8594dfb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,8 +1,8 @@ [[package]] -category = "dev" +category = "main" description = "MySQL driver for asyncio." name = "aiomysql" -optional = false +optional = true python-versions = "*" version = "0.0.20" @@ -26,7 +26,7 @@ description = "High level compatibility layer for multiple asynchronous event lo name = "anyio" optional = false python-versions = ">=3.5.3" -version = "1.3.0" +version = "1.3.1" [package.dependencies] async-generator = "*" @@ -78,10 +78,10 @@ dev = ["coverage", "pytest-runner", "pytest-trio", "pytest (>=3)", "sphinx", "to docs = ["sphinx"] [[package]] -category = "dev" +category = "main" description = "An asyncio PostgreSQL driver" name = "asyncpg" -optional = false +optional = true python-versions = ">=3.5.0" version = "0.20.1" @@ -134,10 +134,10 @@ typed-ast = ">=1.4.0" d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] [[package]] -category = "dev" +category = "main" description = "Foreign Function Interface for Python calling C code." name = "cffi" -optional = false +optional = true python-versions = "*" version = "1.14.0" @@ -171,10 +171,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "0.4.3" [[package]] -category = "dev" +category = "main" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." name = "cryptography" -optional = false +optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" version = "2.9.2" @@ -327,10 +327,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.6.0" [[package]] -category = "dev" +category = "main" description = "C parser in Python" name = "pycparser" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.20" @@ -356,10 +356,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.2.0" [[package]] -category = "dev" +category = "main" description = "Pure Python MySQL Driver" name = "pymysql" -optional = false +optional = true python-versions = "*" version = "0.9.2" @@ -380,7 +380,7 @@ description = "A SQL query builder API for Python" name = "pypika" optional = false python-versions = "*" -version = "0.37.6" +version = "0.37.7" [[package]] category = "dev" @@ -455,7 +455,7 @@ python-versions = "*" version = "2020.5.14" [[package]] -category = "dev" +category = "main" description = "Python 2 and 3 compatibility utilities" name = "six" optional = false @@ -522,14 +522,17 @@ version = "3.7.4.2" [[package]] category = "dev" -description = "Measures number of Terminal column cells of wide-character codes" +description = "Measures the displayed width of unicode strings in a terminal" name = "wcwidth" optional = false python-versions = "*" -version = "0.1.9" +version = "0.2.2" + +[extras] +dbdrivers = ["aiomysql", "asyncpg"] [metadata] -content-hash = "35274e9622d359af475f573760ba687b31756b1b1de70bc4d75dab5ddbc5a93d" +content-hash = "6b1f30cb32cf5915f1ee1f6c6b0e52130bc8f7af92f1a9703dc9632ebce2a977" python-versions = "^3.8" [metadata.files] @@ -542,8 +545,8 @@ aiosqlite = [ {file = "aiosqlite-0.13.0.tar.gz", hash = "sha256:6e92961ae9e606b43b05e29b129e346b29e400fcbd63e3c0c564d89230257645"}, ] anyio = [ - {file = "anyio-1.3.0-py3-none-any.whl", hash = "sha256:db2c3d21576870b95d4fd0b8f4a0f9c64057f777c578f3a8127179a17c8c067e"}, - {file = "anyio-1.3.0.tar.gz", hash = "sha256:7deae0315dd10aa41c21528b83352e4b52f44e6153a21081a3d1cd8c03728e46"}, + {file = "anyio-1.3.1-py3-none-any.whl", hash = "sha256:f21b4fafeec1b7db81e09a907e44e374a1e39718d782a488fdfcdcf949c8950c"}, + {file = "anyio-1.3.1.tar.gz", hash = "sha256:a46bb2b7743455434afd9adea848a3c4e0b7321aee3e9d08844b11d348d3b5a0"}, ] apipkg = [ {file = "apipkg-1.5-py2.py3-none-any.whl", hash = "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"}, @@ -758,7 +761,7 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pypika = [ - {file = "PyPika-0.37.6.tar.gz", hash = "sha256:64510fa36667e8bb654bdc1be5a3a77bac1dbc2f03d4848efac08e39d9cac6f5"}, + {file = "PyPika-0.37.7.tar.gz", hash = "sha256:20bebc05983cd401d428e3beb62d037e5f0271daab2bb5aba82f4e092d4a3694"}, ] pytest = [ {file = "pytest-5.4.2-py3-none-any.whl", hash = "sha256:95c710d0a72d91c13fae35dce195633c929c3792f54125919847fdcdf7caa0d3"}, @@ -846,6 +849,6 @@ typing-extensions = [ {file = "typing_extensions-3.7.4.2.tar.gz", hash = "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"}, ] wcwidth = [ - {file = "wcwidth-0.1.9-py2.py3-none-any.whl", hash = "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1"}, - {file = "wcwidth-0.1.9.tar.gz", hash = "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"}, + {file = "wcwidth-0.2.2-py2.py3-none-any.whl", hash = "sha256:b651b6b081476420e4e9ae61239ac4c1b49d0c5ace42b2e81dc2ff49ed50c566"}, + {file = "wcwidth-0.2.2.tar.gz", hash = "sha256:3de2e41158cb650b91f9654cbf9a3e053cee0719c9df4ddc11e4b568669e9829"}, ] diff --git a/pyproject.toml b/pyproject.toml index ee491b1..11e310c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,14 +1,26 @@ [tool.poetry] name = "aerich" -version = "0.1.9" +version = "0.2.0" description = "A database migrations tool for Tortoise ORM." authors = ["long2ice "] +license = "MIT" +readme = "README.rst" +homepage = "https://github.com/long2ice/aerich" +repository = "git@github.com:long2ice/aerich.git" +documentation = "https://github.com/long2ice/aerich" +keywords = ["migrate", "Tortoise-ORM", "mysql"] +packages = [ + { include = "aerich" } +] +include = ["CHANGELOG.rst", "LICENSE", "README.rst"] [tool.poetry.dependencies] python = "^3.8" tortoise-orm = "*" asyncclick = "*" pydantic = "*" +aiomysql = {version = "*", optional = true} +asyncpg = {version = "*", optional = true} [tool.poetry.dev-dependencies] taskipy = "*" @@ -16,17 +28,16 @@ flake8 = "*" isort = "*" black = "^19.10b0" pytest = "*" -aiomysql = "*" -asyncpg = "*" pytest-xdist = "*" mypy = "*" pytest-asyncio = "*" -[tool.taskipy.tasks] -export = "poetry export -f requirements.txt --without-hashes > requirements.txt" -export-dev = "poetry export -f requirements.txt --dev --without-hashes > requirements-dev.txt" +[tool.poetry.extras] +dbdrivers = ["aiomysql", "asyncpg"] [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api" +[tool.poetry.scripts] +aerich = "aerich.cli:main" \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index a2baa92..0000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,48 +0,0 @@ -aiomysql==0.0.20 -aiosqlite==0.13.0 -anyio==1.3.0 -apipkg==1.5 -appdirs==1.4.4 -async-generator==1.10 -asyncclick==7.0.9 -asyncpg==0.20.1 -atomicwrites==1.4.0; sys_platform == "win32" -attrs==19.3.0 -black==19.10b0 -cffi==1.14.0 -ciso8601==2.1.3; sys_platform != "win32" and implementation_name == "cpython" -click==7.1.2 -colorama==0.4.3; sys_platform == "win32" -cryptography==2.9.2 -execnet==1.7.1 -flake8==3.8.2 -iso8601==0.1.12; sys_platform == "win32" or implementation_name != "cpython" -isort==4.3.21 -mccabe==0.6.1 -more-itertools==8.3.0 -mypy==0.770 -mypy-extensions==0.4.3 -packaging==20.4 -pathspec==0.8.0 -pluggy==0.13.1 -py==1.8.1 -pycodestyle==2.6.0 -pycparser==2.20 -pydantic==1.5.1 -pyflakes==2.2.0 -pymysql==0.9.2 -pyparsing==2.4.7 -pypika==0.37.6 -pytest==5.4.2 -pytest-asyncio==0.12.0 -pytest-forked==1.1.3 -pytest-xdist==1.32.0 -regex==2020.5.14 -six==1.15.0 -sniffio==1.1.0 -taskipy==1.2.1 -toml==0.10.1 -tortoise-orm==0.16.12 -typed-ast==1.4.1 -typing-extensions==3.7.4.2 -wcwidth==0.1.9 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 863509f..0000000 --- a/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -aiosqlite==0.13.0 -anyio==1.3.0 -async-generator==1.10 -asyncclick==7.0.9 -ciso8601==2.1.3; sys_platform != "win32" and implementation_name == "cpython" -iso8601==0.1.12; sys_platform == "win32" or implementation_name != "cpython" -pydantic==1.5.1 -pypika==0.37.6 -sniffio==1.1.0 -tortoise-orm==0.16.12 -typing-extensions==3.7.4.2 diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 66a6dec..0000000 --- a/setup.cfg +++ /dev/null @@ -1,47 +0,0 @@ -[flake8] -max-line-length = 100 -exclude = -ignore = E501,W503,DAR101,DAR201,DAR402 - -[darglint] -docstring_style=sphinx - -[isort] -not_skip=__init__.py -multi_line_output=3 -include_trailing_comma=True -force_grid_wrap=0 -use_parentheses=True -line_length=100 - -[tool:pytest] -addopts = -n auto --tb=native -q - -[mypy] -pretty = True -ignore_missing_imports = True -check_untyped_defs = True -disallow_subclassing_any = True -disallow_untyped_calls = True -disallow_untyped_defs = False -disallow_incomplete_defs = False -disallow_untyped_decorators = True -no_implicit_optional = True -warn_redundant_casts = True -warn_unused_ignores = True -warn_no_return = True -warn_return_any = False -warn_unused_configs = True -warn_unreachable = True -allow_redefinition = True -strict_equality = True -show_error_context = True - -[mypy-tests.*] -check_untyped_defs = False -disallow_untyped_defs = False -disallow_incomplete_defs = False -warn_unreachable = False - -[mypy-conftest] -disallow_untyped_defs = False \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 830cda3..0000000 --- a/setup.py +++ /dev/null @@ -1,44 +0,0 @@ -import os -import re -from setuptools import find_packages, setup - - -def version(): - ver_str_line = open('aerich/__init__.py', 'rt').read() - mob = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", ver_str_line, re.M) - if not mob: - raise RuntimeError("Unable to find version string") - return mob.group(1) - - -with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f: - long_description = f.read() - - -def requirements(): - return open('requirements.txt', 'rt').read().splitlines() - - -setup( - name='aerich', - version=version(), - description='A database migrations tool for Tortoise-ORM.', - author='long2ice', - long_description_content_type='text/x-rst', - long_description=long_description, - author_email='long2ice@gmail.com', - url='https://github.com/long2ice/aerich', - license='MIT License', - packages=find_packages(include=['aerich*']), - include_package_data=True, - zip_safe=True, - entry_points={ - 'console_scripts': ['aerich = aerich.cli:main'], - }, - platforms='any', - keywords=( - 'migrate Tortoise-ORM mysql' - ), - dependency_links=['https://github.com/tortoise-orm/tortoise-orm.git@develop#egg=tortoise-orm'], - install_requires=requirements(), -)