Esempio n. 1
0
    def get_all_help_info(
        cls,
        options: Options,
        union_membership: UnionMembership,
        consumed_scopes_mapper: ConsumedScopesMapper,
        registered_target_types: RegisteredTargetTypes,
    ) -> AllHelpInfo:
        scope_to_help_info = {}
        name_to_goal_info = {}
        for scope_info in sorted(options.known_scope_to_info.values(),
                                 key=lambda x: x.scope):
            options.for_scope(scope_info.scope)  # Force parsing.
            subsystem_cls = scope_info.subsystem_cls
            if not scope_info.description:
                cls_name = (
                    f"{subsystem_cls.__module__}.{subsystem_cls.__qualname__}"
                    if subsystem_cls else "")
                raise ValueError(
                    f"Subsystem {cls_name} with scope `{scope_info.scope}` has no description. "
                    f"Add a class property `help`.")
            is_goal = subsystem_cls is not None and issubclass(
                subsystem_cls, GoalSubsystem)
            oshi = HelpInfoExtracter(
                scope_info.scope).get_option_scope_help_info(
                    scope_info.description,
                    options.get_parser(scope_info.scope), is_goal)
            scope_to_help_info[oshi.scope] = oshi

            if is_goal:
                goal_subsystem_cls = cast(Type[GoalSubsystem], subsystem_cls)
                is_implemented = union_membership.has_members_for_all(
                    goal_subsystem_cls.required_union_implementations)
                name_to_goal_info[scope_info.scope] = GoalHelpInfo(
                    goal_subsystem_cls.name,
                    scope_info.description,
                    is_implemented,
                    consumed_scopes_mapper(scope_info.scope),
                )

        name_to_target_type_info = {
            alias: TargetTypeHelpInfo.create(target_type,
                                             union_membership=union_membership)
            for alias, target_type in
            registered_target_types.aliases_to_types.items()
            if (not alias.startswith("_") and target_type.removal_version is
                None and alias != target_type.deprecated_alias)
        }

        return AllHelpInfo(
            scope_to_help_info=scope_to_help_info,
            name_to_goal_info=name_to_goal_info,
            name_to_target_type_info=name_to_target_type_info,
        )
Esempio n. 2
0
    def get_all_help_info(
        cls,
        options: Options,
        union_membership: UnionMembership,
        consumed_scopes_mapper: ConsumedScopesMapper,
    ) -> AllHelpInfo:
        scope_to_help_info = {}
        name_to_goal_info = {}
        for scope_info in sorted(options.known_scope_to_info.values(), key=lambda x: x.scope):
            options.for_scope(scope_info.scope)  # Force parsing.
            optionable_cls = scope_info.optionable_cls
            if not scope_info.description:
                cls_name = (
                    f"{optionable_cls.__module__}.{optionable_cls.__qualname__}"
                    if optionable_cls
                    else ""
                )
                raise ValueError(
                    f"Subsystem {cls_name} with scope `{scope_info.scope}` has no description. "
                    f"Add a docstring or implement get_description()."
                )
            is_goal = optionable_cls is not None and issubclass(optionable_cls, GoalSubsystem)
            oshi: OptionScopeHelpInfo = HelpInfoExtracter(
                scope_info.scope
            ).get_option_scope_help_info(
                scope_info.description, options.get_parser(scope_info.scope), is_goal
            )
            scope_to_help_info[oshi.scope] = oshi

            if is_goal:
                goal_subsystem_cls = cast(Type[GoalSubsystem], optionable_cls)
                is_implemented = union_membership.has_members_for_all(
                    goal_subsystem_cls.required_union_implementations
                )
                name_to_goal_info[scope_info.scope] = GoalHelpInfo(
                    goal_subsystem_cls.name,
                    scope_info.description,
                    is_implemented,
                    consumed_scopes_mapper(scope_info.scope),
                )

        return AllHelpInfo(
            scope_to_help_info=scope_to_help_info, name_to_goal_info=name_to_goal_info
        )