34 lines
934 B
Python
34 lines
934 B
Python
"""Shared plural→singular helpers for OpenStack resource keys."""
|
|
|
|
from __future__ import annotations
|
|
|
|
# Words that already look plural-ending but must not lose a trailing "s".
|
|
_IRREGULAR: dict[str, str] = {
|
|
"status": "status",
|
|
"statuses": "status",
|
|
"addresses": "address",
|
|
"quotas": "quota",
|
|
"metadata": "metadata",
|
|
"series": "series",
|
|
"os-services": "os-service",
|
|
"os-hosts": "os-host",
|
|
}
|
|
|
|
|
|
def singular(collection_key: str) -> str:
|
|
"""Return a singular resource key for an OpenStack collection name."""
|
|
|
|
key = collection_key.strip()
|
|
if not key:
|
|
return key
|
|
lower = key.lower()
|
|
if lower in _IRREGULAR:
|
|
return _IRREGULAR[lower]
|
|
if key.endswith("ies") and len(key) > 3:
|
|
return key[:-3] + "y"
|
|
if key.endswith("ses") and len(key) > 3:
|
|
return key[:-2]
|
|
if key.endswith("s") and not key.endswith("ss"):
|
|
return key[:-1]
|
|
return key
|