Расширьте python logging.handlers.SMPTHandleremit() временной модификацией self.toaddrsPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Расширьте python logging.handlers.SMPTHandleremit() временной модификацией self.toaddrs

Сообщение Anonymous »

Мой код работает так, как я и предполагал (текущее намерение может измениться, как я отмечаю в конце). Я спрашиваю, верна ли моя логика работы Python в операции одного потока/одного процесса и не упускаю ли я что-то при переопределении этого метода так, как я это сделал. У меня очень мало практического опыта переопределения чужого класса:

Код: Выделить всё

class EmailHandler(logging.handlers.SMTPHandler):
def getSubject(self, record):
# super_subject = super().getSubject(record)
subject = f'LogLevel {record.levelname} recorded on remote server'

return subject

def emit(self, record):
try:
extra_handling: dict = record._extra
except AttributeError:
super().emit(record)
return

email_user = extra_handling.get('email_user', None)

if email_user:
# copy original emails
to_entries = [entry for entry in self.toaddrs]

# append user email
self.toaddrs.append(f'{email_user}')
super().emit(record)

# revert original emails
self.toaddrs = [entry for entry in to_entries]
else:
super().emit(record)
Я хотел бы использовать отправку SMTP как есть и свести к минимуму свои переопределения. Как вы можете видеть, существует ли атрибут записи, я создаю копию свойства self.toaddrs, вызываю super().emit(record), затем восстанавливаю исходный self.toaddrs . Таким образом, я поддерживаю один обработчик электронной почты.
Насколько я понимаю, поскольку все это происходит в одном экземпляре журнала, в одном потоке, внесение изменений в свойство экземпляра и его возврат должен быть прозрачным для других вызовов, которые не соответствуют логике, верно?
Есть ли в этом какие-либо недостатки в производительности?
Примечание: я просто понял, что, возможно, это не то, чего я на самом деле хочу, поскольку мне хотелось бы либо два отдельных электронные письма или дополнительную запись toaddrs вместо скрытой копии. В этом случае мне придется переопределить другие функции, и я думаю, я понимаю, как это сделать.

Подробнее здесь: https://stackoverflow.com/questions/792 ... toaddrs-mo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»