示例#1
0
    def test_privat_mock(self, ):
        main.update_from_privat_api()

        rate = XRate.get_or_none(from_currency="USD", to_currency="UAH")

        self.assertIsNotNone(rate)
        self.assertEqual(rate.rate, 30)

        rates_count = XRate.select().count()
        self.assertEqual(rates_count, 1)
示例#2
0
 def _update_all(self):
     xrates = XRate.select()
     for rate in xrates:
         try:
             self._update_rate(rate.from_currency, rate.to_currency)
         except Exception as ex:
             print(ex)
示例#3
0
def get_rates_from_db():
    # update_from_privat_api()
    return [{
        "from_currency": rate.from_currency,
        "to_currency": rate.to_currency,
        "rate": rate.rate
    } for rate in XRate.select()]
示例#4
0
def update_rates():
    print(f'Job started at {datetime.now()}')
    xrates = XRate.select()
    for rate in xrates:
        try:
            api.update_rate(rate.from_currency, rate.to_currency)
        except Exception as ex:
            print(ex)
    print(f'Job finished at {datetime.now()}')
示例#5
0
def update_rates():
    log.info('Job started')
    xrates = XRate.select()
    for rate in xrates:
        try:
            api.update_rate(rate.from_currency, rate.to_currency)
        except Exception as ex:
            log.exception(ex)
    log.info('Job finished')
示例#6
0
def update_rates():
    print(f"Start jobs at {datetime.now()}")
    xrates = XRate.select()
    for rate in xrates:
        try:
            api.update_rate(rate.from_currency, rate.to_currency)
        except Exception as ex:
            print(ex)
    print(f"Finish jobs at {datetime.now()}")
示例#7
0
    def _call(self, fmt):
        xrates = XRate.select()
        xrates = self._filter(xrates)

        if fmt == 'json':
            return self._get_json(xrates)
        elif fmt == 'xml':
            return self._get_xml(xrates)
        raise ValueError(f'Unknown format:{fmt}')
示例#8
0
    def _call(self, fmt):
        xrates = XRate.select()
        xrates = self._filter(xrates)

        if fmt == "json":
            return self._get_json(xrates)
        elif fmt == "xml":
            return self._get_xml(xrates)
        raise ValueError(f"Unknown format: {fmt}")
示例#9
0
def update_xrates(from_currency, to_currency):
    log.info(f'Started update for: {from_currency} => {to_currency}')
    xrate = XRate.select().where(XRate.from_currency == from_currency,
                                 XRate.to_currency == to_currency).first()
    log.debug(f'rate before: {xrate}')
    xrate.rate += 0.01
    xrate.save()

    log.debug(f'rate after: {xrate}')
    log.info(f'Finished update for: {from_currency} => {to_currency}')
示例#10
0
    def test_privat_class_mock(self, PrivatMock):
        PrivatMock().get_rates.return_value = get_privat_response()

        main.update_from_privat_api()

        rate = XRate.get_or_none(from_currency="USD", to_currency="UAH")

        self.assertIsNotNone(rate)
        self.assertEqual(rate.rate, 30)
        self.assertTrue(PrivatMock.called)
示例#11
0
    def _test_privat_timeout(self):
        # self.assertRaises(requests.exceptions.ReadTimeout, main.update_from_privat_api)
        main.update_from_privat_api()

        for from_currency, to_currency in (("USD", "UAH"), ("RUR", "UAH"),
                                           ("EUR", "UAH")):
            rate = XRate.get_or_none(from_currency=from_currency,
                                     to_currency=to_currency)

            self.assertIsNotNone(rate)
            self.assertNotEqual(rate.rate, 1.0)
示例#12
0
def update_xrates(from_currency, to_currency):
    log.info("Started update for: %s=>%s" % (from_currency, to_currency))
    xrate = XRate.select().where(XRate.from_currency == from_currency,
                                 XRate.to_currency == to_currency).first()

    log.debug("rate before: %s", xrate)
    xrate.rate += 0.01
    xrate.updated = peewee_datetime.datetime.now()
    xrate.save()

    log.debug("rate after: %s", xrate)
    log.info("Finished update for: %s=>%s" % (from_currency, to_currency))
