Skip to content

Api reference

components.manager_training.public.actions

update_progress

update_progress

update_progress(
    feature_user, module_slug, status, commit=True
)
Source code in components/manager_training/public/actions/update_progress.py
def update_progress(  # noqa: D103
    feature_user: "FeatureUser",
    module_slug: str,
    status: ModuleStatus,
    commit: bool = True,
) -> None:
    if status == ModuleStatus.started:
        _start_module(
            feature_user=feature_user,
            module_slug=module_slug,
        )
    if status == ModuleStatus.completed:
        _complete_module(feature_user=feature_user, module_slug=module_slug)
    if commit:
        current_session.commit()
    current_logger.info(
        "manager_training: updated progress",
        feature_user=feature_user,
        module_slug=module_slug,
        status=str(status),
    )

components.manager_training.public.entities

ModuleStatus

Bases: AlanBaseEnum

completed class-attribute instance-attribute

completed = 'completed'

started class-attribute instance-attribute

started = 'started'

TrainingProgress dataclass

TrainingProgress(module_slug, started_at, completed_at)

completed_at instance-attribute

completed_at

module_slug instance-attribute

module_slug

started_at instance-attribute

started_at

components.manager_training.public.queries

dato_module

FIND_MANAGER_TRAINING_MODULE module-attribute

FIND_MANAGER_TRAINING_MODULE = "\nquery findManagerTrainingModule($slug: String!, $locale: SiteLocale!) {\n  managerTrainingModule(\n    locale: $locale,\n    filter: {\n        slug: {eq: $slug},\n        translationIsReady: {eq: true}\n    }\n  ) {\n    readingTime\n    author {\n      id\n      firstName\n      lastName\n      description {\n        value\n        links\n        blocks\n      }\n      languages {\n        name\n        id\n      }\n      professions {\n        id\n        content\n      }\n      profilePicture {\n        alt\n        url\n      }\n      specialties {\n        name\n        id\n      }\n    }\n    slug\n    title\n    summary\n    sections {\n      title\n      content {\n        value\n        blocks {\n          ... on ArticleImageRecord {\n            __typename\n            id\n            image {\n              url\n              blurhash\n            }\n            isOversized\n          }\n          ... on TipRecord {\n            __typename\n            id\n            title\n            content\n            iconBackgroundColor\n            murrayIcon {\n              id\n              variant\n              visual\n            }\n          }\n          ... on MurrayIconRecord {\n            __typename\n            id\n            variant\n            visual\n          }\n          ... on NumberIconRecord {\n            __typename\n            id\n            number\n            variant\n          }\n          ... on TwoColumnRecord {\n            __typename\n            id\n            firstColumn {\n              value\n              blocks {\n                ... on ColoredTagRecord {\n                  __typename\n                  id\n                  content\n                }\n              }\n            }\n            secondColumn {\n              value\n              blocks {\n                ... on ColoredTagRecord {\n                  __typename\n                  id\n                  content\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    questionSections {\n      id\n      question\n      answers {\n        content\n        isCorrectAnswer\n        explanation\n        id\n      }\n    }\n    questionSectionTitle\n    coverPicture {\n      blurhash\n      url\n    }\n    skills {\n      name\n    }\n    pdfUrl {\n      url\n    }\n  }\n}\n"

get_manager_training_module

get_manager_training_module(slug, locale)
Source code in components/manager_training/public/queries/dato_module.py
def get_manager_training_module(  # type: ignore[no-untyped-def]  # noqa: D103
    slug: str,
    locale: "DatoLocale",
):
    from gql import gql

    from shared.services.dato.dato_client import get_dato_client

    query = gql(FIND_MANAGER_TRAINING_MODULE)
    response = get_dato_client().execute(
        query, variable_values={"locale": locale, "slug": slug}
    )
    return response

modules

get_modules

get_modules(feature_user, app_company_id, locale)
Source code in components/manager_training/public/queries/modules.py
def get_modules(  # noqa: D103
    feature_user: "FeatureUser", app_company_id: str, locale: "DatoLocale"
) -> Modules:
    module_list = get_module_list(locale)
    module_index = build_module_index(module_list)
    progresses = (
        current_session.query(ManagerTrainingProgress)  # noqa: ALN085
        .filter(ManagerTrainingProgress.feature_user == feature_user)
        .all()
    )
    modules = build_training_state(
        app_id=feature_user.app_id,
        app_company_id=app_company_id,
        module_index=module_index,
        progresses=progresses,
    )
    return modules

get_modules_for_company_ids

get_modules_for_company_ids(
    feature_user, company_ids, locale
)
Source code in components/manager_training/public/queries/modules.py
def get_modules_for_company_ids(  # noqa: D103
    feature_user: "FeatureUser",
    company_ids: list[str],
    locale: "DatoLocale",
) -> Modules:
    # Note: faking group support by merging the modules of each company
    completed: list[ModuleEntry] = []
    in_progress: list[ModuleEntry] = []
    others: list[ModuleEntry] = []
    recommended: list[ModuleEntry] = []
    for cid in company_ids:
        modules = get_modules(
            feature_user=feature_user, app_company_id=cid, locale=locale
        )
        for module in modules.completed:
            if module.slug not in [c.slug for c in completed]:
                completed.append(module)
        for module in modules.in_progress:
            if module.slug not in [c.slug for c in in_progress]:
                in_progress.append(module)
        for module in modules.others:
            if module.slug not in [c.slug for c in others]:
                others.append(module)
        for module in modules.recommended:
            if module.slug not in [c.slug for c in recommended]:
                recommended.append(module)

    return Modules(
        completed=completed,
        in_progress=in_progress,
        others=others,
        recommended=recommended,
    )

update_progress

get_progress_for_user

get_progress_for_user(feature_user, module_slug)

Returns the progress of the given user for the given module.

Source code in components/manager_training/public/queries/update_progress.py
def get_progress_for_user(
    feature_user: "FeatureUser", module_slug: str
) -> Optional[TrainingProgress]:
    """
    Returns the progress of the given user for the given module.
    """
    progress = (
        current_session.query(ManagerTrainingProgress)  # noqa: ALN085
        .filter(
            ManagerTrainingProgress.feature_user == feature_user,
            ManagerTrainingProgress.module_slug == module_slug,
        )
        .one_or_none()
    )
    return (
        TrainingProgress(
            module_slug=progress.module_slug,
            started_at=progress.started_at,
            completed_at=progress.completed_at,
        )
        if progress
        else None
    )