def update_summary(self, batch: namedtuple):
     """
     Add batch, then add or update summary in DB
     :param batch:
     :return:
     """
     self.add_batch(batch)
     summary = Summary(batch)
     if summary.exists():
         summary_data = summary.data()
         summary_info = summary.misc_data()
         batch_id = batch.batch_name
         summary_line = (self.session
                         .query(PGSummary)
                         .filter_by(
                             batch_id=batch_id,
                             date=summary_info['date'],
                             time=summary_info['time']
                         )
                         .one_or_none())
         if summary_line:
             for key, val in summary_data._asdict().items():
                 setattr(summary_line, key, val)
             summary_line.gate_homes = summary_info['gate_homes']
             summary_line.lost_homing = summary_info['lost_homing']
         else:
             summary_line = PGSummary(
                 batch_id=batch_id, **summary_data._asdict(), **summary_info
             )
             self.session.add(summary_line)
         self.session.flush()
         return summary_line