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]
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
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
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
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
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)
def _final_actions(self): self.temp_fh.close() self._final_fh.close() utils.remove_file(self._tmp_file) print(self._get_final_msg())