2023-03-17 09:22:31 +00:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< link rel = "canonical" href = "https://preserves.dev/python/latest/schema/" >
< link rel = "prev" href = "../path/" >
< link rel = "next" href = "../text/" >
< link rel = "icon" href = "../assets/images/favicon.png" >
< meta name = "generator" content = "mkdocs-1.4.2, mkdocs-material-9.1.3" >
< title > Preserves Schema - Python Preserves< / title >
< link rel = "stylesheet" href = "../assets/stylesheets/main.c4a75a56.min.css" >
< link rel = "stylesheet" href = "../assets/stylesheets/palette.a0c5b2b5.min.css" >
< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin >
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" >
< style > : root { --md-text-font : "Roboto" ; --md-code-font : "Roboto Mono" } < / style >
< link rel = "stylesheet" href = "../assets/_mkdocstrings.css" >
< script > _ _md _scope = new URL ( ".." , location ) , _ _md _hash = e => [ ... e ] . reduce ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) , 0 ) , _ _md _get = ( e , _ = localStorage , t = _ _md _scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , _ _md _set = ( e , _ , t = localStorage , a = _ _md _scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } < / script >
< / head >
< body dir = "ltr" data-md-color-scheme = "default" data-md-color-primary = "" data-md-color-accent = "" >
< input class = "md-toggle" data-md-toggle = "drawer" type = "checkbox" id = "__drawer" autocomplete = "off" >
< input class = "md-toggle" data-md-toggle = "search" type = "checkbox" id = "__search" autocomplete = "off" >
< label class = "md-overlay" for = "__drawer" > < / label >
< div data-md-component = "skip" >
< a href = "#preserves-schema" class = "md-skip" >
Skip to content
< / a >
< / div >
< div data-md-component = "announce" >
< / div >
< div data-md-color-scheme = "default" data-md-component = "outdated" hidden >
< / div >
< header class = "md-header md-header--shadow" data-md-component = "header" >
< nav class = "md-header__inner md-grid" aria-label = "Header" >
< a href = ".." title = "Python Preserves" class = "md-header__button md-logo" aria-label = "Python Preserves" data-md-component = "logo" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z" / > < / svg >
< / a >
< label class = "md-header__button md-icon" for = "__drawer" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z" / > < / svg >
< / label >
< div class = "md-header__title" data-md-component = "header-title" >
< div class = "md-header__ellipsis" >
< div class = "md-header__topic" >
< span class = "md-ellipsis" >
Python Preserves
< / span >
< / div >
< div class = "md-header__topic" data-md-component = "header-topic" >
< span class = "md-ellipsis" >
Preserves Schema
< / span >
< / div >
< / div >
< / div >
< label class = "md-header__button md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z" / > < / svg >
< / label >
< div class = "md-search" data-md-component = "search" role = "dialog" >
< label class = "md-search__overlay" for = "__search" > < / label >
< div class = "md-search__inner" role = "search" >
< form class = "md-search__form" name = "search" >
< input type = "text" class = "md-search__input" name = "query" aria-label = "Search" placeholder = "Search" autocapitalize = "off" autocorrect = "off" autocomplete = "off" spellcheck = "false" data-md-component = "search-query" required >
< label class = "md-search__icon md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z" / > < / svg >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z" / > < / svg >
< / label >
< nav class = "md-search__options" aria-label = "Search" >
< button type = "reset" class = "md-search__icon md-icon" title = "Clear" aria-label = "Clear" tabindex = "-1" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z" / > < / svg >
< / button >
< / nav >
< / form >
< div class = "md-search__output" >
< div class = "md-search__scrollwrap" data-md-scrollfix >
< div class = "md-search-result" data-md-component = "search-result" >
< div class = "md-search-result__meta" >
Initializing search
< / div >
< ol class = "md-search-result__list" role = "presentation" > < / ol >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "md-header__source" >
< a href = "https://gitlab.com/preserves/preserves" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z" / > < / svg >
< / div >
< div class = "md-source__repository" >
GitLab
< / div >
< / a >
< / div >
< / nav >
< / header >
< div class = "md-container" data-md-component = "container" >
< main class = "md-main" data-md-component = "main" >
< div class = "md-main__inner md-grid" >
< div class = "md-sidebar md-sidebar--primary" data-md-component = "sidebar" data-md-type = "navigation" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--primary" aria-label = "Navigation" data-md-level = "0" >
< label class = "md-nav__title" for = "__drawer" >
< a href = ".." title = "Python Preserves" class = "md-nav__button md-logo" aria-label = "Python Preserves" data-md-component = "logo" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z" / > < / svg >
< / a >
Python Preserves
< / label >
< div class = "md-nav__source" >
< a href = "https://gitlab.com/preserves/preserves" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z" / > < / svg >
< / div >
< div class = "md-source__repository" >
GitLab
< / div >
< / a >
< / div >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = ".." class = "md-nav__link" >
Overview
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../api/" class = "md-nav__link" >
The top-level preserves package
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../binary/" class = "md-nav__link" >
Machine-oriented binary syntax
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../compare/" class = "md-nav__link" >
Comparing Values
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../error/" class = "md-nav__link" >
Codec errors
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../fold/" class = "md-nav__link" >
Traversing values
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../merge/" class = "md-nav__link" >
Merging values
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../path/" class = "md-nav__link" >
Preserves Path
< / a >
< / li >
< li class = "md-nav__item md-nav__item--active" >
< input class = "md-nav__toggle md-toggle" type = "checkbox" id = "__toc" >
< label class = "md-nav__link md-nav__link--active" for = "__toc" >
Preserves Schema
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< a href = "./" class = "md-nav__link md-nav__link--active" >
Preserves Schema
< / a >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
2023-03-17 14:24:53 +00:00
< li class = "md-nav__item" >
< a href = "#schema-support-in-python" class = "md-nav__link" >
Schema support in Python
< / a >
< / li >
2023-03-17 09:22:31 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema" class = "md-nav__link" >
preserves.schema
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "preserves.schema" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema--examples" class = "md-nav__link" >
Examples
< / a >
< nav class = "md-nav" aria-label = "Examples" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema--setup-loading-a-schema-bundle" class = "md-nav__link" >
Setup: Loading a schema bundle
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema--example-1-streamstreamlistenererror-a-product-type" class = "md-nav__link" >
Example 1: stream.StreamListenerError, a product type
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema--example-2-streammode-a-sum-type" class = "md-nav__link" >
Example 2: stream.Mode, a sum type
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.meta" class = "md-nav__link" >
meta
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler" class = "md-nav__link" >
Compiler
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Compiler" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler.load" class = "md-nav__link" >
load()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler.load_filelike" class = "md-nav__link" >
load_filelike()
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition" class = "md-nav__link" >
Definition
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Definition" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.ENUMERATION" class = "md-nav__link" >
ENUMERATION
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.FIELD_NAMES" class = "md-nav__link" >
FIELD_NAMES
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.SAFE_FIELD_NAMES" class = "md-nav__link" >
SAFE_FIELD_NAMES
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Enumeration" class = "md-nav__link" >
Enumeration
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Enumeration" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Enumeration.VARIANTS" class = "md-nav__link" >
VARIANTS
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Namespace" class = "md-nav__link" >
Namespace
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaDecodeFailed" class = "md-nav__link" >
SchemaDecodeFailed
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject" class = "md-nav__link" >
SchemaObject
< / a >
< nav class = "md-nav" aria-label = "SchemaObject" >
< ul class = "md-nav__list" >
2023-03-17 14:24:53 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.MODULE_PATH" class = "md-nav__link" >
MODULE_PATH
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.NAME" class = "md-nav__link" >
NAME
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.ROOTNS" class = "md-nav__link" >
ROOTNS
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.SCHEMA" class = "md-nav__link" >
SCHEMA
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.VARIANT" class = "md-nav__link" >
VARIANT
< / a >
< / li >
2023-03-17 09:22:31 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.__preserve__" class = "md-nav__link" >
__preserve__()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.decode" class = "md-nav__link" >
decode()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.try_decode" class = "md-nav__link" >
try_decode()
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.extend" class = "md-nav__link" >
extend()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.load_schema_file" class = "md-nav__link" >
load_schema_file()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.safeattrname" class = "md-nav__link" >
safeattrname()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../text/" class = "md-nav__link" >
Human-readable text syntax
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../values/" class = "md-nav__link" >
Representations of Values
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-sidebar md-sidebar--secondary" data-md-component = "sidebar" data-md-type = "toc" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
2023-03-17 14:24:53 +00:00
< li class = "md-nav__item" >
< a href = "#schema-support-in-python" class = "md-nav__link" >
Schema support in Python
< / a >
< / li >
2023-03-17 09:22:31 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema" class = "md-nav__link" >
preserves.schema
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "preserves.schema" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema--examples" class = "md-nav__link" >
Examples
< / a >
< nav class = "md-nav" aria-label = "Examples" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema--setup-loading-a-schema-bundle" class = "md-nav__link" >
Setup: Loading a schema bundle
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema--example-1-streamstreamlistenererror-a-product-type" class = "md-nav__link" >
Example 1: stream.StreamListenerError, a product type
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema--example-2-streammode-a-sum-type" class = "md-nav__link" >
Example 2: stream.Mode, a sum type
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.meta" class = "md-nav__link" >
meta
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler" class = "md-nav__link" >
Compiler
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Compiler" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler.load" class = "md-nav__link" >
load()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Compiler.load_filelike" class = "md-nav__link" >
load_filelike()
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition" class = "md-nav__link" >
Definition
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Definition" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.ENUMERATION" class = "md-nav__link" >
ENUMERATION
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.FIELD_NAMES" class = "md-nav__link" >
FIELD_NAMES
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Definition.SAFE_FIELD_NAMES" class = "md-nav__link" >
SAFE_FIELD_NAMES
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Enumeration" class = "md-nav__link" >
Enumeration
< / a >
2023-03-17 14:24:53 +00:00
< nav class = "md-nav" aria-label = "Enumeration" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Enumeration.VARIANTS" class = "md-nav__link" >
VARIANTS
< / a >
< / li >
< / ul >
< / nav >
2023-03-17 09:22:31 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.Namespace" class = "md-nav__link" >
Namespace
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaDecodeFailed" class = "md-nav__link" >
SchemaDecodeFailed
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject" class = "md-nav__link" >
SchemaObject
< / a >
< nav class = "md-nav" aria-label = "SchemaObject" >
< ul class = "md-nav__list" >
2023-03-17 14:24:53 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.MODULE_PATH" class = "md-nav__link" >
MODULE_PATH
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.NAME" class = "md-nav__link" >
NAME
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.ROOTNS" class = "md-nav__link" >
ROOTNS
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.SCHEMA" class = "md-nav__link" >
SCHEMA
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.VARIANT" class = "md-nav__link" >
VARIANT
< / a >
< / li >
2023-03-17 09:22:31 +00:00
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.__preserve__" class = "md-nav__link" >
__preserve__()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.decode" class = "md-nav__link" >
decode()
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#preserves.schema.SchemaObject.try_decode" class = "md-nav__link" >
try_decode()
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.extend" class = "md-nav__link" >
extend()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.load_schema_file" class = "md-nav__link" >
load_schema_file()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< li class = "md-nav__item" >
2023-03-17 14:24:53 +00:00
< a href = "#preserves.schema.safeattrname" class = "md-nav__link" >
safeattrname()
2023-03-17 09:22:31 +00:00
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-content" data-md-component = "content" >
< article class = "md-content__inner md-typeset" >
< h1 id = "preserves-schema" > Preserves Schema< / h1 >
2023-03-17 14:24:53 +00:00
< p > A Preserves schema connects Preserves < code > Value< / code > s to host-language data
structures. Each definition within a schema can be processed by a
compiler to produce< / p >
< ul >
< li >
< p > a simple host-language < em > type definition< / em > ;< / p >
< / li >
< li >
< p > a partial < em > parsing< / em > function from < code > Value< / code > s to instances of the
produced type; and< / p >
< / li >
< li >
< p > a total < em > serialization< / em > function from instances of the type to
< code > Value< / code > s.< / p >
< / li >
< / ul >
< p > Every parsed < code > Value< / code > retains enough information to always be able to
be serialized again, and every instance of a host-language data
structure contains, by construction, enough information to be
successfully serialized.< / p >
< h2 id = "schema-support-in-python" > Schema support in Python< / h2 >
2023-03-17 09:22:31 +00:00
< div class = "doc doc-object doc-module" >
< a id = "preserves.schema" > < / a >
< div class = "doc doc-contents first" >
2023-03-17 14:24:53 +00:00
< p > The < a class = "autorefs autorefs-internal" href = "#preserves.schema" > preserves.schema< / a > module implements < a href = "https://preserves.dev/preserves-schema.html" > Preserves
Schema< / a > for Python.< / p >
< p > A Schema source file (like < a href = "https://preserves.dev/schema/schema.prs" > this one< / a > ) is first
compiled using < a href = "https://preserves.dev/doc/preserves-schemac.html" > < code > preserves-schemac< / code > < / a > to
produce a binary-syntax < em > schema bundle< / em > containing schema module definitons (like < a href = "https://preserves.dev/preserves-schema.html#appendix-metaschema-instance" > this
one< / a > ). Python code
then loads the bundle, exposing its contents as < a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > s
ultimately containing < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > s.< / p >
< h3 id = "preserves.schema--examples" > Examples< / h3 >
< h4 id = "preserves.schema--setup-loading-a-schema-bundle" > Setup: Loading a schema bundle< / h4 >
< p > For our running example, we will use schemas associated with the < a href = "https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols" > Syndicated Actor
Model< / a > . (The schema bundle
is a copy of < a href = "https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols/src/branch/main/schema-bundle.bin" > this
file< / a >
from the < code > syndicate-protocols< / code > repository.)< / p >
< p > To load a schema bundle, use < a class = "autorefs autorefs-internal" href = "#preserves.schema.load_schema_file" > load_schema_file< / a > (or,
alternatively, use < a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler" > Compiler< / a > directly):< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "p" > )< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Namespace< / span > < span class = "s1" > ' > < / span >
< / code > < / pre > < / div >
< p > The top-level entries in the loaded bundle are schema modules. Let's examine the < code > stream< / code >
schema module, whose < a href = "https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols/src/commit/d8a139b23a40bad6698f9f4240f9e8426b4a123f/schemas/stream.prs" > source
code< / a >
indicates that it should contain definitions for < code > Mode< / code > , < code > Source< / code > , < code > Sink< / code > , etc.:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "c1" > # doctest: +ELLIPSIS< / span >
< span class = "p" > {< / span > < span class = "s1" > ' Mode' < / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "s1" > ' > , ' < / span > < span class = "n" > Sink< / span > < span class = "s1" > ' : < class ' < / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Sink< / span > < span class = "s1" > ' > , ...}< / span >
< / code > < / pre > < / div >
< h4 id = "preserves.schema--example-1-streamstreamlistenererror-a-product-type" > Example 1: stream.StreamListenerError, a product type< / h4 >
< p > Drilling down further, let's consider the < a href = "https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols/src/commit/d8a139b23a40bad6698f9f4240f9e8426b4a123f/schemas/stream.prs#L9" > definition of
StreamListenerError< / a > , which appears in the source as< / p >
< div class = "highlight" > < pre > < span > < / span > < code > StreamListenerError = < stream-listener-error @spec any @message string> .
< / code > < / pre > < / div >
< p > This reads, in the < a href = "https://preserves.dev/preserves-schema.html#the-preserves-schema-language" > Preserves Schema
language< / a > , as the
definition of a simple product type (record, class, object) with two named fields < code > spec< / code > and
< code > message< / code > . Parsing a value into a < code > StreamListenerError< / code > will only succeed if it's a record, if
the label matches, the second field (< code > message< / code > ) is a string, and it has exactly two fields.< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "s1" > ' > < / span >
< / code > < / pre > < / div >
< p > The < code > StreamListenerError< / code > class includes a < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.decode" > decode< / a >
method that analyzes an input value:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span >
< span class = "o" > ...< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < stream-listener-error < xyz> " an error" > ' < / span > < span class = "p" > ))< / span >
< span class = "n" > StreamListenerError< / span > < span class = "p" > {< / span > < span class = "s1" > ' spec' < / span > < span class = "p" > :< / span > < span class = "c1" > #xyz(), ' message' : ' an error' }< / span >
< / code > < / pre > < / div >
< p > If invalid input is supplied, < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.decode" > decode< / a > will raise
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > , which includes helpful information
for diagnosing the problem (as we will see below, this is especially useful for parsers for sum
types):< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span >
< span class = "o" > ...< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < i-am-invalid> ' < / span > < span class = "p" > ))< / span >
< span class = "n" > Traceback< / span > < span class = "p" > (< / span > < span class = "n" > most< / span > < span class = "n" > recent< / span > < span class = "n" > call< / span > < span class = "n" > last< / span > < span class = "p" > ):< / span >
< span class = "o" > ...< / span >
< span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > SchemaDecodeFailed< / span > < span class = "p" > :< / span > < span class = "n" > Could< / span > < span class = "ow" > not< / span > < span class = "n" > decode< / span > < span class = "n" > i< / span > < span class = "o" > -< / span > < span class = "n" > am< / span > < span class = "o" > -< / span > < span class = "n" > invalid< / span > < span class = "n" > using< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "s1" > ' > < / span >
< span class = "n" > Most< / span > < span class = "n" > likely< / span > < span class = "n" > reason< / span > < span class = "p" > :< / span > < span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > stream< / span > < span class = "o" > -< / span > < span class = "n" > listener< / span > < span class = "o" > -< / span > < span class = "n" > error< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match i-am-invalid< / span >
< span class = "n" > Full< / span > < span class = "n" > explanation< / span > < span class = "p" > :< / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > stream< / span > < span class = "o" > -< / span > < span class = "n" > listener< / span > < span class = "o" > -< / span > < span class = "n" > error< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match i-am-invalid< / span >
< / code > < / pre > < / div >
< p > Alternatively, the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.try_decode" > try_decode< / a > method catches
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > , transforming it into < code > None< / code > :< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > try_decode< / span > < span class = "p" > (< / span >
< span class = "o" > ...< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < stream-listener-error < xyz> " an error" > ' < / span > < span class = "p" > ))< / span >
< span class = "n" > StreamListenerError< / span > < span class = "p" > {< / span > < span class = "s1" > ' spec' < / span > < span class = "p" > :< / span > < span class = "c1" > #xyz(), ' message' : ' an error' }< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > try_decode< / span > < span class = "p" > (< / span >
< span class = "o" > ...< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < i-am-invalid> ' < / span > < span class = "p" > ))< / span >
< / code > < / pre > < / div >
< p > The class can also be instantiated directly:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > err< / span > < span class = "o" > =< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "p" > (< / span > < span class = "n" > Record< / span > < span class = "p" > (< / span > < span class = "n" > Symbol< / span > < span class = "p" > (< / span > < span class = "s1" > ' xyz' < / span > < span class = "p" > ),< / span > < span class = "p" > []),< / span > < span class = "s1" > ' an error' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "n" > err< / span >
< span class = "n" > StreamListenerError< / span > < span class = "p" > {< / span > < span class = "s1" > ' spec' < / span > < span class = "p" > :< / span > < span class = "c1" > #xyz(), ' message' : ' an error' }< / span >
< / code > < / pre > < / div >
< p > The fields and contents of instances can be queried:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > err< / span > < span class = "o" > .< / span > < span class = "n" > spec< / span >
< span class = "c1" > #xyz()< / span >
< span class = "o" > > > > < / span > < span class = "n" > err< / span > < span class = "o" > .< / span > < span class = "n" > message< / span >
< span class = "s1" > ' an error' < / span >
< / code > < / pre > < / div >
< p > And finally, instances can of course be serialized and encoded:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > err< / span > < span class = "p" > ))< / span >
< span class = "o" > < < / span > < span class = "n" > stream< / span > < span class = "o" > -< / span > < span class = "n" > listener< / span > < span class = "o" > -< / span > < span class = "n" > error< / span > < span class = "o" > < < / span > < span class = "n" > xyz< / span > < span class = "o" > > < / span > < span class = "s2" > " an error" < / span > < span class = "o" > > < / span >
< span class = "o" > > > > < / span > < span class = "n" > canonicalize< / span > < span class = "p" > (< / span > < span class = "n" > err< / span > < span class = "p" > )< / span >
< span class = "sa" > b< / span > < span class = "s1" > ' < / span > < span class = "se" > \xb4\xb3\x15< / span > < span class = "s1" > stream-listener-error< / span > < span class = "se" > \xb4\xb3\x03< / span > < span class = "s1" > xyz< / span > < span class = "se" > \x84\xb1\x08< / span > < span class = "s1" > an error< / span > < span class = "se" > \x84< / span > < span class = "s1" > ' < / span >
< / code > < / pre > < / div >
< h4 id = "preserves.schema--example-2-streammode-a-sum-type" > Example 2: stream.Mode, a sum type< / h4 >
< p > Now let's consider the < a href = "https://git.syndicate-lang.org/syndicate-lang/syndicate-protocols/src/commit/d8a139b23a40bad6698f9f4240f9e8426b4a123f/schemas/stream.prs#L37" > definition of
Mode< / a > ,
which appears in the source as< / p >
< div class = "highlight" > < pre > < span > < / span > < code > Mode = =bytes / @lines LineMode / < packet @size int> / < object @description any> .
< / code > < / pre > < / div >
< p > This reads, in the < a href = "https://preserves.dev/preserves-schema.html#the-preserves-schema-language" > Preserves Schema
language< / a > , as an
alternation (disjoint union, variant, sum type) of four possible kinds of value: the symbol
< code > bytes< / code > ; a < code > LineMode< / code > value; a record with < code > packet< / code > as its label and an integer as its only
field; or a record with < code > object< / code > as its label and any kind of value as its only field. In
Python, this becomes:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "s1" > ' > < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "s1" > ' > < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "s1" > ' > < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "s1" > ' > < / span >
< / code > < / pre > < / div >
< p > As before, < code > Mode< / code > includes a < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.decode" > decode< / a > method that analyzes
an input value:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' bytes' < / span > < span class = "p" > ))< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' lf' < / span > < span class = "p" > ))< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < packet 123> ' < / span > < span class = "p" > ))< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > {< / span > < span class = "s1" > ' size' < / span > < span class = "p" > :< / span > < span class = "mi" > 123< / span > < span class = "p" > }< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < object " ?" > ' < / span > < span class = "p" > ))< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > {< / span > < span class = "s1" > ' description' < / span > < span class = "p" > :< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > }< / span >
< / code > < / pre > < / div >
< p > Invalid input causes < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > to be raised:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < i-am-not-a-valid-mode> ' < / span > < span class = "p" > ))< / span >
< span class = "n" > Traceback< / span > < span class = "p" > (< / span > < span class = "n" > most< / span > < span class = "n" > recent< / span > < span class = "n" > call< / span > < span class = "n" > last< / span > < span class = "p" > ):< / span >
< span class = "o" > ...< / span >
< span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > SchemaDecodeFailed< / span > < span class = "p" > :< / span > < span class = "n" > Could< / span > < span class = "ow" > not< / span > < span class = "n" > decode< / span > < span class = "o" > < < / span > < span class = "n" > i< / span > < span class = "o" > -< / span > < span class = "n" > am< / span > < span class = "o" > -< / span > < span class = "ow" > not< / span > < span class = "o" > -< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > valid< / span > < span class = "o" > -< / span > < span class = "n" > mode< / span > < span class = "o" > > < / span > < span class = "n" > using< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "s1" > ' > < / span >
< span class = "n" > Most< / span > < span class = "n" > likely< / span > < span class = "n" > reason< / span > < span class = "p" > :< / span > < span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > crlf< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match < i-am-not-a-valid-mode> < / span >
< span class = "n" > Full< / span > < span class = "n" > explanation< / span > < span class = "p" > :< / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "p" > :< / span > < span class = "n" > matching< / span > < span class = "o" > < < / span > < span class = "n" > i< / span > < span class = "o" > -< / span > < span class = "n" > am< / span > < span class = "o" > -< / span > < span class = "ow" > not< / span > < span class = "o" > -< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > valid< / span > < span class = "o" > -< / span > < span class = "n" > mode< / span > < span class = "o" > > < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "nb" > bytes< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match < i-am-not-a-valid-mode> < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > ref< / span > < span class = "p" > []< / span > < span class = "n" > LineMode< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match < i-am-not-a-valid-mode> < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "p" > :< / span > < span class = "n" > matching< / span > < span class = "o" > < < / span > < span class = "n" > i< / span > < span class = "o" > -< / span > < span class = "n" > am< / span > < span class = "o" > -< / span > < span class = "ow" > not< / span > < span class = "o" > -< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > valid< / span > < span class = "o" > -< / span > < span class = "n" > mode< / span > < span class = "o" > > < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > lf< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match < i-am-not-a-valid-mode> < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > crlf< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match < i-am-not-a-valid-mode> < / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > packet< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match i-am-not-a-valid-mode< / span >
< span class = "ow" > in< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > :< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "nb" > object< / span > < span class = "o" > > < / span > < span class = "n" > didn< / span > < span class = "s1" > ' t match i-am-not-a-valid-mode< / span >
< / code > < / pre > < / div >
< p > The "full explanation" includes details on which parses were attempted, and why they failed.< / p >
< p > Again, the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.try_decode" > try_decode< / a > method catches
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > , transforming it into < code > None< / code > :< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > try_decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' bytes' < / span > < span class = "p" > ))< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > try_decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < i-am-not-a-valid-mode> ' < / span > < span class = "p" > ))< / span >
< / code > < / pre > < / div >
< p > Direct instantiation is done with the variant classes, not with < code > Mode< / code > itself:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > {< / span > < span class = "s1" > ' size' < / span > < span class = "p" > :< / span > < span class = "mi" > 123< / span > < span class = "p" > }< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > )< / span >
< span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > {< / span > < span class = "s1" > ' description' < / span > < span class = "p" > :< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > }< / span >
< / code > < / pre > < / div >
< p > Fields and contents can be queried as usual:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())< / span > < span class = "o" > .< / span > < span class = "n" > value< / span >
< span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > size< / span >
< span class = "mi" > 123< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > description< / span >
< span class = "s1" > ' ?' < / span >
< / code > < / pre > < / div >
< p > And serialization and encoding are also as expected:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()))< / span >
< span class = "nb" > bytes< / span >
< span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())))< / span >
< span class = "n" > lf< / span >
< span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )))< / span >
< span class = "o" > < < / span > < span class = "n" > packet< / span > < span class = "mi" > 123< / span > < span class = "o" > > < / span >
< span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > )))< / span >
< span class = "o" > < < / span > < span class = "nb" > object< / span > < span class = "s2" > " ?" < / span > < span class = "o" > > < / span >
< span class = "o" > > > > < / span > < span class = "n" > canonicalize< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > ))< / span >
< span class = "sa" > b< / span > < span class = "s1" > ' < / span > < span class = "se" > \xb4\xb3\x06< / span > < span class = "s1" > object< / span > < span class = "se" > \xb1\x01< / span > < span class = "s1" > ?< / span > < span class = "se" > \x84< / span > < span class = "s1" > ' < / span >
< / code > < / pre > < / div >
< p > Finally, the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.VARIANT" > VARIANT< / a > attribute of instances
allows code to dispatch on what kind of data it is handling at a given moment:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span >
< span class = "c1" > #bytes< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > lines< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ())< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span >
< span class = "c1" > #lines< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span >
< span class = "c1" > #packet< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span >
< span class = "c1" > #object< / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< div class = "doc doc-children" >
< div class = "doc doc-object doc-attribute" >
< h2 id = "preserves.schema.meta" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > meta< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "n" > __metaschema_filename< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" > < code > module-attribute< / code > < / small >
< / span >
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Schema module < a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > corresponding to < a href = "https://preserves.dev/preserves-schema.html#appendix-metaschema" > Preserves Schema's
metaschema< / a > .< / p >
2023-03-17 09:22:31 +00:00
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.Compiler" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > Compiler< / span > < span class = "p" > ()< / span > < / code >
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Instances of < a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler" > Compiler< / a > populate an initially-empty
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > by loading and compiling schema bundle files.< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > c< / span > < span class = "o" > =< / span > < span class = "n" > Compiler< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > load< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > root< / span > < span class = "p" > )< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Namespace< / span > < span class = "s1" > ' > < / span >
< / code > < / pre > < / div >
< p > < strong > Attributes:< / strong > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < code > root< / code > < / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = "preserves.schema.Namespace" href = "#preserves.schema.Namespace" > Namespace< / a > < / code >
< / td >
< td > < p > the root namespace into which top-level schema modules are installed.< / p > < / td >
< / tr >
< / tbody >
< / table >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 912< / span >
< span class = "normal" > 913< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
2023-03-17 09:22:31 +00:00
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > root< / span > < span class = "o" > =< / span > < span class = "n" > Namespace< / span > < span class = "p" > (())< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< div class = "doc doc-children" >
2023-03-17 14:24:53 +00:00
< div class = "doc doc-object doc-function" >
< h3 id = "preserves.schema.Compiler.load" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > load< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span > < / code >
< / h3 >
< div class = "doc doc-contents " >
< p > Opens the file at < code > filename< / code > , passing the resulting file object to
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler.load_filelike" > load_filelike< / a > .< / p >
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 936< / span >
< span class = "normal" > 937< / span >
< span class = "normal" > 938< / span >
< span class = "normal" > 939< / span >
< span class = "normal" > 940< / span >
< span class = "normal" > 941< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > load< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > filename< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Opens the file at `filename`, passing the resulting file object to< / span >
< span class = "sd" > [load_filelike][preserves.schema.Compiler.load_filelike]." " " < / span >
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > pathlib< / span > < span class = "o" > .< / span > < span class = "n" > Path< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "k" > with< / span > < span class = "nb" > open< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "s1" > ' rb' < / span > < span class = "p" > )< / span > < span class = "k" > as< / span > < span class = "n" > f< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > load_filelike< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > filename< / span > < span class = "o" > .< / span > < span class = "n" > stem< / span > < span class = "p" > )< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "preserves.schema.Compiler.load_filelike" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > load_filelike< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > module_name< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < / code >
< / h3 >
< div class = "doc doc-contents " >
< p > Reads a < code > meta.Bundle< / code > or < code > meta.Schema< / code > from the filelike object < code > f< / code > , compiling and
installing it in < code > self.root< / code > . If < code > f< / code > contains a bundle, < code > module_name< / code > is not used,
since the schema modules in the bundle know their own names; if < code > f< / code > contains a plain
schema module, however, < code > module_name< / code > is used directly if it is a string, and if it is
< code > None< / code > , a suitable module name is computed from the < code > name< / code > attribute of < code > f< / code > , if it is
present. If < code > name< / code > is absent in that case, < code > ValueError< / code > is raised.< / p >
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 915< / span >
< span class = "normal" > 916< / span >
< span class = "normal" > 917< / span >
< span class = "normal" > 918< / span >
< span class = "normal" > 919< / span >
< span class = "normal" > 920< / span >
< span class = "normal" > 921< / span >
< span class = "normal" > 922< / span >
< span class = "normal" > 923< / span >
< span class = "normal" > 924< / span >
< span class = "normal" > 925< / span >
< span class = "normal" > 926< / span >
< span class = "normal" > 927< / span >
< span class = "normal" > 928< / span >
< span class = "normal" > 929< / span >
< span class = "normal" > 930< / span >
< span class = "normal" > 931< / span >
< span class = "normal" > 932< / span >
< span class = "normal" > 933< / span >
< span class = "normal" > 934< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > load_filelike< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > module_name< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Reads a `meta.Bundle` or `meta.Schema` from the filelike object `f`, compiling and< / span >
< span class = "sd" > installing it in `self.root`. If `f` contains a bundle, `module_name` is not used,< / span >
< span class = "sd" > since the schema modules in the bundle know their own names; if `f` contains a plain< / span >
< span class = "sd" > schema module, however, `module_name` is used directly if it is a string, and if it is< / span >
< span class = "sd" > `None`, a suitable module name is computed from the `name` attribute of `f`, if it is< / span >
< span class = "sd" > present. If `name` is absent in that case, `ValueError` is raised.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > x< / span > < span class = "o" > =< / span > < span class = "n" > Decoder< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > read< / span > < span class = "p" > ())< / span > < span class = "o" > .< / span > < span class = "n" > next< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "n" > x< / span > < span class = "o" > .< / span > < span class = "n" > key< / span > < span class = "o" > ==< / span > < span class = "n" > SCHEMA< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > module_name< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "s1" > ' name' < / span > < span class = "p" > ):< / span >
< span class = "n" > module_name< / span > < span class = "o" > =< / span > < span class = "n" > pathlib< / span > < span class = "o" > .< / span > < span class = "n" > Path< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > stem< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s1" > ' Cannot load schema module from filelike object without a module_name' < / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > load_schema< / span > < span class = "p" > ((< / span > < span class = "n" > Symbol< / span > < span class = "p" > (< / span > < span class = "n" > module_name< / span > < span class = "p" > ),),< / span > < span class = "n" > x< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "n" > x< / span > < span class = "o" > .< / span > < span class = "n" > key< / span > < span class = "o" > ==< / span > < span class = "n" > BUNDLE< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "p" > (< / span > < span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > s< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > x< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > load_schema< / span > < span class = "p" > (< / span > < span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > s< / span > < span class = "p" > )< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
2023-03-17 09:22:31 +00:00
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.Definition" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > Definition< / span > < span class = "p" > (< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > )< / span > < / code >
< / h2 >
< div class = "doc doc-contents " >
< p class = "doc doc-class-bases" >
Bases: < code > < a class = "autorefs autorefs-internal" title = "preserves.schema.SchemaObject" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > < / code > < / p >
2023-03-17 14:24:53 +00:00
< p > Subclasses of < a class = "autorefs autorefs-internal" href = "#preserves.schema.Definition" > Definition< / a > are used to represent both
standalone non-alternation definitions as well as alternatives within an
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Enumeration" > Enumeration< / a > .< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span >
< span class = "p" > [< / span > < span class = "s1" > ' spec' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' message' < / span > < span class = "p" > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > SAFE_FIELD_NAMES< / span >
< span class = "p" > [< / span > < span class = "s1" > ' spec' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' message' < / span > < span class = "p" > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > ENUMERATION< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span >
< span class = "kc" > True< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span >
< span class = "p" > [< / span > < span class = "s1" > ' description' < / span > < span class = "p" > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "o" > .< / span > < span class = "n" > SAFE_FIELD_NAMES< / span >
< span class = "p" > [< / span > < span class = "s1" > ' description' < / span > < span class = "p" > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > object< / span > < span class = "o" > .< / span > < span class = "n" > ENUMERATION< / span > < span class = "ow" > is< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span >
< span class = "kc" > True< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span >
< span class = "p" > []< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "o" > .< / span > < span class = "n" > SAFE_FIELD_NAMES< / span >
< span class = "p" > []< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "o" > .< / span > < span class = "n" > ENUMERATION< / span > < span class = "ow" > is< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span >
< span class = "kc" > True< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' 123' < / span > < span class = "p" > ))< / span >
< span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span >
< span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > CreditAmount< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "mi" > 123< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > value< / span >
< span class = "mi" > 123< / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 689< / span >
< span class = "normal" > 690< / span >
< span class = "normal" > 691< / span >
< span class = "normal" > 692< / span >
< span class = "normal" > 693< / span >
< span class = "normal" > 694< / span >
< span class = "normal" > 695< / span >
< span class = "normal" > 696< / span >
< span class = "normal" > 697< / span >
< span class = "normal" > 698< / span >
< span class = "normal" > 699< / span >
< span class = "normal" > 700< / span >
< span class = "normal" > 701< / span >
< span class = "normal" > 702< / span >
< span class = "normal" > 703< / span >
< span class = "normal" > 704< / span >
< span class = "normal" > 705< / span >
< span class = "normal" > 706< / span >
< span class = "normal" > 707< / span >
< span class = "normal" > 708< / span >
< span class = "normal" > 709< / span >
< span class = "normal" > 710< / span >
< span class = "normal" > 711< / span >
< span class = "normal" > 712< / span >
< span class = "normal" > 713< / span >
< span class = "normal" > 714< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
2023-03-17 09:22:31 +00:00
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _fields< / span > < span class = "o" > =< / span > < span class = "n" > args< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > SIMPLE< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > EMPTY< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > args< / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > takes no arguments' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > (),))< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > args< / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > needs exactly one argument' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > (),))< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > args< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > i< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > for< / span > < span class = "n" > arg< / span > < span class = "ow" > in< / span > < span class = "n" > args< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > i< / span > < span class = "o" > > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > given too many positional arguments' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > (),))< / span >
< span class = "nb" > setattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > SAFE_FIELD_NAMES< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ],< / span > < span class = "n" > arg< / span > < span class = "p" > )< / span >
< span class = "n" > i< / span > < span class = "o" > =< / span > < span class = "n" > i< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > for< / span > < span class = "p" > (< / span > < span class = "n" > argname< / span > < span class = "p" > ,< / span > < span class = "n" > arg< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > argname< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > given duplicate attribute: < / span > < span class = "si" > %r< / span > < span class = "s1" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > ,< / span > < span class = "n" > argname< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > argname< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > SAFE_FIELD_NAMES< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > given unknown attribute: < / span > < span class = "si" > %r< / span > < span class = "s1" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > ,< / span > < span class = "n" > argname< / span > < span class = "p" > ))< / span >
< span class = "nb" > setattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > argname< / span > < span class = "p" > ,< / span > < span class = "n" > arg< / span > < span class = "p" > )< / span >
< span class = "n" > i< / span > < span class = "o" > =< / span > < span class = "n" > i< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "n" > i< / span > < span class = "o" > !=< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > %s< / span > < span class = "s1" > needs argument(s) < / span > < span class = "si" > %r< / span > < span class = "s1" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _constructor_name< / span > < span class = "p" > (),< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > FIELD_NAMES< / span > < span class = "p" > ))< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< div class = "doc doc-children" >
2023-03-17 14:24:53 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.Definition.ENUMERATION" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > ENUMERATION< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > < code > None< / code > for standalone top-level definitions with a module; otherwise, an
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Enumeration" > Enumeration< / a > subclass representing a top-level alternation
definition.< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.Definition.FIELD_NAMES" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > FIELD_NAMES< / span > < span class = "o" > =< / span > < span class = "p" > []< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > List of strings: names of the fields contained within this definition, if it has named
fields at all; otherwise, an empty list, and the definition is a simple wrapper for another
value, in which case that value is accessed via the < code > value< / code > attribute.< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.Definition.SAFE_FIELD_NAMES" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > SAFE_FIELD_NAMES< / span > < span class = "o" > =< / span > < span class = "p" > []< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > The list produced by mapping < a class = "autorefs autorefs-internal" href = "#preserves.schema.safeattrname" > safeattrname< / a > over
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Definition.FIELD_NAMES" > FIELD_NAMES< / a > .< / p >
< / div >
< / div >
2023-03-17 09:22:31 +00:00
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.Enumeration" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > Enumeration< / span > < span class = "p" > ()< / span > < / code >
< / h2 >
< div class = "doc doc-contents " >
< p class = "doc doc-class-bases" >
Bases: < code > < a class = "autorefs autorefs-internal" title = "preserves.schema.SchemaObject" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > < / code > < / p >
2023-03-17 14:24:53 +00:00
< p > Subclasses of < a class = "autorefs autorefs-internal" href = "#preserves.schema.Enumeration" > Enumeration< / a > represent a group of variant
options within a sum type.< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "kn" > import< / span > < span class = "nn" > pprint< / span >
< span class = "o" > > > > < / span > < span class = "n" > pprint< / span > < span class = "o" > .< / span > < span class = "n" > pprint< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > VARIANTS< / span > < span class = "p" > )< / span >
< span class = "p" > [(< / span > < span class = "c1" > #bytes, < class ' stream.Mode.bytes' > ),< / span >
< span class = "p" > (< / span > < span class = "c1" > #lines, < class ' stream.Mode.lines' > ),< / span >
< span class = "p" > (< / span > < span class = "c1" > #packet, < class ' stream.Mode.packet' > ),< / span >
< span class = "p" > (< / span > < span class = "c1" > #object, < class ' stream.Mode.object' > )]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > VARIANTS< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ][< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "ow" > is< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > bytes< / span >
< span class = "kc" > True< / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 581< / span >
< span class = "normal" > 582< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s1" > ' Cannot create instance of Enumeration' < / span > < span class = "p" > )< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< div class = "doc doc-children" >
2023-03-17 14:24:53 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.Enumeration.VARIANTS" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > VARIANTS< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > List of < code > (Symbol, SchemaObject class)< / code > tuples representing the possible options within
this sum type.< / p >
< / div >
< / div >
2023-03-17 09:22:31 +00:00
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.Namespace" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > Namespace< / span > < span class = "p" > (< / span > < span class = "n" > prefix< / span > < span class = "p" > )< / span > < / code >
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > A < a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > is a dictionary-like object representing a
schema module that knows its location in a schema module hierarchy and whose attributes
correspond to definitions and submodules within the schema module.< / p >
< p > < strong > Attributes:< / strong > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < code > _prefix< / code > < / td >
< td >
< code > tuple[< a class = "autorefs autorefs-internal" title = "preserves.values.Symbol" href = "../values/#preserves.values.Symbol" > Symbol< / a > ]< / code >
< / td >
< td > < p > path to this module/Namespace from the root Namespace< / p > < / td >
< / tr >
< / tbody >
< / table >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 876< / span >
< span class = "normal" > 877< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > prefix< / span > < span class = "p" > ):< / span >
2023-03-17 09:22:31 +00:00
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _prefix< / span > < span class = "o" > =< / span > < span class = "n" > prefix< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< div class = "doc doc-children" >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.SchemaDecodeFailed" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > SchemaDecodeFailed< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ,< / span > < span class = "n" > failures< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < / code >
< / h2 >
< div class = "doc doc-contents " >
< p class = "doc doc-class-bases" >
Bases: < code > ValueError< / code > < / p >
2023-03-17 14:24:53 +00:00
< p > Raised when < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.decode" > decode< / a > cannot find a way to parse a
given input.< / p >
< p > < strong > Attributes:< / strong > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < code > cls< / code > < / td >
< td >
< code > class< / code >
< / td >
< td > < p > the SchemaObject subclass attempting the parse< / p > < / td >
< / tr >
< tr >
< td > < code > pattern< / code > < / td >
< td >
< code > Value< / code >
< / td >
< td > < p > the failing pattern, a < code > Value< / code > conforming to schema < code > meta.Pattern< / code > < / p > < / td >
< / tr >
< tr >
< td > < code > value< / code > < / td >
< td >
< code > Value< / code >
< / td >
< td > < p > the unparseable value< / p > < / td >
< / tr >
< tr >
< td > < code > failures< / code > < / td >
< td >
< code > list[< a class = "autorefs autorefs-internal" title = "preserves.schema.SchemaDecodeFailed" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > ]< / code >
< / td >
< td > < p > descriptions of failed paths attempted during the match this failure describes< / p > < / td >
< / tr >
< / tbody >
< / table >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 311< / span >
< span class = "normal" > 312< / span >
< span class = "normal" > 313< / span >
< span class = "normal" > 314< / span >
< span class = "normal" > 315< / span >
< span class = "normal" > 316< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ,< / span > < span class = "n" > failures< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
2023-03-17 09:22:31 +00:00
< span class = "nb" > super< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "fm" > __init__< / span > < span class = "p" > ()< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > cls< / span > < span class = "o" > =< / span > < span class = "bp" > cls< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > pattern< / span > < span class = "o" > =< / span > < span class = "n" > p< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > v< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > failures< / span > < span class = "o" > =< / span > < span class = "p" > []< / span > < span class = "k" > if< / span > < span class = "n" > failures< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "n" > failures< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< div class = "doc doc-children" >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-class" >
< h2 id = "preserves.schema.SchemaObject" class = "doc doc-heading" >
< code > SchemaObject< / code >
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Base class for classes representing grammatical productions in a schema: instances of
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > represent schema < em > definitions< / em > . This is an
abstract class, as are its subclasses < a class = "autorefs autorefs-internal" href = "#preserves.schema.Enumeration" > Enumeration< / a > and
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Definition" > Definition< / a > . It is subclasses of < em > those< / em > subclasses,
automatically produced during schema loading, that are actually instantiated.< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > mro< / span > < span class = "p" > ()[< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Enumeration< / span > < span class = "s1" > ' > , < class ' < / span > < span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > SchemaObject< / span > < span class = "s1" > ' > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "o" > .< / span > < span class = "n" > mro< / span > < span class = "p" > ()[< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > _ALL< / span > < span class = "s1" > ' > , < class ' < / span > < span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Definition< / span > < span class = "s1" > ' > , < class ' < / span > < span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > SchemaObject< / span > < span class = "s1" > ' > ]< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > StreamListenerError< / span > < span class = "o" > .< / span > < span class = "n" > mro< / span > < span class = "p" > ()[< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Definition< / span > < span class = "s1" > ' > , < class ' < / span > < span class = "n" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > SchemaObject< / span > < span class = "s1" > ' > ]< / span >
< / code > < / pre > < / div >
< p > Illustrating the class attributes on < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a >
subclasses:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > ROOTNS< / span > < span class = "ow" > is< / span > < span class = "n" > bundle< / span >
< span class = "kc" > True< / span >
< span class = "o" > > > > < / span > < span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > stringify< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > SCHEMA< / span > < span class = "p" > ,< / span > < span class = "n" > indent< / span > < span class = "o" > =< / span > < span class = "mi" > 2< / span > < span class = "p" > ))< / span >
< span class = "o" > < < / span > < span class = "ow" > or< / span > < span class = "p" > [< / span >
< span class = "p" > [< / span >
< span class = "s2" > " bytes" < / span >
< span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "nb" > bytes< / span > < span class = "o" > > < / span >
< span class = "p" > ]< / span >
< span class = "p" > [< / span >
< span class = "s2" > " lines" < / span >
< span class = "o" > < < / span > < span class = "n" > ref< / span > < span class = "p" > []< / span > < span class = "n" > LineMode< / span > < span class = "o" > > < / span >
< span class = "p" > ]< / span >
< span class = "p" > [< / span >
< span class = "s2" > " packet" < / span >
< span class = "o" > < < / span > < span class = "n" > rec< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "n" > packet< / span > < span class = "o" > > < / span > < span class = "o" > < < / span > < span class = "nb" > tuple< / span > < span class = "p" > [< / span > < span class = "o" > < < / span > < span class = "n" > named< / span > < span class = "n" > size< / span > < span class = "o" > < < / span > < span class = "n" > atom< / span > < span class = "n" > SignedInteger< / span > < span class = "o" > > > < / span > < span class = "p" > ]< / span > < span class = "o" > > > < / span >
< span class = "p" > ]< / span >
< span class = "p" > [< / span >
< span class = "s2" > " object" < / span >
< span class = "o" > < < / span > < span class = "n" > rec< / span > < span class = "o" > < < / span > < span class = "n" > lit< / span > < span class = "nb" > object< / span > < span class = "o" > > < / span > < span class = "o" > < < / span > < span class = "nb" > tuple< / span > < span class = "p" > [< / span > < span class = "o" > < < / span > < span class = "n" > named< / span > < span class = "n" > description< / span > < span class = "nb" > any< / span > < span class = "o" > > < / span > < span class = "p" > ]< / span > < span class = "o" > > > < / span >
< span class = "p" > ]< / span >
< span class = "p" > ]< / span > < span class = "o" > > < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > MODULE_PATH< / span >
< span class = "p" > (< / span > < span class = "c1" > #stream,)< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > NAME< / span >
< span class = "c1" > #Mode< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span >
< span class = "kc" > True< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > Mode< / span > < span class = "o" > .< / span > < span class = "n" > packet< / span > < span class = "o" > .< / span > < span class = "n" > VARIANT< / span >
< span class = "c1" > #packet< / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< div class = "doc doc-children" >
2023-03-17 14:24:53 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.SchemaObject.MODULE_PATH" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > MODULE_PATH< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > A sequence (tuple) of < a class = "autorefs autorefs-internal" href = "../values/#preserves.values.Symbol" > Symbol< / a > s naming the path from the root
to the schema module containing this definition.< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.SchemaObject.NAME" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > NAME< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > A < a class = "autorefs autorefs-internal" href = "../values/#preserves.values.Symbol" > Symbol< / a > naming this definition within its module.< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.SchemaObject.ROOTNS" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > ROOTNS< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > A < a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > that is the top-level environment for all
bundles included in the < a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler" > Compiler< / a > run that produced this
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > .< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.SchemaObject.SCHEMA" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > SCHEMA< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > A < code > Value< / code > conforming to schema < code > meta.Definition< / code > (and thus often to < code > meta.Pattern< / code >
etc.), interpreted by the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > machinery to drive
parsing, unparsing and so forth.< / p >
< / div >
< / div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "preserves.schema.SchemaObject.VARIANT" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > VARIANT< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-class-attribute" > < code > class-attribute< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
< p > < code > None< / code > for < a class = "autorefs autorefs-internal" href = "#preserves.schema.Definition" > Definition< / a > s (such as
< code > bundle.stream.StreamListenerError< / code > above) and for overall
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Enumeration" > Enumeration< / a > s (such as < code > bundle.stream.Mode< / code > ), or a
< a class = "autorefs autorefs-internal" href = "../values/#preserves.values.Symbol" > Symbol< / a > for variant definitions < em > contained within< / em > an enumeration
(such as < code > bundle.stream.Mode.packet< / code > ).< / p >
< / div >
< / div >
2023-03-17 09:22:31 +00:00
< div class = "doc doc-object doc-function" >
< h3 id = "preserves.schema.SchemaObject.__preserve__" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > __preserve__< / span > < span class = "p" > ()< / span > < / code >
< / h3 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Called by < a class = "autorefs autorefs-internal" href = "../values/#preserves.values.preserve" > preserves.values.preserve< / a > : < em > unparses< / em > the information represented by
this instance, using its schema definition, to produce a Preserves < code > Value< / code > .< / p >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 538< / span >
< span class = "normal" > 539< / span >
< span class = "normal" > 540< / span >
< span class = "normal" > 541< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > __preserve__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Called by [preserves.values.preserve][]: *unparses* the information represented by< / span >
< span class = "sd" > this instance, using its schema definition, to produce a Preserves `Value`." " " < / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > raise< / span > < span class = "ne" > NotImplementedError< / span > < span class = "p" > (< / span > < span class = "s1" > ' Subclass responsibility' < / span > < span class = "p" > )< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "preserves.schema.SchemaObject.decode" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > v< / span > < span class = "p" > )< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-classmethod" > < code > classmethod< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Parses < code > v< / code > using the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.SCHEMA" > SCHEMA< / a > , returning a
(sub)instance of < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > or raising
< a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaDecodeFailed" > SchemaDecodeFailed< / a > .< / p >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 444< / span >
< span class = "normal" > 445< / span >
< span class = "normal" > 446< / span >
< span class = "normal" > 447< / span >
< span class = "normal" > 448< / span >
< span class = "normal" > 449< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "nd" > @classmethod< / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > def< / span > < span class = "nf" > decode< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ):< / span >
2023-03-17 14:24:53 +00:00
< span class = "w" > < / span > < span class = "sd" > " " " Parses `v` using the [SCHEMA][preserves.schema.SchemaObject.SCHEMA], returning a< / span >
< span class = "sd" > (sub)instance of [SchemaObject][preserves.schema.SchemaObject] or raising< / span >
< span class = "sd" > [SchemaDecodeFailed][preserves.schema.SchemaDecodeFailed]." " " < / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > raise< / span > < span class = "ne" > NotImplementedError< / span > < span class = "p" > (< / span > < span class = "s1" > ' Subclass responsibility' < / span > < span class = "p" > )< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "preserves.schema.SchemaObject.try_decode" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > try_decode< / span > < span class = "p" > (< / span > < span class = "n" > v< / span > < span class = "p" > )< / span > < / code >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-classmethod" > < code > classmethod< / code > < / small >
< / span >
< / h3 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Parses < code > v< / code > using the < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject.SCHEMA" > SCHEMA< / a > , returning a
(sub)instance of < a class = "autorefs autorefs-internal" href = "#preserves.schema.SchemaObject" > SchemaObject< / a > or < code > None< / code > if parsing
failed.< / p >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 451< / span >
< span class = "normal" > 452< / span >
< span class = "normal" > 453< / span >
< span class = "normal" > 454< / span >
< span class = "normal" > 455< / span >
< span class = "normal" > 456< / span >
< span class = "normal" > 457< / span >
< span class = "normal" > 458< / span >
< span class = "normal" > 459< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "nd" > @classmethod< / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > def< / span > < span class = "nf" > try_decode< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ):< / span >
2023-03-17 14:24:53 +00:00
< span class = "w" > < / span > < span class = "sd" > " " " Parses `v` using the [SCHEMA][preserves.schema.SchemaObject.SCHEMA], returning a< / span >
< span class = "sd" > (sub)instance of [SchemaObject][preserves.schema.SchemaObject] or `None` if parsing< / span >
< span class = "sd" > failed." " " < / span >
2023-03-17 09:22:31 +00:00
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > cls< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > v< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "n" > SchemaDecodeFailed< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
2023-03-17 14:24:53 +00:00
< h2 id = "preserves.schema.extend" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > )< / span > < / code >
2023-03-17 09:22:31 +00:00
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > A decorator for function definitions. Useful for adding < em > behaviour< / em > to the classes
resulting from loading a schema module:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "nd" > @extend< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > )< / span >
< span class = "o" > ...< / span > < span class = "k" > def< / span > < span class = "nf" > what_am_i< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "o" > ...< / span > < span class = "k" > return< / span > < span class = "s1" > ' I am a LINEFEED linemode' < / span >
< span class = "o" > > > > < / span > < span class = "nd" > @extend< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > )< / span >
< span class = "o" > ...< / span > < span class = "k" > def< / span > < span class = "nf" > what_am_i< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "o" > ...< / span > < span class = "k" > return< / span > < span class = "s1" > ' I am a CARRIAGE-RETURN-PLUS-LINEFEED linemode' < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ()< / span >
< span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > lf< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > what_am_i< / span > < span class = "p" > ()< / span >
< span class = "s1" > ' I am a LINEFEED linemode' < / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > ()< / span >
< span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > ()< / span >
< span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > .< / span > < span class = "n" > stream< / span > < span class = "o" > .< / span > < span class = "n" > LineMode< / span > < span class = "o" > .< / span > < span class = "n" > crlf< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > what_am_i< / span > < span class = "p" > ()< / span >
< span class = "s1" > ' I am a CARRIAGE-RETURN-PLUS-LINEFEED linemode' < / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 977< / span >
< span class = "normal" > 978< / span >
< span class = "normal" > 979< / span >
< span class = "normal" > 980< / span >
< span class = "normal" > 981< / span >
< span class = "normal" > 982< / span >
< span class = "normal" > 983< / span >
< span class = "normal" > 984< / span >
< span class = "normal" > 985< / span >
< span class = "normal" > 986< / span >
< span class = "normal" > 987< / span >
< span class = "normal" > 988< / span >
< span class = "normal" > 989< / span >
< span class = "normal" > 990< / span >
< span class = "normal" > 991< / span >
< span class = "normal" > 992< / span >
< span class = "normal" > 993< / span >
< span class = "normal" > 994< / span >
< span class = "normal" > 995< / span >
< span class = "normal" > 996< / span >
< span class = "normal" > 997< / span >
< span class = "normal" > 998< / span >
< span class = "normal" > 999< / span >
< span class = "normal" > 1000< / span >
< span class = "normal" > 1001< / span >
< span class = "normal" > 1002< / span >
< span class = "normal" > 1003< / span >
< span class = "normal" > 1004< / span >
< span class = "normal" > 1005< / span >
< span class = "normal" > 1006< / span >
< span class = "normal" > 1007< / span >
< span class = "normal" > 1008< / span >
< span class = "normal" > 1009< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > extend< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " A decorator for function definitions. Useful for adding *behaviour* to the classes< / span >
< span class = "sd" > resulting from loading a schema module:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > > > > bundle = load_schema_file(' docs/syndicate-protocols-schema-bundle.bin' )< / span >
< span class = "sd" > > > > @extend(bundle.stream.LineMode.lf)< / span >
< span class = "sd" > ... def what_am_i(self):< / span >
< span class = "sd" > ... return ' I am a LINEFEED linemode' < / span >
< span class = "sd" > > > > @extend(bundle.stream.LineMode.crlf)< / span >
< span class = "sd" > ... def what_am_i(self):< / span >
< span class = "sd" > ... return ' I am a CARRIAGE-RETURN-PLUS-LINEFEED linemode' < / span >
< span class = "sd" > > > > bundle.stream.LineMode.lf()< / span >
< span class = "sd" > LineMode.lf()< / span >
< span class = "sd" > > > > bundle.stream.LineMode.lf().what_am_i()< / span >
< span class = "sd" > ' I am a LINEFEED linemode' < / span >
< span class = "sd" > > > > bundle.stream.LineMode.crlf()< / span >
< span class = "sd" > LineMode.crlf()< / span >
< span class = "sd" > > > > bundle.stream.LineMode.crlf().what_am_i()< / span >
< span class = "sd" > ' I am a CARRIAGE-RETURN-PLUS-LINEFEED linemode' < / span >
< span class = "sd" > ```< / span >
< span class = "sd" > " " " < / span >
< span class = "nd" > @wraps< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > extender< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ):< / span >
< span class = "nb" > setattr< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "p" > ,< / span > < span class = "n" > f< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > f< / span >
< span class = "k" > return< / span > < span class = "n" > extender< / span >
2023-03-17 09:22:31 +00:00
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
2023-03-17 14:24:53 +00:00
< h2 id = "preserves.schema.load_schema_file" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span > < / code >
2023-03-17 09:22:31 +00:00
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Simple entry point to the compiler: creates a < a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler" > Compiler< / a > ,
calls < a class = "autorefs autorefs-internal" href = "#preserves.schema.Compiler.load" > load< / a > on it, and returns its < code > root< / code >
< a class = "autorefs autorefs-internal" href = "#preserves.schema.Namespace" > Namespace< / a > .< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "o" > > > > < / span > < span class = "n" > bundle< / span > < span class = "o" > =< / span > < span class = "n" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "s1" > ' docs/syndicate-protocols-schema-bundle.bin' < / span > < span class = "p" > )< / span >
< span class = "o" > > > > < / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > bundle< / span > < span class = "p" > )< / span >
< span class = "o" > < < / span > < span class = "k" > class< / span > < span class = "err" > ' < / span > < span class = "nc" > preserves< / span > < span class = "o" > .< / span > < span class = "n" > schema< / span > < span class = "o" > .< / span > < span class = "n" > Namespace< / span > < span class = "s1" > ' > < / span >
< / code > < / pre > < / div >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 960< / span >
< span class = "normal" > 961< / span >
< span class = "normal" > 962< / span >
< span class = "normal" > 963< / span >
< span class = "normal" > 964< / span >
< span class = "normal" > 965< / span >
< span class = "normal" > 966< / span >
< span class = "normal" > 967< / span >
< span class = "normal" > 968< / span >
< span class = "normal" > 969< / span >
< span class = "normal" > 970< / span >
< span class = "normal" > 971< / span >
< span class = "normal" > 972< / span >
< span class = "normal" > 973< / span >
< span class = "normal" > 974< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > load_schema_file< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Simple entry point to the compiler: creates a [Compiler][preserves.schema.Compiler],< / span >
< span class = "sd" > calls [load][preserves.schema.Compiler.load] on it, and returns its `root`< / span >
< span class = "sd" > [Namespace][preserves.schema.Namespace].< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > > > > bundle = load_schema_file(' docs/syndicate-protocols-schema-bundle.bin' )< / span >
< span class = "sd" > > > > type(bundle)< / span >
< span class = "sd" > < class ' preserves.schema.Namespace' > < / span >
< span class = "sd" > ```< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > c< / span > < span class = "o" > =< / span > < span class = "n" > Compiler< / span > < span class = "p" > ()< / span >
< span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > load< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > root< / span >
2023-03-17 09:22:31 +00:00
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
2023-03-17 14:24:53 +00:00
< h2 id = "preserves.schema.safeattrname" class = "doc doc-heading" >
< code class = "highlight language-python" > < span class = "n" > safeattrname< / span > < span class = "p" > (< / span > < span class = "n" > k< / span > < span class = "p" > )< / span > < / code >
2023-03-17 09:22:31 +00:00
< / h2 >
< div class = "doc doc-contents " >
2023-03-17 14:24:53 +00:00
< p > Escapes Python keywords by prepending < code > _< / code > ; passes all other strings through.< / p >
2023-03-17 09:22:31 +00:00
< details class = "quote" >
< summary > Source code in < code > preserves/schema.py< / code > < / summary >
2023-03-17 14:24:53 +00:00
< div class = "highlight" > < table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > < span > < / span > < span class = "normal" > 613< / span >
< span class = "normal" > 614< / span >
< span class = "normal" > 615< / span > < / pre > < / div > < / td > < td class = "code" > < div > < pre > < span > < / span > < code > < span class = "k" > def< / span > < span class = "nf" > safeattrname< / span > < span class = "p" > (< / span > < span class = "n" > k< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Escapes Python keywords by prepending `_`; passes all other strings through." " " < / span >
< span class = "k" > return< / span > < span class = "n" > k< / span > < span class = "o" > +< / span > < span class = "s1" > ' _' < / span > < span class = "k" > if< / span > < span class = "n" > keyword< / span > < span class = "o" > .< / span > < span class = "n" > iskeyword< / span > < span class = "p" > (< / span > < span class = "n" > k< / span > < span class = "p" > )< / span > < span class = "k" > else< / span > < span class = "n" > k< / span >
2023-03-17 09:22:31 +00:00
< / code > < / pre > < / div > < / td > < / tr > < / table > < / div >
< / details >
< / div >
< / div >
< / div >
< / div >
< / div >
< hr >
< div class = "md-source-file" >
< small >
Last update:
< span class = "git-revision-date-localized-plugin git-revision-date-localized-plugin-date" > March 16, 2023< / span >
< br >
Created:
< span class = "git-revision-date-localized-plugin git-revision-date-localized-plugin-date" > March 16, 2023< / span >
< / small >
< / div >
< / article >
< / div >
< / div >
< / main >
< footer class = "md-footer" >
< div class = "md-footer-meta md-typeset" >
< div class = "md-footer-meta__inner md-grid" >
< div class = "md-copyright" >
Made with
< a href = "https://squidfunk.github.io/mkdocs-material/" target = "_blank" rel = "noopener" >
Material for MkDocs
< / a >
< / div >
< / div >
< / div >
< / footer >
< / div >
< div class = "md-dialog" data-md-component = "dialog" >
< div class = "md-dialog__inner md-typeset" > < / div >
< / div >
< script id = "__config" type = "application/json" > { "base" : ".." , "features" : [ ] , "search" : "../assets/javascripts/workers/search.208ed371.min.js" , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } , "version" : { "provider" : "mike" } } < / script >
< script src = "../assets/javascripts/bundle.efa0ade1.min.js" > < / script >
< / body >
< / html >