diff --git a/omegaup/api.py b/omegaup/api.py index 1ac782e..ff5a566 100644 --- a/omegaup/api.py +++ b/omegaup/api.py @@ -1475,6 +1475,72 @@ def __init__( self.uuid = uuid +@dataclasses.dataclass +class _CertificateListItem: + """_CertificateListItem""" + certificate_type: str + date: datetime.datetime + name: Optional[str] + verification_code: str + + def __init__( + self, + *, + certificate_type: str, + date: int, + verification_code: str, + name: Optional[str] = None, + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.certificate_type = certificate_type + self.date = datetime.datetime.fromtimestamp(date) + if name is not None: + self.name = name + else: + self.name = None + self.verification_code = verification_code + + +@dataclasses.dataclass +class _CertificateListMinePayload: + """_CertificateListMinePayload""" + certificates: Sequence['_CertificateListItem'] + + def __init__( + self, + *, + certificates: Sequence[Dict[str, Any]], + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.certificates = [_CertificateListItem(**v) for v in certificates] + + +@dataclasses.dataclass +class _CertificateValidationPayload: + """_CertificateValidationPayload""" + certificate: Optional[str] + valid: bool + verification_code: str + + def __init__( + self, + *, + valid: bool, + verification_code: str, + certificate: Optional[str] = None, + # Ignore any unknown arguments + **_kwargs: Any, + ): + if certificate is not None: + self.certificate = certificate + else: + self.certificate = None + self.valid = valid + self.verification_code = verification_code + + @dataclasses.dataclass class _Clarification: """_Clarification""" @@ -1872,6 +1938,7 @@ class _CommonPayload: userClassname: str userCountry: str userTypes: Sequence[str] + userVerificationDeadline: Optional[datetime.datetime] def __init__( self, @@ -1897,6 +1964,7 @@ def __init__( userTypes: Sequence[str], currentName: Optional[str] = None, nextRegisteredContestForUser: Optional[Dict[str, Any]] = None, + userVerificationDeadline: Optional[int] = None, # Ignore any unknown arguments **_kwargs: Any, ): @@ -1930,6 +1998,11 @@ def __init__( self.userClassname = userClassname self.userCountry = userCountry self.userTypes = [v for v in userTypes] + if userVerificationDeadline is not None: + self.userVerificationDeadline = datetime.datetime.fromtimestamp( + userVerificationDeadline) + else: + self.userVerificationDeadline = None @dataclasses.dataclass @@ -6235,16 +6308,34 @@ def __init__( @dataclasses.dataclass class _OmegaUp_Controllers_Certificate__apiGetCertificatePdf: """_OmegaUp_Controllers_Certificate__apiGetCertificatePdf""" - certificate: str + certificate: Optional[str] def __init__( self, *, - certificate: str, + certificate: Optional[str] = None, # Ignore any unknown arguments **_kwargs: Any, ): - self.certificate = certificate + if certificate is not None: + self.certificate = certificate + else: + self.certificate = None + + +@dataclasses.dataclass +class _OmegaUp_Controllers_Certificate__apiGetUserCertificates: + """_OmegaUp_Controllers_Certificate__apiGetUserCertificates""" + certificates: Sequence['_CertificateListItem'] + + def __init__( + self, + *, + certificates: Sequence[Dict[str, Any]], + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.certificates = [_CertificateListItem(**v) for v in certificates] @dataclasses.dataclass @@ -6313,6 +6404,21 @@ def __init__( self.pagerItems = [_PageItem(**v) for v in pagerItems] +@dataclasses.dataclass +class _OmegaUp_Controllers_Contest__apiAddProblem: + """_OmegaUp_Controllers_Contest__apiAddProblem""" + solutionStatus: str + + def __init__( + self, + *, + solutionStatus: str, + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.solutionStatus = solutionStatus + + @dataclasses.dataclass class _OmegaUp_Controllers_Contest__apiAdminList: """_OmegaUp_Controllers_Contest__apiAdminList""" @@ -6452,6 +6558,21 @@ def __init__( self.alias = alias +@dataclasses.dataclass +class _OmegaUp_Controllers_Contest__apiGetNumberOfContestants: + """_OmegaUp_Controllers_Contest__apiGetNumberOfContestants""" + response: Dict[int, int] + + def __init__( + self, + *, + response: Dict[int, int], + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.response = {k: v for k, v in response.items()} + + @dataclasses.dataclass class _OmegaUp_Controllers_Contest__apiList: """_OmegaUp_Controllers_Contest__apiList""" @@ -6920,6 +7041,21 @@ def __init__( self.pagerItems = [_PageItem(**v) for v in pagerItems] +@dataclasses.dataclass +class _OmegaUp_Controllers_Course__apiAddProblem: + """_OmegaUp_Controllers_Course__apiAddProblem""" + solutionStatus: str + + def __init__( + self, + *, + solutionStatus: str, + # Ignore any unknown arguments + **_kwargs: Any, + ): + self.solutionStatus = solutionStatus + + @dataclasses.dataclass class _OmegaUp_Controllers_Course__apiAdmins: """_OmegaUp_Controllers_Course__apiAdmins""" @@ -9591,7 +9727,9 @@ class _ProblemDetailsPayload: """_ProblemDetailsPayload""" allRuns: Optional[Sequence['_Run']] allowUserAddTags: Optional[bool] + allowedSolutionsToSee: int clarifications: Optional[Sequence['_Clarification']] + hasVisitedSection: Optional[bool] histogram: '_Histogram' levelTags: Optional[Sequence[str]] nominationStatus: Optional['_NominationStatus'] @@ -9609,6 +9747,7 @@ class _ProblemDetailsPayload: def __init__( self, *, + allowedSolutionsToSee: int, histogram: Dict[str, Any], problem: Dict[str, Any], solvers: Sequence[Dict[str, Any]], @@ -9616,6 +9755,7 @@ def __init__( allRuns: Optional[Sequence[Dict[str, Any]]] = None, allowUserAddTags: Optional[bool] = None, clarifications: Optional[Sequence[Dict[str, Any]]] = None, + hasVisitedSection: Optional[bool] = None, levelTags: Optional[Sequence[str]] = None, nominationStatus: Optional[Dict[str, Any]] = None, problemLevel: Optional[str] = None, @@ -9636,10 +9776,15 @@ def __init__( self.allowUserAddTags = allowUserAddTags else: self.allowUserAddTags = None + self.allowedSolutionsToSee = allowedSolutionsToSee if clarifications is not None: self.clarifications = [_Clarification(**v) for v in clarifications] else: self.clarifications = None + if hasVisitedSection is not None: + self.hasVisitedSection = hasVisitedSection + else: + self.hasVisitedSection = None self.histogram = _Histogram(**histogram) if levelTags is not None: self.levelTags = [v for v in levelTags] @@ -9825,6 +9970,7 @@ class _ProblemFormPayload: emailClarifications: bool extraWallTime: Union[int, str] groupScorePolicy: Optional[str] + hasVisitedSection: Optional[bool] inputLimit: Union[int, str] languages: str levelTags: Sequence[str] @@ -9877,6 +10023,7 @@ def __init__( visibility: int, visibilityStatuses: Dict[str, int], groupScorePolicy: Optional[str] = None, + hasVisitedSection: Optional[bool] = None, message: Optional[str] = None, parameter: Optional[str] = None, selectedTags: Optional[Sequence[Dict[str, Any]]] = None, @@ -9891,6 +10038,10 @@ def __init__( self.groupScorePolicy = groupScorePolicy else: self.groupScorePolicy = None + if hasVisitedSection is not None: + self.hasVisitedSection = hasVisitedSection + else: + self.hasVisitedSection = None self.inputLimit = inputLimit self.languages = languages self.levelTags = [v for v in levelTags] @@ -14301,6 +14452,9 @@ def badgeDetails( CertificateGetCertificatePdfResponse = _OmegaUp_Controllers_Certificate__apiGetCertificatePdf """The return type of the CertificateGetCertificatePdf API.""" +CertificateGetUserCertificatesResponse = _OmegaUp_Controllers_Certificate__apiGetUserCertificates +"""The return type of the CertificateGetUserCertificates API.""" + CertificateValidateCertificateResponse = _OmegaUp_Controllers_Certificate__apiValidateCertificate """The return type of the CertificateValidateCertificate API.""" @@ -14311,6 +14465,35 @@ class Certificate: def __init__(self, client: 'Client') -> None: self._client = client + def generateContestCertificates( + self, + *, + certificates_cutoff: Optional[int] = None, + contest_id: Optional[int] = None, + # Out-of-band parameters: + files_: Optional[Mapping[str, BinaryIO]] = None, + check_: bool = True, + timeout_: datetime.timedelta = _DEFAULT_TIMEOUT) -> None: + r"""Generates all the certificates for a contest given its contest ID. + + Args: + certificates_cutoff: + contest_id: + + Returns: + The API result object. + """ + parameters: Dict[str, str] = {} + if certificates_cutoff is not None: + parameters['certificates_cutoff'] = str(certificates_cutoff) + if contest_id is not None: + parameters['contest_id'] = str(contest_id) + self._client.query('/api/certificate/generateContestCertificates/', + payload=parameters, + files_=files_, + timeout_=timeout_, + check_=check_) + def getCertificatePdf( self, *, @@ -14338,6 +14521,33 @@ def getCertificatePdf( timeout_=timeout_, check_=check_)) + def getUserCertificates( + self, + *, + user_id: Optional[int] = None, + # Out-of-band parameters: + files_: Optional[Mapping[str, BinaryIO]] = None, + check_: bool = True, + timeout_: datetime.timedelta = _DEFAULT_TIMEOUT + ) -> CertificateGetUserCertificatesResponse: + r"""Get all the certificates belonging to a user + + Args: + user_id: + + Returns: + The API result object. + """ + parameters: Dict[str, str] = {} + if user_id is not None: + parameters['user_id'] = str(user_id) + return _OmegaUp_Controllers_Certificate__apiGetUserCertificates( + **self._client.query('/api/certificate/getUserCertificates/', + payload=parameters, + files_=files_, + timeout_=timeout_, + check_=check_)) + def validateCertificate( self, *, @@ -14502,6 +14712,9 @@ def update( ContestListParticipatingResponse = _OmegaUp_Controllers_Contest__apiListParticipating """The return type of the ContestListParticipating API.""" +ContestGetNumberOfContestantsResponse = _OmegaUp_Controllers_Contest__apiGetNumberOfContestants +"""The return type of the ContestGetNumberOfContestants API.""" + ContestPublicDetailsResponse = _ContestPublicDetails """The return type of the ContestPublicDetails API.""" @@ -14523,6 +14736,9 @@ def update( ContestProblemsResponse = _OmegaUp_Controllers_Contest__apiProblems """The return type of the ContestProblems API.""" +ContestAddProblemResponse = _OmegaUp_Controllers_Contest__apiAddProblem +"""The return type of the ContestAddProblem API.""" + ContestRunsDiffResponse = _OmegaUp_Controllers_Contest__apiRunsDiff """The return type of the ContestRunsDiff API.""" @@ -14744,6 +14960,33 @@ def listParticipating( timeout_=timeout_, check_=check_)) + def getNumberOfContestants( + self, + *, + contest_ids: str, + # Out-of-band parameters: + files_: Optional[Mapping[str, BinaryIO]] = None, + check_: bool = True, + timeout_: datetime.timedelta = _DEFAULT_TIMEOUT + ) -> ContestGetNumberOfContestantsResponse: + r""" + + Args: + contest_ids: + + Returns: + The API result object. + """ + parameters: Dict[str, str] = { + 'contest_ids': contest_ids, + } + return _OmegaUp_Controllers_Contest__apiGetNumberOfContestants( + **self._client.query('/api/contest/getNumberOfContestants/', + payload=parameters, + files_=files_, + timeout_=timeout_, + check_=check_)) + def publicDetails( self, *, @@ -15156,17 +15399,18 @@ def problems( check_=check_)) def addProblem( - self, - *, - contest_alias: str, - order_in_contest: int, - points: float, - problem_alias: str, - commit: Optional[str] = None, - # Out-of-band parameters: - files_: Optional[Mapping[str, BinaryIO]] = None, - check_: bool = True, - timeout_: datetime.timedelta = _DEFAULT_TIMEOUT) -> None: + self, + *, + contest_alias: str, + order_in_contest: int, + points: float, + problem_alias: str, + commit: Optional[str] = None, + # Out-of-band parameters: + files_: Optional[Mapping[str, BinaryIO]] = None, + check_: bool = True, + timeout_: datetime.timedelta = _DEFAULT_TIMEOUT + ) -> ContestAddProblemResponse: r"""Adds a problem to a contest Args: @@ -15187,11 +15431,12 @@ def addProblem( } if commit is not None: parameters['commit'] = commit - self._client.query('/api/contest/addProblem/', - payload=parameters, - files_=files_, - timeout_=timeout_, - check_=check_) + return _OmegaUp_Controllers_Contest__apiAddProblem( + **self._client.query('/api/contest/addProblem/', + payload=parameters, + files_=files_, + timeout_=timeout_, + check_=check_)) def removeProblem( self, @@ -16218,6 +16463,9 @@ def archive( CourseCloneResponse = _OmegaUp_Controllers_Course__apiClone """The return type of the CourseClone API.""" +CourseAddProblemResponse = _OmegaUp_Controllers_Course__apiAddProblem +"""The return type of the CourseAddProblem API.""" + CourseGetProblemUsersResponse = _OmegaUp_Controllers_Course__apiGetProblemUsers """The return type of the CourseGetProblemUsers API.""" @@ -16541,18 +16789,19 @@ def updateAssignment( check_=check_) def addProblem( - self, - *, - assignment_alias: str, - course_alias: str, - points: float, - problem_alias: str, - commit: Optional[str] = None, - is_extra_problem: Optional[bool] = None, - # Out-of-band parameters: - files_: Optional[Mapping[str, BinaryIO]] = None, - check_: bool = True, - timeout_: datetime.timedelta = _DEFAULT_TIMEOUT) -> None: + self, + *, + assignment_alias: str, + course_alias: str, + points: float, + problem_alias: str, + commit: Optional[str] = None, + is_extra_problem: Optional[bool] = None, + # Out-of-band parameters: + files_: Optional[Mapping[str, BinaryIO]] = None, + check_: bool = True, + timeout_: datetime.timedelta = _DEFAULT_TIMEOUT + ) -> CourseAddProblemResponse: r"""Adds a problem to an assignment Args: @@ -16576,11 +16825,12 @@ def addProblem( parameters['commit'] = commit if is_extra_problem is not None: parameters['is_extra_problem'] = str(is_extra_problem) - self._client.query('/api/course/addProblem/', - payload=parameters, - files_=files_, - timeout_=timeout_, - check_=check_) + return _OmegaUp_Controllers_Course__apiAddProblem( + **self._client.query('/api/course/addProblem/', + payload=parameters, + files_=files_, + timeout_=timeout_, + check_=check_)) def updateProblemsOrder( self, @@ -21201,7 +21451,7 @@ def setFeedback( check_: bool = True, timeout_: datetime.timedelta = _DEFAULT_TIMEOUT ) -> SubmissionSetFeedbackResponse: - r"""Updates the admin feedback for a submission + r"""Updates the admin feedback for a submission or creates the request feedback Args: assignment_alias: