Ошибка Python Flask rq AttributeError: у объекта 'bool' нет атрибута '__module__' - PullRequest
0 голосов
/ 22 января 2019

Hello? Я использую Amazon SES для отправки писем через Flask rq Queue. Проблема заключается в том, что если я использую функцию enqueue в том виде, как она есть в документации, электронное письмо никогда не отправляется, но если я настраиваю функцию для вызова моего send_email с параметрами, электронное письмо отправляется, но приложение выдает ошибку AttributeError: 'bool 'У объекта нет атрибута' module 'Вот мой код

Код для задания (файл tasks.py, имеет функцию send_email)

def send_email(from_email, to_email, subject, body):
    ses = boto3.client(
        'ses',
        region_name=os.getenv('SES_REGION'),
        aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
        aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY')
    )
    ses.send_email(
        Source=from_email,
        Destination={'ToAddresses': [to_email]},
        Message={
            'Subject': {'Data': subject},
            'Body': {
                'Html': {'Data': body}
            }
        }
    )

    return True

a) Сценарий, по которому работает, но электронное письмо никогда не отправляется

# Queue confirmation email
        try:
            # Generate token, confirm url, and template
            token = encode_token(email)
            confirm_url = generate_url('guest.confirm_email', token)
            body = render_template('emails/confirm.html', first_name=first, confirm_url=confirm_url)


            #send_mail("email@domain.com", email, "Confirm your Email - Company Name", body)

            # Enqueue
            redis_url = os.getenv('REDIS_URL')
            with Connection(redis.from_url(redis_url)):
                q = Queue()
                q.enqueue(send_email, "email@domain.com", email, "Confirm your email address", body)

            return jsonify({'success': 1})

        except IntegrityError:
            db.session.rollback()
            return jsonify({'success': 0})

С учетом вышеизложенного приложение не выдает ошибку, возвращает код успеха, но электронное письмо никогда не отправляется

b) Сценарий 2 (электронное письмо отправлено, но приложение выдает ошибку: AttributeError: у объекта 'bool' нет атрибута ' module ')

Для этого я вместо этого вызываю метод send_email и передаю его параметры в скобках как

q.enqueue(send_email("email@domain.com", email, "Confirm your email address", body))

Письмо отправлено, но приложение выдает ошибку. Полный код для сценария 2:

# Queue confirmation email
        try:
            # Generate token, confirm url, and template
            token = encode_token(email)
            confirm_url = generate_url('guest.confirm_email', token)
            body = render_template('emails/confirm.html', first_name=first, confirm_url=confirm_url)


            #send_mail("email@domain.com", email, "Confirm your Email - Company Name", body)

            # Enqueue
            redis_url = os.getenv('REDIS_URL')
            with Connection(redis.from_url(redis_url)):
                q = Queue()
                q.enqueue(send_email("email@domain.com", email, "Confirm your email address", body))

            return jsonify({'success': 1})

        except IntegrityError:
            db.session.rollback()
            return jsonify({'success': 0})

Любая помощь будет принята с благодарностью.

...