Ejemplo n.º 1
0
 def _collect_secret(self):
     try:
         username = config.get('user.name')
         password = config.get('user.password')
     except ConfigError:
         dialog = SecretDialog(f"Sign to {Urls.portal()}")
         username, password = dialog.collect()
     return (username, password)
Ejemplo n.º 2
0
    def run_cases_to_table(self):
        result_by_case = []
        for i, case in enumerate(self.nontest_cases):
            case_row = []
            for f in self.solutions:
                output, duration = self._run_solution(f, case.args,
                                                      case.kwargs)
                r = ResultUnit(case_num=i,
                               func_name=f.__name__,
                               func_object=f,
                               args=case.args,
                               kwargs=case.kwargs,
                               output=output,
                               duration=duration)
                case_row.append(r)
            result_by_case.append(case_row)

        # draw table
        if not result_by_case:
            return
        table_settings = config.get('table')
        table = Table(**table_settings)
        header = ['']
        header.extend([func.__name__ for func in self.solutions])
        table.add_header(header)
        for case_num, case_row in enumerate(result_by_case):
            row = [f'case {case_num}']
            row.extend(case_row)
            table.add_row(row)
        print(table)
Ejemplo n.º 3
0
 def ensure_login(self):
     if not session_token.is_existed() or session_token.is_expired():
         if not session_token.is_existed():
             Debug('Session token is not found.')
         else:
             Debug('Session has expired.')
         # login() will update session_token
         Login(self, config.get('core.zone')).login()
     self.sess.cookies.update(session_token.get_token())
Ejemplo n.º 4
0
def raise_for_status(response, description):
    try:
        response.raise_for_status()
    except requests.exceptions.HTTPError as e:
        Debug(response.text)
        Debug("\nrequst headers:\n" + str(response.request.headers))
        if e.response.status_code == 403:
            # avoid loop forever during import-time
            from leezy.config import config
            zone = config.get('core.zone')
            assert zone == 'cn' or zone == 'us'
            config.delete("session." + zone)
            raise FetchError(
                "Account authentication failed, you might try again and sign in"
            )
        raise FetchError(description, e)
Ejemplo n.º 5
0
    def __init__(self, id_, context=None, provider=None):
        # id_ is frontend_id of a problem
        self.query_id = id_
        self.context = context
        self.provider = provider or ProblemProvider()

        _info = self.provider.info_by_id(id_)
        self.basic_info = _info
        # eliminate all invalid characters before making new files or folders
        # loc means local
        self.loc_id = str(id_).rjust(ID_WIDTH, '0')
        self.loc_title = NAME_BLACKLIST_RE.sub('', _info.title).strip()
        self.loc_slug = NAME_BLACKLIST_RE.sub('', _info.title_slug).strip()
        workdir = Path(config.get('core.workdir'))
        self.folder_path = workdir / Path(f'{self.loc_id} - {self.loc_title}')
        self.html_path = self.folder_path / f'{self.loc_id}.html'
        self.py_path = self.folder_path / f'{self.loc_id}_{self.loc_slug}.py'

        self.content = None
        self.similar_problem = None
        self.code_snippet = None
        self.sample_testcase = None
Ejemplo n.º 6
0
    parser.print_help()
else:
    if args.zone is not None:
        config.patch('core.zone', args.zone)
    if args.v is not None:
        if args.v == 1:
            config.patch('log.level', 'info')
        else:
            config.patch('log.level', 'debug')
    if args.dir is not None:
        config.patch('core.workdir', args.dir)

    session_token.init()
    Urls.init(config)

    log_lv = getattr(logging, config.get('log.level').upper())

    def reject_modules(modules, lv=logging.INFO):
        def _reject_filter(record):
            mod_name = record.name
            mod_lv = record.levelno
            for mod in modules:
                if mod_name.startswith(mod) and mod_lv <= lv:
                    return False
            return True

        return _reject_filter

    logging.basicConfig(level=log_lv)
    root = logging.getLogger()
    rej_mat = reject_modules(['matplotlib'])