Example #1
0
    def loop(self):
        while True:
            try:
                # получаем id`шники записей из БД рандомно для того чтобы не
                # получать одни и теже записи, которые не могут быть отправлены
                rids = [record.id for record in Message.select().order_by(Random()).limit(10)]
            except PeeweeException as e:
                # если что-то полшло не так
                # пропускаем текущую итерацию
                log.error(e)
                continue

            # перебираем все id`шники
            for rid in rids:
                try:
                    message = Message.get(Message.id == rid)

                    with db.transaction():
                        # удаляем запись по id
                        Message.delete().where(Message.id == rid).execute()
                        # выполняем отправку сообщения
                        self.smtp_conn.send(message.to, message.frm, message.body, message.topic)

                except (OSError, TypeError, PeeweeException, SMTPException) as e:
                    log.error(e)
                    continue

            sleep(self.sleep_time)
Example #2
0
def action_put_json(request: Request) -> Response:
    """
    Checks and saving data in the storage.

    :raises: Exception
    """
    # todo: перенести в модель эту логику

    # check for POST request structure
    if not is_put_request_correct(request.values):
        log.error('Incorrect request data')
        return Response('Incorrect request data', status=400)

    # creating JSON array from JSON-string, and check JSON-data for correctness
    try:
        json_list = get_json_list_from_dict(request.values['data'])
    # если ошибка JSON данных
    except JSONDataIncorrect as e:
        log.error('Incorrect JSON data')
        return Response('Incorrect JSON data', status=400)
    # если ошибка в одном из адресов электронной почты
    except EmailAddressIncorrect:
        log.error('Incorrect e-mail address')
        return Response('Incorrect e-mail address', status=400)

    # start for transaction
    with db.transaction() as transaction:
        try:
            # creating and records
            for message in json_list:
                Message(to=message['to'],
                        frm=message['from'],
                        body=message['body'],
                        topic=message['topic']).save()
        except Exception as e:
            log.error(e)
            # do rollback
            transaction.rollback()
            return Response('Database error, data was not recoded, sorry (:', status=500)

    return Response('Data was successful recorded! (%s)' % len(json_list), status=201)