Skip to content
Snippets Groups Projects
Verified Commit 9e797f1b authored by Daniel Göbel's avatar Daniel Göbel
Browse files

Split requirements.txt into two files and add pre-commit git hooks with sensible defaults.

#7
parent 88ab7378
No related branches found
No related tags found
No related merge requests found
Showing
with 147 additions and 86 deletions
...@@ -14,4 +14,4 @@ exclude_lines = ...@@ -14,4 +14,4 @@ exclude_lines =
def __repr__ def __repr__
def __eq__ def __eq__
if TYPE_CHECKING if TYPE_CHECKING
if __name__ == .__main__.: if __name__ == .__main__.:
\ No newline at end of file
...@@ -7,3 +7,5 @@ venv/ ...@@ -7,3 +7,5 @@ venv/
ENV/ ENV/
README.md README.md
.pytest_cache .pytest_cache
.mypy_cache
htmlcov
...@@ -5,4 +5,4 @@ __pycache__/ ...@@ -5,4 +5,4 @@ __pycache__/
env/ env/
venv/ venv/
ENV/ ENV/
.coverage .coverage
\ No newline at end of file
...@@ -4,4 +4,4 @@ multi_line_output = 0 ...@@ -4,4 +4,4 @@ multi_line_output = 0
include_trailing_comma = false include_trailing_comma = false
force_grid_wrap = 0 force_grid_wrap = 0
line_length = 121 line_length = 121
balanced_wrapping = true balanced_wrapping = true
\ No newline at end of file
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
hooks:
- id: trailing-whitespace
files: ProxyAPI
- id: end-of-file-fixer
files: ProxyAPI
- id: check-added-large-files
files: ProxyAPI
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
files: ProxyAPI/app
args: [--check]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.960
hooks:
- id: mypy
files: ProxyAPI/app
args: [--config=ProxyAPI/mypy.ini]
additional_dependencies:
- sqlalchemy2-stubs
- boto3-stubs-lite[s3]
- sqlalchemy<2.0.0
- pydantic
- repo: https://github.com/PyCQA/isort
rev: 5.10.1
hooks:
- id: isort
files: ProxyAPI/app
args: [-c]
...@@ -13,4 +13,4 @@ RUN pip install --no-cache-dir --upgrade -r requirements.txt ...@@ -13,4 +13,4 @@ RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY . . COPY . .
CMD ["./start_service.sh"] CMD ["./start_service.sh"]
\ No newline at end of file
# S3 Proxy API # S3 Proxy API
\ No newline at end of file
Generic single-database configuration with an async dbapi. Generic single-database configuration with an async dbapi.
\ No newline at end of file
...@@ -30,14 +30,16 @@ target_metadata = Base.metadata ...@@ -30,14 +30,16 @@ target_metadata = Base.metadata
def get_url() -> str: def get_url() -> str:
return str(AnyUrl.build( return str(
scheme="mysql+aiomysql", AnyUrl.build(
password=os.getenv("DB_PASSWORD", ""), scheme="mysql+aiomysql",
user=os.getenv("DB_USER", ""), password=os.getenv("DB_PASSWORD", ""),
port=os.getenv("DB_PORT", "3306"), user=os.getenv("DB_USER", ""),
host=os.getenv("DB_HOST", "localhost"), port=os.getenv("DB_PORT", "3306"),
path=f"/{os.getenv('DB_DATABASE', '')}", host=os.getenv("DB_HOST", "localhost"),
)) path=f"/{os.getenv('DB_DATABASE', '')}",
)
)
def run_migrations_offline(): def run_migrations_offline():
...@@ -85,7 +87,7 @@ async def run_migrations_online(): ...@@ -85,7 +87,7 @@ async def run_migrations_online():
prefix="sqlalchemy.", prefix="sqlalchemy.",
poolclass=pool.NullPool, poolclass=pool.NullPool,
future=True, future=True,
url=url url=url,
) )
) )
......
"""Create user and bucket table """Create user and bucket table
Revision ID: 5521b5759004 Revision ID: 5521b5759004
Revises: Revises:
Create Date: 2022-05-03 14:01:22.154984 Create Date: 2022-05-03 14:01:22.154984
""" """
...@@ -11,7 +11,7 @@ from sqlalchemy.dialects import mysql ...@@ -11,7 +11,7 @@ from sqlalchemy.dialects import mysql
from alembic import op from alembic import op
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '5521b5759004' revision = "5521b5759004"
down_revision = None down_revision = None
branch_labels = None branch_labels = None
depends_on = None depends_on = None
...@@ -19,28 +19,33 @@ depends_on = None ...@@ -19,28 +19,33 @@ depends_on = None
def upgrade(): def upgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.create_table('user', op.create_table(
sa.Column('uid', sa.String(length=64), nullable=False), "user",
sa.Column('name', sa.String(length=256), nullable=False), sa.Column("uid", sa.String(length=64), nullable=False),
sa.PrimaryKeyConstraint('uid') sa.Column("name", sa.String(length=256), nullable=False),
) sa.PrimaryKeyConstraint("uid"),
op.create_index(op.f('ix_user_uid'), 'user', ['uid'], unique=True) )
op.create_table('bucket', op.create_index(op.f("ix_user_uid"), "user", ["uid"], unique=True)
sa.Column('name', sa.String(length=256), nullable=False), op.create_table(
sa.Column('description', mysql.TEXT(), nullable=False), "bucket",
sa.Column('public', sa.Boolean(), server_default='0', nullable=True), sa.Column("name", sa.String(length=256), nullable=False),
sa.Column('owner_id', sa.String(length=64), nullable=True), sa.Column("description", mysql.TEXT(), nullable=False),
sa.ForeignKeyConstraint(['owner_id'], ['user.uid'], ), sa.Column("public", sa.Boolean(), server_default="0", nullable=True),
sa.PrimaryKeyConstraint('name') sa.Column("owner_id", sa.String(length=64), nullable=True),
) sa.ForeignKeyConstraint(
op.create_index(op.f('ix_bucket_name'), 'bucket', ['name'], unique=True) ["owner_id"],
["user.uid"],
),
sa.PrimaryKeyConstraint("name"),
)
op.create_index(op.f("ix_bucket_name"), "bucket", ["name"], unique=True)
# ### end Alembic commands ### # ### end Alembic commands ###
def downgrade(): def downgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_bucket_name'), table_name='bucket') op.drop_index(op.f("ix_bucket_name"), table_name="bucket")
op.drop_table('bucket') op.drop_table("bucket")
op.drop_index(op.f('ix_user_uid'), table_name='user') op.drop_index(op.f("ix_user_uid"), table_name="user")
op.drop_table('user') op.drop_table("user")
# ### end Alembic commands ### # ### end Alembic commands ###
...@@ -11,25 +11,27 @@ from sqlalchemy.dialects import mysql ...@@ -11,25 +11,27 @@ from sqlalchemy.dialects import mysql
from alembic import op from alembic import op
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '83a3a47a6351' revision = "83a3a47a6351"
down_revision = 'cafa1e01b782' down_revision = "cafa1e01b782"
branch_labels = None branch_labels = None
depends_on = None depends_on = None
def upgrade(): def upgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.add_column('user', sa.Column('display_name', sa.String(length=256), nullable=True)) op.add_column(
op.add_column('user', sa.Column('username', sa.String(length=256), nullable=False)) "user", sa.Column("display_name", sa.String(length=256), nullable=True)
op.drop_column('user', 'name') )
op.create_index(op.f('ix_user_username'), 'user', ['username'], unique=True) op.add_column("user", sa.Column("username", sa.String(length=256), nullable=False))
op.drop_column("user", "name")
op.create_index(op.f("ix_user_username"), "user", ["username"], unique=True)
# ### end Alembic commands ### # ### end Alembic commands ###
def downgrade(): def downgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.add_column('user', sa.Column('name', mysql.VARCHAR(length=256), nullable=False)) op.add_column("user", sa.Column("name", mysql.VARCHAR(length=256), nullable=False))
op.drop_index(op.f('ix_user_username'), table_name='user') op.drop_index(op.f("ix_user_username"), table_name="user")
op.drop_column('user', 'username') op.drop_column("user", "username")
op.drop_column('user', 'display_name') op.drop_column("user", "display_name")
# ### end Alembic commands ### # ### end Alembic commands ###
...@@ -11,37 +11,46 @@ from sqlalchemy.dialects import mysql ...@@ -11,37 +11,46 @@ from sqlalchemy.dialects import mysql
from alembic import op from alembic import op
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = 'cafa1e01b782' revision = "cafa1e01b782"
down_revision = '5521b5759004' down_revision = "5521b5759004"
branch_labels = None branch_labels = None
depends_on = None depends_on = None
def upgrade(): def upgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.create_table('bucketpermission', op.create_table(
sa.Column('user_id', sa.String(length=64), nullable=False), "bucketpermission",
sa.Column('bucket_name', sa.String(length=256), nullable=False), sa.Column("user_id", sa.String(length=64), nullable=False),
sa.Column('from', mysql.TIMESTAMP(), nullable=True), sa.Column("bucket_name", sa.String(length=256), nullable=False),
sa.Column('to', mysql.TIMESTAMP(), nullable=True), sa.Column("from", mysql.TIMESTAMP(), nullable=True),
sa.Column('file_prefix', sa.String(length=512), nullable=True), sa.Column("to", mysql.TIMESTAMP(), nullable=True),
sa.Column('permissions', mysql.ENUM('READ', 'WRITE', 'READWRITE'), nullable=False), sa.Column("file_prefix", sa.String(length=512), nullable=True),
sa.ForeignKeyConstraint(['bucket_name'], ['bucket.name'], ondelete='CASCADE'), sa.Column(
sa.ForeignKeyConstraint(['user_id'], ['user.uid'], ondelete='CASCADE'), "permissions", mysql.ENUM("READ", "WRITE", "READWRITE"), nullable=False
sa.PrimaryKeyConstraint('user_id', 'bucket_name') ),
) sa.ForeignKeyConstraint(["bucket_name"], ["bucket.name"], ondelete="CASCADE"),
op.alter_column('bucket', 'public', sa.ForeignKeyConstraint(["user_id"], ["user.uid"], ondelete="CASCADE"),
existing_type=mysql.TINYINT(display_width=1), sa.PrimaryKeyConstraint("user_id", "bucket_name"),
nullable=False, )
existing_server_default=sa.text("'0'")) op.alter_column(
"bucket",
"public",
existing_type=mysql.TINYINT(display_width=1),
nullable=False,
existing_server_default=sa.text("'0'"),
)
# ### end Alembic commands ### # ### end Alembic commands ###
def downgrade(): def downgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.alter_column('bucket', 'public', op.alter_column(
existing_type=mysql.TINYINT(display_width=1), "bucket",
nullable=True, "public",
existing_server_default=sa.text("'0'")) existing_type=mysql.TINYINT(display_width=1),
op.drop_table('bucketpermission') nullable=True,
existing_server_default=sa.text("'0'"),
)
op.drop_table("bucketpermission")
# ### end Alembic commands ### # ### end Alembic commands ###
# pytest.ini # pytest.ini
[pytest] [pytest]
asyncio_mode = strict asyncio_mode = strict
\ No newline at end of file
# test packages
httpx>=0.23.0,<0.24.0
pytest>=7.1.0,<7.2.0
pytest-asyncio>=0.18.0,<0.19.0
pytest-cov>=3.0.0,<3.1.0
coverage>=6.4.0,<6.5.0
# Linters
flake8>=4.0.0,<4.1.0
autoflake>=1.4.0,<1.5.0
black>=22.3.0,<22.4.0
isort>=5.10.0,<5.11.0
mypy==0.960
# stubs for mypy
boto3-stubs-lite[s3]>=1.24.0,<1.25.0
sqlalchemy2-stubs
# Miscellaneous
pre-commit>=2.19.0,<2.20.0
python-dotenv
...@@ -11,22 +11,8 @@ aiomysql>=0.1.0,<0.2.0 ...@@ -11,22 +11,8 @@ aiomysql>=0.1.0,<0.2.0
# JWT packages # JWT packages
cryptography>=37.0.0,<38.0.0 cryptography>=37.0.0,<38.0.0
python-jose[cryptography]>=3.3.0,<3.4.0 python-jose[cryptography]>=3.3.0,<3.4.0
# test packages
httpx>=0.23.0,<0.24.0
pytest>=7.1.0,<7.2.0
pytest-cov>=3.0.0,<3.1.0
coverage>=6.4.0,<6.5.0
# Linters
flake8>=4.0.0,<4.1.0
autoflake>=1.4.0,<1.5.0
black>=22.3.0,<22.4.0
isort>=5.10.0,<5.11.0
mypy>=0.960
# stubs for mypy
boto3-stubs-lite[s3]>=1.24.0,<1.25.0
sqlalchemy2-stubs
# Ceph and S3 packages # Ceph and S3 packages
boto3>=1.22.0,<1.23.0 boto3>=1.22.0,<1.23.0
rgwadmin>=2.3.0,<2.4.0 rgwadmin>=2.3.0,<2.4.0
# Miscellaneous # Miscellaneous
tenacity>=8.0.0,<8.1.0 tenacity>=8.0.0,<8.1.0
\ No newline at end of file
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -4,5 +4,5 @@ set -x ...@@ -4,5 +4,5 @@ set -x
mypy app mypy app
black app --check black app --check
isort --recursive --check-only app isort -c app
flake8 flake8
...@@ -5,4 +5,6 @@ python app/check_database_connection.py ...@@ -5,4 +5,6 @@ python app/check_database_connection.py
# Run migrations # Run migrations
alembic upgrade head alembic upgrade head
uvicorn app.main:app --host 0.0.0.0 --port 80
\ No newline at end of file # Start webserver
uvicorn app.main:app --host 0.0.0.0 --port 80
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment