예제 #1
0
    def _process(self, args):
        '''Called by process() to do its work
           Return status of process as a string
        '''
        cmd = args.pop(0)
        if cmd == 'show':
            validate_num_args('show', 1, args)
            target = args.pop(0)
            if target == 'missing_school_addresses':
                return self.schools.missingAddresses()
            else:
                return StemsibleArgsError('Unrecognized show target: %s' %
                                          target)
            print target

        elif cmd == 'email':
            validate_num_args('email', 1, args)
            target = args.pop(0)

            # get message_id:
            if target == 'message_notification':
                validate_num_args('email_notification', 1, args)
                message_id = args.pop(0)

            # get user:
            if args:
                try:
                    email = args.pop(0)
                    if email == '-':
                        user = None
                    else:
                        user = self.users.getUsers({'email': email})[0]

                except IndexError, e:
                    raise StemsibleArgsError('Unknown user: %s' % email)
            else:
                user = None

            if target == 'message_activity':
                self.notifications.sendMessageActivity(user)
            elif target == 'message_notification':
                self.notifications.sendMessageNotification(message_id, user)

            elif target == 'summary':
                self.notifications.sendSummary(user)
            elif target == 'verification':
                if not user:
                    raise StemsibleArgsError('Must specific user_email')
                from emails import Emails
                Emails().send_verification_email(email)
            else:
                raise StemsibleArgsError('Unrecognized email target: %s' %
                                         target)
    elif elapsed.days == 3:
        reminder = 'reminder_days'
    elif elapsed.days == 4:
        reminder = 'reminder_days_final'
    elif elapsed.days == 5:
        reminder = ''
        email_body = 'dropout'  # change body to dropout if 5 days
    elif elapsed.days == 8:
        reminder = 'reminder_dropout'
        email_body = 'dropout'
    else:  #includes if days == 6,7, or >8
        continue

    footer = dt.datetime.now(
    )  # makes sure bottom of email isn't hidden by gmail due to repeated content
    email_class = Emails(reminder, email_body, survey_url, footer)
    html_email = email_class.make_email()
    text_email = email_class.make_plaintext()

    ###SEND EMAIL

    #gmail set up
    port = 465
    smtp_server = "smtp.gmail.com"
    sender_email = ""
    password = ""
    #input("Type your password and press enter: ")

    #sussex webmail (outlook) setup
    #port = 465
    #smtp_server = "smtp.office365.com"
예제 #3
0
def daily_quotes():
    emails = Emails()
    emails.send_to_everyone()
예제 #4
0
파일: base.py 프로젝트: lover2668/stemsible
 def emails(self):
     from emails import Emails
     return Emails()
예제 #5
0
 def __init__(self):
     self.conf = conf.getInstance()
     self.db = db.getInstance()
     self.users = Users()
     self.messages = Messages()
     self.email = Emails()
예제 #6
0
# create database session
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()

key_errors = 0

for email in emails:
    try:
        kw = {
            Emails.key_by_label[label]: value
            for label, value in email.items()
        }
        dt = parser.parse(kw.pop('sent_datetime'))
        emails_row = Emails(sent_datetime=dt, **kw)
        for address_type, column_name in Addresses.key_by_address_type.items():
            addresses = kw.get(column_name)
            if addresses:
                for address in addresses.split(','):
                    addresses_row = Addresses(sent_datetime=dt,
                                              sender=emails_row.message_from,
                                              send_type=address_type,
                                              sent_to=address.strip())
                    emails_row.addresses.append(addresses_row)
        session.add(emails_row)
        session.commit()
    except KeyError as k:
        print('KeyError in message {}: {}'.format(email, k))
        key_errors += 1
    except ValueError as v:
예제 #7
0
def emails():
    return Emails()
예제 #8
0
    def checkForDups(self):
        '''-- Problem statement

        -- After user creates a new comment, or creates a new post --
           if they immediately refresh the page (with Ctrl-R for
           example), the previous HTML POST data is repeated. And
           their data update is repeated. You can verify this is dev
           or staging.
        
        -- This pattern seems to be the solution;
        -- https://en.wikipedia.org/wiki/Post/Redirect/Get
        
        -- In the mean time we can remove duplicate entries from the database
        
        
        -- This query lists dupicate messages (or comments).
        '''

        sql = '''
        select
           u.id as user_id,
           concat_ws(' ', u.first_name, u.last_name) as user_fullname,
           m.created,
           m.text,
           m.reference_id
        from
           messages m
           join (
              select
                 text,
                 count(*)
              from
                 messages
              group by
                 1
              having
                 count(*) > 1
           ) m2 on m.text = m2.text
           join users u on m.user_id = u.id
        order by
           m.text,
           m.id
        '''

        from vlib.utils import format_datetime

        old_text = None
        dups = []
        report = ''

        for row in self.db.query(sql):
            user_id = str(row['user_id'])
            user_fullname = row['user_fullname']
            created = format_datetime(row['created'])
            text = row['text'][0:50]
            reference_id = str(row['reference_id'])

            print_rec = ', '.join(
                [user_id, user_fullname, created, text, reference_id])

            # rec text same as last one?
            if old_text and text != old_text:
                report += '\n'.join(dups) + '\n\n'
                dups = []

            dups.append(print_rec)
            old_text = text

        if dups:
            report += '\n'.join(dups) + '\n\n'
            dups = []

        if report:
            from emails import Emails
            Emails().send_email('[email protected],[email protected]',
                                'Dupliate Messages Report', report)