Files
service_mail/storage/thread_model.py
Andreas Stephanides 4060a77c48 updates + sqlite db
2017-08-04 08:48:54 +02:00

94 lines
2.5 KiB
Python

from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey, Unicode
from sqlalchemy.orm import relationship
from datetime import datetime
from database import Base
from database import db_session
from email.header import decode_header
from marshmallow import Schema, fields, post_load
import yaml
import email
from mail_model import Mail
#from fetch_mail import fetch_mail
class FullThreadSchema(Schema):
id=fields.Integer()
text=fields.String()
body=fields.String()
envelope=fields.String()
class MailThread(Base):
__tablename__ = 'threads'
id = Column(Integer, primary_key=True)
firstmail = Column(Integer)
islabeled = Column(Boolean)
opened = Column(Boolean)
body = Column(Text)
__schema__=FullThreadSchema
__jsonid__='thread'
__whiteattrs__= ["body"]
__jsonattrs__=None
def bdy(self):
return yaml.load(self.body)
def to_text(self):
mmm=self.mails()
txt=""
for m in mmm:
m.compile_envelope()
txt=txt+"mail: \n"
for f in yaml.load(m.from_):
txt=txt+f["mail"]+"@"+f["host"]
txt=txt+" --- "
txt=txt+" ".join(yaml.load(m.subject))
txt=txt+"\n"
return txt
def mails(self):
a=[]
# print self.bdy()
for m in self.bdy():
mail=db_session.query(Mail).filter(Mail.id==int(m)).first()
if mail is None:
mail=Mail.fetch_mail(int(m))
a.append(mail)
return a
def mail_dicts(self):
a=[]
# print "maildicts: "+ str(self.mails())
for m in self.mails():
m.compile_envelope()
a.append(m.dict_envelope())
return a
def mail_flat_dict(self):
a=[]
d={}
dc=self.mail_dicts()
# print dc
for i in range(0,len(dc)):
for k, v in dc[i].iteritems():
d["mail_"+str(i)+"_"+k]=v
return d
def subject(self):
a=""
for m in self.mails():
m.compile_envelope()
a=a + " ".join(yaml.load(m.subject))+"\n"
return a
def text(self):
a=u""
for m in self.mails():
m.compile_text()
t=yaml.load(m.text)
if type(t) is unicode:
txt=t
else:
# print "withintm:"+str(type(t))
t=t.decode("ISO-8859-1")
txt=t
a=a+txt+"***........................................***\n"
return a