def get_bts_price_in_usd(self):
        task = self.ioloop.create_task(self._get_price())

        try:
            price = self.ioloop.run_until_complete(asyncio.gather(task))

        except ValueError:
            self._logger.exception('Could not convert parsed price to float.')
            return self.actions_when_error(self._old_file,
                                           value_from_file=True)

        except AttributeError:
            self._logger.exception('Could not get price from html.')
            return self.actions_when_error(self._old_file,
                                           value_from_file=True)

        except TypeError:
            self._logger.exception('HTML data retrieval error.')
            return self.actions_when_error(self._old_file,
                                           value_from_file=True)

        except Exception as err:
            self._logger.exception(
                'Exception occurred while getting BTS price.', err)
            return self.actions_when_error(self._old_file,
                                           value_from_file=True)

        else:
            utils.remove_file(self._old_file)
            self._logger.info(f'BTS price is ${price[0]}.')

            return price[0]
Пример #2
0
    def get_chains_with_fees(self):
        chains = self.get_transformed_data(self._file_with_chains)
        chains_num = len(chains)
        tasks = [
            self._ioloop.create_task(self._get_chain_fees(chain))
            for chain in chains
        ]

        try:
            chains_and_fees = self._ioloop.run_until_complete(
                asyncio.gather(*tasks))
        except ClientConnectionError:
            self._logger.error(
                'Client connection error occurred while getting chain fees.')

            return self._final_data_preparation(
                self.get_transformed_data(self._old_file, generator=True))

        else:
            utils.remove_file(self._old_file)
            self._logger.info(
                f'Successfully got {self._fees_count} fees for {chains_num} chains.'
            )

            return chains_and_fees
Пример #3
0
    def start_creating_chains(self):
        try:
            pairs_lst = self._remove_pairs_duplicates_from_seq(
                self.get_data_from_file(self._file_with_pairs)
            )
            tasks = [self._ioloop.create_task(self._create_chains_for_asset(asset, pairs_lst))
                     for asset in self._main_assets]
            self._ioloop.run_until_complete(asyncio.wait(tasks))

        except Exception as err:
            self._logger.exception('Exception occurred while creating chains.', err)
            return self.actions_when_error(self._old_file)

        else:
            utils.remove_file(self._old_file)
            self._logger.info(f'Created: {self._chains_count} chains.')

            return self._new_file
Пример #4
0
    def get_converted_default_bts_fee(self):
        tasks = [self._ioloop.create_task(self._get_converted_order_fee())]

        try:
            converted_fees = self._ioloop.run_until_complete(
                asyncio.gather(*tasks))[0]
        except ClientConnectionError:
            self._logger.exception(
                'Client connection error occurred while getting converted default bts fee'
            )
            return ujson.loads(
                self.actions_when_errors_with_read_data(self._old_file)[0])

        else:
            utils.remove_file(self._old_file)
            self._logger.info(
                f'Successfully got prices and calculate fees: {self._fees}\n')

            return converted_fees
Пример #5
0
    def get_volume_limits(self):
        tasks = [self._ioloop.create_task(self._get_limits())]

        try:
            vol_limits = self._ioloop.run_until_complete(
                asyncio.gather(*tasks))[0]
        except ClientConnectionError:
            self._logger.exception(
                'Client connection error occurred while getting volume limits.'
            )
            return ujson.loads(
                self.actions_when_errors_with_read_data(self._old_file)[0])

        else:
            utils.remove_file(self._old_file)
            self._logger.info(
                f'Successfully got prices and calculate limits: {self._vol_limits_pattern}'
            )

            return vol_limits
Пример #6
0
    def start_parsing(self):
        try:
            task = self._ioloop.create_task(
                self.get_data(self._main_page_url, delay=2, logger=self._logger)
            )
            assets_page_html = self._ioloop.run_until_complete(asyncio.gather(task))

            task = self._ioloop.create_task(
                self._get_valid_data(*assets_page_html, self.overall_min_daily_volume, True)
            )
            assets = self._ioloop.run_until_complete(asyncio.gather(task))[0]

            if assets:
                tasks = (self._ioloop.create_task(self.get_data(self._assets_url.format(asset),
                                                                delay=30, logger=self._logger))
                         for asset in assets)
                htmls = self._ioloop.run_until_complete(asyncio.gather(*tasks))

                tasks = (self._ioloop.create_task(self._get_valid_data(html_, self.pair_min_daily_volume))
                         for html_ in htmls)
                self._ioloop.run_until_complete(asyncio.wait(tasks))

                utils.remove_file(self._old_file)
                self._logger.info(f'Parsed: {self._pairs_count} pairs.')
                FileData = namedtuple('FileData', ['file', 'new_version'])

                return FileData(self._new_file, True)

            else:
                self._logger.info('Cryptofresh assets is corrupted (low vol).')

                return self._old_file

        except TypeError:
            self._logger.exception('HTML data retrieval error.')
            return self.actions_when_error(self._old_file)

        except Exception as err:
            self._logger.exception('Exception occurred.', err)
            return self.actions_when_error(self._old_file)
    def start_parsing(self):
        try:
            task = self._ioloop.create_task(self._get_valid_assets())
            assets_info = (self._ioloop.run_until_complete(
                asyncio.gather(task)))[0]

            tasks = (self._ioloop.create_task(
                self._get_valid_pairs(asset_info))
                     for asset_info in assets_info)
            self._ioloop.run_until_complete(asyncio.gather(*tasks))

            utils.remove_file(self._old_file)
            self._logger.info(f'Parsed: {self._pairs_count} pairs.')
            FileData = namedtuple('FileData', ['file', 'new_version'])

            return FileData(self._new_file, True)

        except TypeError:
            self._logger.exception('JSON data retrieval error.')
            return self.actions_when_error(self._old_file)

        except Exception as err:
            self._logger.exception('Exception occurred while parsing.', err)
            return self.actions_when_error(self._old_file)
Пример #8
0
    def _final_actions(self):
        self.temp_fh.close()
        self._final_fh.close()

        utils.remove_file(self._tmp_file)
        print(self._get_final_msg())