Skip to content

kireevys/bread_bot

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

BREAD BOT

Author: Lev Kudryashov

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ являСтся Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-Π±ΠΎΡ‚ΠΎΠΌ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‡Π°Ρ‚ΠΎΠ². Π‘ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° стСкС:

  • python version 3.11.0
  • SQLAlchemy для взаимодСйствия с Π‘Π”
  • Alembic для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ Π² Π‘Π”
  • FastAPI ΠΊΠ°ΠΊ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ
  • Pydantic ΠΊΠ°ΠΊ сСриализатор ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…
  • Opensensus ΠΊΠ°ΠΊ инструмСнт для Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ ΠΈ трассировки

О структурС прилоТСния:

  • ΠΏΠ°ΠΊΠ΅Ρ‚ main - Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит настройки, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π²Π΅Π±-Ρ„Ρ€Π°ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, celery
    • ΠΏΠ°ΠΊΠ΅Ρ‚ settings - Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ настройки прилоТСния.
      • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ init.py - Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² настройки
      • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ default.py - ΠœΠΎΠ΄ΡƒΠ»ΡŒ, содСрТащий основныС настройки прилоТСния
    • database ΠŸΠ°ΠΊΠ΅Ρ‚ содСрТит инструмСнты для упрощСния ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ORM
      • mixins.py - ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ миксины для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сущностями ΠΈ модСлями Π‘Π” ΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ
      • base.py - Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΆΠΈΠΆΠΊΠΎΠ² ΠΈ сСссий Π΄ΠΎ Π‘Π”
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ webserver.py - Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ конфигурация ΠΈ инициализация FastApi прилоТСния
  • ΠΏΠ°ΠΊΠ΅Ρ‚ tests - ВСсты прилоТСния
  • ΠΏΠ°ΠΊΠ΅Ρ‚ alembic - это Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ для осущСствлСния Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ/ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ/ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ Π² Π‘Π”. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь ΠΏΡ€ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ инструмСнт
    • ΠΏΠ°ΠΊΠ΅Ρ‚ versions - ΠΏΠ°ΠΊΠ΅Ρ‚ с миграциями Ρ„Π°ΠΉΠ»ΠΎΠ²
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ env.py - ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ
  • ΠΏΠ°ΠΊΠ΅Ρ‚-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ my_app - Π­Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚-прилоТСния сущностСй. Бозданная для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ ΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ с сущностями бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.
    • ΠΏΠ°ΠΊΠ΅Ρ‚ models - ΠΏΠ°ΠΊΠ΅Ρ‚ с модулями-классами сущностСй Π‘Π”
    • ΠΏΠ°ΠΊΠ΅Ρ‚ routes - содСрТит ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ для api прилоТСния с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ
    • ΠΏΠ°ΠΊΠ΅Ρ‚ schemas - содСрТит схСмы сСриализации/дСсСриализации бизнСс-сущностСй Pydantic
  • ΠΏΠ°ΠΊΠ΅Ρ‚-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ auth - ΠŸΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сущностСй с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, способами Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² OAuth2 by JWT
  • utils - стандартный ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ base_client.py являСтся абстрактным классом-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ для всСх http-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² (Π‘ΠΊΠΎΡ€ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Π’ процСссС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρƒ Π€Π°Π±Ρ€ΠΈΠΊΠ°)
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ custom_json_logger.py содСрТит классы-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹ Π»ΠΎΠ³ΠΎΠ² для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² Π² json Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ middlewares.py содСрТит ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Middleware-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² для запросов ΠΏΠΎ HTTP Π² сСрвСр. (Π›ΠΎΠ³Π³Π΅Ρ€ запросов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€)
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ dependencies.py содСрТит классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ зависимостСй для адрСсов сСрвиса (ΠŸΡ€ΠΈΠΌΠ΅ΡΠΈ сСссии Π‘Π”, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€)
    • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ structs.py здСсь Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ константныС для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°(Π½ΠΎ Π½Π΅ для ΠΏΠ°ΠΊΠ΅Ρ‚Π° с бизнСс-ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ) структуры для удобства использования
  • ΠΌΠΎΠ΄ΡƒΠ»ΡŒ server.py запускаСт настроСнный Π²Π΅Π±-сСрвСр прилоТСния
  • ΠΏΠ°ΠΏΠΊΠ° requirements - ΠΏΠ°ΠΏΠΊΠ° с зависимостями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
  • Ρ„Π°ΠΉΠ» tox.ini - ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для codestyle ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

