generated from coulomb/repo-seed
Add hub-core package, docs, and State Hub integration scaffold
Extract the first reusable slice (models, schemas, routers, MCP, migrations) from state-hub with INTENT/SCOPE, agent instructions, workplan, and aligned inter_hub capability registry index.
This commit is contained in:
14
hub_core/utils/slugs.py
Normal file
14
hub_core/utils/slugs.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import re
|
||||
|
||||
_NON_SLUG = re.compile(r"[^a-z0-9]+")
|
||||
_DASHES = re.compile(r"-+")
|
||||
|
||||
|
||||
def slugify(value: str, *, max_length: int = 100) -> str:
|
||||
slug = _NON_SLUG.sub("-", value.strip().lower())
|
||||
slug = _DASHES.sub("-", slug).strip("-")
|
||||
if not slug:
|
||||
raise ValueError("slug cannot be empty")
|
||||
if max_length < 1:
|
||||
raise ValueError("max_length must be >= 1")
|
||||
return slug[:max_length].strip("-")
|
||||
Reference in New Issue
Block a user