def __init__(self, address, file_path=None, file_name=None, nofile=False, quiet=False, delay=0.22, timeout=3000, *args, **kwargs): """ Constructs a `Core` object. Instantiates a `ping` generator at `self.ping_generator`, and an open CSV writer at `self.cwriter`""" logger.debug((address, file_path, file_name, nofile, quiet, delay, timeout, args, kwargs)) self.quiet = not quiet # flip bool self.delay = delay # core.Core.ping if address is None: raise RuntimeError('core.Core requires address') self.address = address self.ping_generator = ping(self.address, timeout=timeout, verbose=not self.quiet, delay=self.delay) # core.Core.build files self.file_path = file_path # validated in self.build file self.file_name = file_name # validated in self.build file self.nofile = nofile if not self.nofile: self.built_file = buildfile(self.file_path, self.file_name) logger.info('Log file at %s' % self.built_file.name) self.cwriter = csv.writer(self.built_file)
def write_csv_data(writer, data): """ Writes a row of CSV data and returns the data that was read. """ if data is None: # TODO Should None data be handled by super? return data else: logger.debug(data) writer.writerow(data) return data
def _dump_tasks(self, first: bool) -> None: if first: chdir(self._cwd) writing = [] for task in self.TaskMapping.values(): # type: BaseTask writing.append(task.export_storage().json()) with open(DATA_FILE_NAME, 'w', encoding='utf-8') as file: json.dump(writing, file) core_logger.debug('Dump tasks.')
def _when_completing_a_round_of_requests(self, result: Any) -> None: core_logger.debug(f'{self._task_name} completing a round of requests.') status_code = self._convert_request_result(result, round_end=True) if status_code == ExitState.Normal: self._state = TaskState.Stopped if self._params_list: # if list is not empty return self._restart() else: return self._stage_complete(ExitState.Normal) elif status_code == ExitState.Cancel: return self._stage_complete(ExitState.Cancel)
def _extract_token(self, resp: str): try: resp = loads(resp) # type: dict if resp.get('response', None) is not None: self._AccessToken = resp['response']['access_token'] self._RefreshToken = resp['response']['refresh_token'] self._AccessTokenUpdateTime = int(datetime.now().timestamp()) # self._UserID = resp['user']['id'] # maybe will use it when multiple tokens core_logger.debug('Refresh token.') else: raise OperationFailedException( 'Operation failed, ' 'please check username and password and refresh token.') except OperationFailedException: core_logger.warning( 'Operation failed, please check username and password and refresh token.' ) except KeyError: # 该异常未被捕捉,异常级别应为 CRITICAL,应组织程序有序的退出 core_logger.critical('Extract access_token error!', exc_info=True) raise KeyError return self._write_token()
def export_storage(self) -> StorageUnit: core_logger.debug(f'Export task {self._task_name}.') return StorageUnit(self._tid, self._task_name, self.TypeID, self._over, self._current_stage, self._params_list, self._data, self._save_path)
def _restart(self) -> None: core_logger.debug(f'{self._task_name} re-start.') return self._start_stage()
def set_refresh_token(self, refresh_token): self._RefreshToken = refresh_token core_logger.debug('Call function set_refresh_token.')