VladErm91 / Async_API_sprint_1

4 спринт курса и первая часть асинхронного API для кинотеатра
0 stars 0 forks source link

Code review #15

Open BigDeepBlue opened 1 month ago

BigDeepBlue commented 1 month ago

Отлично поработали 🔥

  1. Конфиг fastapi-solution/src/core/config.py правильнее было оформить в виде класса:

    from pydantic_settings import BaseSettings, SettingsConfigDict
    
    class Settings(BaseSettings):
        model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
        redis_host: str = Field(..., alias='REDIS_HOST')
    
    settings = Settings()

    и затем использовать инстанс конфига setting в разных частях приложения. Плюс такого подхода в том, что происходит валидация типов переменных окружения при помощи pydantic. Также при создании инфраструктуры под тесты, можно будет наследоваться от этого класса и создать отдельный тестовый конфиг со своими переменными окружения. Подробнее https://pydantic-docs.helpmanual.io/usage/settings/

    Еще небольшой пример конфига:

      class Settings(BaseSettings):
          project_name: str = 'Some project name'
          redis_host: str = ...
          redis_port: int = ...
          elastic_host: str = Field(..., alias='ELASTIC_HOST_NAME')
          elastic_port: int = Field(9200, alias ='ELASTIC_PORT')

    BaseSettings регистронезависимый и работает вот так:

    • присвоит в поле project_name значение переменной PROJECT_NAME, а если ее нет, то даст значение по умолчанию 'Some project name'
    • redis_host мы сделали обязательным полем (... - служебный символ), если не будет переменной окружения REDIS_HOST, то проект не заведется
    • elastic_host мы сделали обязательным и явно указали имя переменной окружения, т.к. она отличается от имени поля
    • elastic_port так же как и с хостом, но указали и значение по умолчанию
  2. Начиная с python 3.10 можно не использовать Optional из модуля typing. В новом синтаксисе можно использовать вот такую конструкцию: redis: Redis | None = None
  3. С версии python 3.9 для стандартных коллекций больше не нужен модуль typing: https://docs.python.org/3.9/whatsnew/3.9.html#type-hinting-generics-in-standard-collections.
VladErm91 commented 1 month ago

Спасибо, за оперативную проверку и важное замечание. Замечание учли, класс Settings добавили.