| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | 
							- from config import DSN, MAILBOX
 
- from model import StatusMeldung
 
- from datetime import date, time
 
- from email.message import EmailMessage
 
- from sqlalchemy import create_engine
 
- from sqlalchemy.orm import Session
 
- from sqlalchemy.exc import IntegrityError
 
- from imap_tools import MailBox
 
- import json
 
- class MailImport:
 
-     def open_mailbox(self) -> MailBox:
 
-         return MailBox(MAILBOX["server"]).login(
 
-             MAILBOX["user"], MAILBOX["password"], MAILBOX["folder"]
 
-         )
 
-     def mail_import(self):
 
-         with (
 
-             Session(create_engine(DSN)) as db_session,
 
-             self.open_mailbox() as mb,
 
-         ):
 
-             messages = mb.fetch(mark_seen=True, limit=500)
 
-             imported = []
 
-             for msg in messages:
 
-                 status = self.get_status_message(msg)
 
-                 if status is None:
 
-                     continue
 
-                 db_session.add(status)
 
-                 try:
 
-                     db_session.commit()
 
-                 except IntegrityError as e:
 
-                     db_session.rollback()
 
-                     print(e.args[0])
 
-                 imported.append(msg.uid)
 
-             
 
-     def get_status_message(self, msg: EmailMessage) -> StatusMeldung:
 
-         subject = msg.subject.split(";")
 
-         if len(subject) < 5:
 
-             print(msg.subject)
 
-             return None
 
-         attachments = dict([(att.filename, att.payload) for att in msg.attachments])
 
-         fehlerbericht_json = json.loads(attachments.get("fehlerbericht.json", ""))
 
-         fehlerbericht_import = json.dumps(fehlerbericht_json)
 
-         aufgabe = ""
 
-         if len(subject) > 5:
 
-             if subject[5][-4:] == ".bat":
 
-                 aufgabe = subject[5]
 
-             elif ":" in subject[5]:
 
-                 aufgabe = "manuell"
 
-         if ":" not in subject[1]:
 
-             aufgabe = subject[1]
 
-             subject[1] = "00:00"
 
-         if aufgabe == "":
 
-             files = [f["Name"] for f in fehlerbericht_json if ".bat" in f["Name"]]
 
-             if len(files) > 0:
 
-                 aufgabe = files[0]
 
-         return StatusMeldung(
 
-             datum=date.fromisoformat(subject[3]),
 
-             kunde=subject[0],
 
-             aufgabe=aufgabe,
 
-             start=time.fromisoformat(subject[1]),
 
-             ende=time.fromisoformat(subject[2]),
 
-             fehlerbericht_import=fehlerbericht_import,
 
-             anzahl=int(subject[4]),
 
-         )
 
-     def cleanup(self):
 
-         pass
 
- if __name__ == "__main__":
 
-     mi = MailImport()
 
-     mi.mail_import()
 
-     mi.cleanup()
 
 
  |