# tstring URL: /api/tstring/ Section: api -------------------------------------------------------------------------------- tstring - Kida window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'brown-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/kida/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/kida/assets/js/enhancements/toc.632a9783.js', 'docs-nav': '/kida/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/kida/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/kida/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/kida/assets/js/enhancements/interactive.fc077855.js', 'mobile-nav': '/kida/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/kida/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/kida/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/kida/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/kida/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/kida/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/kida/assets/js/enhancements/link-previews.8d906535.js' }; (function () { try { var defaults = window.BENGAL_THEME_DEFAULTS || { appearance: 'system', palette: '' }; var defaultAppearance = defaults.appearance; if (defaultAppearance === 'system') { defaultAppearance = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light'; } var storedTheme = localStorage.getItem('bengal-theme'); var storedPalette = localStorage.getItem('bengal-palette'); var theme = storedTheme ? (storedTheme === 'system' ? defaultAppearance : storedTheme) : defaultAppearance; var palette = storedPalette ?? defaults.palette; document.documentElement.setAttribute('data-theme', theme); if (palette) { document.documentElement.setAttribute('data-palette', palette); } } catch (e) { document.documentElement.setAttribute('data-theme', 'light'); } })(); { "prerender": [ { "where": { "and": [ { "href_matches": "/docs/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ], "prefetch": [ { "where": { "and": [ { "href_matches": "/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ] } Skip to main content Magnifying Glass ESC Recent Clear Magnifying Glass No results for "" Start typing to search... ↑↓ Navigate ↵ Open ESC Close Powered by Lunr )彡 DocumentationInfoAboutArrow ClockwiseGet StartedCodeSyntaxTerminalUsageNoteTutorialsStarburstExtendingBookmarkReferenceTroubleshootingReleasesDevGitHubKida API Reference Magnifying Glass Search ⌘K Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal List )彡 Magnifying Glass Search X Close Documentation Caret Down Info About Arrow Clockwise Get Started Code Syntax Terminal Usage Note Tutorials Starburst Extending Bookmark Reference Troubleshooting Releases Dev Caret Down GitHub Kida API Reference Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Kida API Reference Caret Right Analysis analyzer cache config dependencies landmarks metadata purity roles Caret Right Compiler Caret Right Statements basic control_flow functions special_blocks template_structure variables _protocols coalescing core expressions utils Caret Right Environment core exceptions filters loaders protocols registry tests Caret Right Parser Caret Right Blocks control_flow core functions special_blocks template_structure variables _protocols core errors expressions statements tokens Caret Right Utils html lru_cache workers _types bytecode_cache kida lexer nodes template tstring Kida API Reference ᗢ Caret Down Link Copy URL External Open LLM text Copy Copy LLM text Share with AI Ask Claude Ask ChatGPT Ask Gemini Ask Copilot Module tstring Kida Template String support (PEP 750). Provides t-string tags for Python 3.14+: k: Kida-style interpolation with auto-escaping r: Safe, composable regex patterns with ReDoS validation Example: >>> from kida.tstring import k, r >>> name = "<script>" >>> k(t"Hello {name}!") # Auto-escapes 'Hello &lt;script&gt;!' >>> NAME = r"[a-zA-Z_][a-zA-Z0-9_]*" >>> INTEGER = r"\d+" >>> pattern = r(t"{NAME}|{INTEGER}") # Composes safely >>> pattern.compile().match("variable_123") <re.Match object; span=(0, 12), match='variable_123'> 4Classes3Functions Classes TemplateProtocol 2 ▼ Attributes Name Type Description strings tuple[str, ...] — interpolations tuple[Any, ...] — TemplateLibProtocol 1 ▼ Attributes Name Type Description Template type[TemplateProtocol] — PatternError 0 ▼ Error raised when a regex pattern is invalid or unsafe. Error raised when a regex pattern is invalid or unsafe. ComposablePattern 6 ▼ A composable regex pattern with safety validation. **ComposablePattern wraps a regex pattern strin… A composable regex pattern with safety validation. ComposablePattern wraps a regex pattern string and provides: Lazy compilation (pattern is compiled on first use) ReDoS validation at creation time Safe composition via the | operator Attributes Name Type Description pattern — The raw regex pattern string Methods pattern 0 str ▼ The raw regex pattern string. property def pattern(self) -> str Returns str compile 1 re.Pattern[str] ▼ Compile the pattern to a regex object. def compile(self, flags: int = 0) -> re.Pattern[str] Parameters Name Type Description flags — Regex flags (re.IGNORECASE, re.MULTILINE, etc.) Default: 0 Returns re.Pattern[str] Compiled re.Pattern object Internal Methods 3 ▼ __init__ 1 ▼ Create a composable pattern. def __init__(self, pattern: str) -> None Parameters Name Type Description pattern — The regex pattern string __or__ 1 ComposablePattern ▼ Combine patterns with alternation: pattern1 | pattern2. Both patterns are wrap… def __or__(self, other: ComposablePattern | str) -> ComposablePattern Combine patterns with alternation: pattern1 | pattern2. Both patterns are wrapped in non-capturing groups to prevent group interference. Parameters Name Type Description other — Returns ComposablePattern __repr__ 0 str ▼ def __repr__(self) -> str Returns str Functions _validate_redos_safety 1 None ▼ Validate pattern doesn't contain known ReDoS vulnerabilities. def _validate_redos_safety(pattern: str) -> None Parameters Name Type Description pattern str r 1 ComposablePattern ▼ The `r` tag for composable regex patterns. Composes regex patterns safely by w… def r(template: TemplateProtocol) -> ComposablePattern The r tag for composable regex patterns. Composes regex patterns safely by wrapping interpolated values in non-capturing groups. This prevents group index collision and quantifier interference. Parameters Name Type Description template TemplateProtocol A t-string template with pattern interpolations Returns ComposablePattern k 1 str ▼ The `k` tag for Kida template strings. Processes a PEP 750 t-string with autom… def k(template: TemplateProtocol) -> str The k tag for Kida template strings. Processes a PEP 750 t-string with automatic HTML escaping. Values are escaped unless they implement __html__() (Markup). Type Safety: The TemplateProtocol type hint ensures static type checkers (mypy, pyright) catch misuse like k("string"). Runtime isinstance() check is omitted for performance (~35% faster). Duck typing allows test mocks. Parameters Name Type Description template TemplateProtocol Returns str ← Previous template List © 2026 Kida built in ᓚᘏᗢ { "linkPreviews": { "enabled": true, "hoverDelay": 200, "hideDelay": 150, "showSection": true, "showReadingTime": true, "showWordCount": true, "showDate": true, "showTags": true, "maxTags": 3, "includeSelectors": [".prose"], "excludeSelectors": ["nav", ".toc", ".breadcrumb", ".pagination", ".card", "[class*='-card']", ".tab-nav", "[class*='-widget']", ".child-items", ".content-tiles"], "allowedHosts": [], "allowedSchemes": ["https"], "hostFailureThreshold": 3 } } window.BENGAL_LAZY_ASSETS = { tabulator: '/kida/assets/js/tabulator.min.js', dataTable: '/kida/assets/js/data-table.js', mermaidToolbar: '/kida/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/kida/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/kida/assets/js/graph-minimap.ff04e939.js', graphContextual: '/kida/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/kida/assets/icons/close.911d4fe1.svg', enlarge: '/kida/assets/icons/enlarge.652035e5.svg', copy: '/kida/assets/icons/copy.3d56e945.svg', 'download-svg': '/kida/assets/icons/download.04f07e1b.svg', 'download-png': '/kida/assets/icons/image.c34dfd40.svg', 'zoom-in': '/kida/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/kida/assets/icons/zoom-out.38857c77.svg', reset: '/kida/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 982 - Reading Time: 5 minutes