示例#13
0
def update_from_privat_api():
    log = create_logger("MainLog", "main.log")
    log.info("Started update rate via privatbank api")

    response = get_rates_from_privat()
    # response = PrivatApi().get_rates()

    log.debug(f"response: {response}")

    check_response(response)
    rates = [(rate_info["ccy"], rate_info["base_ccy"],
              float(rate_info["sale"])) for rate_info in response]

    log.debug(f"rates: {rates}")

    for from_currency, to_currency, rate in rates:
        db_rate = XRate.select().where(
            XRate.from_currency == from_currency,
            XRate.to_currency == to_currency).first()

        if not db_rate:
            db_rate = XRate(from_currency=from_currency,
                            to_currency=to_currency)
            log.debug(f"{db_rate} was created")

        db_rate.rate = rate
        db_rate.save()

    log.info("Finished update rate via privatbank api")
示例#14
0
def update_xrates(from_currency, to_currency):
    log.info(f'Started update for: {from_currency} => {to_currency}')
    # получение курса из БД
    xrate = XRate.select().where(XRate.from_currency == from_currency,
                                 XRate.to_currency == to_currency).first()
    log.debug(f'rate before: {xrate}')
    # получение нового значения от Привата и сохранение его в объект xrate
    xrate.rate = get_cbr_rate(from_currency)
    # обновление поля updated
    xrate.updated = peewee_datetime.datetime.now()
    xrate.save()

    log.debug(f'rate after: {xrate}')
    log.info(f'Finished update for: {from_currency} => {to_currency}')
示例#15
0
    def _call(self, from_currency, to_currency):
        if request.method == "GET":
            return render_template('rate_edit.html', from_currency=from_currency, to_currency=to_currency)

        print(request.form)
        if "new_rate" not in request.form:
            raise Exception("new_rate parametr in request")

        if not request.form["new_rate"]:
            raise Exception("new_rate must be not expty")

        upd_count = (XRate.update({XRate.rate: float(request.form["new_rate"]), XRate.updated: datetime.now()})
                     .where(XRate.from_currency == from_currency, XRate.to_currency == to_currency).execute())

        print("upd_count: ", upd_count)
        return redirect(url_for('view_rates'))
示例#16
0
    def _call(self, from_currency, to_currency):
        if self.request.method == 'GET':
            return render_template('rate_edit.html', from_currency=from_currency,
                                   to_currency=to_currency)
        print(request.form)
        if 'new_rate' not in request.form:
            raise Exception('new_rate parameter is required')

        if not request.form:
            raise Exception('new_rate must be not empty')

        upd_count = (XRate.update({XRate.rate: float(request.form['new_rate']), XRate.updated: datetime.now()})
                     .where(XRate.from_currency == from_currency,
                            XRate.to_currency == to_currency).execute())

        print('upd_count', upd_count)
        return redirect(url_for('view_rates'))
示例#17
0
 def _call(self):
     xrates = XRate.select()
     return render_template("xrates.html", xrates=xrates)
示例#18
0
    def setUp(self):
        XRate.drop_table()
        XRate.create_table()
        XRate.create(from_currency=840, to_currency=980, rate=1, module="privat_api")
        XRate.create(from_currency=840, to_currency=643, rate=1, module="cbr_api")
        XRate.create(from_currency=1000, to_currency=840, rate=1, module="privat_api")
        XRate.create(from_currency=1000, to_currency=980, rate=1, module="cryptonator_api")
        XRate.create(from_currency=1000, to_currency=643, rate=1, module="cryptonator_api")

        for m in (ApiLog, ErrorLog):
            m.create_table()
示例#19
0
def update_rate(from_currency, to_currency):
    xrate = XRate.select().where(XRate.from_currency == from_currency,
                                 XRate.to_currency == to_currency).first()

    module = importlib.import_module(f"api.{xrate.module}")
    module.Api().update_rate(xrate)