October feature list #226
1 changed files with 110 additions and 3 deletions
|
|
@ -86,10 +86,117 @@ def build_object_fields(schema, name, verbose_name_prefix=None, parent_required=
|
||||||
|
|
||||||
|
|
||||||
def deslugify(title):
|
def deslugify(title):
|
||||||
|
"""
|
||||||
|
Convert camelCase, PascalCase, or snake_case to human-readable title.
|
||||||
|
Handles known acronyms (e.g., postgreSQLParameters -> PostgreSQL Parameters).
|
||||||
|
"""
|
||||||
|
ACRONYMS = {
|
||||||
|
# Database systems
|
||||||
|
"SQL": "SQL",
|
||||||
|
"MYSQL": "MySQL",
|
||||||
|
"POSTGRESQL": "PostgreSQL",
|
||||||
|
"MARIADB": "MariaDB",
|
||||||
|
"MSSQL": "MSSQL",
|
||||||
|
"MONGODB": "MongoDB",
|
||||||
|
"REDIS": "Redis",
|
||||||
|
# Protocols
|
||||||
|
"HTTP": "HTTP",
|
||||||
|
"HTTPS": "HTTPS",
|
||||||
|
"FTP": "FTP",
|
||||||
|
"SFTP": "SFTP",
|
||||||
|
"SSH": "SSH",
|
||||||
|
"TLS": "TLS",
|
||||||
|
"SSL": "SSL",
|
||||||
|
# APIs
|
||||||
|
"API": "API",
|
||||||
|
"REST": "REST",
|
||||||
|
"GRPC": "gRPC",
|
||||||
|
"GRAPHQL": "GraphQL",
|
||||||
|
# Networking
|
||||||
|
"URL": "URL",
|
||||||
|
"URI": "URI",
|
||||||
|
"FQDN": "FQDN",
|
||||||
|
"DNS": "DNS",
|
||||||
|
"IP": "IP",
|
||||||
|
"TCP": "TCP",
|
||||||
|
"UDP": "UDP",
|
||||||
|
# Data formats
|
||||||
|
"JSON": "JSON",
|
||||||
|
"XML": "XML",
|
||||||
|
"YAML": "YAML",
|
||||||
|
"CSV": "CSV",
|
||||||
|
"HTML": "HTML",
|
||||||
|
"CSS": "CSS",
|
||||||
|
# Hardware
|
||||||
|
"CPU": "CPU",
|
||||||
|
"RAM": "RAM",
|
||||||
|
"GPU": "GPU",
|
||||||
|
"SSD": "SSD",
|
||||||
|
"HDD": "HDD",
|
||||||
|
# Identifiers
|
||||||
|
"ID": "ID",
|
||||||
|
"UUID": "UUID",
|
||||||
|
"GUID": "GUID",
|
||||||
|
"ARN": "ARN",
|
||||||
|
# Cloud providers
|
||||||
|
"AWS": "AWS",
|
||||||
|
"GCP": "GCP",
|
||||||
|
"AZURE": "Azure",
|
||||||
|
"IBM": "IBM",
|
||||||
|
# Kubernetes/Cloud
|
||||||
|
"DB": "DB",
|
||||||
|
"PVC": "PVC",
|
||||||
|
"PV": "PV",
|
||||||
|
"VPN": "VPN",
|
||||||
|
# Auth
|
||||||
|
"OS": "OS",
|
||||||
|
"LDAP": "LDAP",
|
||||||
|
"SAML": "SAML",
|
||||||
|
"OAUTH": "OAuth",
|
||||||
|
"JWT": "JWT",
|
||||||
|
# AWS Services
|
||||||
|
"S3": "S3",
|
||||||
|
"EC2": "EC2",
|
||||||
|
"RDS": "RDS",
|
||||||
|
"EBS": "EBS",
|
||||||
|
"IAM": "IAM",
|
||||||
|
}
|
||||||
|
|
||||||
if "_" in title:
|
if "_" in title:
|
||||||
title.replace("_", " ")
|
# Handle snake_case
|
||||||
return title.title()
|
title = title.replace("_", " ")
|
||||||
return re.sub(r"(?<!^)(?=[A-Z])", " ", title).capitalize()
|
words = title.split()
|
||||||
|
else:
|
||||||
|
# Handle camelCase/PascalCase with smart splitting
|
||||||
|
# This regex splits on:
|
||||||
|
# - Transition from lowercase to uppercase (camelCase)
|
||||||
|
# - Transition from multiple uppercase to an uppercase followed by lowercase (SQLParameters -> SQL Parameters)
|
||||||
|
words = re.findall(r"[A-Z]+(?=[A-Z][a-z]|\b)|[A-Z][a-z]+|[a-z]+|[0-9]+", title)
|
||||||
|
|
||||||
|
# Merge adjacent words if they form a known compound acronym (e.g., postgre + SQL = PostgreSQL)
|
||||||
|
merged_words = []
|
||||||
|
i = 0
|
||||||
|
while i < len(words):
|
||||||
|
if i < len(words) - 1:
|
||||||
|
# Check if current word + next word form a known acronym
|
||||||
|
combined = (words[i] + words[i + 1]).upper()
|
||||||
|
if combined in ACRONYMS:
|
||||||
|
merged_words.append(combined)
|
||||||
|
i += 2
|
||||||
|
continue
|
||||||
|
merged_words.append(words[i])
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# Capitalize each word, using proper casing for known acronyms
|
||||||
|
result = []
|
||||||
|
for word in merged_words:
|
||||||
|
word_upper = word.upper()
|
||||||
|
if word_upper in ACRONYMS:
|
||||||
|
result.append(ACRONYMS[word_upper])
|
||||||
|
else:
|
||||||
|
result.append(word.capitalize())
|
||||||
|
|
||||||
|
return " ".join(result)
|
||||||
|
|
||||||
|
|
||||||
def get_django_field(
|
def get_django_field(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue