This commit is contained in:
2023-05-06 22:09:55 +02:00
parent ffb1df9cdb
commit d8fdd610ea
12 changed files with 450 additions and 448 deletions

View File

@@ -2,18 +2,17 @@ exclude: 'docs|node_modules|migrations|.git|.tox'
repos: repos:
- repo: https://github.com/ambv/black - repo: https://github.com/ambv/black
rev: 22.12.0 rev: 23.3.0
hooks: hooks:
- id: black - id: black
language_version: python3.11 language_version: python3.11
- repo: https://github.com/charliermarsh/ruff-pre-commit - repo: https://github.com/charliermarsh/ruff-pre-commit
rev: 'v0.0.216' rev: 'v0.0.265'
hooks: hooks:
- id: ruff - id: ruff
args: ["--force-exclude"]
- repo: https://github.com/crate-ci/typos - repo: https://github.com/crate-ci/typos
rev: v1.13.6 rev: typos-dict-v0.9.26
hooks: hooks:
- id: typos - id: typos

850
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -6,16 +6,16 @@ authors = ["Kurbanov Bulat <kurbanovbul@gmail.com>"]
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.11" python = "^3.11"
fastapi = "^0.95.0" fastapi = "^0.95.1"
httpx = "^0.23.3" httpx = "^0.24.0"
alembic = "^1.10.2" alembic = "^1.10.4"
uvicorn = {extras = ["standard"], version = "^0.21.1"} uvicorn = {extras = ["standard"], version = "^0.22.0"}
arq = "^0.25.0" arq = "^0.25.0"
prometheus-fastapi-instrumentator = "^6.0.0" prometheus-fastapi-instrumentator = "^6.0.0"
uvloop = "^0.17.0" uvloop = "^0.17.0"
gunicorn = "^20.1.0" gunicorn = "^20.1.0"
orjson = "^3.8.8" orjson = "^3.8.11"
sentry-sdk = "^1.17.0" sentry-sdk = "^1.22.1"
ormar = {extras = ["postgresql"], version = "^0.12.1"} ormar = {extras = ["postgresql"], version = "^0.12.1"}
pydantic = "^1.10.4" pydantic = "^1.10.4"
redis = {version = "4.5.4", extras = ["hiredis"]} redis = {version = "4.5.4", extras = ["hiredis"]}
@@ -64,14 +64,13 @@ max-complexity = 15
[tool.ruff.isort] [tool.ruff.isort]
known-first-party = ["core", "app"] known-first-party = ["core", "app"]
force-sort-within-sections = true force-sort-within-sections = true
force-wrap-aliases = true
section-order = ["future", "standard-library", "base_framework", "framework_ext", "third-party", "first-party", "local-folder"]
lines-after-imports = 2
# only_sections = true [tool.ruff.isort.sections]
# force_sort_within_sections = true base_framework = ["fastapi",]
# lines_after_imports = 2 framework_ext = ["starlette"]
# lexicographical = true
# sections = ["FUTURE", "STDLIB", "BASEFRAMEWORK", "FRAMEWORKEXT", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
# known_baseframework = ["fastapi",]
# known_frameworkext = ["starlette",]
[tool.ruff.pyupgrade] [tool.ruff.pyupgrade]
keep-runtime-typing = true keep-runtime-typing = true

View File

@@ -1,5 +1,6 @@
import httpx import httpx
response = httpx.get("http://localhost:8080/healthcheck") response = httpx.get("http://localhost:8080/healthcheck")
print(f"HEALTHCHECK STATUS: {response.status_code}") print(f"HEALTHCHECK STATUS: {response.status_code}")
exit(0 if response.status_code == 200 else 1) exit(0 if response.status_code == 200 else 1)

View File

@@ -6,9 +6,10 @@ import random
from tempfile import SpooledTemporaryFile from tempfile import SpooledTemporaryFile
from typing import Optional, cast from typing import Optional, cast
from fastapi import UploadFile
from arq.connections import ArqRedis from arq.connections import ArqRedis
from arq.worker import Retry from arq.worker import Retry
from fastapi import UploadFile
import httpx import httpx
from redis import asyncio as aioredis from redis import asyncio as aioredis
from redis.exceptions import LockError from redis.exceptions import LockError
@@ -19,6 +20,7 @@ from app.services.downloader import download
from app.services.files_client import upload_file from app.services.files_client import upload_file
from app.services.library_client import Book, get_book, get_books, get_last_book_id from app.services.library_client import Book, get_book, get_books, get_last_book_id
logger = logging.getLogger("telegram_channel_files_manager") logger = logging.getLogger("telegram_channel_files_manager")

View File

@@ -7,6 +7,7 @@ from sentry_sdk import capture_exception
from core.config import env_config from core.config import env_config
T = TypeVar("T") T = TypeVar("T")

View File

@@ -1,10 +1,12 @@
from base64 import b64encode from base64 import b64encode
from arq.connections import ArqRedis
from fastapi import APIRouter, Depends, HTTPException, Request, status from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from starlette.background import BackgroundTask from starlette.background import BackgroundTask
from arq.connections import ArqRedis
from app.depends import check_token from app.depends import check_token
from app.models import CachedFile as CachedFileDB from app.models import CachedFile as CachedFileDB
from app.serializers import CachedFile, CreateCachedFile from app.serializers import CachedFile, CreateCachedFile
@@ -15,6 +17,7 @@ from app.services.files_client import download_file as download_file_from_cache
from app.services.library_client import get_book from app.services.library_client import get_book
from app.utils import get_cached_file_or_cache from app.utils import get_cached_file_or_cache
router = APIRouter( router = APIRouter(
prefix="/api/v1", tags=["files"], dependencies=[Depends(check_token)] prefix="/api/v1", tags=["files"], dependencies=[Depends(check_token)]
) )

View File

@@ -1,5 +1,6 @@
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.responses import ORJSONResponse from fastapi.responses import ORJSONResponse
from prometheus_fastapi_instrumentator import Instrumentator from prometheus_fastapi_instrumentator import Instrumentator
from app.views import healthcheck_router, router from app.views import healthcheck_router, router

View File

@@ -1,3 +1,4 @@
from fastapi.security import APIKeyHeader from fastapi.security import APIKeyHeader
default_security = APIKeyHeader(name="Authorization") default_security = APIKeyHeader(name="Authorization")

View File

@@ -5,6 +5,7 @@ from sqlalchemy import MetaData
from core.config import env_config from core.config import env_config
DATABASE_URL = ( DATABASE_URL = (
f"postgresql://{env_config.POSTGRES_USER}:{quote(env_config.POSTGRES_PASSWORD)}@" f"postgresql://{env_config.POSTGRES_USER}:{quote(env_config.POSTGRES_PASSWORD)}@"
f"{env_config.POSTGRES_HOST}:{env_config.POSTGRES_PORT}/{env_config.POSTGRES_DB}" f"{env_config.POSTGRES_HOST}:{env_config.POSTGRES_PORT}/{env_config.POSTGRES_DB}"

View File

@@ -2,6 +2,7 @@ import sentry_sdk
from core.config import env_config from core.config import env_config
sentry_sdk.init( sentry_sdk.init(
env_config.SENTRY_DSN, env_config.SENTRY_DSN,
) )

View File

@@ -1,3 +1,4 @@
from core.app import start_app from core.app import start_app
app = start_app() app = start_app()