Source code for usos_api.services.registrations

from ..connection import USOSAPIConnection
from ..models import CoursesCart, Registration


[docs] class RegistrationService: """ A service for registration-related operations. """ def __init__(self, connection: USOSAPIConnection): """ Initialize the registration service. :param connection: The connection to use. """ self.connection = connection
[docs] async def get_user_registrations( self, active_only: bool = True, fields: list[str] = None ) -> list[Registration]: """ Get user registrations. :param active_only: Whether to return only active registrations. :param fields: Selector of result fields you are interested in (optional, default is specified fields). :return: The user registrations. """ fields = "|".join(fields) if fields else None response = await self.connection.post( "services/registrations/user_registrations", fields=fields, active_only=active_only, ) return [Registration(**registration) for registration in response]
[docs] async def get_registration( self, registration_id: str, fields: list[str] = None ) -> Registration: """ Get a registration. :param registration_id: The ID of the registration. :param fields: Selector of result fields you are interested in (optional, default is specified fields). :return: The registration. """ fields = "|".join(fields) if fields else None response = await self.connection.post( "services/registrations/registration", id=registration_id, fields=fields ) return Registration(**response)
[docs] async def register_to_course( self, round_id: str, course_id: str, term_id: str, user_programme_id: str = None, user_stage_id: str = None, ) -> dict: """ Register to a course. :param round_id: Registration round ID. :param course_id: Course code. :param term_id: Cycle code. :param user_programme_id: User program ID (optional). :param user_stage_id: User stage ID (optional). :return: Empty dict on success. """ data = { "round_id": round_id, "course_id": course_id, "term_id": term_id, } if user_programme_id: data["user_programme_id"] = user_programme_id if user_stage_id: data["user_stage_id"] = user_stage_id response = await self.connection.post("services/registrations/register", **data) return response
[docs] async def get_courses_cart(self, fields: list[str] = None) -> list[CoursesCart]: """ Get user courses cart with registrations information. :param fields: Selector of result fields you are interested in (optional, default is specified fields). :return: A CoursesCartResponse object. """ if fields is None: fields = [ "links", "course", "term", "user_registration_status", "is_registration_valid", "choice_number", "limits", "is_linkage_required", "registrations_count", "registration_status", "active_registration_round_id", ] fields = "|".join(fields) response = await self.connection.post( "services/registrations/courses_cart", fields=fields ) return [CoursesCart(**course) for course in response]