Exemple #1
0
    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)
Exemple #2
0
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
Exemple #3
0
 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.')
Exemple #4
0
 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)
Exemple #5
0
 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()
Exemple #6
0
 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)
Exemple #7
0
 def _restart(self) -> None:
     core_logger.debug(f'{self._task_name} re-start.')
     return self._start_stage()
Exemple #8
0
 def set_refresh_token(self, refresh_token):
     self._RefreshToken = refresh_token
     core_logger.debug('Call function set_refresh_token.')