You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2025/03/12 07:02:28 UTC

(avro) branch asf-site updated: Copy the docs for Python from current/++version++ to 1.12.0

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 3b1e97e8e Copy the docs for Python from current/++version++ to 1.12.0
3b1e97e8e is described below

commit 3b1e97e8ed01eca03820d08965cf4811426bb51b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Wed Mar 12 09:01:09 2025 +0200

    Copy the docs for Python from current/++version++ to 1.12.0
    
    There might be some small differences. If this is a problem then we will
    have to rebuild them from 1.12.0 tag
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
 .../1.12.0/api/py/html/_sources/automodule.rst.txt |   54 +
 docs/1.12.0/api/py/html/_sources/index.rst.txt     |   31 +
 docs/1.12.0/api/py/html/_sources/intro.rst.txt     |   29 +
 docs/1.12.0/api/py/html/_static/alabaster.css      |  663 +++++
 docs/1.12.0/api/py/html/_static/basic.css          |  906 +++++++
 docs/1.12.0/api/py/html/_static/custom.css         |    1 +
 docs/1.12.0/api/py/html/_static/doctools.js        |  149 ++
 .../api/py/html/_static/documentation_options.js   |   13 +
 docs/1.12.0/api/py/html/_static/file.png           |  Bin 0 -> 286 bytes
 docs/1.12.0/api/py/html/_static/github-banner.svg  |    5 +
 docs/1.12.0/api/py/html/_static/language_data.js   |  192 ++
 docs/1.12.0/api/py/html/_static/minus.png          |  Bin 0 -> 90 bytes
 docs/1.12.0/api/py/html/_static/plus.png           |  Bin 0 -> 90 bytes
 docs/1.12.0/api/py/html/_static/pygments.css       |   84 +
 docs/1.12.0/api/py/html/_static/searchtools.js     |  635 +++++
 .../1.12.0/api/py/html/_static/sphinx_highlight.js |  154 ++
 docs/1.12.0/api/py/html/automodule.html            | 2634 ++++++++++++++++++++
 docs/1.12.0/api/py/html/genindex.html              | 1105 ++++++++
 docs/1.12.0/api/py/html/index.html                 |  551 ++++
 docs/1.12.0/api/py/html/intro.html                 |  215 ++
 docs/1.12.0/api/py/html/objects.inv                |  Bin 0 -> 2069 bytes
 docs/1.12.0/api/py/html/py-modindex.html           |  305 +++
 docs/1.12.0/api/py/html/search.html                |  218 ++
 docs/1.12.0/api/py/html/searchindex.js             |    1 +
 24 files changed, 7945 insertions(+)

