170 похожих чатов

Https://Pastebin.Com/SG6JugK0 Что не так?

71 ответов

520 просмотров

не видит файла .env. он точно в одной папке с main.py?

Иван- Автор вопроса
Сергей
не видит файла .env. он точно в одной папке с main...

поднял выше, так же падает ошибка спасибо, ошибка была в том, что одно обязательное поле не указал)

Иван
поднял выше, так же падает ошибка спасибо, ошибка...

app/auth/config.py хотя может он в auth и должен лежать, надо проверить, с импортами и подобным всё путаюсь..

Стикер

Иван- Автор вопроса

а при чем тут глобалы?

Tishka17
А при чем тут папка с мейном?

увидел что он запускается оттуда же. всё-таки подтягиваемый .env должен быть на одном уровне с файлом который на него ссылается или с папкой откуда запускаем?

Сергей
ни то ни то?

https://t.me/advice17/37

Tishka17
Нет, с чего бы

должен быть в "рабочей директории"?

Tishka17
Скорее всего. Или выше

.env в корне должен быть

Tishka17
Скорее всего. Или выше

но разве то откуда запускаем uvicorn ... это не рабочая директория? (статьи надо перечитать правда)

Tishka17
В корне? Мммммм

Условно проект: 1. Project-main 1.1 app - здесь само приложение 1.2 Dockerfile 1.3 .env итд

Сергей
но разве то откуда запускаем uvicorn ... это не ра...

Я вообще не очень понял что у него где лежит

Arozzi
Условно проект: 1. Project-main 1.1 app - здесь са...

Все сложнее. Лучше всего вообще не юзать то .энв который юзает топикстартер

Сергей
но разве то откуда запускаем uvicorn ... это не ра...

Думаешь правильно писать какую-то логику в конфиг файле?, который должен только инициализировать типы и дальше передавать их уже в другие функции, модули

Arozzi
Думаешь правильно писать какую-то логику в конфиг ...

трудно сказать.. чтобы в env не писать "магические" числа типа 3600?

Сергей
но разве то откуда запускаем uvicorn ... это не ра...

в .env в каком формате записываешь данные, так? DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASS=postgres

Сергей
да

У тебя файл с инициализатором переменных называется config.py?

Сергей
да, но это же ни на что не влияет

Поменяй здесь: config = AuthConfig() на settings = AuthConfig()

Arozzi
Какая IDE у тебя?

а, речь о переменной снизу. но тоже не должно влиять, где-то пропустил думаю что-то

Arozzi
Попробуй, скажешь, что в итоге будет

да 100% не влияет, дурацкий эксперимент. тем более у меня вообще вот так @lru_cache() def get_settings(): return Settings()

Tishka17
О боже. Чую tiangolo насрал

плохая практика? уже не помню если честно для чего так написал. вроде эффект ведь тот же что записать в переменную.. а какие минусы?

Сергей
плохая практика? уже не помню если честно для чего...

1. Странное. Вызывает вопросы 2. Замаскированный глобал, те же проблемы что у него

Сергей
плохая практика? уже не помню если честно для чего...

Попробуй из корня запустить проект uvicorn app.main:app

Tishka17
1. Странное. Вызывает вопросы 2. Замаскированный ...

да, наверное глобал в явном виде выглядит лучше. почему здесь так воюют с глобалами для констант я по-прежнему не понимаю..

Arozzi
Попробуй из корня запустить проект uvicorn app.mai...

да всё работает, ты где-то забыл переименовать думаю

Tishka17
Где константы?

ну эти сеттинги во время работы приложения ведь не меняются

Сергей
ну эти сеттинги во время работы приложения ведь не...

Не меняются. Но это не константы. Они не известны заранее, а определяются где-то в процессе работы, но один раз.

Tishka17
Не меняются. Но это не константы. Они не известны ...

во время запуска. ок прочитаю тогда чтобы предметнее спрашивать, на 1 взгляд правда не вижу чему это может повредить

Сергей
во время запуска. ок прочитаю тогда чтобы предметн...

Ну вот в тестах, например, ты можешь захотеть подменить

Сергей
точно не то что записано в энвах

Именно. Смотри, уже не константа :)

Tishka17
Именно. Смотри, уже не константа :)

нет, я наоборот говорю точно не захочу подменить там то что записано в энвах, двусмысленно написал