settings ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… настроСк

Настройка количСства Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² FastAPI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС:

import os

WORKERS_COUNT = int(os.getenv('WORKERS_COUNT', 1))

Настройка доступа ΠΊ Π‘Π” выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

import os

DATABASE_SETTINGS = {
    'default': {
        'database': os.getenv('DB_NAME', 'bread_bot'),
        'user': os.getenv('DB_USER', 'bread_bot'),
        'password': os.getenv('DB_PASSWORD', 'bread_bot'),
        'host': os.getenv('DB_HOST', '127.0.0.1'),
        'port': os.getenv('DB_PORT', '5432'),
    }
}

SQLAlchemy сама ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠΌ количСством ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. НСобходимо ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ настройку, ΠΊΠ°ΠΊΠΎΠΉ максимум Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ:

import os

DB_MAX_POOL = int(os.getenv('DB_MAX_POOL', 20))

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ количСство Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π° всё ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π° всС Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ сСссий, Π° Π½Π΅ всС ΠΎΠ±Ρ‰Π΅Π΅ количСство. Π˜Π½Π°Ρ‡Π΅ говоря Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· 10Ρ‚ΠΈ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»Π΅Π½ΠΎ ΠΏΠΎ 5 Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… сСссий Π‘Π”:

import math

WORKERS_COUNT = 10
DB_MAX_POOL = 50
DB_POOL_SIZE = max(math.ceil(DB_MAX_POOL / WORKERS_COUNT), 1)

Π’Π°ΠΊΠΆΠ΅, Ссли Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ сСссий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pgbouncer. Π€Π°ΠΉΠ» настройки pgbouncer: pgbouncer.ini

НСобходимо ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ прилоТСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ (ΠΊΠ°ΠΊ Π² django)

APP_MODULES = [
    'my_app',
    'auth',
]

Web

FastAPI ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС Π²Π΅Π±-сСрвСра uvicorn. Π•ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² запуска прилоТСния:

uvicorn bread_bot.main.webserver:app
python server.py

ДокумСнтация

НС сСкрСт, Ρ‡Ρ‚ΠΎ fastapi ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² swagger, redoc, openapi.json всС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΉ совСт ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ схСмы Pydantic для удобства ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ с кСйсами использования. ВсС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ спСцификации Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ CRUDMixin для опСрирования простыми ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΊΠ°ΠΊ get, filter, first, create, update, ΠΈΡ‚Π΄ ΠΈΡ‚ΠΏ. Π’Π°ΠΊΠΆΠ΅ асинхронныС Π°Π½Π°Π»ΠΎΠ³ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ модСль ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎ бСсконСчности

Зависимости

Бамая главная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ - это poetry

pip install poetry

Π”Π°Π»Π΅Π΅ опСрируСтся вся Ρ€Π°Π±ΠΎΡ‚Π° с зависимостями Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ:

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ

poetry add requests

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

poetry add pytest --dev

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

poetry install

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости для ΠΏΡ€ΠΎΠ΄Π°

poetry install --only main

QUICK START

Для Π½Π°Ρ‡Π°Π»Π° Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ слово bread_bot - Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ вашСго микросСрвиса. Ну Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π΄Π°? НСобходимо ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС зависимости Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅:

pip install poetry && poetry install

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π½Π° сСкунду, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ поставили PostgreSQL. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π‘Π” с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ:

CREATE DATABASE bread_bot;
CREATE ROLE bread_bot with LOGIN PASSWORD 'my_password';
GRANT ALL PRIVILEGES ON DATABASE bread_bot TO bread_bot;

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ схСмы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

alembic upgrade head

ΠžΡ‚ΠΊΠ°Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

alembic downgrade -1

Авто-гСнСрация схСмы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

alembic revision --autogenerate -m 'my migration message'

ЗапускаСм локально Π²Π΅Π±-сСрвСр

uvicorn bread_bot.main.webserver:app --reload

ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ:

python server.py

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ codestyle ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (А эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ CI)

flake8

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты:

pytest bread_bot/tests

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ создания Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ тСстами

coverage run -m pytest bread_bot/tests

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ тСстами

coverage report -m

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π² html Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

coverage html

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

coverage erase

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

coverage erase && coverage run pytest bread_bot/tests && coverage html

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΡ‚Π° описана Π² About.md

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.8%
  • Other 0.2%