# Python Version: 3.x
"""
.. py:data:: services
:type: :py:class:`List` [ :py:class:`Type` [ :py:class:`onlinejudge.type.Service` ] ]
contains classes to use for :py:func:`service_from_url`
.. py:data:: problems
:type: :py:class:`List` [ :py:class:`Type` [ :py:class:`onlinejudge.type.Problem` ] ]
contains classes to use for :py:func:`problem_from_url`
.. py:data:: submissions
:type: :py:class:`List` [ :py:class:`Type` [ :py:class:`onlinejudge.type.Submission` ] ]
contains classes to use for :py:func:`submission_from_url`
"""
from typing import List, Optional, Type
import onlinejudge._implementation.logging as log
from onlinejudge.type import Contest, Problem, Service, Submission
submissions = [] # type: List[Type['Submission']]
[docs]def submission_from_url(url: str) -> Optional[Submission]:
for cls in submissions:
submission = cls.from_url(url)
if submission is not None:
log.status('submission recognized: %s: %s', str(submission), url)
return submission
log.failure('unknown submission: %s', url)
return None
problems = [] # type: List[Type['Problem']]
[docs]def problem_from_url(url: str) -> Optional[Problem]:
"""
>>> onlinejudge.dispatch.problem_from_url("https://atcoder.jp/contests/abc077/tasks/arc084_b")
<onlinejudge.service.atcoder.AtCoderProblem object at 0x7fa0538ead68>
>>> onlinejudge.dispatch.problem_from_url("https://codeforces.com/contest/1012/problem/D")
<onlinejudge.service.codeforces.CodeforcesProblem object at 0x7fa05a916710>
"""
for cls in problems:
problem = cls.from_url(url)
if problem is not None:
log.status('problem recognized: %s: %s', str(problem), url)
return problem
submission = submission_from_url(url)
if submission is not None:
return submission.get_problem()
log.failure('unknown problem: %s', url)
return None
contests = [] # type: List[Type['Contest']]
[docs]def contest_from_url(url: str) -> Optional[Contest]:
for cls in contests:
contest = cls.from_url(url)
if contest is not None:
log.status('contest recognized: %s: %s', str(contest), url)
return contest
log.failure('unknown contest: %s', url)
return None
services = [] # type: List[Type['Service']]
[docs]def service_from_url(url: str) -> Optional[Service]:
for cls in services:
service = cls.from_url(url)
if service is not None:
log.status('service recognized: %s: %s', str(service), url)
return service
submission = submission_from_url(url)
if submission is not None:
return submission.get_service()
problem = problem_from_url(url)
if problem is not None:
return problem.get_service()
log.failure('unknown service: %s', url)
return None