# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# See https://github.com/eolymp/contracts/tree/main/cmd/protoc-gen-python-esdk for more details.
"""Generated protocol buffer code."""

import urllib.parse
from google.protobuf import symbol_database as _symbol_database

_sym_db = _symbol_database.Default()


class AtlasClient:
    def __init__(self, transport, url="https://api.eolymp.com"):
        self.transport = transport
        self.url = url

    def CreateProblem(self, request, **kwargs):
        path = "/problems"

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateProblem",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateProblemOutput"),
            **kwargs,
        )

    def DeleteProblem(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteProblem",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteProblemOutput"),
            **kwargs,
        )

    def ListProblems(self, request, **kwargs):
        path = "/problems"

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListProblems",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListProblemsOutput"),
            **kwargs,
        )

    def DescribeProblem(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeProblem",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeProblemOutput"),
            **kwargs,
        )

    def UpdateVisibility(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/visibility"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateVisibility",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateVisibilityOutput"),
            **kwargs,
        )

    def UpdatePrivacy(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/privacy"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdatePrivacy",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdatePrivacyOutput"),
            **kwargs,
        )

    def ListExamples(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/examples"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListExamples",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListExamplesOutput"),
            **kwargs,
        )

    def UpdateVerifier(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/verifier"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateVerifier",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateVerifierOutput"),
            **kwargs,
        )

    def DescribeVerifier(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/verifier"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeVerifier",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeVerifierOutput"),
            **kwargs,
        )

    def UpdateInteractor(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/interactor"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateInteractor",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateInteractorOutput"),
            **kwargs,
        )

    def DescribeInteractor(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/interactor"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeInteractor",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeInteractorOutput"),
            **kwargs,
        )

    def CreateStatement(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/statements"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateStatement",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateStatementOutput"),
            **kwargs,
        )

    def UpdateStatement(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/statements/"+urllib.parse.quote(request.statement_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.statement_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateStatement",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateStatementOutput"),
            **kwargs,
        )

    def DeleteStatement(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/statements/"+urllib.parse.quote(request.statement_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.statement_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteStatement",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteStatementOutput"),
            **kwargs,
        )

    def ListStatements(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/statements"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListStatements",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListStatementsOutput"),
            **kwargs,
        )

    def DescribeStatement(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/statements/"+urllib.parse.quote(request.statement_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.statement_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeStatement",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeStatementOutput"),
            **kwargs,
        )

    def CreateTestset(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateTestset",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateTestsetOutput"),
            **kwargs,
        )

    def UpdateTestset(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateTestset",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateTestsetOutput"),
            **kwargs,
        )

    def DeleteTestset(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteTestset",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteTestsetOutput"),
            **kwargs,
        )

    def ListTestsets(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListTestsets",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListTestsetsOutput"),
            **kwargs,
        )

    def DescribeTestset(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeTestset",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeTestsetOutput"),
            **kwargs,
        )

    def CreateTest(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)+"/tests"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateTest",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateTestOutput"),
            **kwargs,
        )

    def UpdateTest(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)+"/tests/"+urllib.parse.quote(request.test_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""
        request.test_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateTest",
            method="PUT",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateTestOutput"),
            **kwargs,
        )

    def DeleteTest(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)+"/tests/"+urllib.parse.quote(request.test_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""
        request.test_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteTest",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteTestOutput"),
            **kwargs,
        )

    def ListTests(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)+"/tests"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListTests",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListTestsOutput"),
            **kwargs,
        )

    def DescribeTest(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/testsets/"+urllib.parse.quote(request.testset_id)+"/tests/"+urllib.parse.quote(request.test_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.testset_id = ""
        request.test_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeTest",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeTestOutput"),
            **kwargs,
        )

    def GrantPermission(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/permissions"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/GrantPermission",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.GrantPermissionOutput"),
            **kwargs,
        )

    def RevokePermission(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/permissions/"+urllib.parse.quote(request.user_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.user_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/RevokePermission",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.RevokePermissionOutput"),
            **kwargs,
        )

    def ListPermissions(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/permissions"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListPermissions",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListPermissionsOutput"),
            **kwargs,
        )

    def CreateCodeTemplate(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/templates"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateCodeTemplate",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateCodeTemplateOutput"),
            **kwargs,
        )

    def UpdateCodeTemplate(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/templates/"+urllib.parse.quote(request.template_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.template_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateCodeTemplate",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateCodeTemplateOutput"),
            **kwargs,
        )

    def DeleteCodeTemplate(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/templates/"+urllib.parse.quote(request.template_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.template_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteCodeTemplate",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteCodeTemplateOutput"),
            **kwargs,
        )

    def ListCodeTemplates(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/templates"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListCodeTemplates",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListCodeTemplatesOutput"),
            **kwargs,
        )

    def DescribeCodeTemplate(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/templates/"+urllib.parse.quote(request.template_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.template_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeCodeTemplate",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeCodeTemplateOutput"),
            **kwargs,
        )

    def CreateAttachment(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/attachments"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateAttachment",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateAttachmentOutput"),
            **kwargs,
        )

    def UpdateAttachment(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/attachments/"+urllib.parse.quote(request.attachment_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.attachment_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateAttachment",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateAttachmentOutput"),
            **kwargs,
        )

    def DeleteAttachment(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/attachments/"+urllib.parse.quote(request.attachment_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.attachment_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteAttachment",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteAttachmentOutput"),
            **kwargs,
        )

    def ListAttachments(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/attachments"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListAttachments",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListAttachmentsOutput"),
            **kwargs,
        )

    def DescribeAttachment(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/attachments/"+urllib.parse.quote(request.attachment_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.attachment_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeAttachment",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeAttachmentOutput"),
            **kwargs,
        )

    def DescribeChange(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/changes/"+urllib.parse.quote(request.change_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.change_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeChange",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeChangeOutput"),
            **kwargs,
        )

    def ListChanges(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/changes"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListChanges",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListChangesOutput"),
            **kwargs,
        )

    def ListProblemTop(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/top"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListProblemTop",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListProblemTopOutput"),
            **kwargs,
        )

    def DescribeProblemGrading(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/grading"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeProblemGrading",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeProblemGradingOutput"),
            **kwargs,
        )

    def CreateSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateSolutionOutput"),
            **kwargs,
        )

    def UpdateSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateSolutionOutput"),
            **kwargs,
        )

    def DeleteSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteSolution",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteSolutionOutput"),
            **kwargs,
        )

    def ListSolutions(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListSolutions",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListSolutionsOutput"),
            **kwargs,
        )

    def DescribeSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeSolution",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeSolutionOutput"),
            **kwargs,
        )

    def PublishSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)+"/publish"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/PublishSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.PublishSolutionOutput"),
            **kwargs,
        )

    def UnpublishSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)+"/unpublish"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UnpublishSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UnpublishSolutionOutput"),
            **kwargs,
        )

    def ApproveSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)+"/approve"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/ApproveSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ApproveSolutionOutput"),
            **kwargs,
        )

    def RefuseSolution(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/solutions/"+urllib.parse.quote(request.solution_id)+"/refuse"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.solution_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/RefuseSolution",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.RefuseSolutionOutput"),
            **kwargs,
        )

    def CreateCategory(self, request, **kwargs):
        path = "/categories"

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateCategory",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateCategoryOutput"),
            **kwargs,
        )

    def UpdateCategory(self, request, **kwargs):
        path = "/categories/"+urllib.parse.quote(request.category_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.category_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UpdateCategory",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UpdateCategoryOutput"),
            **kwargs,
        )

    def DeleteCategory(self, request, **kwargs):
        path = "/categories/"+urllib.parse.quote(request.category_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.category_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DeleteCategory",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DeleteCategoryOutput"),
            **kwargs,
        )

    def ListCategories(self, request, **kwargs):
        path = "/categories"

        return self.transport.request(
            name="eolymp.atlas.Atlas/ListCategories",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.ListCategoriesOutput"),
            **kwargs,
        )

    def DescribeCategory(self, request, **kwargs):
        path = "/categories/"+urllib.parse.quote(request.category_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.category_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeCategory",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeCategoryOutput"),
            **kwargs,
        )

    def AssignCategory(self, request, **kwargs):
        path = "/categories/"+urllib.parse.quote(request.category_id)+"/problems/"+urllib.parse.quote(request.problem_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.category_id = ""
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/AssignCategory",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.AssignCategoryOutput"),
            **kwargs,
        )

    def UnassignCategory(self, request, **kwargs):
        path = "/categories/"+urllib.parse.quote(request.category_id)+"/problems/"+urllib.parse.quote(request.problem_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.category_id = ""
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/UnassignCategory",
            method="DELETE",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.UnassignCategoryOutput"),
            **kwargs,
        )

    def CreateSubmission(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/submissions"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/CreateSubmission",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.CreateSubmissionOutput"),
            **kwargs,
        )

    def DescribeSubmission(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/submissions/"+urllib.parse.quote(request.submission_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.submission_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeSubmission",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeSubmissionOutput"),
            **kwargs,
        )

    def RetestSubmission(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/submissions/"+urllib.parse.quote(request.submission_id)+"/retest"

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.submission_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/RetestSubmission",
            method="POST",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.RetestSubmissionOutput"),
            **kwargs,
        )

    def DescribeScore(self, request, **kwargs):
        path = "/problems/"+urllib.parse.quote(request.problem_id)+"/scores/"+urllib.parse.quote(request.user_id)

        # Cleanup URL parameters to avoid any ambiguity
        request.problem_id = ""
        request.user_id = ""

        return self.transport.request(
            name="eolymp.atlas.Atlas/DescribeScore",
            method="GET",
            url=self.url+path,
            path=path,
            request_data=request,
            response_symbol=_sym_db.GetSymbol("eolymp.atlas.DescribeScoreOutput"),
            **kwargs,
        )