Сергей
нет, я наоборот говорю точно не захочу подменить т...

Точно захочешь. Я тебе отвечаю. Ты стопудово захочешь протестить как ведёт себя приложение с разными вариантами настроек

Tishka17
Точно захочешь. Я тебе отвечаю. Ты стопудово захоч...

Для этого делаешь несколько режимов: ["DEV", "TEST", "PROD"] Пример: class Settings(BaseSettings): MODE: Literal["DEV", "TEST", "PROD"] LOG_LEVEL: str DB_HOST: str DB_PORT: int DB_USER: str DB_PASS: str DB_NAME: str @property def DATABASE_URL(self): return f"postgresql+asyncpg://{self.DB_USER}:{self.DB_PASS}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}" TEST_DB_HOST: str TEST_DB_PORT: int TEST_DB_USER: str TEST_DB_PASS: str TEST_DB_NAME: str @property def TEST_DATABASE_URL(self): return f"postgresql+asyncpg://{self.TEST_DB_USER}:{self.TEST_DB_PASS}@{self.TEST_DB_HOST}:{self.TEST_DB_PORT}/{self.TEST_DB_NAME}" FRONTEND_URL: str SMTP_HOST: str SMTP_PORT: int SMTP_USER: str SMTP_PASS: str REDIS_HOST: str REDIS_PORT: int SENTRY_DSN: str SECRET_KEY: str ALGORITHM: str class Config: env_file = ".env" settings = Settings() в .env соответсвенно тоже все прописываешь: MODE=DEV LOG_LEVEL=INFO DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASS=postgres DB_NAME=crm_db TEST_DB_HOST=localhost TEST_DB_PORT=5432 TEST_DB_USER=postgres TEST_DB_PASS=postgres TEST_DB_NAME=test_first_crm

Пиздец.

И что делать с этим TEST_DA6ABASE_URL, если код везде обращается к database_url?

Tishka17
И что делать с этим TEST_DA6ABASE_URL, если код ве...

в файле подключения БД: if settings.MODE == "TEST": DATABASE_URL = settings.TEST_DATABASE_URL DATABASE_PARAMETERS = {"poolclass": NullPool} else: DATABASE_URL = settings.DATABASE_URL DATABASE_PARAMETERS = {} engine = create_async_engine(DATABASE_URL, **DATABASE_PARAMETERS) async_session_maker = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

Arozzi
в файле подключения БД: if settings.MODE == "TEST"...

А мог бы просто свои проперти в зависимости от режима подменять, и не было бы хуйни в коде

Arozzi
Для этого делаешь несколько режимов: ["DEV", "TEST...

а смпт не тестируете? надо добавить TEST_SMPT_HOST, TEST_SMPT_PORT, TEST_SMPT_USER и TEST_SMPT_PASS еще аналогично с редисом

Arozzi
в файле подключения БД: if settings.MODE == "TEST"...

Мммм. А если у меня тестов 1000 штук, мне делать 1000 доп параметров конфига и все в одном файле?

ungenuineer Hor
а смпт не тестируете? надо добавить TEST_SMPT_HOS...

А ещё надо разные комбинации проверить

ungenuineer Hor
а смпт не тестируете? надо добавить TEST_SMPT_HOS...

Это пример, при желании можно все тестами покрыть

Tishka17
А ещё надо разные комбинации проверить

Суть в том, на какой БД ты это будешь тестировать, юнит и интеграционные

Arozzi
Это пример, при желании можно все тестами покрыть

Представь, что у тебя в конфиге 10 булевых параметров. Ты хочешь протестить все комбинации. Как делать будешь?

Arozzi
Суть в том, на какой БД ты это будешь тестировать,...

Ни на какой. Для юниттестов мне НЕ нужна БД.

Tishka17
Пиздец.

в чем именно? вроде много где слышал про dev/prod режимы..

Сергей
в чем именно? вроде много где слышал про dev/prod ...

Это сколько угодно. Но вот в дев режиме тебе нахуй не нужен адрес продововй базы и наоборот

Сергей
в чем именно? вроде много где слышал про dev/prod ...

тк на проде у тебя просто продовский бд урл, а дев собсна девелоперский бд урл и все

Сергей
точно, два разных файла

без файлов, просто переменные окружения

Сергей
точно, два разных файла

Один файл. Один в проде, второй на компе. Они никогда не существуют вместе

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта