Size: a a a

2021 November 18

SK

Sergio Keler in SPb Python
питоны разные у всех :D
либы разные
qt и тот разный
источник

Ю

Юра in SPb Python
получается сделать ехешник и чтобы работал на винде у разных людей крайне проблематично?
источник

SK

Sergio Keler in SPb Python
не так чтоб очень, но геморройно это.
источник

Ю

Юра in SPb Python
эхх, понял)
источник

SK

Sergio Keler in SPb Python
ад версий надо преодолеть :D
источник

Ю

Юра in SPb Python
источник

Ю

Юра in SPb Python
вот это не работает?
источник

SK

Sergio Keler in SPb Python
ну, сделай :D
источник

Ю

Юра in SPb Python
Эй
источник

Ю

Юра in SPb Python
Я пробовал до того как спрашивать)
источник

SK

Sergio Keler in SPb Python
потом отнеси на другой комп, где про тебя и питон не слышали и винда 7 или хр
источник

Ю

Юра in SPb Python
Та у меня и на моем не работает, куда там отнести ахах
источник

SK

Sergio Keler in SPb Python
ну вот
источник

DS

David Shiko in SPb Python
Всем привет!
Не знаю как подойти к логированию объектов.
Есть словарь, в нем мои объекты, в них еще какие то объекты и т.д.
Выглядит это вот так:

print(context_dict)
{'new_user': <classes.NewUser object at 0x7f1be722bfa0>, 'target_user': <classes.TargetUser object at 0x7f1be69c9ca0>}

print(vars(new_user))

{'_connection': <connection object at 0x7f1bf62af540; dsn: 'user=tg_bot_user password=xxx connect_timeout=1800 dbname=tg_bot_db host=127.0.0.1 port=5432', closed: 0>, '_cursor': <cursor object at 0x7f1be7276400; closed: 0>, 'tg_user_id': 177381168, 'tg_photos': [], 'name': None, 'goal': None, 'gender': None, 'age': None, 'country': None, 'city': None, 'comment': None, 'current_keyboard': <telegram.replykeyboardmarkup.ReplyKeyboardMarkup object at 0x7f1be72665e0>, 'old_media_group_id': None}

И хочется логировать содержимое context_dict в разные моменты. Естественно мне нужны атрибуты, а не расположение объектов в памяти. Атрибуты тоже не все нужны, conenction например мне мало интересен в логах :)
Я не нашел ничего лучше как сделать каждому своему объекту (new_user, target_user) методы log_data, где все будет возвращаться  в виде словаря.
Есть какое универсальное решение для этого?
Я, помзговав, не нашел
источник

SM

Serge Matveenko in SPb Python
https://www.structlog.org/en/stable/getting-started.html

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

structlog умеет ещё дергать __structlog__, если хочется что-то конкретное ему скормить. особенно полезно в json logger-е
источник

DS

David Shiko in SPb Python
А если я уже использую loguru?
Какая именно фишка  (метод) мне нужна из structlog?
источник

SM

Serge Matveenko in SPb Python
ну, для начала стоит использовать __repr__, наверное
источник

p

pragus in SPb Python
Приятно видеть что хорошая методология не зависит от языка )
источник

SM

Serge Matveenko in SPb Python
вообще, structlog основан на последовательных процессорах данных, которые ты логгируешь.
поэтому, даже если ты не можешь (или не хочешь) залезать в какой-то объект, можно написать процессор, который будет узнавать в логе нужный объект в соотвествующем атрибуте структуры данных и заменять его на другой объект или убирать его, а добавлять только отдельные атрибуты.
так, например, работает его STackInfoRenderer. он видит, что в структуре есть ключ stack_info = True и кладет вместо него stack
https://github.com/hynek/structlog/blob/main/src/structlog/processors.py#L452
источник

DS

David Shiko in SPb Python
Спасибо, информативно.
Это похоже на то, что я и хотел сделать вручную.
По факту мне нужно каждому объекту создать его версию для лога.
Возможно плюс этого sctructlog в том, что он сам все отлавливает (как я понял из ответа), но у меня уже есть обработчик, который ловит update, логирует его и передаёт дальше.
Мне кажется structlog будет бутылочным горлышком в моем случае
источник