Subversion Repositories SmartDukaan

Rev

Rev 1395 | Rev 1891 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
353 ashish 1
'''
2
Created on 14-Jul-2010
3
 
4
@author: ashish
5
'''
6
from email.mime.multipart import MIMEMultipart
7
from shop2020.thriftpy.utils.ttypes import HelperServiceException, Mail
8
from email.mime.base import MIMEBase
9
from email import encoders
10
import os
11
import smtplib
494 rajveer 12
from shop2020.utils.Utils import log_entry, to_py_date
1395 varun.gupt 13
from shop2020.helpers.impl.DataService import Message, DashboardUser, UserEmail
494 rajveer 14
 
353 ashish 15
from elixir import *
16
 
17
from shop2020.thriftpy.utils.ttypes import Message as Msg
18
from string import Template
494 rajveer 19
import datetime
20
from shop2020.helpers.impl import DataService
581 rajveer 21
from email.mime.text import MIMEText
1422 varun.gupt 22
from sqlalchemy.orm import query
353 ashish 23
 
1248 chandransh 24
def initialize(dbname='helper'):
494 rajveer 25
    log_entry("initialize@DataAccessor", "Initializing data service")
1248 chandransh 26
    DataService.initialize(dbname)
494 rajveer 27
 
1395 varun.gupt 28
def save_user_email_for_sending(email_to, email_from, subject, body, source, email_type):
29
    user_email = UserEmail()
30
    user_email.emailTo = email_to
31
    user_email.emailFrom = email_from
32
    user_email.subject = subject
33
    user_email.body = body
34
    user_email.source = source
35
    user_email.emailType = email_type
36
    user_email.status = False
37
    user_email.timestamp = datetime.datetime.now()
38
    session.commit()
1422 varun.gupt 39
 
40
def get_emails_to_be_sent(email_type):
41
    print "get_emails_to_be_sent"
42
    return UserEmail.query.filter_by(status = False).all()
43
 
44
def mark_email_as_sent(email_id):
45
    email = UserEmail.get_by(id = email_id)
46
    email.status = True
47
    session.commit()
48
 
353 ashish 49
def sendMail(mail):
50
    if not mail:
51
        raise HelperServiceException(101, "mail not present")
581 rajveer 52
    #msg = MIMEMultipart()
53
    #mail = Mail()
928 rajveer 54
    if mail.sender:
55
        mail.data = "This mail is sent by " + mail.sender + "\n" + mail.data
56
 
581 rajveer 57
    msg = MIMEText(mail.data)
900 rajveer 58
    msg['To'] = ', '.join( mail.to )
928 rajveer 59
    if mail.sender:
60
        msg['From'] = mail.sender
61
    else:    
62
        msg['From'] = "help@saholic.com"
900 rajveer 63
    msg['Subject'] = mail.subject
581 rajveer 64
    #msg.attach(mail.data)
353 ashish 65
 
66
    #handle attachments in mail
67
    if mail.attachments:
68
        for attach in mail.attachments:
69
 
70
            part = MIMEBase('application', 'octet-stream')
71
            part.set_payload(open(attach, 'rb').read())
72
            encoders.encode_base64(part)
73
            part.add_header('Content-Disposition',
74
                    'attachment; filename="%s"' % os.path.basename(attach))
75
            msg.attach(part)
900 rajveer 76
 
353 ashish 77
    for to in mail.to:
873 rajveer 78
        mail.sender = "help@shop2020.in"
79
        mail.password = "5h0p2o2o"
353 ashish 80
        mailServer = smtplib.SMTP("smtp.gmail.com", 587)
81
        mailServer.ehlo()
82
        mailServer.starttls()
83
        mailServer.ehlo()
84
        mailServer.login(mail.sender, mail.password)
85
        mailServer.sendmail(mail.password, to, msg.as_string())
86
        # Should be mailServer.quit(), but that crashes...
87
        mailServer.close() 
88
 
89
def sendText(text):
90
    pass
91
 
92
def addMessage(message):
93
    msg = Message.get_by(message_id=message.id)
94
    if msg:
95
        raise HelperServiceException(101, "Message is already present. Please try updation api instead")
96
    msg = Message();
97
    msg.message_id = message.id
98
    msg.message = message.message
99
    session.commit()
100
 
101
def getMessage(message_id):
102
    msg = Message.get_by(id=message_id)
103
    message = Msg()
104
    message.id = msg.message_id
105
    message.message = msg.message
106
    return message
107
 
108
def updateMessage(id, message):
109
    msg = Message.get_by(message_id=id)
110
    if msg:
111
        msg.message = message
112
        session.commit()
113
    else:
114
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
115
 
116
def getSubstitutedMessage(id, params):
117
    #get the message first
118
    msg = Message.get_by(message_id=id)
119
    if not msg:
120
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
121
    if params:
122
        s = Template(msg.message)
123
        s = s.safe_substitute(params)
124
        return s
125
    else:
126
        return msg.message
494 rajveer 127
 
128
def add_user(username, password, warehouseId):
129
    user = DashboardUser()
130
    user.username = username
131
    user.password = password
132
    user.warehouseId = warehouseId
133
    user.addedOn = datetime.datetime.now()
134
    user.status = 0
135
    try:
136
        session.commit()
137
        return True
138
    except:
139
        raise HelperServiceException(101, "Some error while adding user")
140
        return False
141
 
142
def delete_user(username):
143
    user = DashboardUser.get_by(username=username)
144
    if user is None:
145
        return False
146
    user.delete()
766 rajveer 147
    session.commit()
494 rajveer 148
    return True
149
 
150
def authenticate_user(username, password):
151
    user = DashboardUser.get_by(username=username)
152
    if user is None:
153
        return -1
154
    if user.password == password:
155
        user.loggedOn = datetime.datetime.now()
156
        session.commit()
157
        return user.warehouseId
158
    return -1
159
 
160
def update_password(username, oldPassword, newPassword):
161
    user = DashboardUser.get_by(username=username)
162
    if user is None:
163
        return False
164
    if user.password == oldPassword:
165
        user.password = newPassword
766 rajveer 166
        session.commit()
494 rajveer 167
        return True
766 rajveer 168
    return False
169
 
170
def close_session():
171
    if session.is_active:
172
        print "session is active. closing it."
173
        session.close()