コード例 #1
0
ファイル: cli.py プロジェクト: vkotek/lunchscraper
def new_preference(id):
    """Assigns a preference to all users."""

    users = controller.User()

    try:
        users.add_restaurant_to_preferences(id)
        return True
    except:
        return False
コード例 #2
0
ファイル: cli.py プロジェクト: vkotek/lunchscraper
def subscribers():

    users = controller.User().get()

    click.echo("There are {} subscribers.".format(len(users)) )
    for user in users:
        click.echo("{} | {} | {} | {}".format(
            user['email'].ljust(35," "),
            helpers.pretty_datetime(user['verified']).rjust(16),
            # ",".join(list(user['preferences'])),
            ".".join(user['preferences']).ljust(22),
            user['language'] if user['language'] is not None else ""
        ))
コード例 #3
0
ファイル: cli.py プロジェクト: vkotek/lunchscraper
def resend_verification(email):

    users = controller.User()

    user = users.get(email=email)

    if not user:
        return click.echo("User not found.")

    if users.send_email_verification( user['uuid'] ):
        return click.echo("Verification email sent to {}.".format(user['email']))

    return click.echo("Could not resend verification email.")
コード例 #4
0
ファイル: cli.py プロジェクト: vkotek/lunchscraper
def verify(email):

    users = controller.User()

    try:
        user = users.get(email=email)
        if not user:
            return click.echo("User not found.")
        click.echo("User found. Verifying user {} ({})".format(user['email'], user['uuid']))
        result = users.verify(user['token'])
        if result:
            return click.echo("User verified.")
        else:
            click.echo("Could not verify user.")
    except Exception as e:
        return "Unexpected error:", click.echo(e)
コード例 #5
0
ファイル: lunchscraper.py プロジェクト: vkotek/lunchscraper
    def send_messages_html(self, email=None):

        if email:
            users = controller.User()
            user = users.get(email=email)
            if not user:
                user = users.add(email, verify=True)
            recipients = [user]
        else:
            recipients = self.get_recipients()

        auth = ("api", self.settings.MAIL_API_KEY)

        notice = controller.Email.get_notice()

        send_counter = 0

        recipients = [
            recipient for recipient in recipients
            if recipient['verified'] is not False
        ]

        for recipient in recipients:

            try:

                print("Sending email to {}".format(recipient['email'].ljust(
                    40, ".")),
                      end="")

                # Get menus for preferences of given user
                foo = [
                    r for r in self.menus
                    if str(r['id']) in recipient['preferences']
                ]

                def get_menus():
                    userMenu = []
                    for preference in recipient['preferences']:
                        for menu in self.menus:
                            if str(menu['id']) == preference:
                                userMenu.append(menu)
                                continue
                    return userMenu

                userMenus = get_menus()
                print(userMenus)

                # for each user preferences, get the corresponding

                # Define language so it corresponds to dictionary keys of languages in menu dict
                if recipient['language'] in [
                        'cs', 'en'
                ]:  # Check if language is set for user.
                    language = str('menu_' + recipient['language'])
                else:  # Use original menu language
                    language = 'menu'
                for menu in userMenus:
                    menu['menu'] = menu[language]

                data = {
                    'title':
                    "Daily Menu for {}".format(
                        datetime.now().strftime("%A, %d-%b")),
                    'notice':
                    notice,
                    'recipient': {
                        'email': recipient['email'],
                        'url':
                        SETTINGS.URL + "/edit?token=" + recipient['token'],
                    },
                    'menus':
                    userMenus,
                    'language':
                    language,
                }

                # Generate html email template for user with given data
                email_html = self.render_email('master.html', data)

                config = {
                    "from":
                    self.settings.FROM,
                    "to":
                    recipient['email'],
                    "subject":
                    "Daily Menu for {}".format(
                        datetime.now().strftime("%A, %d-%b")),
                    "html":
                    email_html,
                }
                r = requests.post(self.settings.MAIL_URL,
                                  auth=auth,
                                  data=config)

                if r.status_code == 200:
                    send_counter += 1
                    print("OK!")
                else:
                    print("FAILED ({})".format(str(r.status_code)))

            except Exception as e:
                print("ERROR: {}".format(str(e)))

        print("{} / {} Emails sent successfully.".format(
            send_counter, len(recipients)))

        return True
コード例 #6
0
ファイル: cli.py プロジェクト: vkotek/lunchscraper
def add(email, verify):

    result = controller.User().add(email, verify=verify)
    click.echo("Adding {} to subscribers. Forcing verification: {}. Result: {}".format(email, verify, result))