Coverage for mcpgateway / utils / display_name.py: 100%
9 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-11 07:10 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-11 07:10 +0000
1# -*- coding: utf-8 -*-
2"""Location: ./mcpgateway/utils/display_name.py
3Copyright 2025
4SPDX-License-Identifier: Apache-2.0
5Authors: Mihai Criveti
7Display Name Utilities.
8This module provides utilities for converting technical tool names to user-friendly display names.
10Examples:
11 >>> from mcpgateway.utils.display_name import generate_display_name
12 >>> generate_display_name("duckduckgo_search")
13 'Duckduckgo Search'
14 >>> generate_display_name("weather-api")
15 'Weather Api'
16 >>> generate_display_name("get_user.profile")
17 'Get User Profile'
18"""
20# Standard
21import re
24def generate_display_name(technical_name: str) -> str:
25 """Convert technical tool name to human-readable display name.
27 Converts underscores, hyphens, and dots to spaces, then capitalizes the first letter.
29 Args:
30 technical_name: The technical tool name (e.g., "duckduckgo_search")
32 Returns:
33 str: Human-readable display name (e.g., "Duckduckgo Search")
35 Examples:
36 >>> generate_display_name("duckduckgo_search")
37 'Duckduckgo Search'
38 >>> generate_display_name("weather-api")
39 'Weather Api'
40 >>> generate_display_name("get_user.profile")
41 'Get User Profile'
42 >>> generate_display_name("simple_tool")
43 'Simple Tool'
44 >>> generate_display_name("UPPER_CASE")
45 'Upper Case'
46 >>> generate_display_name("mixed_Case-Name.test")
47 'Mixed Case Name Test'
48 >>> generate_display_name("")
49 ''
50 >>> generate_display_name("single")
51 'Single'
52 >>> generate_display_name("multiple___underscores")
53 'Multiple Underscores'
54 >>> generate_display_name("tool_with-mixed.separators")
55 'Tool With Mixed Separators'
56 """
57 if not technical_name:
58 return ""
60 # Replace underscores, hyphens, and dots with spaces
61 display_name = re.sub(r"[_\-\.]+", " ", technical_name)
63 # Remove extra whitespace and capitalize first letter
64 display_name = " ".join(display_name.split()) # Normalize whitespace
66 if display_name:
67 # Capitalize each word (title case)
68 display_name = display_name.title()
70 return display_name