class_docstr: Send a notification to a channel at the beginning/ending of the training/testing and at a constant frequency
  (`alert_frequency`) during the training.
  
  Args:
      notificator (~poutyne.Notificator): The notification channel to send the message.
          The expected interface need to implement a `send_notification` method to send the message. You can see the
          `notif <https://notificationdoc.ca/index.html>`_ package which implements some Notificator respecting the
          interface.
      alert_frequency (int): The frequency (in epoch), during training, to send an update. By default, 1.
      experiment_name (Union[str, None]): The name of the experiment to add to the message. By default, None.
  
  Example:
  
      .. code-block:: python
  
          from notif.notificator import SlackNotificator
          from poutyne.framework.callbacks.notification import NotificationCallback
  
          webhook_url = "a_link"
          slack_notif = SlackNotificator(webhook_url=webhook_url)
  
          notif_callback = NotificationCallback(notificator=slack_notif)
  
          model = Model(...)
          model.fit_generator(..., callbacks=[notif_callback])
class_docstr_tok: ["Send","a","notification","to","a","channel","at","the","beginning\/ending","of","the","training\/testing","and","at","a","constant","frequency","(","`","alert_frequency","`",")","during","the","training",".","Args",":","notificator","(","~poutyne.Notificator",")",":","The","notification","channel","to","send","the","message",".","The","expected","interface","need","to","implement","a","`","send_notification","`","method","to","send","the","message",".","You","can","see","the","`","notif","<","https",":","\/\/notificationdoc.ca\/index.html",">","`","_","package","which","implements","some","Notificator","respecting","the","interface",".","alert_frequency","(","int",")",":","The","frequency","(","in","epoch",")",",","during","training",",","to","send","an","update",".","By","default",",","1.","experiment_name","(","Union","[","str",",","None","]",")",":","The","name","of","the","experiment","to","add","to","the","message",".","By","default",",","None",".","Example",":","..","code-block",":",":","python","from","notif.notificator","import","SlackNotificator","from","poutyne.framework.callbacks.notification","import","NotificationCallback","webhook_url","=","``","a_link","''","slack_notif","=","SlackNotificator","(","webhook_url=webhook_url",")","notif_callback","=","NotificationCallback","(","notificator=slack_notif",")","model","=","Model","(","...",")","model.fit_generator","(","...",",","callbacks=","[","notif_callback","]",")"]
code: def _format_logs(logs: Dict) -> str:
      return " ".join(
          [f"{key}: {value}\n" for key, value in logs.items()]
      )
  
file_path: poutyne/poutyne/framework/callbacks/notification.py
imports: from abc import ABC, abstractmethod
  from typing import Dict, Union
  from poutyne.framework.callbacks.callbacks import Callback
label_desc: Use image node_id 7 for calling the NotificationCallback obj's underlying member method code with example usage: obj._format_logs(logs) and returns: str