Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions funidata_utils/schemas/sisu/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@
from .cooperation_network import CooperationNetwork
from .term_registration import (TermRegistration, StudyRightTermRegistrations)
from .enrolment_calculation_config import EnrolmentCalculationConfig
from .code_book import CodeBook
52 changes: 52 additions & 0 deletions funidata_utils/schemas/sisu/code_book.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from typing import Annotated, Literal

from pydantic import Field, field_serializer, conset, conlist

from funidata_utils.schemas.common_serializers import serialize_as_list
from funidata_utils.schemas.sisu import LocalizedString
from funidata_utils.schemas.sisu.base import SisBase
from funidata_utils.schemas.sisu.common import (
STRIPPED_STR, sis_code_urn_pattern, SIS_MAX_VERY_LARGE_SET_SIZE, OTM_ID_REGEX_VALIDATED_STR,
SIS_MAX_SMALL_SET_SIZE,
)


class Code(SisBase):
name: LocalizedString
shortName: LocalizedString | None
urn: Annotated[STRIPPED_STR, Field(pattern=sis_code_urn_pattern('.+'))]
parentUrn: Annotated[STRIPPED_STR, Field(pattern=sis_code_urn_pattern('.+'))] | None
isLeafNode: bool | None
universitySpecifier: str | None # Literal['HY', 'JYU', 'LUT', 'TUNI', 'AALTO', 'ARC', 'SHH'] | None but I really don't want to keep updating this...
deprecated: bool | None
exceptionalVirtaValue: str | None
type: Literal['Code']


class CompetencyCode(Code):
type: Literal['CompetencyCode']
credits: int | None


class CountryCode(Code):
type: Literal['CountryCode']
numeric: str | None
alpha2: str | None
alpha3: str | None


class CodeBook(SisBase):
documentState: Literal['ACTIVE', 'DRAFT', 'DELETED']
urn: Annotated[STRIPPED_STR, Field(pattern=sis_code_urn_pattern('.+'))]
codeBookType: Literal['COMMON', 'CUSTOM'] | None
name: LocalizedString
classificationScopeUrns: conset(Annotated[STRIPPED_STR, Field(pattern=sis_code_urn_pattern('classification-scope'))],
max_length=SIS_MAX_SMALL_SET_SIZE) | None # noqa
universityOrgIds: conlist(OTM_ID_REGEX_VALIDATED_STR, max_length=1) | None # noqa
codeVisibility: Literal['ALWAYS_VISIBLE', 'HIDING_CODES_ALLOWED']
codes: conset(Code | CompetencyCode | CountryCode, min_length=1, max_length=SIS_MAX_VERY_LARGE_SET_SIZE) # noqa

@field_serializer("classificationScopeUrns", "codes")
def serialize_set_as_list(self, v, _info) -> list | None:
serialized_list = serialize_as_list(v)
return serialized_list
4 changes: 4 additions & 0 deletions funidata_utils/sis_integration/resources/sis_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,10 @@ class CodeBooks(BaseResource):
endpoint='/kori/api/codebooks/v1/export',
default_export_limit=_DEFAULT_EXPORT_LIMIT,
)
imports = SisImport(
endpoint='/kori/api/codebooks/v1/import',
default_import_limit=_DEFAULT_IMPORT_LIMIT,
)


class CurriculumPeriods(BaseResource):
Expand Down