diff --git a/docs/1.12.0/api/py/html/_sources/automodule.rst.txt b/docs/1.12.0/api/py/html/_sources/automodule.rst.txt
new file mode 100644
index 000000000..bfd53e792
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_sources/automodule.rst.txt
@@ -0,0 +1,54 @@
+.. Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+   
+       https://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+.. automodule:: avro
+   :members:
+.. automodule:: avro.compatibility
+   :members:
+.. automodule:: avro.datafile
+   :members:
+.. automodule:: avro.ipc
+   :members:
+.. automodule:: avro.protocol
+   :members:
+.. automodule:: avro.codecs
+   :members:
+.. automodule:: avro.constants
+   :members:
+.. automodule:: avro.io
+   :members:
+.. automodule:: avro.tether
+   :members:
+.. automodule:: avro.tether.tether_task_runner
+   :members:
+.. automodule:: avro.tether.util
+   :members:
+.. automodule:: avro.tether.tether_task
+   :members:
+.. automodule:: avro.utils
+   :members:
+.. automodule:: avro.errors
+   :members:
+.. automodule:: avro.name
+   :members:
+.. automodule:: avro.tool
+   :members:
+.. automodule:: avro.timezones
+   :members:
+.. automodule:: avro.__main__
+   :members:
+.. automodule:: avro.schema
+   :members:
diff --git a/docs/1.12.0/api/py/html/_sources/index.rst.txt b/docs/1.12.0/api/py/html/_sources/index.rst.txt
new file mode 100644
index 000000000..ec66916da
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_sources/index.rst.txt
@@ -0,0 +1,31 @@
+.. Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+   
+       https://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
+
+   intro
+   automodule
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/1.12.0/api/py/html/_sources/intro.rst.txt b/docs/1.12.0/api/py/html/_sources/intro.rst.txt
new file mode 100644
index 000000000..ca480a15b
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_sources/intro.rst.txt
@@ -0,0 +1,29 @@
+.. Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+   
+       https://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Welcome to Avro's Python documentation!
+=======================================
+
+Avro is a data serialization system. See `avro.apache.org <https://avro.apache.org/docs/current/>`_ for background information.
+
+Avro Python is a Python library that implements parts of the `Avro Specification <https://avro.apache.org/docs/current/specification/>`_.
+
+The library includes the following functionality:
+
+* Assembling schemas programmatically.
+* A schema parser, which can parse Avro schema (written in JSON) into a Schema object.
+* Binary encoders and decoders to encode data into Avro format and decode it back using primitive functions.
+* Streams for storing and reading data, which Encoders and Decoders use.
+* Support for Avro DataFile.
diff --git a/docs/1.12.0/api/py/html/_static/alabaster.css b/docs/1.12.0/api/py/html/_static/alabaster.css
new file mode 100644
index 000000000..7e75bf8f9
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/alabaster.css
@@ -0,0 +1,663 @@
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: Georgia, serif;
+    font-size: 17px;
+    background-color: #fff;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+
+div.document {
+    width: 940px;
+    margin: 30px auto 0 auto;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 220px;
+}
+
+div.sphinxsidebar {
+    width: 220px;
+    font-size: 14px;
+    line-height: 1.5;
+}
+
+hr {
+    border: 1px solid #B1B4B6;
+}
+
+div.body {
+    background-color: #fff;
+    color: #3E4349;
+    padding: 0 30px 0 30px;
+}
+
+div.body > .section {
+    text-align: left;
+}
+
+div.footer {
+    width: 940px;
+    margin: 20px auto 30px auto;
+    font-size: 14px;
+    color: #888;
+    text-align: right;
+}
+
+div.footer a {
+    color: #888;
+}
+
+p.caption {
+    font-family: inherit;
+    font-size: inherit;
+}
+
+
+div.relations {
+    display: none;
+}
+
+
+div.sphinxsidebar {
+    max-height: 100%;
+    overflow-y: auto;
+}
+
+div.sphinxsidebar a {
+    color: #444;
+    text-decoration: none;
+    border-bottom: 1px dotted #999;
+}
+
+div.sphinxsidebar a:hover {
+    border-bottom: 1px solid #999;
+}
+
+div.sphinxsidebarwrapper {
+    padding: 18px 10px;
+}
+
+div.sphinxsidebarwrapper p.logo {
+    padding: 0;
+    margin: -10px 0 0 0px;
+    text-align: center;
+}
+
+div.sphinxsidebarwrapper h1.logo {
+    margin-top: -10px;
+    text-align: center;
+    margin-bottom: 5px;
+    text-align: left;
+}
+
+div.sphinxsidebarwrapper h1.logo-name {
+    margin-top: 0px;
+}
+
+div.sphinxsidebarwrapper p.blurb {
+    margin-top: 0;
+    font-style: normal;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+    font-family: Georgia, serif;
+    color: #444;
+    font-size: 24px;
+    font-weight: normal;
+    margin: 0 0 5px 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h4 {
+    font-size: 20px;
+}
+
+div.sphinxsidebar h3 a {
+    color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+    border: none;
+}
+
+div.sphinxsidebar p {
+    color: #555;
+    margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px 0;
+    padding: 0;
+    color: #000;
+}
+
+div.sphinxsidebar ul li.toctree-l1 > a {
+    font-size: 120%;
+}
+
+div.sphinxsidebar ul li.toctree-l2 > a {
+    font-size: 110%;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #CCC;
+    font-family: Georgia, serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox {
+    margin: 1em 0;
+}
+
+div.sphinxsidebar .search > div {
+    display: table-cell;
+}
+
+div.sphinxsidebar hr {
+    border: none;
+    height: 1px;
+    color: #AAA;
+    background: #AAA;
+
+    text-align: left;
+    margin-left: 0;
+    width: 50%;
+}
+
+div.sphinxsidebar .badge {
+    border-bottom: none;
+}
+
+div.sphinxsidebar .badge:hover {
+    border-bottom: none;
+}
+
+/* To address an issue with donation coming after search */
+div.sphinxsidebar h3.donation {
+    margin-top: 10px;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #004B6B;
+    text-decoration: underline;
+}
+
+a:hover {
+    color: #6D4100;
+    text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    margin: 30px 0px 10px 0px;
+    padding: 0;
+}
+
+div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #DDD;
+    padding: 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    color: #444;
+    background: #EAEAEA;
+}
+
+div.body p, div.body dd, div.body li {
+    line-height: 1.4em;
+}
+
+div.admonition {
+    margin: 20px 0px;
+    padding: 10px 30px;
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fafafa;
+}
+
+div.admonition p.admonition-title {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    font-size: 24px;
+    margin: 0 0 10px 0;
+    padding: 0;
+    line-height: 1;
+}
+
+div.admonition p.last {
+    margin-bottom: 0;
+}
+
+dt:target, .highlight {
+    background: #FAF3E8;
+}
+
+div.warning {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.danger {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.error {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.caution {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.attention {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.important {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.note {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.tip {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.hint {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.seealso {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.topic {
+    background-color: #EEE;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre, tt, code {
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+}
+
+.hll {
+    background-color: #FFC;
+    margin: 0 -12px;
+    padding: 0 12px;
+    display: block;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname, code.descname, code.descclassname {
+    font-size: 0.95em;
+}
+
+tt.descname, code.descname {
+    padding-right: 0.08em;
+}
+
+img.screenshot {
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils {
+    border: 1px solid #888;
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils td, table.docutils th {
+    border: 1px solid #888;
+    padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+    border: none;
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+table.footnote {
+    margin: 15px 0;
+    width: 100%;
+    border: 1px solid #EEE;
+    background: #FDFDFD;
+    font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+    margin-top: -15px;
+    border-top: none;
+}
+
+table.field-list th {
+    padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+    padding: 0;
+}
+
+table.field-list p {
+    margin-bottom: 0.8em;
+}
+
+/* Cloned from
+ * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
+ */
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+table.footnote td.label {
+    width: .1px;
+    padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+    padding: 0.3em 0.5em;
+}
+
+dl {
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0;
+    padding: 0;
+}
+
+dl dd {
+    margin-left: 30px;
+}
+
+blockquote {
+    margin: 0 0 0 30px;
+    padding: 0;
+}
+
+ul, ol {
+    /* Matches the 30px from the narrow-screen "li > ul" selector below */
+    margin: 10px 0 10px 30px;
+    padding: 0;
+}
+
+pre {
+    background: unset;
+    padding: 7px 30px;
+    margin: 15px 0px;
+    line-height: 1.3em;
+}
+
+div.viewcode-block:target {
+    background: #ffd;
+}
+
+dl pre, blockquote pre, li pre {
+    margin-left: 0;
+    padding-left: 30px;
+}
+
+tt, code {
+    background-color: #ecf0f3;
+    color: #222;
+    /* padding: 1px 2px; */
+}
+
+tt.xref, code.xref, a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fff;
+}
+
+a.reference {
+    text-decoration: none;
+    border-bottom: 1px dotted #004B6B;
+}
+
+a.reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+/* Don't put an underline on images */
+a.image-reference, a.image-reference:hover {
+    border-bottom: none;
+}
+
+a.footnote-reference {
+    text-decoration: none;
+    font-size: 0.7em;
+    vertical-align: top;
+    border-bottom: 1px dotted #004B6B;
+}
+
+a.footnote-reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+a:hover tt, a:hover code {
+    background: #EEE;
+}
+
+@media screen and (max-width: 940px) {
+
+    body {
+        margin: 0;
+        padding: 20px 30px;
+    }
+
+    div.documentwrapper {
+        float: none;
+        background: #fff;
+        margin-left: 0;
+        margin-top: 0;
+        margin-right: 0;
+        margin-bottom: 0;
+    }
+
+    div.sphinxsidebar {
+        display: block;
+        float: none;
+        width: unset;
+        margin: 50px -30px -20px -30px;
+        padding: 10px 20px;
+        background: #333;
+        color: #FFF;
+    }
+
+    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
+    div.sphinxsidebar h3 a {
+        color: #fff;
+    }
+
+    div.sphinxsidebar a {
+        color: #AAA;
+    }
+
+    div.sphinxsidebar p.logo {
+        display: none;
+    }
+
+    div.document {
+        width: 100%;
+        margin: 0;
+    }
+
+    div.footer {
+        display: none;
+    }
+
+    div.bodywrapper {
+        margin: 0;
+    }
+
+    div.body {
+        min-height: 0;
+        min-width: auto; /* fixes width on small screens, breaks .hll */
+        padding: 0;
+    }
+    
+    .hll {
+        /* "fixes" the breakage */
+        width: max-content;
+    }
+
+    .rtd_doc_footer {
+        display: none;
+    }
+
+    .document {
+        width: auto;
+    }
+
+    .footer {
+        width: auto;
+    }
+
+    .github {
+        display: none;
+    }
+
+    ul {
+        margin-left: 0;
+    }
+
+    li > ul {
+       /* Matches the 30px from the "ul, ol" selector above */
+        margin-left: 30px;
+    }
+}
+
+
+/* misc. */
+
+.revsys-inline {
+    display: none!important;
+}
+
+/* Hide ugly table cell borders in ..bibliography:: directive output */
+table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
+  border: none;
+  /* Below needed in some edge cases; if not applied, bottom shadows appear */
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+
+/* relbar */
+
+.related {
+    line-height: 30px;
+    width: 100%;
+    font-size: 0.9rem;
+}
+
+.related.top {
+    border-bottom: 1px solid #EEE;
+    margin-bottom: 20px;
+}
+
+.related.bottom {
+    border-top: 1px solid #EEE;
+}
+
+.related ul {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+.related li {
+    display: inline;
+}
+
+nav#rellinks {
+    float: right;
+}
+
+nav#rellinks li+li:before {
+    content: "|";
+}
+
+nav#breadcrumbs li+li:before {
+    content: "\00BB";
+}
+
+/* Hide certain items when printing */
+@media print {
+    div.related {
+        display: none;
+    }
+}
+
+img.github  {
+    position: absolute;
+    top: 0;
+    border: 0;
+    right: 0;
+}
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/_static/basic.css b/docs/1.12.0/api/py/html/_static/basic.css
new file mode 100644
index 000000000..0028826d4
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * Sphinx stylesheet -- basic theme.
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin-top: 10px;
+}
+
+ul.search li {
+    padding: 5px 0;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: inherit;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a:visited {
+    color: #551A8B;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+nav.contents,
+aside.topic,
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+aside.footnote > span,
+div.citation > span {
+    float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+  padding-right: 0.5em;
+}
+aside.footnote > p {
+  margin-left: 2em;
+}
+div.citation > p {
+  margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+    margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+.sig dd {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.sig dl {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/_static/custom.css b/docs/1.12.0/api/py/html/_static/custom.css
new file mode 100644
index 000000000..2a924f1d6
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/custom.css
@@ -0,0 +1 @@
+/* This file intentionally left blank. */
diff --git a/docs/1.12.0/api/py/html/_static/doctools.js b/docs/1.12.0/api/py/html/_static/doctools.js
new file mode 100644
index 000000000..0398ebb9f
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/doctools.js
@@ -0,0 +1,149 @@
+/*
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ */
+"use strict";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+  "TEXTAREA",
+  "INPUT",
+  "SELECT",
+  "BUTTON",
+]);
+
+const _ready = (callback) => {
+  if (document.readyState !== "loading") {
+    callback();
+  } else {
+    document.addEventListener("DOMContentLoaded", callback);
+  }
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+  init: () => {
+    Documentation.initDomainIndexTable();
+    Documentation.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS: {},
+  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+  LOCALE: "unknown",
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext: (string) => {
+    const translated = Documentation.TRANSLATIONS[string];
+    switch (typeof translated) {
+      case "undefined":
+        return string; // no translation
+      case "string":
+        return translated; // translation exists
+      default:
+        return translated[0]; // (singular, plural) translation tuple exists
+    }
+  },
+
+  ngettext: (singular, plural, n) => {
+    const translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated !== "undefined")
+      return translated[Documentation.PLURAL_EXPR(n)];
+    return n === 1 ? singular : plural;
+  },
+
+  addTranslations: (catalog) => {
+    Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+    Documentation.PLURAL_EXPR = new Function(
+      "n",
+      `return (${catalog.plural_expr})`
+    );
+    Documentation.LOCALE = catalog.locale;
+  },
+
+  /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar: () => {
+    document.querySelectorAll("input[name=q]")[0]?.focus();
+  },
+
+  /**
+   * Initialise the domain index toggle buttons
+   */
+  initDomainIndexTable: () => {
+    const toggler = (el) => {
+      const idNumber = el.id.substr(7);
+      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+      if (el.src.substr(-9) === "minus.png") {
+        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+        toggledRows.forEach((el) => (el.style.display = "none"));
+      } else {
+        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+        toggledRows.forEach((el) => (el.style.display = ""));
+      }
+    };
+
+    const togglerElements = document.querySelectorAll("img.toggler");
+    togglerElements.forEach((el) =>
+      el.addEventListener("click", (event) => toggler(event.currentTarget))
+    );
+    togglerElements.forEach((el) => (el.style.display = ""));
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+  },
+
+  initOnKeyListeners: () => {
+    // only install a listener if it is really needed
+    if (
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+    )
+      return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+      if (!event.shiftKey) {
+        switch (event.key) {
+          case "ArrowLeft":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const prevLink = document.querySelector('link[rel="prev"]');
+            if (prevLink && prevLink.href) {
+              window.location.href = prevLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "ArrowRight":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const nextLink = document.querySelector('link[rel="next"]');
+            if (nextLink && nextLink.href) {
+              window.location.href = nextLink.href;
+              event.preventDefault();
+            }
+            break;
+        }
+      }
+
+      // some keyboard layouts may need Shift to get /
+      switch (event.key) {
+        case "/":
+          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+          Documentation.focusSearchBar();
+          event.preventDefault();
+      }
+    });
+  },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/docs/1.12.0/api/py/html/_static/documentation_options.js b/docs/1.12.0/api/py/html/_static/documentation_options.js
new file mode 100644
index 000000000..c737f2a62
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/documentation_options.js
@@ -0,0 +1,13 @@
+const DOCUMENTATION_OPTIONS = {
+    VERSION: '1.12.0',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/_static/file.png b/docs/1.12.0/api/py/html/_static/file.png
new file mode 100644
index 000000000..a858a410e
Binary files /dev/null and b/docs/1.12.0/api/py/html/_static/file.png differ
diff --git a/docs/1.12.0/api/py/html/_static/github-banner.svg b/docs/1.12.0/api/py/html/_static/github-banner.svg
new file mode 100644
index 000000000..c47d9dc0c
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/github-banner.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 250 250" fill="#fff">
+    <path d="M0 0l115 115h15l12 27 108 108V0z" fill="#151513"/>
+    <path d="M128 109c-15-9-9-19-9-19 3-7 2-11 2-11-1-7 3-2 3-2 4 5 2 11 2 11-3 10 5 15 9 16"/>
+    <path d="M115 115s4 2 5 0l14-14c3-2 6-3 8-3-8-11-15-24 2-41 5-5 10-7 16-7 1-2 3-7 12-11 0 0 5 3 7 16 4 2 8 5 12 9s7 8 9 12c14 3 17 7 17 7-4 8-9 11-11 11 0 6-2 11-7 16-16 16-30 10-41 2 0 3-1 7-5 11l-12 11c-1 1 1 5 1 5z"/>
+</svg>
diff --git a/docs/1.12.0/api/py/html/_static/language_data.js b/docs/1.12.0/api/py/html/_static/language_data.js
new file mode 100644
index 000000000..c7fe6c6fa
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/language_data.js
@@ -0,0 +1,192 @@
+/*
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ */
+
+var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
+
+
+/* Non-minified version is copied as a separate JS file, if available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
diff --git a/docs/1.12.0/api/py/html/_static/minus.png b/docs/1.12.0/api/py/html/_static/minus.png
new file mode 100644
index 000000000..d96755fda
Binary files /dev/null and b/docs/1.12.0/api/py/html/_static/minus.png differ
diff --git a/docs/1.12.0/api/py/html/_static/plus.png b/docs/1.12.0/api/py/html/_static/plus.png
new file mode 100644
index 000000000..7107cec93
Binary files /dev/null and b/docs/1.12.0/api/py/html/_static/plus.png differ
diff --git a/docs/1.12.0/api/py/html/_static/pygments.css b/docs/1.12.0/api/py/html/_static/pygments.css
new file mode 100644
index 000000000..9392ddcb4
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/pygments.css
@@ -0,0 +1,84 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #8F5902; font-style: italic } /* Comment */
+.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */
+.highlight .g { color: #000 } /* Generic */
+.highlight .k { color: #004461; font-weight: bold } /* Keyword */
+.highlight .l { color: #000 } /* Literal */
+.highlight .n { color: #000 } /* Name */
+.highlight .o { color: #582800 } /* Operator */
+.highlight .x { color: #000 } /* Other */
+.highlight .p { color: #000; font-weight: bold } /* Punctuation */
+.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #8F5902 } /* Comment.Preproc */
+.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A40000 } /* Generic.Deleted */
+.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */
+.highlight .ges { color: #000 } /* Generic.EmphStrong */
+.highlight .gr { color: #EF2929 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888 } /* Generic.Output */
+.highlight .gp { color: #745334 } /* Generic.Prompt */
+.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */
+.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
+.highlight .ld { color: #000 } /* Literal.Date */
+.highlight .m { color: #900 } /* Literal.Number */
+.highlight .s { color: #4E9A06 } /* Literal.String */
+.highlight .na { color: #C4A000 } /* Name.Attribute */
+.highlight .nb { color: #004461 } /* Name.Builtin */
+.highlight .nc { color: #000 } /* Name.Class */
+.highlight .no { color: #000 } /* Name.Constant */
+.highlight .nd { color: #888 } /* Name.Decorator */
+.highlight .ni { color: #CE5C00 } /* Name.Entity */
+.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #000 } /* Name.Function */
+.highlight .nl { color: #F57900 } /* Name.Label */
+.highlight .nn { color: #000 } /* Name.Namespace */
+.highlight .nx { color: #000 } /* Name.Other */
+.highlight .py { color: #000 } /* Name.Property */
+.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #000 } /* Name.Variable */
+.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
+.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */
+.highlight .w { color: #F8F8F8 } /* Text.Whitespace */
+.highlight .mb { color: #900 } /* Literal.Number.Bin */
+.highlight .mf { color: #900 } /* Literal.Number.Float */
+.highlight .mh { color: #900 } /* Literal.Number.Hex */
+.highlight .mi { color: #900 } /* Literal.Number.Integer */
+.highlight .mo { color: #900 } /* Literal.Number.Oct */
+.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */
+.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */
+.highlight .sc { color: #4E9A06 } /* Literal.String.Char */
+.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */
+.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */
+.highlight .se { color: #4E9A06 } /* Literal.String.Escape */
+.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */
+.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */
+.highlight .sx { color: #4E9A06 } /* Literal.String.Other */
+.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */
+.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */
+.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */
+.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #000 } /* Name.Function.Magic */
+.highlight .vc { color: #000 } /* Name.Variable.Class */
+.highlight .vg { color: #000 } /* Name.Variable.Global */
+.highlight .vi { color: #000 } /* Name.Variable.Instance */
+.highlight .vm { color: #000 } /* Name.Variable.Magic */
+.highlight .il { color: #900 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/_static/searchtools.js b/docs/1.12.0/api/py/html/_static/searchtools.js
new file mode 100644
index 000000000..91f4be57f
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/searchtools.js
@@ -0,0 +1,635 @@
+/*
+ * Sphinx JavaScript utilities for the full-text search.
+ */
+"use strict";
+
+/**
+ * Simple result scoring code.
+ */
+if (typeof Scorer === "undefined") {
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [docname, title, anchor, descr, score, filename]
+    // and returns the new score.
+    /*
+    score: result => {
+      const [docname, title, anchor, descr, score, filename, kind] = result
+      return score
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {
+      0: 15, // used to be importantResults
+      1: 5, // used to be objectResults
+      2: -5, // used to be unimportantResults
+    },
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2,
+  };
+}
+
+// Global search result kind enum, used by themes to style search results.
+class SearchResultKind {
+    static get index() { return  "index"; }
+    static get object() { return "object"; }
+    static get text() { return "text"; }
+    static get title() { return "title"; }
+}
+
+const _removeChildren = (element) => {
+  while (element && element.lastChild) element.removeChild(element.lastChild);
+};
+
+/**
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
+ */
+const _escapeRegExp = (string) =>
+  string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
+
+const _displayItem = (item, searchTerms, highlightTerms) => {
+  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+  const contentRoot = document.documentElement.dataset.content_root;
+
+  const [docName, title, anchor, descr, score, _filename, kind] = item;
+
+  let listItem = document.createElement("li");
+  // Add a class representing the item's type:
+  // can be used by a theme's CSS selector for styling
+  // See SearchResultKind for the class names.
+  listItem.classList.add(`kind-${kind}`);
+  let requestUrl;
+  let linkUrl;
+  if (docBuilder === "dirhtml") {
+    // dirhtml builder
+    let dirname = docName + "/";
+    if (dirname.match(/\/index\/$/))
+      dirname = dirname.substring(0, dirname.length - 6);
+    else if (dirname === "index/") dirname = "";
+    requestUrl = contentRoot + dirname;
+    linkUrl = requestUrl;
+  } else {
+    // normal html builders
+    requestUrl = contentRoot + docName + docFileSuffix;
+    linkUrl = docName + docLinkSuffix;
+  }
+  let linkEl = listItem.appendChild(document.createElement("a"));
+  linkEl.href = linkUrl + anchor;
+  linkEl.dataset.score = score;
+  linkEl.innerHTML = title;
+  if (descr) {
+    listItem.appendChild(document.createElement("span")).innerHTML =
+      " (" + descr + ")";
+    // highlight search terms in the description
+    if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
+      highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+  }
+  else if (showSearchSummary)
+    fetch(requestUrl)
+      .then((responseData) => responseData.text())
+      .then((data) => {
+        if (data)
+          listItem.appendChild(
+            Search.makeSearchSummary(data, searchTerms, anchor)
+          );
+        // highlight search terms in the summary
+        if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
+          highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+      });
+  Search.output.appendChild(listItem);
+};
+const _finishSearch = (resultCount) => {
+  Search.stopPulse();
+  Search.title.innerText = _("Search Results");
+  if (!resultCount)
+    Search.status.innerText = Documentation.gettext(
+      "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
+    );
+  else
+    Search.status.innerText = Documentation.ngettext(
+      "Search finished, found one page matching the search query.",
+      "Search finished, found ${resultCount} pages matching the search query.",
+      resultCount,
+    ).replace('${resultCount}', resultCount);
+};
+const _displayNextItem = (
+  results,
+  resultCount,
+  searchTerms,
+  highlightTerms,
+) => {
+  // results left, load the summary and display it
+  // this is intended to be dynamic (don't sub resultsCount)
+  if (results.length) {
+    _displayItem(results.pop(), searchTerms, highlightTerms);
+    setTimeout(
+      () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
+      5
+    );
+  }
+  // search finished, update title and status message
+  else _finishSearch(resultCount);
+};
+// Helper function used by query() to order search results.
+// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
+// Order the results by score (in opposite order of appearance, since the
+// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
+const _orderResultsByScoreThenName = (a, b) => {
+  const leftScore = a[4];
+  const rightScore = b[4];
+  if (leftScore === rightScore) {
+    // same score: sort alphabetically
+    const leftTitle = a[1].toLowerCase();
+    const rightTitle = b[1].toLowerCase();
+    if (leftTitle === rightTitle) return 0;
+    return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
+  }
+  return leftScore > rightScore ? 1 : -1;
+};
+
+/**
+ * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
+ * custom function per language.
+ *
+ * The regular expression works by splitting the string on consecutive characters
+ * that are not Unicode letters, numbers, underscores, or emoji characters.
+ * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
+ */
+if (typeof splitQuery === "undefined") {
+  var splitQuery = (query) => query
+      .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
+      .filter(term => term)  // remove remaining empty strings
+}
+
+/**
+ * Search Module
+ */
+const Search = {
+  _index: null,
+  _queued_query: null,
+  _pulse_status: -1,
+
+  htmlToText: (htmlString, anchor) => {
+    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+    for (const removalQuery of [".headerlink", "script", "style"]) {
+      htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
+    }
+    if (anchor) {
+      const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
+      if (anchorContent) return anchorContent.textContent;
+
+      console.warn(
+        `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
+      );
+    }
+
+    // if anchor not specified or not found, fall back to main content
+    const docContent = htmlElement.querySelector('[role="main"]');
+    if (docContent) return docContent.textContent;
+
+    console.warn(
+      "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
+    );
+    return "";
+  },
+
+  init: () => {
+    const query = new URLSearchParams(window.location.search).get("q");
+    document
+      .querySelectorAll('input[name="q"]')
+      .forEach((el) => (el.value = query));
+    if (query) Search.performSearch(query);
+  },
+
+  loadIndex: (url) =>
+    (document.body.appendChild(document.createElement("script")).src = url),
+
+  setIndex: (index) => {
+    Search._index = index;
+    if (Search._queued_query !== null) {
+      const query = Search._queued_query;
+      Search._queued_query = null;
+      Search.query(query);
+    }
+  },
+
+  hasIndex: () => Search._index !== null,
+
+  deferQuery: (query) => (Search._queued_query = query),
+
+  stopPulse: () => (Search._pulse_status = -1),
+
+  startPulse: () => {
+    if (Search._pulse_status >= 0) return;
+
+    const pulse = () => {
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      Search.dots.innerText = ".".repeat(Search._pulse_status);
+      if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
+    };
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch: (query) => {
+    // create the required interface elements
+    const searchText = document.createElement("h2");
+    searchText.textContent = _("Searching");
+    const searchSummary = document.createElement("p");
+    searchSummary.classList.add("search-summary");
+    searchSummary.innerText = "";
+    const searchList = document.createElement("ul");
+    searchList.setAttribute("role", "list");
+    searchList.classList.add("search");
+
+    const out = document.getElementById("search-results");
+    Search.title = out.appendChild(searchText);
+    Search.dots = Search.title.appendChild(document.createElement("span"));
+    Search.status = out.appendChild(searchSummary);
+    Search.output = out.appendChild(searchList);
+
+    const searchProgress = document.getElementById("search-progress");
+    // Some themes don't use the search progress node
+    if (searchProgress) {
+      searchProgress.innerText = _("Preparing search...");
+    }
+    Search.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (Search.hasIndex()) Search.query(query);
+    else Search.deferQuery(query);
+  },
+
+  _parseQuery: (query) => {
+    // stem the search terms and add them to the correct list
+    const stemmer = new Stemmer();
+    const searchTerms = new Set();
+    const excludedTerms = new Set();
+    const highlightTerms = new Set();
+    const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
+    splitQuery(query.trim()).forEach((queryTerm) => {
+      const queryTermLower = queryTerm.toLowerCase();
+
+      // maybe skip this "word"
+      // stopwords array is from language_data.js
+      if (
+        stopwords.indexOf(queryTermLower) !== -1 ||
+        queryTerm.match(/^\d+$/)
+      )
+        return;
+
+      // stem the word
+      let word = stemmer.stemWord(queryTermLower);
+      // select the correct list
+      if (word[0] === "-") excludedTerms.add(word.substr(1));
+      else {
+        searchTerms.add(word);
+        highlightTerms.add(queryTermLower);
+      }
+    });
+
+    if (SPHINX_HIGHLIGHT_ENABLED) {  // set in sphinx_highlight.js
+      localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
+    }
+
+    // console.debug("SEARCH: searching for:");
+    // console.info("required: ", [...searchTerms]);
+    // console.info("excluded: ", [...excludedTerms]);
+
+    return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+    const allTitles = Search._index.alltitles;
+    const indexEntries = Search._index.indexentries;
+
+    // Collect multiple result groups to be sorted separately and then ordered.
+    // Each is an array of [docname, title, anchor, descr, score, filename, kind].
+    const normalResults = [];
+    const nonMainIndexResults = [];
+
+    _removeChildren(document.getElementById("search-progress"));
+
+    const queryLower = query.toLowerCase().trim();
+    for (const [title, foundTitles] of Object.entries(allTitles)) {
+      if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
+        for (const [file, id] of foundTitles) {
+          const score = Math.round(Scorer.title * queryLower.length / title.length);
+          const boost = titles[file] === title ? 1 : 0;  // add a boost for document titles
+          normalResults.push([
+            docNames[file],
+            titles[file] !== title ? `${titles[file]} > ${title}` : title,
+            id !== null ? "#" + id : "",
+            null,
+            score + boost,
+            filenames[file],
+            SearchResultKind.title,
+          ]);
+        }
+      }
+    }
+
+    // search for explicit entries in index directives
+    for (const [entry, foundEntries] of Object.entries(indexEntries)) {
+      if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
+        for (const [file, id, isMain] of foundEntries) {
+          const score = Math.round(100 * queryLower.length / entry.length);
+          const result = [
+            docNames[file],
+            titles[file],
+            id ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+            SearchResultKind.index,
+          ];
+          if (isMain) {
+            normalResults.push(result);
+          } else {
+            nonMainIndexResults.push(result);
+          }
+        }
+      }
+    }
+
+    // lookup as object
+    objectTerms.forEach((term) =>
+      normalResults.push(...Search.performObjectSearch(term, objectTerms))
+    );
+
+    // lookup as search terms in fulltext
+    normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      normalResults.forEach((item) => (item[4] = Scorer.score(item)));
+      nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
+    }
+
+    // Sort each group of results by score and then alphabetically by name.
+    normalResults.sort(_orderResultsByScoreThenName);
+    nonMainIndexResults.sort(_orderResultsByScoreThenName);
+
+    // Combine the result groups in (reverse) order.
+    // Non-main index entries are typically arbitrary cross-references,
+    // so display them after other results.
+    let results = [...nonMainIndexResults, ...normalResults];
+
+    // remove duplicate search results
+    // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
+    let seen = new Set();
+    results = results.reverse().reduce((acc, result) => {
+      let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
+      if (!seen.has(resultStr)) {
+        acc.push(result);
+        seen.add(resultStr);
+      }
+      return acc;
+    }, []);
+
+    return results.reverse();
+  },
+
+  query: (query) => {
+    const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
+    const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    // console.info("search results:", Search.lastresults);
+
+    // print the results
+    _displayNextItem(results, results.length, searchTerms, highlightTerms);
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch: (object, objectTerms) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const objects = Search._index.objects;
+    const objNames = Search._index.objnames;
+    const titles = Search._index.titles;
+
+    const results = [];
+
+    const objectSearchCallback = (prefix, match) => {
+      const name = match[4]
+      const fullname = (prefix ? prefix + "." : "") + name;
+      const fullnameLower = fullname.toLowerCase();
+      if (fullnameLower.indexOf(object) < 0) return;
+
+      let score = 0;
+      const parts = fullnameLower.split(".");
+
+      // check for different match types: exact matches of full name or
+      // "last name" (i.e. last dotted part)
+      if (fullnameLower === object || parts.slice(-1)[0] === object)
+        score += Scorer.objNameMatch;
+      else if (parts.slice(-1)[0].indexOf(object) > -1)
+        score += Scorer.objPartialMatch; // matches in last name
+
+      const objName = objNames[match[1]][2];
+      const title = titles[match[0]];
+
+      // If more than one term searched for, we require other words to be
+      // found in the name/title/description
+      const otherTerms = new Set(objectTerms);
+      otherTerms.delete(object);
+      if (otherTerms.size > 0) {
+        const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
+        if (
+          [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
+        )
+          return;
+      }
+
+      let anchor = match[3];
+      if (anchor === "") anchor = fullname;
+      else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
+
+      const descr = objName + _(", in ") + title;
+
+      // add custom score for some objects according to scorer
+      if (Scorer.objPrio.hasOwnProperty(match[2]))
+        score += Scorer.objPrio[match[2]];
+      else score += Scorer.objPrioDefault;
+
+      results.push([
+        docNames[match[0]],
+        fullname,
+        "#" + anchor,
+        descr,
+        score,
+        filenames[match[0]],
+        SearchResultKind.object,
+      ]);
+    };
+    Object.keys(objects).forEach((prefix) =>
+      objects[prefix].forEach((array) =>
+        objectSearchCallback(prefix, array)
+      )
+    );
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch: (searchTerms, excludedTerms) => {
+    // prepare search
+    const terms = Search._index.terms;
+    const titleTerms = Search._index.titleterms;
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+
+    const scoreMap = new Map();
+    const fileMap = new Map();
+
+    // perform the search on the required terms
+    searchTerms.forEach((word) => {
+      const files = [];
+      // find documents, if any, containing the query word in their text/title term indices
+      // use Object.hasOwnProperty to avoid mismatching against prototype properties
+      const arr = [
+        { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
+        { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title },
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        const escapedWord = _escapeRegExp(word);
+        if (!terms.hasOwnProperty(word)) {
+          Object.keys(terms).forEach((term) => {
+            if (term.match(escapedWord))
+              arr.push({ files: terms[term], score: Scorer.partialTerm });
+          });
+        }
+        if (!titleTerms.hasOwnProperty(word)) {
+          Object.keys(titleTerms).forEach((term) => {
+            if (term.match(escapedWord))
+              arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
+          });
+        }
+      }
+
+      // no match but word was a required one
+      if (arr.every((record) => record.files === undefined)) return;
+
+      // found search word in contents
+      arr.forEach((record) => {
+        if (record.files === undefined) return;
+
+        let recordFiles = record.files;
+        if (recordFiles.length === undefined) recordFiles = [recordFiles];
+        files.push(...recordFiles);
+
+        // set score for the word in each file
+        recordFiles.forEach((file) => {
+          if (!scoreMap.has(file)) scoreMap.set(file, new Map());
+          const fileScores = scoreMap.get(file);
+          fileScores.set(word, record.score);
+        });
+      });
+
+      // create the mapping
+      files.forEach((file) => {
+        if (!fileMap.has(file)) fileMap.set(file, [word]);
+        else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
+      });
+    });
+
+    // now check if the files don't contain excluded terms
+    const results = [];
+    for (const [file, wordList] of fileMap) {
+      // check if all requirements are matched
+
+      // as search terms with length < 3 are discarded
+      const filteredTermCount = [...searchTerms].filter(
+        (term) => term.length > 2
+      ).length;
+      if (
+        wordList.length !== searchTerms.size &&
+        wordList.length !== filteredTermCount
+      )
+        continue;
+
+      // ensure that none of the excluded terms is in the search result
+      if (
+        [...excludedTerms].some(
+          (term) =>
+            terms[term] === file ||
+            titleTerms[term] === file ||
+            (terms[term] || []).includes(file) ||
+            (titleTerms[term] || []).includes(file)
+        )
+      )
+        break;
+
+      // select one (max) score for the file.
+      const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w)));
+      // add result to the result list
+      results.push([
+        docNames[file],
+        titles[file],
+        "",
+        null,
+        score,
+        filenames[file],
+        SearchResultKind.text,
+      ]);
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words.
+   */
+  makeSearchSummary: (htmlText, keywords, anchor) => {
+    const text = Search.htmlToText(htmlText, anchor);
+    if (text === "") return null;
+
+    const textLower = text.toLowerCase();
+    const actualStartPosition = [...keywords]
+      .map((k) => textLower.indexOf(k.toLowerCase()))
+      .filter((i) => i > -1)
+      .slice(-1)[0];
+    const startWithContext = Math.max(actualStartPosition - 120, 0);
+
+    const top = startWithContext === 0 ? "" : "...";
+    const tail = startWithContext + 240 < text.length ? "..." : "";
+
+    let summary = document.createElement("p");
+    summary.classList.add("context");
+    summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
+
+    return summary;
+  },
+};
+
+_ready(Search.init);
diff --git a/docs/1.12.0/api/py/html/_static/sphinx_highlight.js b/docs/1.12.0/api/py/html/_static/sphinx_highlight.js
new file mode 100644
index 000000000..8a96c69a1
--- /dev/null
+++ b/docs/1.12.0/api/py/html/_static/sphinx_highlight.js
@@ -0,0 +1,154 @@
+/* Highlighting utilities for Sphinx HTML documentation. */
+"use strict";
+
+const SPHINX_HIGHLIGHT_ENABLED = true
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+  if (node.nodeType === Node.TEXT_NODE) {
+    const val = node.nodeValue;
+    const parent = node.parentNode;
+    const pos = val.toLowerCase().indexOf(text);
+    if (
+      pos >= 0 &&
+      !parent.classList.contains(className) &&
+      !parent.classList.contains("nohighlight")
+    ) {
+      let span;
+
+      const closestNode = parent.closest("body, svg, foreignObject");
+      const isInSVG = closestNode && closestNode.matches("svg");
+      if (isInSVG) {
+        span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+      } else {
+        span = document.createElement("span");
+        span.classList.add(className);
+      }
+
+      span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+      const rest = document.createTextNode(val.substr(pos + text.length));
+      parent.insertBefore(
+        span,
+        parent.insertBefore(
+          rest,
+          node.nextSibling
+        )
+      );
+      node.nodeValue = val.substr(0, pos);
+      /* There may be more occurrences of search term in this node. So call this
+       * function recursively on the remaining fragment.
+       */
+      _highlight(rest, addItems, text, className);
+
+      if (isInSVG) {
+        const rect = document.createElementNS(
+          "http://www.w3.org/2000/svg",
+          "rect"
+        );
+        const bbox = parent.getBBox();
+        rect.x.baseVal.value = bbox.x;
+        rect.y.baseVal.value = bbox.y;
+        rect.width.baseVal.value = bbox.width;
+        rect.height.baseVal.value = bbox.height;
+        rect.setAttribute("class", className);
+        addItems.push({ parent: parent, target: rect });
+      }
+    }
+  } else if (node.matches && !node.matches("button, select, textarea")) {
+    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+  }
+};
+const _highlightText = (thisNode, text, className) => {
+  let addItems = [];
+  _highlight(thisNode, addItems, text, className);
+  addItems.forEach((obj) =>
+    obj.parent.insertAdjacentElement("beforebegin", obj.target)
+  );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const SphinxHighlight = {
+
+  /**
+   * highlight the search words provided in localstorage in the text
+   */
+  highlightSearchWords: () => {
+    if (!SPHINX_HIGHLIGHT_ENABLED) return;  // bail if no highlight
+
+    // get and clear terms from localstorage
+    const url = new URL(window.location);
+    const highlight =
+        localStorage.getItem("sphinx_highlight_terms")
+        || url.searchParams.get("highlight")
+        || "";
+    localStorage.removeItem("sphinx_highlight_terms")
+    url.searchParams.delete("highlight");
+    window.history.replaceState({}, "", url);
+
+    // get individual terms from highlight string
+    const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+    if (terms.length === 0) return; // nothing to do
+
+    // There should never be more than one element matching "div.body"
+    const divBody = document.querySelectorAll("div.body");
+    const body = divBody.length ? divBody[0] : document.querySelector("body");
+    window.setTimeout(() => {
+      terms.forEach((term) => _highlightText(body, term, "highlighted"));
+    }, 10);
+
+    const searchBox = document.getElementById("searchbox");
+    if (searchBox === null) return;
+    searchBox.appendChild(
+      document
+        .createRange()
+        .createContextualFragment(
+          '<p class="highlight-link">' +
+            '<a href="javascript:SphinxHighlight.hideSearchWords()">' +
+            _("Hide Search Matches") +
+            "</a></p>"
+        )
+    );
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords: () => {
+    document
+      .querySelectorAll("#searchbox .highlight-link")
+      .forEach((el) => el.remove());
+    document
+      .querySelectorAll("span.highlighted")
+      .forEach((el) => el.classList.remove("highlighted"));
+    localStorage.removeItem("sphinx_highlight_terms")
+  },
+
+  initEscapeListener: () => {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
+      if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
+        SphinxHighlight.hideSearchWords();
+        event.preventDefault();
+      }
+    });
+  },
+};
+
+_ready(() => {
+  /* Do not call highlightSearchWords() when we are on the search page.
+   * It will highlight words from the *previous* search query.
+   */
+  if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
+  SphinxHighlight.initEscapeListener();
+});
diff --git a/docs/1.12.0/api/py/html/automodule.html b/docs/1.12.0/api/py/html/automodule.html
new file mode 100644
index 000000000..bb27f0c89
--- /dev/null
+++ b/docs/1.12.0/api/py/html/automodule.html
@@ -0,0 +1,2634 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+
+    <title>Components &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="prev" title="Welcome to Avro’s Python documentation!" href="intro.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <dl class="py class" id="module-avro.compatibility">
+<span id="module-avro"></span><dt class="sig sig-object py" id="avro.compatibility.SchemaCompatibilityType">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.compatibility.</span></span><span class="sig-name descname"><span class="pre">SchemaCompatibilityType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.compatibility.SchemaCompatibility [...]
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.compatibility.SchemaIncompatibilityType">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.compatibility.</span></span><span class="sig-name descname"><span class="pre">SchemaIncompatibilityType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.compatibility.SchemaIncompatibi [...]
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.compatibility.SchemaType">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.compatibility.</span></span><span class="sig-name descname"><span class="pre">SchemaType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.compatibility.SchemaType" title="Link to this  [...]
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.compatibility.merge">
+<span class="sig-prename descclassname"><span class="pre">avro.compatibility.</span></span><span class="sig-name descname"><span class="pre">merge</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">this</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">SchemaCompatibilityResult</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">that</span></span [...]
+<dd><p>Merges two <a class="reference external" href="mailto:{&#37;&#52;&#48;code">{<span>&#64;</span>code</a> SchemaCompatibilityResult} into a new instance, combining the list of Incompatibilities
+and regressing to the SchemaCompatibilityType.incompatible state if any incompatibilities are encountered.
+:param this: SchemaCompatibilityResult
+:param that: SchemaCompatibilityResult
+:return: SchemaCompatibilityResult</p>
+</dd></dl>
+
+<p id="module-avro.datafile">Read/Write Avro File Object Containers.</p>
+<p><a class="reference external" href="https://avro.apache.org/docs/current/spec.html#Object+Container+Files">https://avro.apache.org/docs/current/spec.html#Object+Container+Files</a></p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.datafile.DataFileReader">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.datafile.</span></span><span class="sig-name descname"><span class="pre">DataFileReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">reader</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">IO</span>< [...]
+<dd><p>Read files written by DataFileWriter.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileReader.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#avro.datafile.DataFileReader.close" title="Link to this definition">¶</a></dt>
+<dd><p>Close this reader.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileReader.determine_file_length">
+<span class="sig-name descname"><span class="pre">determine_file_length</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.datafile.DataFileReader.determine_file_length" title="Link to this definition">¶</a></dt>
+<dd><p>Get file length and leave file cursor where we found it.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.datafile.DataFileWriter">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.datafile.</span></span><span class="sig-name descname"><span class="pre">DataFileWriter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">IO</span>< [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileWriter.append">
+<span class="sig-name descname"><span class="pre">append</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a [...]
+<dd><p>Append a datum to the file.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileWriter.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#avro.datafile.DataFileWriter.close" title="Link to this definition">¶</a></dt>
+<dd><p>Close the file.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileWriter.flush">
+<span class="sig-name descname"><span class="pre">flush</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#avro.datafile.DataFileWriter.flush" title="Link to this definition">¶</a></dt>
+<dd><p>Flush the current state of the file, including metadata.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.datafile.DataFileWriter.sync">
+<span class="sig-name descname"><span class="pre">sync</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.datafile.DataFileWriter.sync" title="Link to this definition">¶</a></dt>
+<dd><p>Return the current position as a value that may be passed to
+DataFileReader.seek(long). Forces the end of the current block,
+emitting a synchronization marker.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.datafile.HeaderType">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.datafile.</span></span><span class="sig-name descname"><span class="pre">HeaderType</span></span><a class="headerlink" href="#avro.datafile.HeaderType" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<p id="module-avro.ipc">Support for inter-process calls.</p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.BaseRequestor">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">BaseRequestor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_protocol</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">transceiver</span></span></em><span class="sig-paren [...]
+<dd><p>Base class for the client side of a protocol interaction.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.ipc.BaseRequestor.read_call_response">
+<span class="sig-name descname"><span class="pre">read_call_response</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">decoder</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.BaseRequestor.read_call_response" title="Link to this definition">¶</a></dt>
+<dd><dl>
+<dt>The format of a call response is:</dt><dd><ul>
+<li><p>response metadata, a map with values of type bytes</p></li>
+<li><p>a one-byte error flag boolean, followed by either:
+o if the error flag is false,</p>
+<blockquote>
+<div><p>the message response, serialized per the message’s response schema.</p>
+</div></blockquote>
+<dl class="simple">
+<dt>o if the error flag is true,</dt><dd><p>the error, serialized per the message’s error union schema.</p>
+</dd>
+</dl>
+</li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.ipc.BaseRequestor.request">
+<span class="sig-name descname"><span class="pre">request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request_datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.BaseRequestor.request" title="Link to this definition">¶</a></dt>
+<dd><p>Writes a request message and reads a response or error message.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.ipc.BaseRequestor.write_call_request">
+<span class="sig-name descname"><span class="pre">write_call_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request_datum</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoder</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.BaseRequestor.write_call_request" title="Link t [...]
+<dd><dl class="simple">
+<dt>The format of a call request is:</dt><dd><ul class="simple">
+<li><p>request metadata, a map with values of type bytes</p></li>
+<li><p>the message name, an Avro string, followed by</p></li>
+<li><p>the message parameters. Parameters are serialized according to
+the message’s request declaration.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.FramedReader">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">FramedReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">reader</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.FramedReader" title="Link to this definition">¶</a></dt>
+<dd><p>Wrapper around a file-like object to read framed data.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.FramedWriter">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">FramedWriter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.FramedWriter" title="Link to this definition">¶</a></dt>
+<dd><p>Wrapper around a file-like object to write framed data.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.HTTPTransceiver">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">HTTPTransceiver</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param"><span class=" [...]
+<dd><p>A simple HTTP-based transceiver implementation.
+Useful for clients but not for servers</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.Requestor">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">Requestor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_protocol</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">transceiver</span></span></em><span class="sig-paren">)< [...]
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.ipc.Responder">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.ipc.</span></span><span class="sig-name descname"><span class="pre">Responder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_protocol</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.Responder" title="Link to this definition">¶ [...]
+<dd><p>Base class for the server side of a protocol interaction.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.ipc.Responder.invoke">
+<span class="sig-name descname"><span class="pre">invoke</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.Responder.invoke" title="Link to this definition">¶</a></dt>
+<dd><p>Actual work done by server: cf. handler in thrift.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.ipc.Responder.respond">
+<span class="sig-name descname"><span class="pre">respond</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">call_request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.ipc.Responder.respond" title="Link to this definition">¶</a></dt>
+<dd><p>Called by a server to deserialize a request, compute and serialize
+a response or error. Compare to ‘handle()’ in Thrift.</p>
+</dd></dl>
+
+</dd></dl>
+
+<p id="module-avro.protocol">Protocol implementation.</p>
+<p><a class="reference external" href="https://avro.apache.org/docs/current/spec.html#Protocol+Declaration">https://avro.apache.org/docs/current/spec.html#Protocol+Declaration</a></p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.protocol.Message">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">Message</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></ [...]
+<dd><p>A message has attributes:</p>
+<ul class="simple">
+<li><p>a doc, an optional description of the message,</p></li>
+<li><p>a request, a list of named, typed parameter schemas (this has the same form as the fields of a record declaration);</p></li>
+<li><p>a response schema;</p></li>
+<li><p>an optional union of declared error schemas. The effective union has “string” prepended to the declared union, to permit transmission of undeclared “system” errors. For example, if the declared error union is [“AccessError”], then the effective union is [“string”, “AccessError”]. When no errors are declared, the effective error union is [“string”]. Errors are serialized using the effective union; however, a protocol’s JSON declaration contains only the declared union.</p></li>
+<li><p>an optional one-way boolean parameter.</p></li>
+</ul>
+<p>A request parameter list is processed equivalently to an anonymous record. Since record field lists may vary between reader and writer, request parameters may also differ between the caller and responder, and such differences are resolved in the same manner as record field differences.</p>
+<p>The one-way parameter may only be true when the response type is “null” and no errors are listed.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.protocol.MessageObject">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">MessageObject</span></span><a class="headerlink" href="#avro.protocol.MessageObject" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.protocol.Protocol">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">Protocol</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span>< [...]
+<dd><p>Avro protocols describe RPC interfaces. Like schemas, they are defined with JSON text.</p>
+<p>A protocol is a JSON object with the following attributes:</p>
+<ul class="simple">
+<li><p>protocol, a string, the name of the protocol (required);</p></li>
+<li><p>namespace, an optional string that qualifies the name;</p></li>
+<li><p>doc, an optional string describing this protocol;</p></li>
+<li><p>types, an optional list of definitions of named types (records, enums, fixed and errors). An error definition is just like a record definition except it uses “error” instead of “record”. Note that forward references to named types are not permitted.</p></li>
+<li><p>messages, an optional JSON object whose keys are message names and whose values are objects whose attributes are described below. No two messages may have the same name.</p></li>
+</ul>
+<p>The name and namespace qualification rules defined for schema objects apply to protocols as well.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.protocol.ProtocolObject">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">ProtocolObject</span></span><a class="headerlink" href="#avro.protocol.ProtocolObject" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.protocol.make_avpr_object">
+<span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">make_avpr_object</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">json_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.protocol.ProtocolObject" title="avro.protocol.ProtocolObject"><span class="pre">Prot [...]
+<dd><p>Build Avro Protocol from data parsed out of JSON string.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.protocol.parse">
+<span class="sig-prename descclassname"><span class="pre">avro.protocol.</span></span><span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">json_string</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">validate_names</span></span><span cla [...]
+<dd><p>Constructs the Protocol from the JSON text.</p>
+</dd></dl>
+
+<p id="module-avro.codecs">Contains Codecs for Python Avro.</p>
+<p>Note that the word “codecs” means “compression/decompression algorithms” in the
+Avro world (<a class="reference external" href="https://avro.apache.org/docs/current/spec.html#Object+Container+Files">https://avro.apache.org/docs/current/spec.html#Object+Container+Files</a>),
+so don’t confuse it with the Python’s “codecs”, which is a package mainly for
+converting charsets (<a class="reference external" href="https://docs.python.org/3/library/codecs.html">https://docs.python.org/3/library/codecs.html</a>).</p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.codecs.BZip2Codec">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.codecs.</span></span><span class="sig-name descname"><span class="pre">BZip2Codec</span></span><a class="headerlink" href="#avro.codecs.BZip2Codec" title="Link to this definition">¶</a></dt>
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.BZip2Codec.compress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">compress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-retu [...]
+<dd><p>Compress the passed data.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) – a byte string to be compressed</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p>tuple</p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>compressed data and its length</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.BZip2Codec.decompress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">decompress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">readers_decoder</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><span class="pre"> [...]
+<dd><p>Read compressed data via the passed BinaryDecoder and decompress it.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>readers_decoder</strong> (<a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><em>avro.io.BinaryDecoder</em></a>) – a BinaryDecoder object currently being used for
+reading an object container file</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder">avro.io.BinaryDecoder</a></p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a newly instantiated BinaryDecoder object that contains the
+decompressed data which is wrapped by a StringIO</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.codecs.Codec">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.codecs.</span></span><span class="sig-name descname"><span class="pre">Codec</span></span><a class="headerlink" href="#avro.codecs.Codec" title="Link to this definition">¶</a></dt>
+<dd><p>Abstract base class for all Avro codec classes.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.Codec.compress">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">compress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></spa [...]
+<dd><p>Compress the passed data.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) – a byte string to be compressed</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p>tuple</p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>compressed data and its length</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.Codec.decompress">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">decompress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">readers_decoder</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference in [...]
+<dd><p>Read compressed data via the passed BinaryDecoder and decompress it.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>readers_decoder</strong> (<a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><em>avro.io.BinaryDecoder</em></a>) – a BinaryDecoder object currently being used for
+reading an object container file</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder">avro.io.BinaryDecoder</a></p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a newly instantiated BinaryDecoder object that contains the
+decompressed data which is wrapped by a StringIO</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.codecs.DeflateCodec">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.codecs.</span></span><span class="sig-name descname"><span class="pre">DeflateCodec</span></span><a class="headerlink" href="#avro.codecs.DeflateCodec" title="Link to this definition">¶</a></dt>
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.DeflateCodec.compress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">compress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-retu [...]
+<dd><p>Compress the passed data.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) – a byte string to be compressed</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p>tuple</p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>compressed data and its length</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.DeflateCodec.decompress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">decompress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">readers_decoder</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><span class="pre"> [...]
+<dd><p>Read compressed data via the passed BinaryDecoder and decompress it.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>readers_decoder</strong> (<a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><em>avro.io.BinaryDecoder</em></a>) – a BinaryDecoder object currently being used for
+reading an object container file</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder">avro.io.BinaryDecoder</a></p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a newly instantiated BinaryDecoder object that contains the
+decompressed data which is wrapped by a StringIO</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.codecs.NullCodec">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.codecs.</span></span><span class="sig-name descname"><span class="pre">NullCodec</span></span><a class="headerlink" href="#avro.codecs.NullCodec" title="Link to this definition">¶</a></dt>
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.NullCodec.compress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">compress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-retu [...]
+<dd><p>Compress the passed data.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) – a byte string to be compressed</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p>tuple</p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>compressed data and its length</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.codecs.NullCodec.decompress">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">decompress</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">readers_decoder</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><span class="pre"> [...]
+<dd><p>Read compressed data via the passed BinaryDecoder and decompress it.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>readers_decoder</strong> (<a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder"><em>avro.io.BinaryDecoder</em></a>) – a BinaryDecoder object currently being used for
+reading an object container file</p>
+</dd>
+<dt class="field-even">Return type<span class="colon">:</span></dt>
+<dd class="field-even"><p><a class="reference internal" href="#avro.io.BinaryDecoder" title="avro.io.BinaryDecoder">avro.io.BinaryDecoder</a></p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a newly instantiated BinaryDecoder object that contains the
+decompressed data which is wrapped by a StringIO</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<p id="module-avro.constants">Contains Constants for Python Avro</p>
+<p id="module-avro.io">Input/Output utilities, including:</p>
+<blockquote>
+<div><ul class="simple">
+<li><p>i/o-specific constants</p></li>
+<li><p>i/o-specific exceptions</p></li>
+<li><p>schema validation</p></li>
+<li><p>leaf value encoding and decoding</p></li>
+<li><p>datum reader/writer stuff (?)</p></li>
+</ul>
+</div></blockquote>
+<p>Also includes a generic representation for data, which
+uses the following mapping:</p>
+<blockquote>
+<div><ul class="simple">
+<li><p>Schema records are implemented as dict.</p></li>
+<li><p>Schema arrays are implemented as list.</p></li>
+<li><p>Schema maps are implemented as dict.</p></li>
+<li><p>Schema strings are implemented as str.</p></li>
+<li><p>Schema bytes are implemented as bytes.</p></li>
+<li><p>Schema ints are implemented as int.</p></li>
+<li><p>Schema longs are implemented as int.</p></li>
+<li><p>Schema floats are implemented as float.</p></li>
+<li><p>Schema doubles are implemented as float.</p></li>
+<li><p>Schema booleans are implemented as bool.</p></li>
+</ul>
+</div></blockquote>
+<p>Validation:</p>
+<p>The validation of schema is performed using breadth-first graph
+traversal. This allows validation exceptions to pinpoint the exact node
+within a complex schema that is problematic, simplifying debugging
+considerably. Because it is a traversal, it will also be less
+resource-intensive, particularly when validating schema with deep
+structures.</p>
+<section id="components">
+<h1>Components<a class="headerlink" href="#components" title="Link to this heading">¶</a></h1>
+<section id="nodes">
+<h2>Nodes<a class="headerlink" href="#nodes" title="Link to this heading">¶</a></h2>
+<p>Avro schemas contain many different schema types. Data about the schema
+types is used to validate the data in the corresponding part of a Python
+body (the object to be serialized). A node combines a given schema type
+with the corresponding Python data, as well as an optional “name” to
+identify the specific node. Names are generally the name of a schema
+(for named schema) or the name of a field (for child nodes of schema
+with named children like maps and records), or None, for schema who’s
+children are not named (like Arrays).</p>
+</section>
+<section id="iterators">
+<h2>Iterators<a class="headerlink" href="#iterators" title="Link to this heading">¶</a></h2>
+<p>Iterators are generator functions that take a node and return a
+generator which will yield a node for each child datum in the data for
+the current node. If a node is of a type which has no children, then the
+default iterator will immediately exit.</p>
+</section>
+<section id="validators">
+<h2>Validators<a class="headerlink" href="#validators" title="Link to this heading">¶</a></h2>
+<p>Validators are used to determine if the datum for a given node is valid
+according to the given schema type. Validator functions take a node as
+an argument and return a node if the node datum passes validation. If it
+does not, the validator must return None.</p>
+<p>In most cases, the node returned is identical to the node provided (is
+in fact the same object). However, in the case of Union schema, the
+returned “valid” node will hold the schema that is represented by the
+datum contained. This allows iteration over the child nodes
+in that datum, if there are any.</p>
+</section>
+</section>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">BinaryDecoder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">reader</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">IO</span><span cl [...]
+<dd><p>Read leaf values.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read">
+<span class="sig-name descname"><span class="pre">read</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bytes</span></span></span><a class=" [...]
+<dd><p>Read n bytes.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_boolean">
+<span class="sig-name descname"><span class="pre">read_boolean</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_boolean" title="Link to this definition">¶</a></dt>
+<dd><p>a boolean is written as a single byte
+whose value is either 0 (false) or 1 (true).</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_bytes">
+<span class="sig-name descname"><span class="pre">read_bytes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bytes</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_bytes" title="Link to this definition">¶</a></dt>
+<dd><p>Bytes are encoded as a long followed by that many bytes of data.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_date_from_int">
+<span class="sig-name descname"><span class="pre">read_date_from_int</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">date</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_date_from_int" title="Link to this definition">¶</a></dt>
+<dd><p>int is decoded as python date object.
+int stores the number of days from
+the unix epoch, 1 January 1970 (ISO calendar).</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_decimal_from_bytes">
+<span class="sig-name descname"><span class="pre">read_decimal_from_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">precision</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n" [...]
+<dd><p>Decimal bytes are decoded as signed short, int or long depending on the
+size of bytes.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_decimal_from_fixed">
+<span class="sig-name descname"><span class="pre">read_decimal_from_fixed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">precision</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n" [...]
+<dd><p>Decimal is encoded as fixed. Fixed instances are encoded using the
+number of bytes declared in the schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_double">
+<span class="sig-name descname"><span class="pre">read_double</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_double" title="Link to this definition">¶</a></dt>
+<dd><p>A double is written as 8 bytes.
+The double is converted into a 64-bit integer using a method equivalent to
+Java’s doubleToRawLongBits and then encoded in little-endian format.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_float">
+<span class="sig-name descname"><span class="pre">read_float</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_float" title="Link to this definition">¶</a></dt>
+<dd><p>A float is written as 4 bytes.
+The float is converted into a 32-bit integer using a method equivalent to
+Java’s floatToRawIntBits and then encoded in little-endian format.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_int">
+<span class="sig-name descname"><span class="pre">read_int</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_int" title="Link to this definition">¶</a></dt>
+<dd><p>int and long values are written using variable-length, zig-zag coding.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_long">
+<span class="sig-name descname"><span class="pre">read_long</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_long" title="Link to this definition">¶</a></dt>
+<dd><p>int and long values are written using variable-length, zig-zag coding.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_null">
+<span class="sig-name descname"><span class="pre">read_null</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_null" title="Link to this definition">¶</a></dt>
+<dd><p>null is written as zero bytes</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_time_micros_from_long">
+<span class="sig-name descname"><span class="pre">read_time_micros_from_long</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">time</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_time_micros_from_long" title="Link to this definition">¶</a></dt>
+<dd><p>long is decoded as python time object which represents
+the number of microseconds after midnight, 00:00:00.000000.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_time_millis_from_int">
+<span class="sig-name descname"><span class="pre">read_time_millis_from_int</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">time</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_time_millis_from_int" title="Link to this definition">¶</a></dt>
+<dd><p>int is decoded as python time object which represents
+the number of milliseconds after midnight, 00:00:00.000.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_timestamp_micros_from_long">
+<span class="sig-name descname"><span class="pre">read_timestamp_micros_from_long</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">datetime</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_timestamp_micros_from_long" title="Link to this definition">¶</a></dt>
+<dd><p>long is decoded as python datetime object which represents
+the number of microseconds from the unix epoch, 1 January 1970.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_timestamp_millis_from_long">
+<span class="sig-name descname"><span class="pre">read_timestamp_millis_from_long</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">datetime</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_timestamp_millis_from_long" title="Link to this definition">¶</a></dt>
+<dd><p>long is decoded as python datetime object which represents
+the number of milliseconds from the unix epoch, 1 January 1970.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryDecoder.read_utf8">
+<span class="sig-name descname"><span class="pre">read_utf8</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#avro.io.BinaryDecoder.read_utf8" title="Link to this definition">¶</a></dt>
+<dd><p>A string is encoded as a long followed by
+that many bytes of UTF-8 encoded character data.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">BinaryEncoder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">IO</span><span cl [...]
+<dd><p>Write leaf values.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write">
+<span class="sig-name descname"><span class="pre">write</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a c [...]
+<dd><p>Write an arbitrary datum.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_boolean">
+<span class="sig-name descname"><span class="pre">write_boolean</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></sp [...]
+<dd><p>a boolean is written as a single byte
+whose value is either 0 (false) or 1 (true).</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_bytes">
+<span class="sig-name descname"><span class="pre">write_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bytes</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></spa [...]
+<dd><p>Bytes are encoded as a long followed by that many bytes of data.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_date_int">
+<span class="sig-name descname"><span class="pre">write_date_int</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">date</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></s [...]
+<dd><p>Encode python date object as int.
+It stores the number of days from
+the unix epoch, 1 January 1970 (ISO calendar).</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_decimal_bytes">
+<span class="sig-name descname"><span class="pre">write_decimal_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Decimal</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><sp [...]
+<dd><p>Decimal in bytes are encoded as long. Since size of packed value in bytes for
+signed long is 8, 8 bytes are written.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_decimal_fixed">
+<span class="sig-name descname"><span class="pre">write_decimal_fixed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Decimal</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><sp [...]
+<dd><p>Decimal in fixed are encoded as size of fixed bytes.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_double">
+<span class="sig-name descname"><span class="pre">write_double</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></sp [...]
+<dd><p>A double is written as 8 bytes.
+The double is converted into a 64-bit integer using a method equivalent to
+Java’s doubleToRawLongBits and then encoded in little-endian format.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_float">
+<span class="sig-name descname"><span class="pre">write_float</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></spa [...]
+<dd><p>A float is written as 4 bytes.
+The float is converted into a 32-bit integer using a method equivalent to
+Java’s floatToRawIntBits and then encoded in little-endian format.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_int">
+<span class="sig-name descname"><span class="pre">write_int</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a [...]
+<dd><p>int and long values are written using variable-length, zig-zag coding.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_long">
+<span class="sig-name descname"><span class="pre">write_long</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span>< [...]
+<dd><p>int and long values are written using variable-length, zig-zag coding.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_null">
+<span class="sig-name descname"><span class="pre">write_null</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span> [...]
+<dd><p>null is written as zero bytes</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_time_micros_long">
+<span class="sig-name descname"><span class="pre">write_time_micros_long</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">time</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></ [...]
+<dd><p>Encode python time object as long.
+It stores the number of microseconds from midnight, 00:00:00.000000</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_time_millis_int">
+<span class="sig-name descname"><span class="pre">write_time_millis_int</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">time</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></s [...]
+<dd><p>Encode python time object as int.
+It stores the number of milliseconds from midnight, 00:00:00.000</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_timestamp_micros_long">
+<span class="sig-name descname"><span class="pre">write_timestamp_micros_long</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None [...]
+<dd><p>Encode python datetime object as long.
+It stores the number of microseconds from midnight of unix epoch, 1 January 1970.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_timestamp_millis_long">
+<span class="sig-name descname"><span class="pre">write_timestamp_millis_long</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None [...]
+<dd><p>Encode python datetime object as long.
+It stores the number of milliseconds from midnight of unix epoch, 1 January 1970.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.BinaryEncoder.write_utf8">
+<span class="sig-name descname"><span class="pre">write_utf8</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span>< [...]
+<dd><p>A string is encoded as a long followed by
+that many bytes of UTF-8 encoded character data.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.io.DatumReader">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">DatumReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" [...]
+<dd><p>Deserialize Avro-encoded data into a Python data structure.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_array">
+<span class="sig-name descname"><span class="pre">read_array</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.ArraySchema" title="avro.schema.ArraySchema"><span class="pre">ArraySchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">readers_s [...]
+<dd><p>Arrays are encoded as a series of blocks.</p>
+<p>Each block consists of a long count value,
+followed by that many array items.
+A block with count zero indicates the end of the array.
+Each item is encoded per the array’s item schema.</p>
+<p>If a block’s count is negative,
+then the count is followed immediately by a long block size,
+indicating the number of bytes in the block.
+The actual count in this case
+is the absolute value of the count written.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_enum">
+<span class="sig-name descname"><span class="pre">read_enum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.EnumSchema" title="avro.schema.EnumSchema"><span class="pre">EnumSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">readers_schem [...]
+<dd><p>An enum is encoded by a int, representing the zero-based position
+of the symbol in the schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_fixed">
+<span class="sig-name descname"><span class="pre">read_fixed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.FixedSchema" title="avro.schema.FixedSchema"><span class="pre">FixedSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">readers_s [...]
+<dd><p>Fixed instances are encoded using the number of bytes declared
+in the schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_map">
+<span class="sig-name descname"><span class="pre">read_map</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.MapSchema" title="avro.schema.MapSchema"><span class="pre">MapSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">readers_schema</s [...]
+<dd><p>Maps are encoded as a series of blocks.</p>
+<p>Each block consists of a long count value,
+followed by that many key/value pairs.
+A block with count zero indicates the end of the map.
+Each item is encoded per the map’s value schema.</p>
+<p>If a block’s count is negative,
+then the count is followed immediately by a long block size,
+indicating the number of bytes in the block.
+The actual count in this case
+is the absolute value of the count written.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_record">
+<span class="sig-name descname"><span class="pre">read_record</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.RecordSchema" title="avro.schema.RecordSchema"><span class="pre">RecordSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">reade [...]
+<dd><p>A record is encoded by encoding the values of its fields
+in the order that they are declared. In other words, a record
+is encoded as just the concatenation of the encodings of its fields.
+Field values are encoded per their schema.</p>
+<dl class="simple">
+<dt>Schema Resolution:</dt><dd><ul class="simple">
+<li><p>the ordering of fields may be different: fields are matched by name.</p></li>
+<li><p>schemas for fields with the same name in both records are resolved
+recursively.</p></li>
+<li><p>if the writer’s record contains a field with a name not present in the
+reader’s record, the writer’s value for that field is ignored.</p></li>
+<li><p>if the reader’s record schema has a field that contains a default value,
+and writer’s schema does not have a field with the same name, then the
+reader should use the default value from its field.</p></li>
+<li><p>if the reader’s record schema has a field with no default value, and
+writer’s schema does not have a field with the same name, then the
+field’s value is unset.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumReader.read_union">
+<span class="sig-name descname"><span class="pre">read_union</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.UnionSchema" title="avro.schema.UnionSchema"><span class="pre">UnionSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">readers_s [...]
+<dd><p>A union is encoded by first writing an int value indicating
+the zero-based position within the union of the schema of its value.
+The value is then encoded per the indicated schema within the union.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.io.DatumWriter">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">DatumWriter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" [...]
+<dd><p>DatumWriter for generic python objects.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_array">
+<span class="sig-name descname"><span class="pre">write_array</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.ArraySchema" title="avro.schema.ArraySchema"><span class="pre">ArraySchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</s [...]
+<dd><p>Arrays are encoded as a series of blocks.</p>
+<p>Each block consists of a long count value,
+followed by that many array items.
+A block with count zero indicates the end of the array.
+Each item is encoded per the array’s item schema.</p>
+<p>If a block’s count is negative,
+then the count is followed immediately by a long block size,
+indicating the number of bytes in the block.
+The actual count in this case
+is the absolute value of the count written.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_enum">
+<span class="sig-name descname"><span class="pre">write_enum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.EnumSchema" title="avro.schema.EnumSchema"><span class="pre">EnumSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</span> [...]
+<dd><p>An enum is encoded by a int, representing the zero-based position
+of the symbol in the schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_fixed">
+<span class="sig-name descname"><span class="pre">write_fixed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.FixedSchema" title="avro.schema.FixedSchema"><span class="pre">FixedSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</s [...]
+<dd><p>Fixed instances are encoded using the number of bytes declared
+in the schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_map">
+<span class="sig-name descname"><span class="pre">write_map</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.MapSchema" title="avro.schema.MapSchema"><span class="pre">MapSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</span></sp [...]
+<dd><p>Maps are encoded as a series of blocks.</p>
+<p>Each block consists of a long count value,
+followed by that many key/value pairs.
+A block with count zero indicates the end of the map.
+Each item is encoded per the map’s value schema.</p>
+<p>If a block’s count is negative,
+then the count is followed immediately by a long block size,
+indicating the number of bytes in the block.
+The actual count in this case
+is the absolute value of the count written.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_record">
+<span class="sig-name descname"><span class="pre">write_record</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.RecordSchema" title="avro.schema.RecordSchema"><span class="pre">RecordSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datu [...]
+<dd><p>A record is encoded by encoding the values of its fields
+in the order that they are declared. In other words, a record
+is encoded as just the concatenation of the encodings of its fields.
+Field values are encoded per their schema.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.io.DatumWriter.write_union">
+<span class="sig-name descname"><span class="pre">write_union</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.UnionSchema" title="avro.schema.UnionSchema"><span class="pre">UnionSchema</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</s [...]
+<dd><p>A union is encoded by first writing an int value indicating
+the zero-based position within the union of the schema of its value.
+The value is then encoded per the indicated schema within the union.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.io.ValidationNode">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">ValidationNode</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">schema</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">datum</span></span></em>, <em class="sig-param"><span class= [...]
+<dd><dl class="py attribute">
+<dt class="sig sig-object py" id="avro.io.ValidationNode.datum">
+<span class="sig-name descname"><span class="pre">datum</span></span><a class="headerlink" href="#avro.io.ValidationNode.datum" title="Link to this definition">¶</a></dt>
+<dd><p>Alias for field number 1</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="avro.io.ValidationNode.name">
+<span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#avro.io.ValidationNode.name" title="Link to this definition">¶</a></dt>
+<dd><p>Alias for field number 2</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="avro.io.ValidationNode.schema">
+<span class="sig-name descname"><span class="pre">schema</span></span><a class="headerlink" href="#avro.io.ValidationNode.schema" title="Link to this definition">¶</a></dt>
+<dd><p>Alias for field number 0</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.io.validate">
+<span class="sig-prename descclassname"><span class="pre">avro.io.</span></span><span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">expected_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.Schema" title="avro.schema.Schema"><span class="pre">Schema</span></a></span></em>, < [...]
+<dd><p>Return True if the provided datum is valid for the expected schema</p>
+<p>If raise_on_error is passed and True, then raise a validation error
+with specific information about the error encountered in validation.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>expected_schema</strong> – An avro schema type object representing the schema against
+which the datum will be validated.</p></li>
+<li><p><strong>datum</strong> – The datum to be validated, A python dictionary or some supported type</p></li>
+<li><p><strong>raise_on_error</strong> – True if a AvroTypeException should be raised immediately when a
+validation problem is encountered.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Raises<span class="colon">:</span></dt>
+<dd class="field-even"><p>AvroTypeException if datum is invalid and raise_on_error is True</p>
+</dd>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>True if datum is valid for expected_schema, False if not.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py class" id="module-avro.tether">
+<dt class="sig sig-object py" id="avro.tether.HTTPRequestor">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.</span></span><span class="sig-name descname"><span class="pre">HTTPRequestor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">server</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param"><span clas [...]
+<dd><p>This is a small requestor subclass I created for the HTTP protocol.
+Since the HTTP protocol isn’t persistent, we need to instantiate
+a new transciever and new requestor for each request.
+But I wanted to use of the requestor to be identical to that for
+SocketTransciever so that we can seamlessly switch between the two.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.tether.TaskRunner">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.</span></span><span class="sig-name descname"><span class="pre">TaskRunner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">task</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TaskRunner" title="Link to this definition">¶</a></dt>
+<dd><p>This class ties together the server handling the requests from
+the parent process and the instance of TetherTask which actually
+implements the logic for the mapper and reducer phases</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TaskRunner.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TaskRunner.close" title="Link to this definition">¶</a></dt>
+<dd><p>Handler for the close message</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TaskRunner.start">
+<span class="sig-name descname"><span class="pre">start</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">outputport</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">join</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em [...]
+<dd><p>Start the server</p>
+<section id="parameters">
+<h1>Parameters<a class="headerlink" href="#parameters" title="Link to this heading">¶</a></h1>
+<dl>
+<dt>outputport - (optional) The port on which the parent process is listening</dt><dd><blockquote>
+<div><p>for requests from the task.</p>
+</div></blockquote>
+<ul class="simple">
+<li><p>This will typically be supplied by an environment variable
+we allow it to be supplied as an argument mainly for debugging</p></li>
+</ul>
+</dd>
+<dt>join       - (optional) If set to fault then we don’t issue a join to block</dt><dd><blockquote>
+<div><p>until the thread excecuting the server terminates.</p>
+</div></blockquote>
+<p>This is mainly for debugging. By setting it to false,
+we can resume execution in this thread so that we can do additional
+testing</p>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.tether.TetherTask">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.</span></span><span class="sig-name descname"><span class="pre">TetherTask</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inschema</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">midschema</span></span></em>, <em class="sig-param"><span  [...]
+<dd><p>Base class for python tether mapreduce programs.</p>
+<p>ToDo: Currently the subclass has to implement both reduce and reduceFlush.
+This is not very pythonic. A pythonic way to implement the reducer
+would be to pass the reducer a generator (as dumbo does) so that the user
+could iterate over the records for the given key.
+How would we do this. I think we would need to have two threads, one thread would run
+the user’s reduce function. This loop would be suspended when no reducer records were available.
+The other thread would read in the records for the reducer. This thread should
+only buffer so many records at a time (i.e if the buffer is full, self.input shouldn’t return right
+away but wait for space to free up)</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.complete">
+<span class="sig-name descname"><span class="pre">complete</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.complete" title="Link to this definition">¶</a></dt>
+<dd><p>Process the complete request</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.configure">
+<span class="sig-name descname"><span class="pre">configure</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">taskType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inSchemaText</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">outSchemaText</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.configure" title="Link to this definition [...]
+<dd><section id="id1">
+<h1>Parameters<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h1>
+<dl class="simple">
+<dt>taskType - What type of task (e.g map, reduce)</dt><dd><ul class="simple">
+<li><p>This is an enumeration which is specified in the input protocol</p></li>
+</ul>
+</dd>
+<dt>inSchemaText -  string containing the input schema</dt><dd><ul class="simple">
+<li><p>This is the actual schema with which the data was encoded
+i.e it is the writer_schema (see <a class="reference external" href="https://avro.apache.org/docs/current/spec.html#Schema+Resolution">https://avro.apache.org/docs/current/spec.html#Schema+Resolution</a>)
+This is the schema the parent process is using which might be different
+from the one provided by the subclass of tether_task</p></li>
+</ul>
+</dd>
+<dt>outSchemaText - string containing the output scheme</dt><dd><ul class="simple">
+<li><p>This is the schema expected by the parent process for the output</p></li>
+</ul>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.count">
+<span class="sig-name descname"><span class="pre">count</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">group</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">amount</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.count" title="Link to this definition">¶</a></dt>
+<dd><p>Called to increment a counter</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.fail">
+<span class="sig-name descname"><span class="pre">fail</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.fail" title="Link to this definition">¶</a></dt>
+<dd><p>Call to fail the task.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.input">
+<span class="sig-name descname"><span class="pre">input</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.input" title="Link to this definition">¶</a></dt>
+<dd><p>Recieve input from the server</p>
+<section id="id2">
+<h1>Parameters<a class="headerlink" href="#id2" title="Link to this heading">¶</a></h1>
+<dl class="simple">
+<dt>data - Should contain the bytes encoding the serialized data</dt><dd><ul class="simple">
+<li><p>I think this gets represented as a string</p></li>
+</ul>
+</dd>
+</dl>
+<p>count - how many input records are provided in the binary stream</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.map">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">map</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.map" title="Link to this defin [...]
+<dd><p>Called with input values to generate intermediat values (i.e mapper output).</p>
+<section id="id3">
+<h1>Parameters<a class="headerlink" href="#id3" title="Link to this heading">¶</a></h1>
+<p>record - The input record
+collector - The collector to collect the output</p>
+<p>This is an abstract function which should be overloaded by the application specific
+subclass.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.open">
+<span class="sig-name descname"><span class="pre">open</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inputport</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clientPort</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.open" title="Link to thi [...]
+<dd><p>Open the output client - i.e the connection to the parent process</p>
+<section id="id4">
+<h1>Parameters<a class="headerlink" href="#id4" title="Link to this heading">¶</a></h1>
+<dl>
+<dt>inputport - This is the port that the subprocess is listening on. i.e the</dt><dd><p>subprocess starts a server listening on this port to accept requests from
+the parent process</p>
+</dd>
+<dt>clientPort - The port on which the server in the parent process is listening</dt><dd><ul class="simple">
+<li><p>If this is None we look for the environment variable AVRO_TETHER_OUTPUT_PORT</p></li>
+<li><p>This is mainly provided for debugging purposes. In practice</p></li>
+</ul>
+<p>we want to use the environment variable</p>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.partitions">
+<em class="property"><span class="k"><span class="pre">property</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">partitions</span></span><a class="headerlink" href="#avro.tether.TetherTask.partitions" title="Link to this definition">¶</a></dt>
+<dd><p>Return the number of map output partitions of this job.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.reduce">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">reduce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.reduce" title="Link to this [...]
+<dd><p>Called with input values to generate reducer output. Inputs are sorted by the mapper
+key.</p>
+<p>The reduce function is invoked once for each value belonging to a given key outputted
+by the mapper.</p>
+<section id="id5">
+<h1>Parameters<a class="headerlink" href="#id5" title="Link to this heading">¶</a></h1>
+<p>record - The mapper output
+collector - The collector to collect the output</p>
+<p>This is an abstract function which should be overloaded by the application specific
+subclass.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.reduceFlush">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">reduceFlush</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.reduceFlush" title="Li [...]
+<dd><p>Called with the last intermediate value in each equivalence run.
+In other words, reduceFlush is invoked once for each key produced in the reduce
+phase. It is called after reduce has been invoked on each value for the given key.</p>
+<section id="id6">
+<h1>Parameters<a class="headerlink" href="#id6" title="Link to this heading">¶</a></h1>
+<p>record - the last record on which reduce was invoked.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.TetherTask.status">
+<span class="sig-name descname"><span class="pre">status</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.TetherTask.status" title="Link to this definition">¶</a></dt>
+<dd><p>Called to update task status</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.tether.find_port">
+<span class="sig-prename descclassname"><span class="pre">avro.tether.</span></span><span class="sig-name descname"><span class="pre">find_port</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.tether.find_port" title="Link to this definition">¶</a></dt>
+<dd><p>Return an unbound port</p>
+</dd></dl>
+
+<dl class="py class" id="module-avro.tether.tether_task_runner">
+<dt class="sig sig-object py" id="avro.tether.tether_task_runner.TaskRunner">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.tether_task_runner.</span></span><span class="sig-name descname"><span class="pre">TaskRunner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">task</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task_runner.TaskRunne [...]
+<dd><p>This class ties together the server handling the requests from
+the parent process and the instance of TetherTask which actually
+implements the logic for the mapper and reducer phases</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task_runner.TaskRunner.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task_runner.TaskRunner.close" title="Link to this definition">¶</a></dt>
+<dd><p>Handler for the close message</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task_runner.TaskRunner.start">
+<span class="sig-name descname"><span class="pre">start</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">outputport</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">join</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em [...]
+<dd><p>Start the server</p>
+<section id="id7">
+<h1>Parameters<a class="headerlink" href="#id7" title="Link to this heading">¶</a></h1>
+<dl>
+<dt>outputport - (optional) The port on which the parent process is listening</dt><dd><blockquote>
+<div><p>for requests from the task.</p>
+</div></blockquote>
+<ul class="simple">
+<li><p>This will typically be supplied by an environment variable
+we allow it to be supplied as an argument mainly for debugging</p></li>
+</ul>
+</dd>
+<dt>join       - (optional) If set to fault then we don’t issue a join to block</dt><dd><blockquote>
+<div><p>until the thread excecuting the server terminates.</p>
+</div></blockquote>
+<p>This is mainly for debugging. By setting it to false,
+we can resume execution in this thread so that we can do additional
+testing</p>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function" id="module-avro.tether.util">
+<dt class="sig sig-object py" id="avro.tether.util.find_port">
+<span class="sig-prename descclassname"><span class="pre">avro.tether.util.</span></span><span class="sig-name descname"><span class="pre">find_port</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#avro.tether.util.find_port" title="Link to this definition">¶</a></dt>
+<dd><p>Return an unbound port</p>
+</dd></dl>
+
+<dl class="py class" id="module-avro.tether.tether_task">
+<dt class="sig sig-object py" id="avro.tether.tether_task.HTTPRequestor">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.tether_task.</span></span><span class="sig-name descname"><span class="pre">HTTPRequestor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">server</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param [...]
+<dd><p>This is a small requestor subclass I created for the HTTP protocol.
+Since the HTTP protocol isn’t persistent, we need to instantiate
+a new transciever and new requestor for each request.
+But I wanted to use of the requestor to be identical to that for
+SocketTransciever so that we can seamlessly switch between the two.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tether.tether_task.</span></span><span class="sig-name descname"><span class="pre">TetherTask</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inschema</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">midschema</span></span></em>, <em class="sig-p [...]
+<dd><p>Base class for python tether mapreduce programs.</p>
+<p>ToDo: Currently the subclass has to implement both reduce and reduceFlush.
+This is not very pythonic. A pythonic way to implement the reducer
+would be to pass the reducer a generator (as dumbo does) so that the user
+could iterate over the records for the given key.
+How would we do this. I think we would need to have two threads, one thread would run
+the user’s reduce function. This loop would be suspended when no reducer records were available.
+The other thread would read in the records for the reducer. This thread should
+only buffer so many records at a time (i.e if the buffer is full, self.input shouldn’t return right
+away but wait for space to free up)</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.complete">
+<span class="sig-name descname"><span class="pre">complete</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.complete" title="Link to this definition">¶</a></dt>
+<dd><p>Process the complete request</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.configure">
+<span class="sig-name descname"><span class="pre">configure</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">taskType</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inSchemaText</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">outSchemaText</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.configure" title="Link to thi [...]
+<dd><section id="id8">
+<h1>Parameters<a class="headerlink" href="#id8" title="Link to this heading">¶</a></h1>
+<dl class="simple">
+<dt>taskType - What type of task (e.g map, reduce)</dt><dd><ul class="simple">
+<li><p>This is an enumeration which is specified in the input protocol</p></li>
+</ul>
+</dd>
+<dt>inSchemaText -  string containing the input schema</dt><dd><ul class="simple">
+<li><p>This is the actual schema with which the data was encoded
+i.e it is the writer_schema (see <a class="reference external" href="https://avro.apache.org/docs/current/spec.html#Schema+Resolution">https://avro.apache.org/docs/current/spec.html#Schema+Resolution</a>)
+This is the schema the parent process is using which might be different
+from the one provided by the subclass of tether_task</p></li>
+</ul>
+</dd>
+<dt>outSchemaText - string containing the output scheme</dt><dd><ul class="simple">
+<li><p>This is the schema expected by the parent process for the output</p></li>
+</ul>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.count">
+<span class="sig-name descname"><span class="pre">count</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">group</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">amount</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.count" title="Link to this definition">¶</a></dt>
+<dd><p>Called to increment a counter</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.fail">
+<span class="sig-name descname"><span class="pre">fail</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.fail" title="Link to this definition">¶</a></dt>
+<dd><p>Call to fail the task.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.input">
+<span class="sig-name descname"><span class="pre">input</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.input" title="Link to this definition">¶</a></dt>
+<dd><p>Recieve input from the server</p>
+<section id="id9">
+<h1>Parameters<a class="headerlink" href="#id9" title="Link to this heading">¶</a></h1>
+<dl class="simple">
+<dt>data - Should contain the bytes encoding the serialized data</dt><dd><ul class="simple">
+<li><p>I think this gets represented as a string</p></li>
+</ul>
+</dd>
+</dl>
+<p>count - how many input records are provided in the binary stream</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.map">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">map</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.map" title="Link t [...]
+<dd><p>Called with input values to generate intermediat values (i.e mapper output).</p>
+<section id="id10">
+<h1>Parameters<a class="headerlink" href="#id10" title="Link to this heading">¶</a></h1>
+<p>record - The input record
+collector - The collector to collect the output</p>
+<p>This is an abstract function which should be overloaded by the application specific
+subclass.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.open">
+<span class="sig-name descname"><span class="pre">open</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inputport</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clientPort</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.open" title= [...]
+<dd><p>Open the output client - i.e the connection to the parent process</p>
+<section id="id11">
+<h1>Parameters<a class="headerlink" href="#id11" title="Link to this heading">¶</a></h1>
+<dl>
+<dt>inputport - This is the port that the subprocess is listening on. i.e the</dt><dd><p>subprocess starts a server listening on this port to accept requests from
+the parent process</p>
+</dd>
+<dt>clientPort - The port on which the server in the parent process is listening</dt><dd><ul class="simple">
+<li><p>If this is None we look for the environment variable AVRO_TETHER_OUTPUT_PORT</p></li>
+<li><p>This is mainly provided for debugging purposes. In practice</p></li>
+</ul>
+<p>we want to use the environment variable</p>
+</dd>
+</dl>
+</section>
+</dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.partitions">
+<em class="property"><span class="k"><span class="pre">property</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">partitions</span></span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.partitions" title="Link to this definition">¶</a></dt>
+<dd><p>Return the number of map output partitions of this job.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.reduce">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">reduce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.reduce" title=" [...]
+<dd><p>Called with input values to generate reducer output. Inputs are sorted by the mapper
+key.</p>
+<p>The reduce function is invoked once for each value belonging to a given key outputted
+by the mapper.</p>
+<section id="id12">
+<h1>Parameters<a class="headerlink" href="#id12" title="Link to this heading">¶</a></h1>
+<p>record - The mapper output
+collector - The collector to collect the output</p>
+<p>This is an abstract function which should be overloaded by the application specific
+subclass.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.reduceFlush">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">reduceFlush</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">record</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collector</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.reduceFlus [...]
+<dd><p>Called with the last intermediate value in each equivalence run.
+In other words, reduceFlush is invoked once for each key produced in the reduce
+phase. It is called after reduce has been invoked on each value for the given key.</p>
+<section id="id13">
+<h1>Parameters<a class="headerlink" href="#id13" title="Link to this heading">¶</a></h1>
+<p>record - the last record on which reduce was invoked.</p>
+</section>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.tether.tether_task.TetherTask.status">
+<span class="sig-name descname"><span class="pre">status</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.tether.tether_task.TetherTask.status" title="Link to this definition">¶</a></dt>
+<dd><p>Called to update task status</p>
+</dd></dl>
+
+</dd></dl>
+
+<p id="module-avro.utils">Arbitrary utilities and polyfills.</p>
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.utils.TypedDict">
+<span class="sig-prename descclassname"><span class="pre">avro.utils.</span></span><span class="sig-name descname"><span class="pre">TypedDict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">typename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fields</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param">< [...]
+<dd><p>A simple typed namespace. At runtime it is equivalent to a plain dict.</p>
+<p>TypedDict creates a dictionary type such that a type checker will expect all
+instances to have a certain set of keys, where each key is
+associated with a value of a consistent type. This expectation
+is not checked at runtime.</p>
+<p>Usage:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span><span class="w"> </span><span class="nc">Point2D</span><span class="p">(</span><span class="n">TypedDict</span><span class="p">):</span>
+<span class="gp">... </span>    <span class="n">x</span><span class="p">:</span> <span class="nb">int</span>
+<span class="gp">... </span>    <span class="n">y</span><span class="p">:</span> <span class="nb">int</span>
+<span class="gp">... </span>    <span class="n">label</span><span class="p">:</span> <span class="nb">str</span>
+<span class="gp">...</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">a</span><span class="p">:</span> <span class="n">Point2D</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;x&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;good&#39;</span><spa [...]
+<span class="gp">&gt;&gt;&gt; </span><span class="n">b</span><span class="p">:</span> <span class="n">Point2D</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;z&#39;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;bad&#39;</span><span class="p">}</span>           <span class="c1"># Fails type check</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">Point2D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;first&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">(</span><span class [...]
+<span class="go">True</span>
+</pre></div>
+</div>
+<p>The type info can be accessed via the Point2D.__annotations__ dict, and
+the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
+TypedDict supports an additional equivalent form:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Point2D</span> <span class="o">=</span> <span class="n">TypedDict</span><span class="p">(</span><span class="s1">&#39;Point2D&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;x&#39;</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">:</span> <span class="nb">int</span><span c [...]
+</pre></div>
+</div>
+<p>By default, all keys must be present in a TypedDict. It is possible
+to override this by specifying totality:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Point2D</span><span class="p">(</span><span class="n">TypedDict</span><span class="p">,</span> <span class="n">total</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+    <span class="n">x</span><span class="p">:</span> <span class="nb">int</span>
+    <span class="n">y</span><span class="p">:</span> <span class="nb">int</span>
+</pre></div>
+</div>
+<p>This means that a Point2D TypedDict can have any of the keys omitted. A type
+checker is only expected to support a literal False or True as the value of
+the total argument. True is the default, and makes all items defined in the
+class body be required.</p>
+<p>The Required and NotRequired special forms can also be used to mark
+individual keys as being required or not required:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Point2D</span><span class="p">(</span><span class="n">TypedDict</span><span class="p">):</span>
+    <span class="n">x</span><span class="p">:</span> <span class="nb">int</span>               <span class="c1"># the &quot;x&quot; key must always be present (Required is the default)</span>
+    <span class="n">y</span><span class="p">:</span> <span class="n">NotRequired</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span>  <span class="c1"># the &quot;y&quot; key can be omitted</span>
+</pre></div>
+</div>
+<p>See PEP 655 for more details on Required and NotRequired.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.utils.randbytes">
+<span class="sig-prename descclassname"><span class="pre">avro.utils.</span></span><span class="sig-name descname"><span class="pre">randbytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.utils.randbytes" title="Link to this definition">¶</a></dt>
+<dd><p>Generate n random bytes.</p>
+</dd></dl>
+
+<dl class="py exception" id="module-avro.errors">
+<dt class="sig sig-object py" id="avro.errors.AvroException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroException</span></span><a class="headerlink" href="#avro.errors.AvroException" title="Link to this definition">¶</a></dt>
+<dd><p>The base class for exceptions in avro.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.AvroOutOfScaleException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroOutOfScaleException</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink"  [...]
+<dd><p>Raised when attempting to write a decimal datum with an exponent too large for the decimal schema.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.AvroRemoteException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroRemoteException</span></span><a class="headerlink" href="#avro.errors.AvroRemoteException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when an error message is sent by an Avro requestor or responder.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.AvroRuntimeException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroRuntimeException</span></span><a class="headerlink" href="#avro.errors.AvroRuntimeException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when compatibility parsing encounters an unknown type</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.AvroTypeException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroTypeException</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href=" [...]
+<dd><p>Raised when datum is not an example of schema.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.AvroWarning">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">AvroWarning</span></span><a class="headerlink" href="#avro.errors.AvroWarning" title="Link to this definition">¶</a></dt>
+<dd><p>Base class for warnings.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.ConnectionClosedException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">ConnectionClosedException</span></span><a class="headerlink" href="#avro.errors.ConnectionClosedException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when attempting IPC on a closed connection.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.DataFileException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">DataFileException</span></span><a class="headerlink" href="#avro.errors.DataFileException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when there’s a problem reading or writing file object containers.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.IONotReadyException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">IONotReadyException</span></span><a class="headerlink" href="#avro.errors.IONotReadyException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when attempting an avro operation on an io object that isn’t fully initialized.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.IgnoredLogicalType">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">IgnoredLogicalType</span></span><a class="headerlink" href="#avro.errors.IgnoredLogicalType" title="Link to this definition">¶</a></dt>
+<dd><p>Warnings for unknown or invalid logical types.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.InvalidAvroBinaryEncoding">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">InvalidAvroBinaryEncoding</span></span><a class="headerlink" href="#avro.errors.InvalidAvroBinaryEncoding" title="Link to this definition">¶</a></dt>
+<dd><p>For invalid numbers of bytes read.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.InvalidDefault">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">InvalidDefault</span></span><a class="headerlink" href="#avro.errors.InvalidDefault" title="Link to this definition">¶</a></dt>
+<dd><p>User attempted to parse a schema with an invalid default.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.InvalidDefaultException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">InvalidDefaultException</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink"  [...]
+<dd><p>Raised when a default value isn’t a suitable type for the schema.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.InvalidName">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">InvalidName</span></span><a class="headerlink" href="#avro.errors.InvalidName" title="Link to this definition">¶</a></dt>
+<dd><p>User attempted to parse a schema with an invalid name.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.ProtocolParseException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">ProtocolParseException</span></span><a class="headerlink" href="#avro.errors.ProtocolParseException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when a protocol failed to parse.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.SchemaParseException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">SchemaParseException</span></span><a class="headerlink" href="#avro.errors.SchemaParseException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when a schema failed to parse.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.SchemaResolutionException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">SchemaResolutionException</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fail_msg</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">writers_schema</span></span><span class [...]
+<dd></dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.UnknownFingerprintAlgorithmException">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">UnknownFingerprintAlgorithmException</span></span><a class="headerlink" href="#avro.errors.UnknownFingerprintAlgorithmException" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when attempting to generate a fingerprint with an unknown algorithm</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.UnsupportedCodec">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">UnsupportedCodec</span></span><a class="headerlink" href="#avro.errors.UnsupportedCodec" title="Link to this definition">¶</a></dt>
+<dd><p>Raised when the compression named cannot be used.</p>
+</dd></dl>
+
+<dl class="py exception">
+<dt class="sig sig-object py" id="avro.errors.UsageError">
+<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.errors.</span></span><span class="sig-name descname"><span class="pre">UsageError</span></span><a class="headerlink" href="#avro.errors.UsageError" title="Link to this definition">¶</a></dt>
+<dd><p>An exception raised when incorrect arguments were passed.</p>
+</dd></dl>
+
+<p id="module-avro.name">Contains the Name classes.</p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.name.Name">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.name.</span></span><span class="sig-name descname"><span class="pre">Name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name_attr</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class [...]
+<dd><p>Class to describe Avro name.</p>
+<dl class="py property">
+<dt class="sig sig-object py" id="avro.name.Name.space">
+<em class="property"><span class="k"><span class="pre">property</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">space</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#avro.name.Name.space" title="Link t [...]
+<dd><p>Back out a namespace from full name.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.name.Names">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.name.</span></span><span class="sig-name descname"><span class="pre">Names</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default_namespace</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><s [...]
+<dd><p>Track name set and default namespace during parsing.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.name.Names.add_name">
+<span class="sig-name descname"><span class="pre">add_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name_attr</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">space_attr</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span cla [...]
+<dd><p>Add a new schema object to the name set.</p>
+<p>&#64;arg name_attr: name value read in schema
+&#64;arg space_attr: namespace value read in schema.</p>
+<p>&#64;return: the Name that was just added.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.name.Names.prune_namespace">
+<span class="sig-name descname"><span class="pre">prune_namespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">properties</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">object</span><s [...]
+<dd><p>given a properties, return properties with namespace removed if
+it matches the own default namespace</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.name.validate_basename">
+<span class="sig-prename descclassname"><span class="pre">avro.name.</span></span><span class="sig-name descname"><span class="pre">validate_basename</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">basename</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&# [...]
+<dd><p>Raise InvalidName if the given basename is not a valid name.</p>
+</dd></dl>
+
+<p id="module-avro.tool">Command-line tool</p>
+<p>NOTE: The API for the command-line tool is experimental.</p>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.tool.GenericHandler">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tool.</span></span><span class="sig-name descname"><span class="pre">GenericHandler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_address</span></span></em>, <em class="sig-param"> [...]
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.tool.GenericResponder">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.tool.</span></span><span class="sig-name descname"><span class="pre">GenericResponder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">proto</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">msg</span></span></em>, <em class="sig-param"><span class [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.tool.GenericResponder.invoke">
+<span class="sig-name descname"><span class="pre">invoke</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">object</span></span></span><a class="headerlink" href="#avro.tool.Ge [...]
+<dd><p>Actual work done by server: cf. handler in thrift.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class" id="module-avro.timezones">
+<dt class="sig sig-object py" id="avro.timezones.TSTTzinfo">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.timezones.</span></span><span class="sig-name descname"><span class="pre">TSTTzinfo</span></span><a class="headerlink" href="#avro.timezones.TSTTzinfo" title="Link to this definition">¶</a></dt>
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.TSTTzinfo.dst">
+<span class="sig-name descname"><span class="pre">dst</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span> [...]
+<dd><p>datetime -&gt; DST offset as timedelta positive east of UTC.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.TSTTzinfo.tzname">
+<span class="sig-name descname"><span class="pre">tzname</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</sp [...]
+<dd><p>datetime -&gt; string name of time zone.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.TSTTzinfo.utcoffset">
+<span class="sig-name descname"><span class="pre">utcoffset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=< [...]
+<dd><p>datetime -&gt; timedelta showing offset from UTC, negative values indicating West of UTC</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.timezones.UTCTzinfo">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.timezones.</span></span><span class="sig-name descname"><span class="pre">UTCTzinfo</span></span><a class="headerlink" href="#avro.timezones.UTCTzinfo" title="Link to this definition">¶</a></dt>
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.UTCTzinfo.dst">
+<span class="sig-name descname"><span class="pre">dst</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span> [...]
+<dd><p>datetime -&gt; DST offset as timedelta positive east of UTC.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.UTCTzinfo.tzname">
+<span class="sig-name descname"><span class="pre">tzname</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</sp [...]
+<dd><p>datetime -&gt; string name of time zone.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.timezones.UTCTzinfo.utcoffset">
+<span class="sig-name descname"><span class="pre">utcoffset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">datetime</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=< [...]
+<dd><p>datetime -&gt; timedelta showing offset from UTC, negative values indicating West of UTC</p>
+</dd></dl>
+
+</dd></dl>
+
+<p id="module-avro.__main__">Command line utility for reading and writing Avro files.</p>
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.__main__.print_json_pretty">
+<span class="sig-prename descclassname"><span class="pre">avro.__main__.</span></span><span class="sig-name descname"><span class="pre">print_json_pretty</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">row</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon"> [...]
+<dd><p>Pretty print JSON</p>
+</dd></dl>
+
+<p id="module-avro.schema">Contains the Schema classes.</p>
+<dl class="simple">
+<dt>A schema may be one of:</dt><dd><p>A record, mapping field names to field value data;
+An error, equivalent to a record;
+An enum, containing one of a small set of symbols;
+An array of values, all of the same schema;
+A map containing string/value pairs, each of a declared schema;
+A union of other schemas;
+A fixed sized binary object;
+A unicode string;
+A sequence of bytes;
+A 32-bit signed int;
+A 64-bit signed long;
+A 32-bit floating-point float;
+A 64-bit floating-point double;
+A boolean; or
+Null.</p>
+</dd>
+</dl>
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.ArraySchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">ArraySchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">items</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.ArraySchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.ArraySchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.ArraySchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.ArraySchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.ArraySchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.ArraySchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.ArraySchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.ArraySchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.BytesDecimalSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">BytesDecimalSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">precision</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="o"><span class="p [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.BytesDecimalSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.BytesDecimalSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.BytesDecimalSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.BytesDecimalSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a Decimal object, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.CanonicalPropertiesMixin">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">CanonicalPropertiesMixin</span></span><a class="headerlink" href="#avro.schema.CanonicalPropertiesMixin" title="Link to this definition">¶</a></dt>
+<dd><p>A Mixin that provides canonical properties to Schema and Field types.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.DateSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">DateSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em> [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.DateSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.DateSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.DateSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.DateSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid date object, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.EnumSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">EnumSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span>< [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.EnumSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.EnumSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.EnumSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.EnumSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.EnumSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.EnumSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.EnumSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.EnumSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid member of this Enum, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.EqualByJsonMixin">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">EqualByJsonMixin</span></span><a class="headerlink" href="#avro.schema.EqualByJsonMixin" title="Link to this definition">¶</a></dt>
+<dd><p>A mixin that defines equality as equal if the json deserializations are equal.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.EqualByPropsMixin">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">EqualByPropsMixin</span></span><a class="headerlink" href="#avro.schema.EqualByPropsMixin" title="Link to this definition">¶</a></dt>
+<dd><p>A mixin that defines equality as equal if the props are equal.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.ErrorUnionSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">ErrorUnionSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">schemas</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre"> [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.ErrorUnionSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.ErrorUnionSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.Field">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">Field</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">type_</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><sp [...]
+<dd></dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.FixedDecimalSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">FixedDecimalSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span c [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedDecimalSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedDecimalSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedDecimalSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedDecimalSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a Decimal object, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.FixedSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">FixedSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span></em>, <em class="sig-param"><span cla [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.FixedSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.FixedSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.MapSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">MapSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">values</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span> [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.MapSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.MapSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.MapSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.MapSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.MapSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.MapSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.MapSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.MapSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.NamedSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">NamedSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">type_</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span [...]
+<dd><p>Named Schemas specified in NAMED_TYPES.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.PrimitiveSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">PrimitiveSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre [...]
+<dd><p>Valid primitive types are in PRIMITIVE_TYPES.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.PrimitiveSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.PrimitiveSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.PrimitiveSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.PrimitiveSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.PrimitiveSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.PrimitiveSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.PrimitiveSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.PrimitiveSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this type of primitive schema, else None</p>
+<p>&#64;arg datum: The data to be checked for validity according to this schema
+&#64;return Schema object or None</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.PropertiesMixin">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">PropertiesMixin</span></span><a class="headerlink" href="#avro.schema.PropertiesMixin" title="Link to this definition">¶</a></dt>
+<dd><p>A mixin that provides basic properties.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.PropertiesMixin.check_props">
+<span class="sig-name descname"><span class="pre">check_props</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.PropertiesMixin" title="avro.schema.PropertiesMixin"><span class="pre">PropertiesMixin</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">props [...]
+<dd><p>Check that the given props are identical in two schemas.</p>
+<p>&#64;arg other: The other schema to check
+&#64;arg props: An iterable of properties to check
+&#64;return bool: True if all the properties match</p>
+</dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="avro.schema.PropertiesMixin.other_props">
+<em class="property"><span class="k"><span class="pre">property</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">other_props</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Mapping</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">object</span><spa [...]
+<dd><p>Dictionary of non-reserved properties</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">RecordSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span></em>, <em class="sig-param"><span cl [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema.make_field_objects">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">make_field_objects</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">field_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">Mappi [...]
+<dd><p>We’re going to need to make message parameters too.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.RecordSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the other schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.RecordSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.RecordSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.RecordSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.RecordSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.Schema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">Schema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">type_</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em [...]
+<dd><p>Base class for all Schema classes.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.Schema.fingerprint">
+<span class="sig-name descname"><span class="pre">fingerprint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">algorithm</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'CRC-64-AVRO'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bytes</span></span></sp [...]
+<dd><p>Generate fingerprint for supplied algorithm.</p>
+<p>‘CRC-64-AVRO’ will be used as the algorithm by default, but any
+algorithm supported by hashlib (as can be referenced with
+<cite>hashlib.algorithms_guaranteed</cite>) can be specified.</p>
+<p><cite>algorithm</cite> param is used as an algorithm name, and NoSuchAlgorithmException
+will be thrown if the algorithm is not among supported.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.Schema.match">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.schema.Schema" title="avro.schema.Schema"><span class="pre">Schema</span [...]
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the writer schema to match against.
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.Schema.to_canonical_json">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.name.Names" title="avro.name.Names"><span class="pre">Names</ [...]
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.Schema.to_json">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#avro.name.Names" title="avro.name.Names"><span class="pre">Names</span></a>< [...]
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.Schema.validate">
+<em class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class [...]
+<dd><p>Returns the appropriate schema object if datum is valid for that schema, else None.</p>
+<p>To be implemented in subclasses.</p>
+<p>Validation concerns only shape and type of data in the top level of the current schema.
+In most cases, the returned schema object will be self. However, for UnionSchema objects,
+the returned Schema will be the first branch schema for which validation passes.</p>
+<p>&#64;arg datum: The data to be checked for validity according to this schema
+&#64;return Optional[Schema]</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.TimeMicrosSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">TimeMicrosSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimeMicrosSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimeMicrosSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimeMicrosSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimeMicrosSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.TimeMillisSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">TimeMillisSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimeMillisSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimeMillisSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimeMillisSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimeMillisSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this schema, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.TimestampMicrosSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">TimestampMicrosSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span>< [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimestampMicrosSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimestampMicrosSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimestampMicrosSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimestampMicrosSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this type of primitive schema, else None</p>
+<p>&#64;arg datum: The data to be checked for validity according to this schema
+&#64;return Schema object or None</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.TimestampMillisSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">TimestampMillisSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span>< [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimestampMillisSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimestampMillisSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.TimestampMillisSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.TimestampMillisSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this type of primitive schema, else None</p>
+<p>&#64;arg datum: The data to be checked for validity according to this schema
+&#64;return Schema object or None</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.UUIDSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">UUIDSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em> [...]
+<dd><dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UUIDSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UUIDSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UUIDSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UUIDSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return self if datum is a valid representation of this type of primitive schema, else None</p>
+<p>&#64;arg datum: The data to be checked for validity according to this schema
+&#64;return Schema object or None</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="avro.schema.UnionSchema">
+<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">UnionSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">schemas</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</sp [...]
+<dd><p>names is a dictionary of schema objects</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UnionSchema.match">
+<span class="sig-name descname"><span class="pre">match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">writer</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UnionSchema.match" title="Link to this definition">¶</a></dt>
+<dd><p>Return True if the current schema (as reader) matches the writer schema.</p>
+<p>&#64;arg writer: the schema to match against
+&#64;return bool</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UnionSchema.to_canonical_json">
+<span class="sig-name descname"><span class="pre">to_canonical_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UnionSchema.to_canonical_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its Canonical Form
+<a class="reference external" href="http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas">http://avro.apache.org/docs/current/spec.html#Parsing+Canonical+Form+for+Schemas</a></p>
+<p>To be implemented in subclasses.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UnionSchema.to_json">
+<span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UnionSchema.to_json" title="Link to this definition">¶</a></dt>
+<dd><p>Converts the schema object into its AVRO specification representation.</p>
+<p>Schema types that have names (records, enums, and fixed) must
+be aware of not re-defining schemas that are already listed
+in the parameter names.</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="avro.schema.UnionSchema.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">datum</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.UnionSchema.validate" title="Link to this definition">¶</a></dt>
+<dd><p>Return the first branch schema of which datum is a valid example, else None.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.from_path">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">from_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="p [...]
+<dd><p>Constructs the Schema from a path to an avsc (json) file.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.get_other_props">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">get_other_props</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">all_props</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Mapping</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><spa [...]
+<dd><p>Retrieve the non-reserved properties from a dictionary of properties
+&#64;args reserved_props: The set of reserved properties to exclude</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.make_avsc_object">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">make_avsc_object</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">json_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span cl [...]
+<dd><p>Build Avro Schema from data parsed out of JSON string.</p>
+<p>&#64;arg names: A Names object (tracks seen names and default space)
+&#64;arg validate_enum_symbols: If False, will allow enum symbols that are not valid Avro names.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.make_bytes_decimal_schema">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">make_bytes_decimal_schema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other_props</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#avro.schema.make_bytes_decimal_schema" title="Link to this definition">¶</a></dt>
+<dd><p>Make a BytesDecimalSchema from just other_props.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.make_logical_schema">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">make_logical_schema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">logical_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type_</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">other_props</span></span></em><span class="sig-paren">)</span><a c [...]
+<dd><p>Map the logical types to the appropriate literal type and schema class.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="avro.schema.parse">
+<span class="sig-prename descclassname"><span class="pre">avro.schema.</span></span><span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">json_string</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">validate_enum_symbols</span></span><spa [...]
+<dd><p>Constructs the Schema from the JSON text.</p>
+<p>&#64;arg json_string: The json string of the schema to parse
+&#64;arg validate_enum_symbols: If False, will allow enum symbols that are not valid Avro names.
+&#64;arg validate_names: If False, will allow names that are not valid Avro names. When disabling the validation</p>
+<blockquote>
+<div><p>test the non-compliant names for non-compliant behavior, also in interoperability cases.</p>
+</div></blockquote>
+<p>&#64;return Schema</p>
+</dd></dl>
+
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+
+<search id="searchbox" style="display: none" role="search">
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</search>
+<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileReader.close"><code class="docutils literal notranslate"><span class="pre">DataFileReader.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileReader.determine_file_length"><code class="docutils literal notranslate"><span class="pre">DataFileReader.determine_file_length()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileWriter.append"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.append()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileWriter.close"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileWriter.flush"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.flush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.datafile.DataFileWriter.sync"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.sync()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.ipc.BaseRequestor.read_call_response"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.read_call_response()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.ipc.BaseRequestor.request"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.request()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.ipc.BaseRequestor.write_call_request"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.write_call_request()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.ipc.Responder.invoke"><code class="docutils literal notranslate"><span class="pre">Responder.invoke()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.ipc.Responder.respond"><code class="docutils literal notranslate"><span class="pre">Responder.respond()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.BZip2Codec.compress"><code class="docutils literal notranslate"><span class="pre">BZip2Codec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.BZip2Codec.decompress"><code class="docutils literal notranslate"><span class="pre">BZip2Codec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.Codec.compress"><code class="docutils literal notranslate"><span class="pre">Codec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.Codec.decompress"><code class="docutils literal notranslate"><span class="pre">Codec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.DeflateCodec.compress"><code class="docutils literal notranslate"><span class="pre">DeflateCodec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.DeflateCodec.decompress"><code class="docutils literal notranslate"><span class="pre">DeflateCodec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.NullCodec.compress"><code class="docutils literal notranslate"><span class="pre">NullCodec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.codecs.NullCodec.decompress"><code class="docutils literal notranslate"><span class="pre">NullCodec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#components">Components</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#nodes">Nodes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#iterators">Iterators</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#validators">Validators</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_boolean"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_boolean()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_date_from_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_date_from_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_decimal_from_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_decimal_from_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_decimal_from_fixed"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_decimal_from_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_double"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_double()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_float"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_float()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_null"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_null()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_time_micros_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_time_micros_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_time_millis_from_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_time_millis_from_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_timestamp_micros_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_timestamp_micros_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_timestamp_millis_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_timestamp_millis_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryDecoder.read_utf8"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_utf8()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_boolean"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_boolean()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_date_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_date_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_decimal_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_decimal_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_decimal_fixed"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_decimal_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_double"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_double()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_float"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_float()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_null"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_null()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_time_micros_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_time_micros_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_time_millis_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_time_millis_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_timestamp_micros_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_timestamp_micros_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_timestamp_millis_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_timestamp_millis_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.BinaryEncoder.write_utf8"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_utf8()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_array"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_array()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_enum"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_enum()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_fixed"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_map"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_record"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_record()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumReader.read_union"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_union()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_array"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_array()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_enum"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_enum()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_fixed"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_map"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_record"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_record()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.DatumWriter.write_union"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_union()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.ValidationNode.datum"><code class="docutils literal notranslate"><span class="pre">ValidationNode.datum</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.ValidationNode.name"><code class="docutils literal notranslate"><span class="pre">ValidationNode.name</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.io.ValidationNode.schema"><code class="docutils literal notranslate"><span class="pre">ValidationNode.schema</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TaskRunner.close"><code class="docutils literal notranslate"><span class="pre">TaskRunner.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TaskRunner.start"><code class="docutils literal notranslate"><span class="pre">TaskRunner.start()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.complete"><code class="docutils literal notranslate"><span class="pre">TetherTask.complete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.configure"><code class="docutils literal notranslate"><span class="pre">TetherTask.configure()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.count"><code class="docutils literal notranslate"><span class="pre">TetherTask.count()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.fail"><code class="docutils literal notranslate"><span class="pre">TetherTask.fail()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.input"><code class="docutils literal notranslate"><span class="pre">TetherTask.input()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.map"><code class="docutils literal notranslate"><span class="pre">TetherTask.map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.open"><code class="docutils literal notranslate"><span class="pre">TetherTask.open()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.partitions"><code class="docutils literal notranslate"><span class="pre">TetherTask.partitions</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.reduce"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduce()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.reduceFlush"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduceFlush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.TetherTask.status"><code class="docutils literal notranslate"><span class="pre">TetherTask.status()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task_runner.TaskRunner.close"><code class="docutils literal notranslate"><span class="pre">TaskRunner.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task_runner.TaskRunner.start"><code class="docutils literal notranslate"><span class="pre">TaskRunner.start()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.complete"><code class="docutils literal notranslate"><span class="pre">TetherTask.complete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.configure"><code class="docutils literal notranslate"><span class="pre">TetherTask.configure()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.count"><code class="docutils literal notranslate"><span class="pre">TetherTask.count()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.fail"><code class="docutils literal notranslate"><span class="pre">TetherTask.fail()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.input"><code class="docutils literal notranslate"><span class="pre">TetherTask.input()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.map"><code class="docutils literal notranslate"><span class="pre">TetherTask.map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.open"><code class="docutils literal notranslate"><span class="pre">TetherTask.open()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.partitions"><code class="docutils literal notranslate"><span class="pre">TetherTask.partitions</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.reduce"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduce()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.reduceFlush"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduceFlush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tether.tether_task.TetherTask.status"><code class="docutils literal notranslate"><span class="pre">TetherTask.status()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.name.Name.space"><code class="docutils literal notranslate"><span class="pre">Name.space</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.name.Names.add_name"><code class="docutils literal notranslate"><span class="pre">Names.add_name()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.name.Names.prune_namespace"><code class="docutils literal notranslate"><span class="pre">Names.prune_namespace()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.tool.GenericResponder.invoke"><code class="docutils literal notranslate"><span class="pre">GenericResponder.invoke()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.TSTTzinfo.dst"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.dst()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.TSTTzinfo.tzname"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.tzname()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.TSTTzinfo.utcoffset"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.utcoffset()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.UTCTzinfo.dst"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.dst()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.UTCTzinfo.tzname"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.tzname()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.timezones.UTCTzinfo.utcoffset"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.utcoffset()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.ArraySchema.match"><code class="docutils literal notranslate"><span class="pre">ArraySchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.ArraySchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">ArraySchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.ArraySchema.to_json"><code class="docutils literal notranslate"><span class="pre">ArraySchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.ArraySchema.validate"><code class="docutils literal notranslate"><span class="pre">ArraySchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.BytesDecimalSchema.to_json"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.BytesDecimalSchema.validate"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.DateSchema.to_json"><code class="docutils literal notranslate"><span class="pre">DateSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.DateSchema.validate"><code class="docutils literal notranslate"><span class="pre">DateSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.EnumSchema.match"><code class="docutils literal notranslate"><span class="pre">EnumSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.EnumSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">EnumSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.EnumSchema.to_json"><code class="docutils literal notranslate"><span class="pre">EnumSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.EnumSchema.validate"><code class="docutils literal notranslate"><span class="pre">EnumSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.ErrorUnionSchema.to_json"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema.to_json()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedDecimalSchema.to_json"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedDecimalSchema.validate"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedSchema.match"><code class="docutils literal notranslate"><span class="pre">FixedSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">FixedSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedSchema.to_json"><code class="docutils literal notranslate"><span class="pre">FixedSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.FixedSchema.validate"><code class="docutils literal notranslate"><span class="pre">FixedSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.MapSchema.match"><code class="docutils literal notranslate"><span class="pre">MapSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.MapSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">MapSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.MapSchema.to_json"><code class="docutils literal notranslate"><span class="pre">MapSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.MapSchema.validate"><code class="docutils literal notranslate"><span class="pre">MapSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PrimitiveSchema.match"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PrimitiveSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PrimitiveSchema.to_json"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PrimitiveSchema.validate"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PropertiesMixin.check_props"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin.check_props()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.PropertiesMixin.other_props"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin.other_props</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.RecordSchema.make_field_objects"><code class="docutils literal notranslate"><span class="pre">RecordSchema.make_field_objects()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.RecordSchema.match"><code class="docutils literal notranslate"><span class="pre">RecordSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.RecordSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">RecordSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.RecordSchema.to_json"><code class="docutils literal notranslate"><span class="pre">RecordSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.RecordSchema.validate"><code class="docutils literal notranslate"><span class="pre">RecordSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.Schema.fingerprint"><code class="docutils literal notranslate"><span class="pre">Schema.fingerprint()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.Schema.match"><code class="docutils literal notranslate"><span class="pre">Schema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.Schema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">Schema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.Schema.to_json"><code class="docutils literal notranslate"><span class="pre">Schema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.Schema.validate"><code class="docutils literal notranslate"><span class="pre">Schema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimeMicrosSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimeMicrosSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimeMillisSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimeMillisSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimestampMicrosSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimestampMicrosSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimestampMillisSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.TimestampMillisSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UUIDSchema.to_json"><code class="docutils literal notranslate"><span class="pre">UUIDSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UUIDSchema.validate"><code class="docutils literal notranslate"><span class="pre">UUIDSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UnionSchema.match"><code class="docutils literal notranslate"><span class="pre">UnionSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UnionSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">UnionSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UnionSchema.to_json"><code class="docutils literal notranslate"><span class="pre">UnionSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="#avro.schema.UnionSchema.validate"><code class="docutils literal notranslate"><span class="pre">UnionSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+      <li>Previous: <a href="intro.html" title="previous chapter">Welcome to Avro’s Python documentation!</a></li>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+      |
+      <a href="_sources/automodule.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/genindex.html b/docs/1.12.0/api/py/html/genindex.html
new file mode 100644
index 000000000..0e6052e07
--- /dev/null
+++ b/docs/1.12.0/api/py/html/genindex.html
@@ -0,0 +1,1105 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Index &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#A"><strong>A</strong></a>
+ | <a href="#B"><strong>B</strong></a>
+ | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#E"><strong>E</strong></a>
+ | <a href="#F"><strong>F</strong></a>
+ | <a href="#G"><strong>G</strong></a>
+ | <a href="#H"><strong>H</strong></a>
+ | <a href="#I"><strong>I</strong></a>
+ | <a href="#M"><strong>M</strong></a>
+ | <a href="#N"><strong>N</strong></a>
+ | <a href="#O"><strong>O</strong></a>
+ | <a href="#P"><strong>P</strong></a>
+ | <a href="#R"><strong>R</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#U"><strong>U</strong></a>
+ | <a href="#V"><strong>V</strong></a>
+ | <a href="#W"><strong>W</strong></a>
+ 
+</div>
+<h2 id="A">A</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.name.Names.add_name">add_name() (avro.name.Names method)</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileWriter.append">append() (avro.datafile.DataFileWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.ArraySchema">ArraySchema (class in avro.schema)</a>
+</li>
+      <li>
+    avro
+
+      <ul>
+        <li><a href="automodule.html#module-avro">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.__main__
+
+      <ul>
+        <li><a href="automodule.html#module-avro.__main__">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.codecs
+
+      <ul>
+        <li><a href="automodule.html#module-avro.codecs">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.compatibility
+
+      <ul>
+        <li><a href="automodule.html#module-avro.compatibility">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.constants
+
+      <ul>
+        <li><a href="automodule.html#module-avro.constants">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.datafile
+
+      <ul>
+        <li><a href="automodule.html#module-avro.datafile">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.errors
+
+      <ul>
+        <li><a href="automodule.html#module-avro.errors">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.io
+
+      <ul>
+        <li><a href="automodule.html#module-avro.io">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.ipc
+
+      <ul>
+        <li><a href="automodule.html#module-avro.ipc">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.name
+
+      <ul>
+        <li><a href="automodule.html#module-avro.name">module</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li>
+    avro.protocol
+
+      <ul>
+        <li><a href="automodule.html#module-avro.protocol">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.schema
+
+      <ul>
+        <li><a href="automodule.html#module-avro.schema">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.tether
+
+      <ul>
+        <li><a href="automodule.html#module-avro.tether">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.tether.tether_task
+
+      <ul>
+        <li><a href="automodule.html#module-avro.tether.tether_task">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.tether.tether_task_runner
+
+      <ul>
+        <li><a href="automodule.html#module-avro.tether.tether_task_runner">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.tether.util
+
+      <ul>
+        <li><a href="automodule.html#module-avro.tether.util">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.timezones
+
+      <ul>
+        <li><a href="automodule.html#module-avro.timezones">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.tool
+
+      <ul>
+        <li><a href="automodule.html#module-avro.tool">module</a>
+</li>
+      </ul></li>
+      <li>
+    avro.utils
+
+      <ul>
+        <li><a href="automodule.html#module-avro.utils">module</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.errors.AvroException">AvroException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.AvroOutOfScaleException">AvroOutOfScaleException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.AvroRemoteException">AvroRemoteException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.AvroRuntimeException">AvroRuntimeException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.AvroTypeException">AvroTypeException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.AvroWarning">AvroWarning</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="B">B</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.ipc.BaseRequestor">BaseRequestor (class in avro.ipc)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder">BinaryDecoder (class in avro.io)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.BinaryEncoder">BinaryEncoder (class in avro.io)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.BytesDecimalSchema">BytesDecimalSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.codecs.BZip2Codec">BZip2Codec (class in avro.codecs)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="C">C</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.CanonicalPropertiesMixin">CanonicalPropertiesMixin (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.PropertiesMixin.check_props">check_props() (avro.schema.PropertiesMixin method)</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileReader.close">close() (avro.datafile.DataFileReader method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.datafile.DataFileWriter.close">(avro.datafile.DataFileWriter method)</a>
+</li>
+        <li><a href="automodule.html#avro.tether.TaskRunner.close">(avro.tether.TaskRunner method)</a>
+</li>
+        <li><a href="automodule.html#avro.tether.tether_task_runner.TaskRunner.close">(avro.tether.tether_task_runner.TaskRunner method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.codecs.Codec">Codec (class in avro.codecs)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.complete">complete() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.complete">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.codecs.BZip2Codec.compress">compress() (avro.codecs.BZip2Codec static method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.codecs.Codec.compress">(avro.codecs.Codec static method)</a>
+</li>
+        <li><a href="automodule.html#avro.codecs.DeflateCodec.compress">(avro.codecs.DeflateCodec static method)</a>
+</li>
+        <li><a href="automodule.html#avro.codecs.NullCodec.compress">(avro.codecs.NullCodec static method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.configure">configure() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.configure">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.errors.ConnectionClosedException">ConnectionClosedException</a>
+</li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.count">count() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.count">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.errors.DataFileException">DataFileException</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileReader">DataFileReader (class in avro.datafile)</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileWriter">DataFileWriter (class in avro.datafile)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.DateSchema">DateSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.io.ValidationNode.datum">datum (avro.io.ValidationNode attribute)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader">DatumReader (class in avro.io)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter">DatumWriter (class in avro.io)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.codecs.BZip2Codec.decompress">decompress() (avro.codecs.BZip2Codec static method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.codecs.Codec.decompress">(avro.codecs.Codec static method)</a>
+</li>
+        <li><a href="automodule.html#avro.codecs.DeflateCodec.decompress">(avro.codecs.DeflateCodec static method)</a>
+</li>
+        <li><a href="automodule.html#avro.codecs.NullCodec.decompress">(avro.codecs.NullCodec static method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.codecs.DeflateCodec">DeflateCodec (class in avro.codecs)</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileReader.determine_file_length">determine_file_length() (avro.datafile.DataFileReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.timezones.TSTTzinfo.dst">dst() (avro.timezones.TSTTzinfo method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.timezones.UTCTzinfo.dst">(avro.timezones.UTCTzinfo method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="E">E</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.EnumSchema">EnumSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.EqualByJsonMixin">EqualByJsonMixin (class in avro.schema)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.EqualByPropsMixin">EqualByPropsMixin (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.ErrorUnionSchema">ErrorUnionSchema (class in avro.schema)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.fail">fail() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.fail">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.Field">Field (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.find_port">find_port() (in module avro.tether)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.util.find_port">(in module avro.tether.util)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.Schema.fingerprint">fingerprint() (avro.schema.Schema method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.FixedDecimalSchema">FixedDecimalSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.FixedSchema">FixedSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.datafile.DataFileWriter.flush">flush() (avro.datafile.DataFileWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.FramedReader">FramedReader (class in avro.ipc)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.FramedWriter">FramedWriter (class in avro.ipc)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.from_path">from_path() (in module avro.schema)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="G">G</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.tool.GenericHandler">GenericHandler (class in avro.tool)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.tool.GenericResponder">GenericResponder (class in avro.tool)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.get_other_props">get_other_props() (in module avro.schema)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="H">H</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.datafile.HeaderType">HeaderType (class in avro.datafile)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.HTTPRequestor">HTTPRequestor (class in avro.tether)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.tether_task.HTTPRequestor">(class in avro.tether.tether_task)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.ipc.HTTPTransceiver">HTTPTransceiver (class in avro.ipc)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="I">I</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.errors.IgnoredLogicalType">IgnoredLogicalType</a>
+</li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.input">input() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.input">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.errors.InvalidAvroBinaryEncoding">InvalidAvroBinaryEncoding</a>
+</li>
+      <li><a href="automodule.html#avro.errors.InvalidDefault">InvalidDefault</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.errors.InvalidDefaultException">InvalidDefaultException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.InvalidName">InvalidName</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.Responder.invoke">invoke() (avro.ipc.Responder method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tool.GenericResponder.invoke">(avro.tool.GenericResponder method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.errors.IONotReadyException">IONotReadyException</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="M">M</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.protocol.make_avpr_object">make_avpr_object() (in module avro.protocol)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.make_avsc_object">make_avsc_object() (in module avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.make_bytes_decimal_schema">make_bytes_decimal_schema() (in module avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.RecordSchema.make_field_objects">make_field_objects() (avro.schema.RecordSchema static method)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.make_logical_schema">make_logical_schema() (in module avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.map">map() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.map">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.MapSchema">MapSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.ArraySchema.match">match() (avro.schema.ArraySchema method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.schema.EnumSchema.match">(avro.schema.EnumSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedSchema.match">(avro.schema.FixedSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.MapSchema.match">(avro.schema.MapSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.PrimitiveSchema.match">(avro.schema.PrimitiveSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.RecordSchema.match">(avro.schema.RecordSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.Schema.match">(avro.schema.Schema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UnionSchema.match">(avro.schema.UnionSchema method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.compatibility.merge">merge() (in module avro.compatibility)</a>
+</li>
+      <li><a href="automodule.html#avro.protocol.Message">Message (class in avro.protocol)</a>
+</li>
+      <li><a href="automodule.html#avro.protocol.MessageObject">MessageObject (class in avro.protocol)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li>
+    module
+
+      <ul>
+        <li><a href="automodule.html#module-avro">avro</a>
+</li>
+        <li><a href="automodule.html#module-avro.__main__">avro.__main__</a>
+</li>
+        <li><a href="automodule.html#module-avro.codecs">avro.codecs</a>
+</li>
+        <li><a href="automodule.html#module-avro.compatibility">avro.compatibility</a>
+</li>
+        <li><a href="automodule.html#module-avro.constants">avro.constants</a>
+</li>
+        <li><a href="automodule.html#module-avro.datafile">avro.datafile</a>
+</li>
+        <li><a href="automodule.html#module-avro.errors">avro.errors</a>
+</li>
+        <li><a href="automodule.html#module-avro.io">avro.io</a>
+</li>
+        <li><a href="automodule.html#module-avro.ipc">avro.ipc</a>
+</li>
+        <li><a href="automodule.html#module-avro.name">avro.name</a>
+</li>
+        <li><a href="automodule.html#module-avro.protocol">avro.protocol</a>
+</li>
+        <li><a href="automodule.html#module-avro.schema">avro.schema</a>
+</li>
+        <li><a href="automodule.html#module-avro.tether">avro.tether</a>
+</li>
+        <li><a href="automodule.html#module-avro.tether.tether_task">avro.tether.tether_task</a>
+</li>
+        <li><a href="automodule.html#module-avro.tether.tether_task_runner">avro.tether.tether_task_runner</a>
+</li>
+        <li><a href="automodule.html#module-avro.tether.util">avro.tether.util</a>
+</li>
+        <li><a href="automodule.html#module-avro.timezones">avro.timezones</a>
+</li>
+        <li><a href="automodule.html#module-avro.tool">avro.tool</a>
+</li>
+        <li><a href="automodule.html#module-avro.utils">avro.utils</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.ValidationNode.name">name (avro.io.ValidationNode attribute)</a>
+</li>
+      <li><a href="automodule.html#avro.name.Name">Name (class in avro.name)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.NamedSchema">NamedSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.name.Names">Names (class in avro.name)</a>
+</li>
+      <li><a href="automodule.html#avro.codecs.NullCodec">NullCodec (class in avro.codecs)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="O">O</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.open">open() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.open">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.PropertiesMixin.other_props">other_props (avro.schema.PropertiesMixin property)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="P">P</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.protocol.parse">parse() (in module avro.protocol)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.schema.parse">(in module avro.schema)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.partitions">partitions (avro.tether.tether_task.TetherTask property)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.partitions">(avro.tether.TetherTask property)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.PrimitiveSchema">PrimitiveSchema (class in avro.schema)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.__main__.print_json_pretty">print_json_pretty() (in module avro.__main__)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.PropertiesMixin">PropertiesMixin (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.protocol.Protocol">Protocol (class in avro.protocol)</a>
+</li>
+      <li><a href="automodule.html#avro.protocol.ProtocolObject">ProtocolObject (class in avro.protocol)</a>
+</li>
+      <li><a href="automodule.html#avro.errors.ProtocolParseException">ProtocolParseException</a>
+</li>
+      <li><a href="automodule.html#avro.name.Names.prune_namespace">prune_namespace() (avro.name.Names method)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="R">R</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.utils.randbytes">randbytes() (in module avro.utils)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read">read() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_array">read_array() (avro.io.DatumReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_boolean">read_boolean() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_bytes">read_bytes() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.BaseRequestor.read_call_response">read_call_response() (avro.ipc.BaseRequestor method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_date_from_int">read_date_from_int() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_decimal_from_bytes">read_decimal_from_bytes() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_decimal_from_fixed">read_decimal_from_fixed() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_double">read_double() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_enum">read_enum() (avro.io.DatumReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_fixed">read_fixed() (avro.io.DatumReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_float">read_float() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_int">read_int() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_long">read_long() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_map">read_map() (avro.io.DatumReader method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_null">read_null() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_record">read_record() (avro.io.DatumReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_time_micros_from_long">read_time_micros_from_long() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_time_millis_from_int">read_time_millis_from_int() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_timestamp_micros_from_long">read_timestamp_micros_from_long() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_timestamp_millis_from_long">read_timestamp_millis_from_long() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumReader.read_union">read_union() (avro.io.DatumReader method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryDecoder.read_utf8">read_utf8() (avro.io.BinaryDecoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.RecordSchema">RecordSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.reduce">reduce() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.reduce">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.reduceFlush">reduceFlush() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.reduceFlush">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.ipc.BaseRequestor.request">request() (avro.ipc.BaseRequestor method)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.Requestor">Requestor (class in avro.ipc)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.Responder.respond">respond() (avro.ipc.Responder method)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.Responder">Responder (class in avro.ipc)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="S">S</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.ValidationNode.schema">schema (avro.io.ValidationNode attribute)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.Schema">Schema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.compatibility.SchemaCompatibilityType">SchemaCompatibilityType (class in avro.compatibility)</a>
+</li>
+      <li><a href="automodule.html#avro.compatibility.SchemaIncompatibilityType">SchemaIncompatibilityType (class in avro.compatibility)</a>
+</li>
+      <li><a href="automodule.html#avro.errors.SchemaParseException">SchemaParseException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.SchemaResolutionException">SchemaResolutionException</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.compatibility.SchemaType">SchemaType (class in avro.compatibility)</a>
+</li>
+      <li><a href="automodule.html#avro.name.Name.space">space (avro.name.Name property)</a>
+</li>
+      <li><a href="automodule.html#avro.tether.TaskRunner.start">start() (avro.tether.TaskRunner method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.tether_task_runner.TaskRunner.start">(avro.tether.tether_task_runner.TaskRunner method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.tether.tether_task.TetherTask.status">status() (avro.tether.tether_task.TetherTask method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.TetherTask.status">(avro.tether.TetherTask method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.datafile.DataFileWriter.sync">sync() (avro.datafile.DataFileWriter method)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="T">T</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.tether.TaskRunner">TaskRunner (class in avro.tether)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.tether_task_runner.TaskRunner">(class in avro.tether.tether_task_runner)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.tether.TetherTask">TetherTask (class in avro.tether)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.tether.tether_task.TetherTask">(class in avro.tether.tether_task)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.TimeMicrosSchema">TimeMicrosSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.TimeMillisSchema">TimeMillisSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.TimestampMicrosSchema">TimestampMicrosSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.TimestampMillisSchema">TimestampMillisSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.ArraySchema.to_canonical_json">to_canonical_json() (avro.schema.ArraySchema method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.schema.EnumSchema.to_canonical_json">(avro.schema.EnumSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedSchema.to_canonical_json">(avro.schema.FixedSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.MapSchema.to_canonical_json">(avro.schema.MapSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.PrimitiveSchema.to_canonical_json">(avro.schema.PrimitiveSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.RecordSchema.to_canonical_json">(avro.schema.RecordSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.Schema.to_canonical_json">(avro.schema.Schema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UnionSchema.to_canonical_json">(avro.schema.UnionSchema method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.schema.ArraySchema.to_json">to_json() (avro.schema.ArraySchema method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.schema.BytesDecimalSchema.to_json">(avro.schema.BytesDecimalSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.DateSchema.to_json">(avro.schema.DateSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.EnumSchema.to_json">(avro.schema.EnumSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.ErrorUnionSchema.to_json">(avro.schema.ErrorUnionSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedDecimalSchema.to_json">(avro.schema.FixedDecimalSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedSchema.to_json">(avro.schema.FixedSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.MapSchema.to_json">(avro.schema.MapSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.PrimitiveSchema.to_json">(avro.schema.PrimitiveSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.RecordSchema.to_json">(avro.schema.RecordSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.Schema.to_json">(avro.schema.Schema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimeMicrosSchema.to_json">(avro.schema.TimeMicrosSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimeMillisSchema.to_json">(avro.schema.TimeMillisSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimestampMicrosSchema.to_json">(avro.schema.TimestampMicrosSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimestampMillisSchema.to_json">(avro.schema.TimestampMillisSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UnionSchema.to_json">(avro.schema.UnionSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UUIDSchema.to_json">(avro.schema.UUIDSchema method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.timezones.TSTTzinfo">TSTTzinfo (class in avro.timezones)</a>
+</li>
+      <li><a href="automodule.html#avro.utils.TypedDict">TypedDict() (in module avro.utils)</a>
+</li>
+      <li><a href="automodule.html#avro.timezones.TSTTzinfo.tzname">tzname() (avro.timezones.TSTTzinfo method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.timezones.UTCTzinfo.tzname">(avro.timezones.UTCTzinfo method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="U">U</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.UnionSchema">UnionSchema (class in avro.schema)</a>
+</li>
+      <li><a href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException">UnknownFingerprintAlgorithmException</a>
+</li>
+      <li><a href="automodule.html#avro.errors.UnsupportedCodec">UnsupportedCodec</a>
+</li>
+      <li><a href="automodule.html#avro.errors.UsageError">UsageError</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.timezones.TSTTzinfo.utcoffset">utcoffset() (avro.timezones.TSTTzinfo method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.timezones.UTCTzinfo.utcoffset">(avro.timezones.UTCTzinfo method)</a>
+</li>
+      </ul></li>
+      <li><a href="automodule.html#avro.timezones.UTCTzinfo">UTCTzinfo (class in avro.timezones)</a>
+</li>
+      <li><a href="automodule.html#avro.schema.UUIDSchema">UUIDSchema (class in avro.schema)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.schema.ArraySchema.validate">validate() (avro.schema.ArraySchema method)</a>
+
+      <ul>
+        <li><a href="automodule.html#avro.schema.BytesDecimalSchema.validate">(avro.schema.BytesDecimalSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.DateSchema.validate">(avro.schema.DateSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.EnumSchema.validate">(avro.schema.EnumSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedDecimalSchema.validate">(avro.schema.FixedDecimalSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.FixedSchema.validate">(avro.schema.FixedSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.MapSchema.validate">(avro.schema.MapSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.PrimitiveSchema.validate">(avro.schema.PrimitiveSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.RecordSchema.validate">(avro.schema.RecordSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.Schema.validate">(avro.schema.Schema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimeMicrosSchema.validate">(avro.schema.TimeMicrosSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimeMillisSchema.validate">(avro.schema.TimeMillisSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimestampMicrosSchema.validate">(avro.schema.TimestampMicrosSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.TimestampMillisSchema.validate">(avro.schema.TimestampMillisSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UnionSchema.validate">(avro.schema.UnionSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.schema.UUIDSchema.validate">(avro.schema.UUIDSchema method)</a>
+</li>
+        <li><a href="automodule.html#avro.io.validate">(in module avro.io)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.name.validate_basename">validate_basename() (in module avro.name)</a>
+</li>
+      <li><a href="automodule.html#avro.io.ValidationNode">ValidationNode (class in avro.io)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="W">W</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write">write() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_array">write_array() (avro.io.DatumWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_boolean">write_boolean() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_bytes">write_bytes() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.ipc.BaseRequestor.write_call_request">write_call_request() (avro.ipc.BaseRequestor method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_date_int">write_date_int() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_decimal_bytes">write_decimal_bytes() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_decimal_fixed">write_decimal_fixed() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_double">write_double() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_enum">write_enum() (avro.io.DatumWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_fixed">write_fixed() (avro.io.DatumWriter method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_float">write_float() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_int">write_int() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_long">write_long() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_map">write_map() (avro.io.DatumWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_null">write_null() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_record">write_record() (avro.io.DatumWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_time_micros_long">write_time_micros_long() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_time_millis_int">write_time_millis_int() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_timestamp_micros_long">write_timestamp_micros_long() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_timestamp_millis_long">write_timestamp_millis_long() (avro.io.BinaryEncoder method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.DatumWriter.write_union">write_union() (avro.io.DatumWriter method)</a>
+</li>
+      <li><a href="automodule.html#avro.io.BinaryEncoder.write_utf8">write_utf8() (avro.io.BinaryEncoder method)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+
+<search id="searchbox" style="display: none" role="search">
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</search>
+<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/index.html b/docs/1.12.0/api/py/html/index.html
new file mode 100644
index 000000000..90108d006
--- /dev/null
+++ b/docs/1.12.0/api/py/html/index.html
@@ -0,0 +1,551 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+
+    <title>Indices and tables &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Welcome to Avro’s Python documentation!" href="intro.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader.close"><code class="docutils literal notranslate"><span class="pre">DataFileReader.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader.determine_file_length"><code class="docutils literal notranslate"><span class="pre">DataFileReader.determine_file_length()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter.append"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.append()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter.close"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter.flush"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.flush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter.sync"><code class="docutils literal notranslate"><span class="pre">DataFileWriter.sync()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor.read_call_response"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.read_call_response()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor.request"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.request()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor.write_call_request"><code class="docutils literal notranslate"><span class="pre">BaseRequestor.write_call_request()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.ipc.Responder.invoke"><code class="docutils literal notranslate"><span class="pre">Responder.invoke()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.ipc.Responder.respond"><code class="docutils literal notranslate"><span class="pre">Responder.respond()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec.compress"><code class="docutils literal notranslate"><span class="pre">BZip2Codec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec.decompress"><code class="docutils literal notranslate"><span class="pre">BZip2Codec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.Codec.compress"><code class="docutils literal notranslate"><span class="pre">Codec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.Codec.decompress"><code class="docutils literal notranslate"><span class="pre">Codec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec.compress"><code class="docutils literal notranslate"><span class="pre">DeflateCodec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec.decompress"><code class="docutils literal notranslate"><span class="pre">DeflateCodec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec.compress"><code class="docutils literal notranslate"><span class="pre">NullCodec.compress()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec.decompress"><code class="docutils literal notranslate"><span class="pre">NullCodec.decompress()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#nodes">Nodes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#iterators">Iterators</a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#validators">Validators</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_boolean"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_boolean()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_date_from_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_date_from_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_decimal_from_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_decimal_from_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_decimal_from_fixed"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_decimal_from_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_double"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_double()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_float"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_float()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_null"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_null()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_time_micros_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_time_micros_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_time_millis_from_int"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_time_millis_from_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_timestamp_micros_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_timestamp_micros_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_timestamp_millis_from_long"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_timestamp_millis_from_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder.read_utf8"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder.read_utf8()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_boolean"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_boolean()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_date_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_date_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_decimal_bytes"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_decimal_bytes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_decimal_fixed"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_decimal_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_double"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_double()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_float"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_float()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_null"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_null()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_time_micros_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_time_micros_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_time_millis_int"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_time_millis_int()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_timestamp_micros_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_timestamp_micros_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_timestamp_millis_long"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_timestamp_millis_long()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder.write_utf8"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder.write_utf8()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_array"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_array()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_enum"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_enum()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_fixed"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_map"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_record"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_record()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumReader.read_union"><code class="docutils literal notranslate"><span class="pre">DatumReader.read_union()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_array"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_array()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_enum"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_enum()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_fixed"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_fixed()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_map"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_record"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_record()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.DatumWriter.write_union"><code class="docutils literal notranslate"><span class="pre">DatumWriter.write_union()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.ValidationNode.datum"><code class="docutils literal notranslate"><span class="pre">ValidationNode.datum</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.ValidationNode.name"><code class="docutils literal notranslate"><span class="pre">ValidationNode.name</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.io.ValidationNode.schema"><code class="docutils literal notranslate"><span class="pre">ValidationNode.schema</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner.close"><code class="docutils literal notranslate"><span class="pre">TaskRunner.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner.start"><code class="docutils literal notranslate"><span class="pre">TaskRunner.start()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.complete"><code class="docutils literal notranslate"><span class="pre">TetherTask.complete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.configure"><code class="docutils literal notranslate"><span class="pre">TetherTask.configure()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.count"><code class="docutils literal notranslate"><span class="pre">TetherTask.count()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.fail"><code class="docutils literal notranslate"><span class="pre">TetherTask.fail()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.input"><code class="docutils literal notranslate"><span class="pre">TetherTask.input()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.map"><code class="docutils literal notranslate"><span class="pre">TetherTask.map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.open"><code class="docutils literal notranslate"><span class="pre">TetherTask.open()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.partitions"><code class="docutils literal notranslate"><span class="pre">TetherTask.partitions</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.reduce"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduce()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.reduceFlush"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduceFlush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.TetherTask.status"><code class="docutils literal notranslate"><span class="pre">TetherTask.status()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner.close"><code class="docutils literal notranslate"><span class="pre">TaskRunner.close()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner.start"><code class="docutils literal notranslate"><span class="pre">TaskRunner.start()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.complete"><code class="docutils literal notranslate"><span class="pre">TetherTask.complete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.configure"><code class="docutils literal notranslate"><span class="pre">TetherTask.configure()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.count"><code class="docutils literal notranslate"><span class="pre">TetherTask.count()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.fail"><code class="docutils literal notranslate"><span class="pre">TetherTask.fail()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.input"><code class="docutils literal notranslate"><span class="pre">TetherTask.input()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.map"><code class="docutils literal notranslate"><span class="pre">TetherTask.map()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.open"><code class="docutils literal notranslate"><span class="pre">TetherTask.open()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.partitions"><code class="docutils literal notranslate"><span class="pre">TetherTask.partitions</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.reduce"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduce()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.reduceFlush"><code class="docutils literal notranslate"><span class="pre">TetherTask.reduceFlush()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask.status"><code class="docutils literal notranslate"><span class="pre">TetherTask.status()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.name.Name.space"><code class="docutils literal notranslate"><span class="pre">Name.space</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.name.Names.add_name"><code class="docutils literal notranslate"><span class="pre">Names.add_name()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.name.Names.prune_namespace"><code class="docutils literal notranslate"><span class="pre">Names.prune_namespace()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder.invoke"><code class="docutils literal notranslate"><span class="pre">GenericResponder.invoke()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo.dst"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.dst()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo.tzname"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.tzname()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo.utcoffset"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo.utcoffset()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo.dst"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.dst()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo.tzname"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.tzname()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo.utcoffset"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo.utcoffset()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema.match"><code class="docutils literal notranslate"><span class="pre">ArraySchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">ArraySchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema.to_json"><code class="docutils literal notranslate"><span class="pre">ArraySchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema.validate"><code class="docutils literal notranslate"><span class="pre">ArraySchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema.to_json"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema.validate"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.DateSchema.to_json"><code class="docutils literal notranslate"><span class="pre">DateSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.DateSchema.validate"><code class="docutils literal notranslate"><span class="pre">DateSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema.match"><code class="docutils literal notranslate"><span class="pre">EnumSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">EnumSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema.to_json"><code class="docutils literal notranslate"><span class="pre">EnumSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema.validate"><code class="docutils literal notranslate"><span class="pre">EnumSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema.to_json"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema.to_json()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema.to_json"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema.validate"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema.match"><code class="docutils literal notranslate"><span class="pre">FixedSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">FixedSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema.to_json"><code class="docutils literal notranslate"><span class="pre">FixedSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema.validate"><code class="docutils literal notranslate"><span class="pre">FixedSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.MapSchema.match"><code class="docutils literal notranslate"><span class="pre">MapSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.MapSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">MapSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.MapSchema.to_json"><code class="docutils literal notranslate"><span class="pre">MapSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.MapSchema.validate"><code class="docutils literal notranslate"><span class="pre">MapSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema.match"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema.to_json"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema.validate"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin.check_props"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin.check_props()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin.other_props"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin.other_props</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema.make_field_objects"><code class="docutils literal notranslate"><span class="pre">RecordSchema.make_field_objects()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema.match"><code class="docutils literal notranslate"><span class="pre">RecordSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">RecordSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema.to_json"><code class="docutils literal notranslate"><span class="pre">RecordSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema.validate"><code class="docutils literal notranslate"><span class="pre">RecordSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.Schema.fingerprint"><code class="docutils literal notranslate"><span class="pre">Schema.fingerprint()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.Schema.match"><code class="docutils literal notranslate"><span class="pre">Schema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.Schema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">Schema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.Schema.to_json"><code class="docutils literal notranslate"><span class="pre">Schema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.Schema.validate"><code class="docutils literal notranslate"><span class="pre">Schema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema.to_json"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema.validate"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema.to_json"><code class="docutils literal notranslate"><span class="pre">UUIDSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema.validate"><code class="docutils literal notranslate"><span class="pre">UUIDSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a><ul>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema.match"><code class="docutils literal notranslate"><span class="pre">UnionSchema.match()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema.to_canonical_json"><code class="docutils literal notranslate"><span class="pre">UnionSchema.to_canonical_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema.to_json"><code class="docutils literal notranslate"><span class="pre">UnionSchema.to_json()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema.validate"><code class="docutils literal notranslate"><span class="pre">UnionSchema.validate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+</div>
+<section id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading">¶</a></h1>
+<ul class="simple">
+<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
+<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
+<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
+</ul>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="#">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+
+<search id="searchbox" style="display: none" role="search">
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</search>
+<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="#">Documentation overview</a><ul>
+      <li>Next: <a href="intro.html" title="next chapter">Welcome to Avro’s Python documentation!</a></li>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+      |
+      <a href="_sources/index.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/intro.html b/docs/1.12.0/api/py/html/intro.html
new file mode 100644
index 000000000..7504fac13
--- /dev/null
+++ b/docs/1.12.0/api/py/html/intro.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+
+    <title>Welcome to Avro’s Python documentation! &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Components" href="automodule.html" />
+    <link rel="prev" title="Indices and tables" href="index.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="welcome-to-avro-s-python-documentation">
+<h1>Welcome to Avro’s Python documentation!<a class="headerlink" href="#welcome-to-avro-s-python-documentation" title="Link to this heading">¶</a></h1>
+<p>Avro is a data serialization system. See <a class="reference external" href="https://avro.apache.org/docs/current/">avro.apache.org</a> for background information.</p>
+<p>Avro Python is a Python library that implements parts of the <a class="reference external" href="https://avro.apache.org/docs/current/specification/">Avro Specification</a>.</p>
+<p>The library includes the following functionality:</p>
+<ul class="simple">
+<li><p>Assembling schemas programmatically.</p></li>
+<li><p>A schema parser, which can parse Avro schema (written in JSON) into a Schema object.</p></li>
+<li><p>Binary encoders and decoders to encode data into Avro format and decode it back using primitive functions.</p></li>
+<li><p>Streams for storing and reading data, which Encoders and Decoders use.</p></li>
+<li><p>Support for Avro DataFile.</p></li>
+</ul>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+
+<search id="searchbox" style="display: none" role="search">
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</search>
+<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+      <li>Previous: <a href="index.html" title="previous chapter">Indices and tables</a></li>
+      <li>Next: <a href="automodule.html" title="next chapter">Components</a></li>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+      |
+      <a href="_sources/intro.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/objects.inv b/docs/1.12.0/api/py/html/objects.inv
new file mode 100644
index 000000000..96e2a79c6
Binary files /dev/null and b/docs/1.12.0/api/py/html/objects.inv differ
diff --git a/docs/1.12.0/api/py/html/py-modindex.html b/docs/1.12.0/api/py/html/py-modindex.html
new file mode 100644
index 000000000..127e3e5e7
--- /dev/null
+++ b/docs/1.12.0/api/py/html/py-modindex.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Python Module Index &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+
+   <h1>Python Module Index</h1>
+
+   <div class="modindex-jumpbox">
+   <a href="#cap-a"><strong>a</strong></a>
+   </div>
+
+   <table class="indextable modindextable">
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-a"><td></td><td>
+       <strong>a</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
+       <td>
+       <a href="automodule.html#module-avro"><code class="xref">avro</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.__main__"><code class="xref">avro.__main__</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.codecs"><code class="xref">avro.codecs</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.compatibility"><code class="xref">avro.compatibility</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.constants"><code class="xref">avro.constants</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.datafile"><code class="xref">avro.datafile</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.errors"><code class="xref">avro.errors</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.io"><code class="xref">avro.io</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.ipc"><code class="xref">avro.ipc</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.name"><code class="xref">avro.name</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.protocol"><code class="xref">avro.protocol</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.schema"><code class="xref">avro.schema</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.tether"><code class="xref">avro.tether</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.tether.tether_task"><code class="xref">avro.tether.tether_task</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.tether.tether_task_runner"><code class="xref">avro.tether.tether_task_runner</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.tether.util"><code class="xref">avro.tether.util</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.timezones"><code class="xref">avro.timezones</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.tool"><code class="xref">avro.tool</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="automodule.html#module-avro.utils"><code class="xref">avro.utils</code></a></td><td>
+       <em></em></td></tr>
+   </table>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+
+<search id="searchbox" style="display: none" role="search">
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</search>
+<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/search.html b/docs/1.12.0/api/py/html/search.html
new file mode 100644
index 000000000..220322333
--- /dev/null
+++ b/docs/1.12.0/api/py/html/search.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="./">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Search &#8212; Apache Avro 1.12.0 documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
+    <link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
+    
+    <script src="_static/documentation_options.js?v=fe8e256b"></script>
+    <script src="_static/doctools.js?v=9bcbadda"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" />
+    <script src="searchindex.js" defer="defer"></script>
+    <meta name="robots" content="noindex" />
+    
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1 id="search-documentation">Search</h1>
+  
+  <noscript>
+  <div class="admonition warning">
+  <p>
+    Please activate JavaScript to enable the search
+    functionality.
+  </p>
+  </div>
+  </noscript>
+  
+  
+  <p>
+    Searching for multiple words only shows matches that contain
+    all words.
+  </p>
+  
+  
+  <form action="" method="get">
+    <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+    <input type="submit" value="search" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+  
+  
+  <div id="search-results"></div>
+  
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="Main">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Apache Avro</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="intro.html">Welcome to Avro’s Python documentation!</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html"><code class="docutils literal notranslate"><span class="pre">SchemaCompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaIncompatibilityType"><code class="docutils literal notranslate"><span class="pre">SchemaIncompatibilityType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.SchemaType"><code class="docutils literal notranslate"><span class="pre">SchemaType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.compatibility.merge"><code class="docutils literal notranslate"><span class="pre">merge()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileReader"><code class="docutils literal notranslate"><span class="pre">DataFileReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.DataFileWriter"><code class="docutils literal notranslate"><span class="pre">DataFileWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.datafile.HeaderType"><code class="docutils literal notranslate"><span class="pre">HeaderType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.BaseRequestor"><code class="docutils literal notranslate"><span class="pre">BaseRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedReader"><code class="docutils literal notranslate"><span class="pre">FramedReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.FramedWriter"><code class="docutils literal notranslate"><span class="pre">FramedWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.HTTPTransceiver"><code class="docutils literal notranslate"><span class="pre">HTTPTransceiver</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Requestor"><code class="docutils literal notranslate"><span class="pre">Requestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.ipc.Responder"><code class="docutils literal notranslate"><span class="pre">Responder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Message"><code class="docutils literal notranslate"><span class="pre">Message</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.MessageObject"><code class="docutils literal notranslate"><span class="pre">MessageObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.Protocol"><code class="docutils literal notranslate"><span class="pre">Protocol</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.ProtocolObject"><code class="docutils literal notranslate"><span class="pre">ProtocolObject</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.make_avpr_object"><code class="docutils literal notranslate"><span class="pre">make_avpr_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.protocol.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.BZip2Codec"><code class="docutils literal notranslate"><span class="pre">BZip2Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.Codec"><code class="docutils literal notranslate"><span class="pre">Codec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.DeflateCodec"><code class="docutils literal notranslate"><span class="pre">DeflateCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.codecs.NullCodec"><code class="docutils literal notranslate"><span class="pre">NullCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#components">Components</a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryDecoder"><code class="docutils literal notranslate"><span class="pre">BinaryDecoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.BinaryEncoder"><code class="docutils literal notranslate"><span class="pre">BinaryEncoder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumReader"><code class="docutils literal notranslate"><span class="pre">DatumReader</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.DatumWriter"><code class="docutils literal notranslate"><span class="pre">DatumWriter</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.ValidationNode"><code class="docutils literal notranslate"><span class="pre">ValidationNode</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.io.validate"><code class="docutils literal notranslate"><span class="pre">validate()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task_runner.TaskRunner"><code class="docutils literal notranslate"><span class="pre">TaskRunner</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.util.find_port"><code class="docutils literal notranslate"><span class="pre">find_port()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.HTTPRequestor"><code class="docutils literal notranslate"><span class="pre">HTTPRequestor</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tether.tether_task.TetherTask"><code class="docutils literal notranslate"><span class="pre">TetherTask</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.TypedDict"><code class="docutils literal notranslate"><span class="pre">TypedDict()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.utils.randbytes"><code class="docutils literal notranslate"><span class="pre">randbytes()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroException"><code class="docutils literal notranslate"><span class="pre">AvroException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroOutOfScaleException"><code class="docutils literal notranslate"><span class="pre">AvroOutOfScaleException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRemoteException"><code class="docutils literal notranslate"><span class="pre">AvroRemoteException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroRuntimeException"><code class="docutils literal notranslate"><span class="pre">AvroRuntimeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroTypeException"><code class="docutils literal notranslate"><span class="pre">AvroTypeException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.AvroWarning"><code class="docutils literal notranslate"><span class="pre">AvroWarning</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ConnectionClosedException"><code class="docutils literal notranslate"><span class="pre">ConnectionClosedException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.DataFileException"><code class="docutils literal notranslate"><span class="pre">DataFileException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IONotReadyException"><code class="docutils literal notranslate"><span class="pre">IONotReadyException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.IgnoredLogicalType"><code class="docutils literal notranslate"><span class="pre">IgnoredLogicalType</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidAvroBinaryEncoding"><code class="docutils literal notranslate"><span class="pre">InvalidAvroBinaryEncoding</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefault"><code class="docutils literal notranslate"><span class="pre">InvalidDefault</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidDefaultException"><code class="docutils literal notranslate"><span class="pre">InvalidDefaultException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.InvalidName"><code class="docutils literal notranslate"><span class="pre">InvalidName</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.ProtocolParseException"><code class="docutils literal notranslate"><span class="pre">ProtocolParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaParseException"><code class="docutils literal notranslate"><span class="pre">SchemaParseException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.SchemaResolutionException"><code class="docutils literal notranslate"><span class="pre">SchemaResolutionException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnknownFingerprintAlgorithmException"><code class="docutils literal notranslate"><span class="pre">UnknownFingerprintAlgorithmException</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UnsupportedCodec"><code class="docutils literal notranslate"><span class="pre">UnsupportedCodec</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.errors.UsageError"><code class="docutils literal notranslate"><span class="pre">UsageError</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Name"><code class="docutils literal notranslate"><span class="pre">Name</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.Names"><code class="docutils literal notranslate"><span class="pre">Names</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.name.validate_basename"><code class="docutils literal notranslate"><span class="pre">validate_basename()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericHandler"><code class="docutils literal notranslate"><span class="pre">GenericHandler</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.tool.GenericResponder"><code class="docutils literal notranslate"><span class="pre">GenericResponder</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.TSTTzinfo"><code class="docutils literal notranslate"><span class="pre">TSTTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.timezones.UTCTzinfo"><code class="docutils literal notranslate"><span class="pre">UTCTzinfo</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.__main__.print_json_pretty"><code class="docutils literal notranslate"><span class="pre">print_json_pretty()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ArraySchema"><code class="docutils literal notranslate"><span class="pre">ArraySchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.BytesDecimalSchema"><code class="docutils literal notranslate"><span class="pre">BytesDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.CanonicalPropertiesMixin"><code class="docutils literal notranslate"><span class="pre">CanonicalPropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.DateSchema"><code class="docutils literal notranslate"><span class="pre">DateSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EnumSchema"><code class="docutils literal notranslate"><span class="pre">EnumSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByJsonMixin"><code class="docutils literal notranslate"><span class="pre">EqualByJsonMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.EqualByPropsMixin"><code class="docutils literal notranslate"><span class="pre">EqualByPropsMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.ErrorUnionSchema"><code class="docutils literal notranslate"><span class="pre">ErrorUnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Field"><code class="docutils literal notranslate"><span class="pre">Field</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedDecimalSchema"><code class="docutils literal notranslate"><span class="pre">FixedDecimalSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.FixedSchema"><code class="docutils literal notranslate"><span class="pre">FixedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.MapSchema"><code class="docutils literal notranslate"><span class="pre">MapSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.NamedSchema"><code class="docutils literal notranslate"><span class="pre">NamedSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PrimitiveSchema"><code class="docutils literal notranslate"><span class="pre">PrimitiveSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.PropertiesMixin"><code class="docutils literal notranslate"><span class="pre">PropertiesMixin</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.RecordSchema"><code class="docutils literal notranslate"><span class="pre">RecordSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.Schema"><code class="docutils literal notranslate"><span class="pre">Schema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimeMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimeMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimeMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMicrosSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMicrosSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.TimestampMillisSchema"><code class="docutils literal notranslate"><span class="pre">TimestampMillisSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UUIDSchema"><code class="docutils literal notranslate"><span class="pre">UUIDSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.UnionSchema"><code class="docutils literal notranslate"><span class="pre">UnionSchema</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.from_path"><code class="docutils literal notranslate"><span class="pre">from_path()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.get_other_props"><code class="docutils literal notranslate"><span class="pre">get_other_props()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_avsc_object"><code class="docutils literal notranslate"><span class="pre">make_avsc_object()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_bytes_decimal_schema"><code class="docutils literal notranslate"><span class="pre">make_bytes_decimal_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.make_logical_schema"><code class="docutils literal notranslate"><span class="pre">make_logical_schema()</span></code></a></li>
+<li class="toctree-l1"><a class="reference internal" href="automodule.html#avro.schema.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Apache.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/1.12.0/api/py/html/searchindex.js b/docs/1.12.0/api/py/html/searchindex.js
new file mode 100644
index 000000000..bbd593eef
--- /dev/null
+++ b/docs/1.12.0/api/py/html/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"alltitles":{"Components":[[0,null]],"Contents:":[[1,null]],"Indices and tables":[[1,"indices-and-tables"]],"Iterators":[[0,"iterators"]],"Nodes":[[0,"nodes"]],"Parameters":[[0,"parameters"],[0,"id1"],[0,"id2"],[0,"id3"],[0,"id4"],[0,"id5"],[0,"id6"],[0,"id7"],[0,"id8"],[0,"id9"],[0,"id10"],[0,"id11"],[0,"id12"],[0,"id13"]],"Validators":[[0,"validators"]],"Welcome to Avro\u2019s Python documentation!":[[2,null]]},"docnames":["automodule","index","intro"],"envversion":{"s [...]
\ No newline at end of file