(cls)
| 99 | |
| 100 | @classmethod |
| 101 | def field_specs(cls) -> Dict[str, ConfigFieldSpec]: |
| 102 | specs = super().field_specs() |
| 103 | catalog = get_function_catalog() |
| 104 | modules = catalog.iter_modules() |
| 105 | name_spec = specs.get("name") |
| 106 | if name_spec is not None: |
| 107 | description = name_spec.description or "Function name" |
| 108 | enum_options: List[EnumOption] | None = None |
| 109 | enum_values: List[str] | None = None |
| 110 | if catalog.load_error: |
| 111 | description = f"{description} (loading failed: {catalog.load_error})" |
| 112 | elif not modules: |
| 113 | description = f"{description} (no functions found in directory)" |
| 114 | else: |
| 115 | enum_options = [] |
| 116 | enum_values = [] |
| 117 | for module_name, metas in modules: |
| 118 | all_label = f"{module_name}{MODULE_ALL_SUFFIX}" |
| 119 | enum_values.append(all_label) |
| 120 | preview = ", ".join(meta.name for meta in metas[:3]) |
| 121 | suffix = "..." if len(metas) > 3 else "" |
| 122 | module_hint = f"{module_name}.py" |
| 123 | enum_options.append( |
| 124 | EnumOption( |
| 125 | value=all_label, |
| 126 | label=all_label, |
| 127 | description=( |
| 128 | f"Load all {len(metas)} functions from {module_hint}" |
| 129 | + (f" ({preview}{suffix})" if preview else "") |
| 130 | ), |
| 131 | ) |
| 132 | ) |
| 133 | for module_name, metas in modules: |
| 134 | for meta in metas: |
| 135 | label = f"{module_name}:{meta.name}" |
| 136 | enum_values.append(meta.name) |
| 137 | option_description = meta.description or "This function does not provide a docstring" |
| 138 | enum_options.append( |
| 139 | EnumOption( |
| 140 | value=meta.name, |
| 141 | label=label, |
| 142 | description=option_description, |
| 143 | ) |
| 144 | ) |
| 145 | specs["name"] = replace( |
| 146 | name_spec, |
| 147 | enum=enum_values, |
| 148 | enum_options=enum_options, |
| 149 | description=description, |
| 150 | ) |
| 151 | return specs |
| 152 | |
| 153 | |
| 154 | @dataclass |
nothing calls this directly
no test coverage detected