You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

erdantic

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

erdantic - pypi Package Compare versions

Comparing version
1.1.0.post1
to
1.1.1
+30
tests/test_regressions.py
import sys
from typing import Optional
from pydantic import BaseModel
import pytest
import erdantic as erd
class Core(BaseModel):
"""Used in test_153_child_class_forward_ref"""
data: object
part: Optional[list["Part"]] = None
class Part(Core):
"""Used in test_153_child_class_forward_ref"""
# Unclear why Pydantic doesn't rebuild correctly for Python 3.10 and earlier
@pytest.mark.skipif(sys.version_info < (3, 11), reason="Passes for Python 3.11+")
def test_153_child_class_forward_ref():
"""
Test that inherited forward reference on child class is handled correctly.
https://github.com/drivendataorg/erdantic/issues/153
"""
# Should not raise UnevaluatedForwardRefError
erd.create(Core)
+23
-3

@@ -63,4 +63,12 @@ name: tests

- uses: extractions/setup-just@v2
- uses: prefix-dev/setup-pixi@v0.8.5
- name: Set up Pixi (with caching)
if: >-
${{
!(
github.event_name == 'push'
|| github.event_name == 'schedule'
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.update-deps == 'true')
)
}}
uses: prefix-dev/setup-pixi@v0.8.5
with:

@@ -71,2 +79,14 @@ cache: true

- name: Set up Pixi (no caching)
uses: prefix-dev/setup-pixi@v0.8.5
if: >-
${{
github.event_name == 'push'
|| github.event_name == 'schedule'
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.update-deps == 'true')
}}
with:
run-install: false
cache: false
- name: Update dependencies

@@ -76,3 +96,3 @@ if: >-

github.event_name == 'push'
|| github.event_name == 'scheduled'
|| github.event_name == 'schedule'
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.update-deps == 'true')

@@ -79,0 +99,0 @@ }}

# erdantic Changelog
## v1.1.1 (2025-07-19)
- Changed `plugins.pydantic.get_fields_from_pydantic_model` to force model rebuild. This helps address cases of unresolved forward references where Pydantic mistakenly skips rebuilding. Fixes [#153](https://github.com/drivendataorg/erdantic/issues/153). ([PR #154](https://github.com/drivendataorg/erdantic/pull/154))
- [Examples] Changed `Party` class in all example modules to use `list` instead of `typing.List` for the type annotation for the `members` field.
## v1.1.0 (2025-04-12)

@@ -4,0 +9,0 @@

+135
-135
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 9.0.0 (0)
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="986pt" height="379pt"
viewBox="0.00 0.00 986.00 378.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 374.5)">
<svg width="990pt" height="385pt"
viewBox="0.00 0.00 989.75 384.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 380.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-374.5 982,-374.5 982,4 -4,4"/>
<text text-anchor="middle" x="489" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic v1.0.0.dev0 &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-380.75 985.75,-380.75 985.75,4 -4,4"/>
<text text-anchor="middle" x="490.88" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic v1.1.1.dev0 &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.core.Edge -->

@@ -17,32 +17,32 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.core.Edge&#10;&#10;Hold information about a relationship between two data model classes. These represent&#10;directed edges in the entity relationship diagram.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;source_model_full_name (FullyQualifiedName): Fully qualified name of the source model,&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;i.e., the model that contains a field that references the target model.&#10; &#160;&#160;&#160;source_field_name (str): Name of the field on the source model that references the target&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;model.&#10; &#160;&#160;&#160;target_model_full_name (FullyQualifiedName): Fully qualified name of the target model,&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;i.e., the model that is referenced by the source model&#39;s field.&#10; &#160;&#160;&#160;target_cardinality (Cardinality): Cardinality of the target model in the relationship,&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;e.g., if the relationship is one (source) to many (target), this value will be&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;`Cardinality.MANY`.&#10; &#160;&#160;&#160;target_modality (Modality): Modality of the target model in the relationship, e.g., if the&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;relationship is one (source) to zero (target), meaning that the target is optional,&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;this value will be `Modality.ZERO`.&#10; &#160;&#160;&#160;source_cardinality (Optional[Cardinality]): Cardinality of the source model in the&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;relationship. This will never be set for Edges created by erdantic, but you can set it&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;manually to notate an externally known cardinality.&#10; &#160;&#160;&#160;source_modality (Optional[Modality]): Modality of the source model in the relationship.&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;This will never be set for Edges created by erdantic, but you can set it manually to&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;notate an externally known modality.&#10;">
<polygon fill="none" stroke="black" points="255,-172.5 255,-194.5 517,-194.5 517,-172.5 255,-172.5"/>
<text text-anchor="start" x="371.38" y="-179.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Edge</text>
<polygon fill="none" stroke="black" points="255,-150.5 255,-172.5 399,-172.5 399,-150.5 255,-150.5"/>
<text text-anchor="start" x="257.62" y="-156.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_model_full_name</text>
<polygon fill="none" stroke="black" points="399,-150.5 399,-172.5 517,-172.5 517,-150.5 399,-150.5"/>
<text text-anchor="start" x="401.75" y="-156.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="255,-128.5 255,-150.5 399,-150.5 399,-128.5 255,-128.5"/>
<text text-anchor="start" x="275.25" y="-134.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_field_name</text>
<polygon fill="none" stroke="black" points="399,-128.5 399,-150.5 517,-150.5 517,-128.5 399,-128.5"/>
<text text-anchor="start" x="451.25" y="-134.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="255,-106.5 255,-128.5 399,-128.5 399,-106.5 255,-106.5"/>
<text text-anchor="start" x="259.88" y="-112.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_model_full_name</text>
<polygon fill="none" stroke="black" points="399,-106.5 399,-128.5 517,-128.5 517,-106.5 399,-106.5"/>
<text text-anchor="start" x="401.75" y="-112.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="255,-84.5 255,-106.5 399,-106.5 399,-84.5 255,-84.5"/>
<text text-anchor="start" x="279.38" y="-90.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_cardinality</text>
<polygon fill="none" stroke="black" points="399,-84.5 399,-106.5 517,-106.5 517,-84.5 399,-84.5"/>
<text text-anchor="start" x="427.62" y="-90.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Cardinality</text>
<polygon fill="none" stroke="black" points="255,-62.5 255,-84.5 399,-84.5 399,-62.5 255,-62.5"/>
<text text-anchor="start" x="283.88" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_modality</text>
<polygon fill="none" stroke="black" points="399,-62.5 399,-84.5 517,-84.5 517,-62.5 399,-62.5"/>
<text text-anchor="start" x="432.88" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Modality</text>
<polygon fill="none" stroke="black" points="255,-40.5 255,-62.5 399,-62.5 399,-40.5 255,-40.5"/>
<text text-anchor="start" x="277.12" y="-46.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_cardinality</text>
<polygon fill="none" stroke="black" points="399,-40.5 399,-62.5 517,-62.5 517,-40.5 399,-40.5"/>
<text text-anchor="start" x="427.62" y="-46.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Cardinality</text>
<polygon fill="none" stroke="black" points="255,-18.5 255,-40.5 399,-40.5 399,-18.5 255,-18.5"/>
<text text-anchor="start" x="281.62" y="-24.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_modality</text>
<polygon fill="none" stroke="black" points="399,-18.5 399,-40.5 517,-40.5 517,-18.5 399,-18.5"/>
<text text-anchor="start" x="432.88" y="-24.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Modality</text>
<polygon fill="none" stroke="black" points="256,-176 256,-198.5 519.25,-198.5 519.25,-176 256,-176"/>
<text text-anchor="start" x="373" y="-183.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Edge</text>
<polygon fill="none" stroke="black" points="256,-153.5 256,-176 400.75,-176 400.75,-153.5 256,-153.5"/>
<text text-anchor="start" x="259" y="-159.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_model_full_name</text>
<polygon fill="none" stroke="black" points="400.75,-153.5 400.75,-176 519.25,-176 519.25,-153.5 400.75,-153.5"/>
<text text-anchor="start" x="403.75" y="-159.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="256,-131 256,-153.5 400.75,-153.5 400.75,-131 256,-131"/>
<text text-anchor="start" x="276.62" y="-137.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_field_name</text>
<polygon fill="none" stroke="black" points="400.75,-131 400.75,-153.5 519.25,-153.5 519.25,-131 400.75,-131"/>
<text text-anchor="start" x="453.25" y="-137.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="256,-108.5 256,-131 400.75,-131 400.75,-108.5 256,-108.5"/>
<text text-anchor="start" x="261.25" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_model_full_name</text>
<polygon fill="none" stroke="black" points="400.75,-108.5 400.75,-131 519.25,-131 519.25,-108.5 400.75,-108.5"/>
<text text-anchor="start" x="403.75" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="256,-86 256,-108.5 400.75,-108.5 400.75,-86 256,-86"/>
<text text-anchor="start" x="280.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_cardinality</text>
<polygon fill="none" stroke="black" points="400.75,-86 400.75,-108.5 519.25,-108.5 519.25,-86 400.75,-86"/>
<text text-anchor="start" x="429.62" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Cardinality</text>
<polygon fill="none" stroke="black" points="256,-63.5 256,-86 400.75,-86 400.75,-63.5 256,-63.5"/>
<text text-anchor="start" x="285.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">target_modality</text>
<polygon fill="none" stroke="black" points="400.75,-63.5 400.75,-86 519.25,-86 519.25,-63.5 400.75,-63.5"/>
<text text-anchor="start" x="434.88" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Modality</text>
<polygon fill="none" stroke="black" points="256,-41 256,-63.5 400.75,-63.5 400.75,-41 256,-41"/>
<text text-anchor="start" x="278.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_cardinality</text>
<polygon fill="none" stroke="black" points="400.75,-41 400.75,-63.5 519.25,-63.5 519.25,-41 400.75,-41"/>
<text text-anchor="start" x="429.62" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Cardinality</text>
<polygon fill="none" stroke="black" points="256,-18.5 256,-41 400.75,-41 400.75,-18.5 256,-18.5"/>
<text text-anchor="start" x="283" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">source_modality</text>
<polygon fill="none" stroke="black" points="400.75,-18.5 400.75,-41 519.25,-41 519.25,-18.5 400.75,-18.5"/>
<text text-anchor="start" x="434.88" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Modality</text>
</a>

@@ -55,12 +55,12 @@ </g>

<g id="a_node2"><a xlink:title="erdantic.core.FullyQualifiedName&#10;&#10;Holds the fully qualified name components (module and qualified name) of a Python object.&#10;This is used to uniquely identify an object, can be used to import it.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;module (str): Name of the module that the object is defined in.&#10; &#160;&#160;&#160;qual_name (str): Qualified name of the object.&#10;">
<polygon fill="none" stroke="black" points="853,-205.5 853,-227.5 978,-227.5 978,-205.5 853,-205.5"/>
<text text-anchor="start" x="855.88" y="-212.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="853,-183.5 853,-205.5 939,-205.5 939,-183.5 853,-183.5"/>
<text text-anchor="start" x="875.38" y="-189.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">module</text>
<polygon fill="none" stroke="black" points="939,-183.5 939,-205.5 978,-205.5 978,-183.5 939,-183.5"/>
<text text-anchor="start" x="951.75" y="-189.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="853,-161.5 853,-183.5 939,-183.5 939,-161.5 853,-161.5"/>
<text text-anchor="start" x="866" y="-167.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">qual_name</text>
<polygon fill="none" stroke="black" points="939,-161.5 939,-183.5 978,-183.5 978,-161.5 939,-161.5"/>
<text text-anchor="start" x="951.75" y="-167.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="856.5,-208.75 856.5,-231.25 981.75,-231.25 981.75,-208.75 856.5,-208.75"/>
<text text-anchor="start" x="859.5" y="-215.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="856.5,-186.25 856.5,-208.75 942.38,-208.75 942.38,-186.25 856.5,-186.25"/>
<text text-anchor="start" x="878.81" y="-192.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">module</text>
<polygon fill="none" stroke="black" points="942.38,-186.25 942.38,-208.75 981.75,-208.75 981.75,-186.25 942.38,-186.25"/>
<text text-anchor="start" x="955.31" y="-192.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="856.5,-163.75 856.5,-186.25 942.38,-186.25 942.38,-163.75 856.5,-163.75"/>
<text text-anchor="start" x="869.44" y="-169.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">qual_name</text>
<polygon fill="none" stroke="black" points="942.38,-163.75 942.38,-186.25 981.75,-186.25 981.75,-163.75 942.38,-163.75"/>
<text text-anchor="start" x="955.31" y="-169.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -72,10 +72,10 @@ </g>

<title>erdantic.core.Edge:e&#45;&gt;erdantic.core.FullyQualifiedName:w</title>
<path fill="none" stroke="black" d="M526.67,-161.52C643.38,-162.05 676.48,-172.42 795,-198.5 815.8,-203.08 823.08,-211.64 838.49,-215.05"/>
<polyline fill="none" stroke="black" points="517,-161.5 522,-161.51"/>
<polyline fill="none" stroke="black" points="522,-161.51 527,-161.52"/>
<polyline fill="none" stroke="black" points="853,-216.5 848.02,-216"/>
<polygon fill="black" stroke="black" points="847.53,-210.93 846.53,-220.88 844.54,-220.68 845.54,-210.73 847.53,-210.93"/>
<polyline fill="none" stroke="black" points="848.02,-216 843.05,-215.5"/>
<polygon fill="black" stroke="black" points="842.55,-210.43 841.56,-220.38 839.57,-220.18 840.56,-210.23 842.55,-210.43"/>
<polyline fill="none" stroke="black" points="843.05,-215.5 838.07,-215"/>
<path fill="none" stroke="black" d="M528.96,-164.77C646.18,-165.26 679.55,-174.92 798.5,-201.5 819.34,-206.16 826.56,-214.98 841.97,-218.5"/>
<polyline fill="none" stroke="black" points="519.25,-164.75 524.25,-164.76"/>
<polyline fill="none" stroke="black" points="524.25,-164.76 529.25,-164.77"/>
<polyline fill="none" stroke="black" points="856.5,-220 851.53,-219.49"/>
<polygon fill="black" stroke="black" points="851.05,-214.41 850.02,-224.36 848.03,-224.15 849.06,-214.2 851.05,-214.41"/>
<polyline fill="none" stroke="black" points="851.53,-219.49 846.55,-218.97"/>
<polygon fill="black" stroke="black" points="846.07,-213.9 845.04,-223.84 843.06,-223.64 844.08,-213.69 846.07,-213.9"/>
<polyline fill="none" stroke="black" points="846.55,-218.97 841.58,-218.46"/>
</g>

@@ -85,10 +85,10 @@ <!-- erdantic.core.Edge&#45;&gt;erdantic.core.FullyQualifiedName -->

<title>erdantic.core.Edge:e&#45;&gt;erdantic.core.FullyQualifiedName:w</title>
<path fill="none" stroke="black" d="M526.69,-117.46C643.94,-116.5 687.11,-98.94 795,-154.5 823.17,-169.01 818.32,-202.88 838.39,-213.35"/>
<polyline fill="none" stroke="black" points="517,-117.5 522,-117.48"/>
<polyline fill="none" stroke="black" points="522,-117.48 527,-117.46"/>
<polyline fill="none" stroke="black" points="853,-216.5 848.11,-215.45"/>
<polygon fill="black" stroke="black" points="848.19,-210.35 846.08,-220.12 844.13,-219.7 846.23,-209.93 848.19,-210.35"/>
<polyline fill="none" stroke="black" points="848.11,-215.45 843.22,-214.39"/>
<polygon fill="black" stroke="black" points="843.3,-209.3 841.19,-219.07 839.24,-218.65 841.34,-208.88 843.3,-209.3"/>
<polyline fill="none" stroke="black" points="843.22,-214.39 838.34,-213.34"/>
<path fill="none" stroke="black" d="M528.98,-119.71C646.75,-118.69 690.43,-100.14 798.5,-156.5 827.1,-171.41 821.52,-206.37 842.03,-216.93"/>
<polyline fill="none" stroke="black" points="519.25,-119.75 524.25,-119.73"/>
<polyline fill="none" stroke="black" points="524.25,-119.73 529.25,-119.71"/>
<polyline fill="none" stroke="black" points="856.5,-220 851.61,-218.96"/>
<polygon fill="black" stroke="black" points="851.67,-213.86 849.59,-223.64 847.64,-223.23 849.71,-213.45 851.67,-213.86"/>
<polyline fill="none" stroke="black" points="851.61,-218.96 846.72,-217.92"/>
<polygon fill="black" stroke="black" points="846.78,-212.82 844.7,-222.6 842.74,-222.19 844.82,-212.41 846.78,-212.82"/>
<polyline fill="none" stroke="black" points="846.72,-217.92 841.83,-216.88"/>
</g>

@@ -99,12 +99,12 @@ <!-- erdantic.core.EntityRelationshipDiagram -->

<g id="a_node3"><a xlink:title="erdantic.core.EntityRelationshipDiagram&#10;&#10;Holds information about an entity relationship diagram for a set of data model classes and&#10;their relationships, and provides methods to render the diagram.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;models (SortedDict[str, ModelInfo]): Mapping of ModelInfo instances for models included&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;in the diagram. Each key is the string representation of the fully qualified name of&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;the model.&#10; &#160;&#160;&#160;edges (SortedSet[Edge]): Set of edges representing relationships between the models.&#10;">
<polygon fill="none" stroke="black" points="0,-293.5 0,-315.5 197,-315.5 197,-293.5 0,-293.5"/>
<text text-anchor="start" x="18.25" y="-300.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">EntityRelationshipDiagram</text>
<polygon fill="none" stroke="black" points="0,-271.5 0,-293.5 45,-293.5 45,-271.5 0,-271.5"/>
<text text-anchor="start" x="2.62" y="-277.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">models</text>
<polygon fill="none" stroke="black" points="45,-271.5 45,-293.5 197,-293.5 197,-271.5 45,-271.5"/>
<text text-anchor="start" x="47.88" y="-277.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">SortedDict[str, ModelInfo]</text>
<polygon fill="none" stroke="black" points="0,-249.5 0,-271.5 45,-271.5 45,-249.5 0,-249.5"/>
<text text-anchor="start" x="7.12" y="-255.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">edges</text>
<polygon fill="none" stroke="black" points="45,-249.5 45,-271.5 197,-271.5 197,-249.5 45,-249.5"/>
<text text-anchor="start" x="63.25" y="-255.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">SortedDict[str, Edge]</text>
<polygon fill="none" stroke="black" points="0,-298.75 0,-321.25 198,-321.25 198,-298.75 0,-298.75"/>
<text text-anchor="start" x="18.75" y="-305.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">EntityRelationshipDiagram</text>
<polygon fill="none" stroke="black" points="0,-276.25 0,-298.75 45.75,-298.75 45.75,-276.25 0,-276.25"/>
<text text-anchor="start" x="3" y="-282.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">models</text>
<polygon fill="none" stroke="black" points="45.75,-276.25 45.75,-298.75 198,-298.75 198,-276.25 45.75,-276.25"/>
<text text-anchor="start" x="48.75" y="-282.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">SortedDict[str, ModelInfo]</text>
<polygon fill="none" stroke="black" points="0,-253.75 0,-276.25 45.75,-276.25 45.75,-253.75 0,-253.75"/>
<text text-anchor="start" x="7.5" y="-259.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">edges</text>
<polygon fill="none" stroke="black" points="45.75,-253.75 45.75,-276.25 198,-276.25 198,-253.75 45.75,-253.75"/>
<text text-anchor="start" x="64.12" y="-259.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">SortedDict[str, Edge]</text>
</a>

@@ -116,7 +116,7 @@ </g>

<title>erdantic.core.EntityRelationshipDiagram:e&#45;&gt;erdantic.core.Edge:w</title>
<path fill="none" stroke="black" d="M206.57,-258.89C230.96,-249.61 220.92,-202.74 240.28,-187.97"/>
<polyline fill="none" stroke="black" points="197,-260.5 201.93,-259.67"/>
<polyline fill="none" stroke="black" points="201.93,-259.67 206.86,-258.84"/>
<polygon fill="black" stroke="black" points="245.11,-186.5 255.99,-187.9 250.22,-184.95 254.36,-183.69 254.36,-183.69 254.36,-183.69 250.22,-184.95 253.37,-179.29 245.11,-186.5"/>
<polyline fill="none" stroke="black" points="243.94,-186.85 239.16,-188.31"/>
<path fill="none" stroke="black" d="M207.62,-263.38C232.23,-253.96 221.7,-206.24 241.48,-191.55"/>
<polyline fill="none" stroke="black" points="198,-265 202.93,-264.17"/>
<polyline fill="none" stroke="black" points="202.93,-264.17 207.86,-263.34"/>
<polygon fill="black" stroke="black" points="246.09,-190.19 256.96,-191.66 251.21,-188.67 255.36,-187.44 255.36,-187.44 255.36,-187.44 251.21,-188.67 254.4,-183.03 246.09,-190.19"/>
<polyline fill="none" stroke="black" points="244.92,-190.53 240.13,-191.95"/>
</g>

@@ -127,20 +127,20 @@ <!-- erdantic.core.ModelInfo -->

<g id="a_node4"><a xlink:title="erdantic.core.ModelInfo&#10;&#10;Holds information about an analyzed data model class.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;full_name (FullyQualifiedName): Fully qualified name of the data model class.&#10; &#160;&#160;&#160;name (str): Name of the data model class.&#10; &#160;&#160;&#160;fields (Dict[str, FieldInfo]): A mapping to FieldInfo instances for each field of the data&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;model class.&#10; &#160;&#160;&#160;description (str): Docstring or other description of the data model class.&#10;">
<polygon fill="none" stroke="black" points="294,-348.5 294,-370.5 478,-370.5 478,-348.5 294,-348.5"/>
<text text-anchor="start" x="355.25" y="-355.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">ModelInfo</text>
<polygon fill="none" stroke="black" points="294,-326.5 294,-348.5 360,-348.5 360,-326.5 294,-326.5"/>
<text text-anchor="start" x="299.25" y="-332.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">full_name</text>
<polygon fill="none" stroke="black" points="360,-326.5 360,-348.5 478,-348.5 478,-326.5 360,-326.5"/>
<text text-anchor="start" x="362.75" y="-332.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="294,-304.5 294,-326.5 360,-326.5 360,-304.5 294,-304.5"/>
<text text-anchor="start" x="312" y="-310.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="360,-304.5 360,-326.5 478,-326.5 478,-304.5 360,-304.5"/>
<text text-anchor="start" x="412.25" y="-310.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="294,-282.5 294,-304.5 360,-304.5 360,-282.5 294,-282.5"/>
<text text-anchor="start" x="312" y="-288.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">fields</text>
<polygon fill="none" stroke="black" points="360,-282.5 360,-304.5 478,-304.5 478,-282.5 360,-282.5"/>
<text text-anchor="start" x="367.62" y="-288.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Dict[str, FieldInfo]</text>
<polygon fill="none" stroke="black" points="294,-260.5 294,-282.5 360,-282.5 360,-260.5 294,-260.5"/>
<text text-anchor="start" x="297" y="-266.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">description</text>
<polygon fill="none" stroke="black" points="360,-260.5 360,-282.5 478,-282.5 478,-260.5 360,-260.5"/>
<text text-anchor="start" x="412.25" y="-266.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="295.38,-354.25 295.38,-376.75 479.88,-376.75 479.88,-354.25 295.38,-354.25"/>
<text text-anchor="start" x="356.88" y="-361.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">ModelInfo</text>
<polygon fill="none" stroke="black" points="295.38,-331.75 295.38,-354.25 361.38,-354.25 361.38,-331.75 295.38,-331.75"/>
<text text-anchor="start" x="300.62" y="-337.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">full_name</text>
<polygon fill="none" stroke="black" points="361.38,-331.75 361.38,-354.25 479.88,-354.25 479.88,-331.75 361.38,-331.75"/>
<text text-anchor="start" x="364.38" y="-337.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="295.38,-309.25 295.38,-331.75 361.38,-331.75 361.38,-309.25 295.38,-309.25"/>
<text text-anchor="start" x="313.38" y="-315.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="361.38,-309.25 361.38,-331.75 479.88,-331.75 479.88,-309.25 361.38,-309.25"/>
<text text-anchor="start" x="413.88" y="-315.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="295.38,-286.75 295.38,-309.25 361.38,-309.25 361.38,-286.75 295.38,-286.75"/>
<text text-anchor="start" x="313.38" y="-292.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">fields</text>
<polygon fill="none" stroke="black" points="361.38,-286.75 361.38,-309.25 479.88,-309.25 479.88,-286.75 361.38,-286.75"/>
<text text-anchor="start" x="370.75" y="-292.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">dict[str, FieldInfo]</text>
<polygon fill="none" stroke="black" points="295.38,-264.25 295.38,-286.75 361.38,-286.75 361.38,-264.25 295.38,-264.25"/>
<text text-anchor="start" x="298.38" y="-270.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">description</text>
<polygon fill="none" stroke="black" points="361.38,-264.25 361.38,-286.75 479.88,-286.75 479.88,-264.25 361.38,-264.25"/>
<text text-anchor="start" x="413.88" y="-270.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -152,7 +152,7 @@ </g>

<title>erdantic.core.EntityRelationshipDiagram:e&#45;&gt;erdantic.core.ModelInfo:w</title>
<path fill="none" stroke="black" d="M206.76,-283.42C245.5,-291.16 243.05,-345.46 278.2,-357.25"/>
<polyline fill="none" stroke="black" points="197,-282.5 201.98,-282.97"/>
<polyline fill="none" stroke="black" points="201.98,-282.97 206.96,-283.44"/>
<polygon fill="black" stroke="black" points="282.78,-357.94 291.99,-363.9 288.06,-358.75 292.34,-359.4 292.34,-359.4 292.34,-359.4 288.06,-358.75 293.35,-355 282.78,-357.94"/>
<polyline fill="none" stroke="black" points="281.58,-357.76 276.64,-357.01"/>
<path fill="none" stroke="black" d="M207.83,-288.43C246.82,-296.27 244.12,-351.28 279.48,-363.22"/>
<polyline fill="none" stroke="black" points="198,-287.5 202.98,-287.97"/>
<polyline fill="none" stroke="black" points="202.98,-287.97 207.96,-288.44"/>
<polygon fill="black" stroke="black" points="284.16,-363.93 293.36,-369.9 289.43,-364.74 293.71,-365.4 293.71,-365.4 293.71,-365.4 289.43,-364.74 294.73,-361 284.16,-363.93"/>
<polyline fill="none" stroke="black" points="282.96,-363.75 278.01,-362.99"/>
</g>

@@ -162,10 +162,10 @@ <!-- erdantic.core.ModelInfo&#45;&gt;erdantic.core.FullyQualifiedName -->

<title>erdantic.core.ModelInfo:e&#45;&gt;erdantic.core.FullyQualifiedName:w</title>
<path fill="none" stroke="black" d="M488.75,-337.6C622.27,-340.22 678.58,-395.29 795,-322.5 835.55,-297.14 807.28,-232.87 838.55,-219.12"/>
<polyline fill="none" stroke="black" points="479,-337.5 484,-337.55"/>
<polyline fill="none" stroke="black" points="484,-337.55 489,-337.6"/>
<polyline fill="none" stroke="black" points="853,-216.5 848.08,-217.39"/>
<polygon fill="black" stroke="black" points="846.21,-212.65 847.99,-222.49 846.02,-222.85 844.24,-213.01 846.21,-212.65"/>
<polyline fill="none" stroke="black" points="848.08,-217.39 843.16,-218.28"/>
<polygon fill="black" stroke="black" points="841.29,-213.54 843.07,-223.38 841.1,-223.74 839.32,-213.9 841.29,-213.54"/>
<polyline fill="none" stroke="black" points="843.16,-218.28 838.24,-219.17"/>
<path fill="none" stroke="black" d="M490.68,-343.1C624.9,-345.73 681.74,-401.09 798.5,-327.5 839.4,-301.72 810.39,-236.59 841.91,-222.65"/>
<polyline fill="none" stroke="black" points="480.88,-343 485.87,-343.05"/>
<polyline fill="none" stroke="black" points="485.87,-343.05 490.87,-343.1"/>
<polyline fill="none" stroke="black" points="856.5,-220 851.58,-220.89"/>
<polygon fill="black" stroke="black" points="849.7,-216.15 851.49,-225.99 849.52,-226.35 847.73,-216.51 849.7,-216.15"/>
<polyline fill="none" stroke="black" points="851.58,-220.89 846.66,-221.79"/>
<polygon fill="black" stroke="black" points="844.78,-217.05 846.57,-226.89 844.6,-227.24 842.82,-217.4 844.78,-217.05"/>
<polyline fill="none" stroke="black" points="846.66,-221.79 841.74,-222.68"/>
</g>

@@ -176,16 +176,16 @@ <!-- erdantic.core.FieldInfo -->

<g id="a_node5"><a xlink:title="erdantic.core.FieldInfo&#10;&#10;Holds information about a field of an analyzed data model class.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;model_full_name (FullyQualifiedName): Fully qualified name of the data model class that&#10; &#160;&#160;&#160;&#160;&#160;&#160;&#160;the field belongs to.&#10; &#160;&#160;&#160;name (str): Name of the field.&#10; &#160;&#160;&#160;type_name (str): String representation of the field&#39;s type.&#10;">
<polygon fill="none" stroke="black" points="575,-282.5 575,-304.5 795,-304.5 795,-282.5 575,-282.5"/>
<text text-anchor="start" x="658.38" y="-289.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">FieldInfo</text>
<polygon fill="none" stroke="black" points="575,-260.5 575,-282.5 677,-282.5 677,-260.5 575,-260.5"/>
<text text-anchor="start" x="577.62" y="-266.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">model_full_name</text>
<polygon fill="none" stroke="black" points="677,-260.5 677,-282.5 795,-282.5 795,-260.5 677,-260.5"/>
<text text-anchor="start" x="679.75" y="-266.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="575,-238.5 575,-260.5 677,-260.5 677,-238.5 575,-238.5"/>
<text text-anchor="start" x="611" y="-244.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="677,-238.5 677,-260.5 795,-260.5 795,-238.5 677,-238.5"/>
<text text-anchor="start" x="729.25" y="-244.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="575,-216.5 575,-238.5 677,-238.5 677,-216.5 575,-216.5"/>
<text text-anchor="start" x="596" y="-222.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">type_name</text>
<polygon fill="none" stroke="black" points="677,-216.5 677,-238.5 795,-238.5 795,-216.5 677,-216.5"/>
<text text-anchor="start" x="729.25" y="-222.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="577.25,-287 577.25,-309.5 798.5,-309.5 798.5,-287 577.25,-287"/>
<text text-anchor="start" x="661.25" y="-294.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">FieldInfo</text>
<polygon fill="none" stroke="black" points="577.25,-264.5 577.25,-287 680,-287 680,-264.5 577.25,-264.5"/>
<text text-anchor="start" x="580.25" y="-270.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">model_full_name</text>
<polygon fill="none" stroke="black" points="680,-264.5 680,-287 798.5,-287 798.5,-264.5 680,-264.5"/>
<text text-anchor="start" x="683" y="-270.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">FullyQualifiedName</text>
<polygon fill="none" stroke="black" points="577.25,-242 577.25,-264.5 680,-264.5 680,-242 577.25,-242"/>
<text text-anchor="start" x="613.62" y="-248.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="680,-242 680,-264.5 798.5,-264.5 798.5,-242 680,-242"/>
<text text-anchor="start" x="732.5" y="-248.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="577.25,-219.5 577.25,-242 680,-242 680,-219.5 577.25,-219.5"/>
<text text-anchor="start" x="598.62" y="-225.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">type_name</text>
<polygon fill="none" stroke="black" points="680,-219.5 680,-242 798.5,-242 798.5,-219.5 680,-219.5"/>
<text text-anchor="start" x="732.5" y="-225.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -197,7 +197,7 @@ </g>

<title>erdantic.core.ModelInfo:e&#45;&gt;erdantic.core.FieldInfo:w</title>
<path fill="none" stroke="black" d="M488.89,-293.5C518.75,-293.5 531.96,-293.5 559.94,-293.5"/>
<polyline fill="none" stroke="black" points="479,-293.5 484,-293.5"/>
<polyline fill="none" stroke="black" points="484,-293.5 489,-293.5"/>
<polygon fill="black" stroke="black" points="564.67,-293.5 574.67,-298 570,-293.5 574.33,-293.5 574.33,-293.5 574.33,-293.5 570,-293.5 574.67,-289 564.67,-293.5"/>
<polyline fill="none" stroke="black" points="563.45,-293.5 558.45,-293.5"/>
<path fill="none" stroke="black" d="M490.8,-298C520.78,-298.03 534.04,-298.19 562.13,-298.24"/>
<polyline fill="none" stroke="black" points="480.88,-298 485.87,-298"/>
<polyline fill="none" stroke="black" points="485.87,-298 490.87,-298"/>
<polygon fill="black" stroke="black" points="566.92,-298.24 576.91,-302.75 572.25,-298.25 576.58,-298.25 576.58,-298.25 576.58,-298.25 572.25,-298.25 576.92,-293.75 566.92,-298.24"/>
<polyline fill="none" stroke="black" points="565.7,-298.24 560.7,-298.24"/>
</g>

@@ -207,12 +207,12 @@ <!-- erdantic.core.FieldInfo&#45;&gt;erdantic.core.FullyQualifiedName -->

<title>erdantic.core.FieldInfo:e&#45;&gt;erdantic.core.FullyQualifiedName:w</title>
<path fill="none" stroke="black" d="M804.73,-269.79C823.89,-262.25 822.8,-231.78 838.77,-220.62"/>
<polyline fill="none" stroke="black" points="795,-271.5 799.92,-270.64"/>
<polyline fill="none" stroke="black" points="799.92,-270.64 804.85,-269.77"/>
<polyline fill="none" stroke="black" points="853,-216.5 848.2,-217.89"/>
<polygon fill="black" stroke="black" points="845.85,-213.37 848.63,-222.97 846.71,-223.53 843.92,-213.92 845.85,-213.37"/>
<polyline fill="none" stroke="black" points="848.2,-217.89 843.39,-219.28"/>
<polygon fill="black" stroke="black" points="841.04,-214.76 843.83,-224.36 841.9,-224.92 839.12,-215.31 841.04,-214.76"/>
<polyline fill="none" stroke="black" points="843.39,-219.28 838.59,-220.67"/>
<path fill="none" stroke="black" d="M808.28,-274.02C827.52,-266.37 826.21,-235.49 842.2,-224.18"/>
<polyline fill="none" stroke="black" points="798.5,-275.75 803.42,-274.88"/>
<polyline fill="none" stroke="black" points="803.42,-274.88 808.35,-274.01"/>
<polyline fill="none" stroke="black" points="856.5,-220 851.7,-221.4"/>
<polygon fill="black" stroke="black" points="849.34,-216.88 852.14,-226.48 850.22,-227.04 847.42,-217.45 849.34,-216.88"/>
<polyline fill="none" stroke="black" points="851.7,-221.4 846.9,-222.81"/>
<polygon fill="black" stroke="black" points="844.54,-218.29 847.34,-227.89 845.42,-228.45 842.62,-218.85 844.54,-218.29"/>
<polyline fill="none" stroke="black" points="846.9,-222.81 842.1,-224.21"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 9.0.0 (0)
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="686pt" height="309pt"
viewBox="0.00 0.00 686.00 308.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 304.5)">
<svg width="685pt" height="314pt"
viewBox="0.00 0.00 685.25 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-304.5 682,-304.5 682,4 -4,4"/>
<text text-anchor="middle" x="339" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic v1.0.0.dev0 &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 681.25,-309.75 681.25,4 -4,4"/>
<text text-anchor="middle" x="338.62" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic v1.1.1.dev0 &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.pydantic.Adventurer -->

@@ -17,20 +17,20 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.pydantic.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10;">
<polygon fill="none" stroke="black" points="312,-274.5 312,-296.5 438,-296.5 438,-274.5 312,-274.5"/>
<text text-anchor="start" x="341.25" y="-281.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="312,-252.5 312,-274.5 374,-274.5 374,-252.5 312,-252.5"/>
<text text-anchor="start" x="328" y="-258.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="374,-252.5 374,-274.5 438,-274.5 438,-252.5 374,-252.5"/>
<text text-anchor="start" x="399.25" y="-258.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="312,-230.5 312,-252.5 374,-252.5 374,-230.5 312,-230.5"/>
<text text-anchor="start" x="314.88" y="-236.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="374,-230.5 374,-252.5 438,-252.5 438,-230.5 374,-230.5"/>
<text text-anchor="start" x="399.25" y="-236.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="312,-208.5 312,-230.5 374,-230.5 374,-208.5 312,-208.5"/>
<text text-anchor="start" x="315.62" y="-214.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="374,-208.5 374,-230.5 438,-230.5 438,-208.5 374,-208.5"/>
<text text-anchor="start" x="376.75" y="-214.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="312,-186.5 312,-208.5 374,-208.5 374,-186.5 312,-186.5"/>
<text text-anchor="start" x="329.88" y="-192.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="374,-186.5 374,-208.5 438,-208.5 438,-186.5 374,-186.5"/>
<text text-anchor="start" x="398.88" y="-192.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="309.38,-279.25 309.38,-301.75 436.12,-301.75 436.12,-279.25 309.38,-279.25"/>
<text text-anchor="start" x="339" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="309.38,-256.75 309.38,-279.25 371.62,-279.25 371.62,-256.75 309.38,-256.75"/>
<text text-anchor="start" x="325.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="371.62,-256.75 371.62,-279.25 436.12,-279.25 436.12,-256.75 371.62,-256.75"/>
<text text-anchor="start" x="397.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-234.25 309.38,-256.75 371.62,-256.75 371.62,-234.25 309.38,-234.25"/>
<text text-anchor="start" x="312.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="371.62,-234.25 371.62,-256.75 436.12,-256.75 436.12,-234.25 371.62,-234.25"/>
<text text-anchor="start" x="397.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-211.75 309.38,-234.25 371.62,-234.25 371.62,-211.75 309.38,-211.75"/>
<text text-anchor="start" x="313.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="371.62,-211.75 371.62,-234.25 436.12,-234.25 436.12,-211.75 371.62,-211.75"/>
<text text-anchor="start" x="374.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="309.38,-189.25 309.38,-211.75 371.62,-211.75 371.62,-189.25 309.38,-189.25"/>
<text text-anchor="start" x="327.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="371.62,-189.25 371.62,-211.75 436.12,-211.75 436.12,-189.25 371.62,-189.25"/>
<text text-anchor="start" x="396.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -42,21 +42,21 @@ </g>

<title>erdantic.examples.pydantic.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-278.5 0,-300.5 196,-300.5 196,-278.5 0,-278.5"/>
<text text-anchor="start" x="81.88" y="-285.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-256.5 0,-278.5 99,-278.5 99,-256.5 0,-256.5"/>
<text text-anchor="start" x="34.5" y="-262.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99,-256.5 99,-278.5 196,-278.5 196,-256.5 99,-256.5"/>
<text text-anchor="start" x="140.75" y="-262.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-234.5 0,-256.5 99,-256.5 99,-234.5 0,-234.5"/>
<text text-anchor="start" x="2.62" y="-240.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99,-234.5 99,-256.5 196,-256.5 196,-234.5 99,-234.5"/>
<text text-anchor="start" x="123.88" y="-240.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-212.5 0,-234.5 99,-234.5 99,-212.5 0,-212.5"/>
<text text-anchor="start" x="24" y="-218.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99,-212.5 99,-234.5 196,-234.5 196,-212.5 99,-212.5"/>
<text text-anchor="start" x="101.75" y="-218.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-190.5 0,-212.5 99,-212.5 99,-190.5 0,-190.5"/>
<text text-anchor="start" x="15.75" y="-196.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99,-190.5 99,-212.5 196,-212.5 196,-190.5 99,-190.5"/>
<text text-anchor="start" x="103.62" y="-196.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 193.5,-305.75 193.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="80.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
</a>

@@ -68,7 +68,7 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Adventurer:w</title>
<path fill="none" stroke="black" d="M205.92,-224.15C249.25,-230.11 255.51,-274.88 295.89,-283.91"/>
<polyline fill="none" stroke="black" points="196,-223.5 200.99,-223.83"/>
<polyline fill="none" stroke="black" points="200.99,-223.83 205.98,-224.16"/>
<polygon fill="black" stroke="black" points="300.72,-284.42 310.2,-289.94 306.03,-284.98 310.33,-285.43 310.33,-285.43 310.33,-285.43 306.03,-284.98 311.14,-280.99 300.72,-284.42"/>
<polyline fill="none" stroke="black" points="299.51,-284.29 294.54,-283.77"/>
<path fill="none" stroke="black" d="M203.46,-227.67C246.93,-233.77 252.74,-279.62 293.21,-288.88"/>
<polyline fill="none" stroke="black" points="193.5,-227 198.49,-227.34"/>
<polyline fill="none" stroke="black" points="198.49,-227.34 203.48,-227.67"/>
<polygon fill="black" stroke="black" points="298.1,-289.4 307.56,-294.94 303.4,-289.97 307.71,-290.43 307.71,-290.43 307.71,-290.43 303.4,-289.97 308.52,-285.99 298.1,-289.4"/>
<polyline fill="none" stroke="black" points="296.89,-289.27 291.92,-288.74"/>
</g>

@@ -79,16 +79,16 @@ <!-- erdantic.examples.pydantic.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.pydantic.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="304,-128.5 304,-150.5 446,-150.5 446,-128.5 304,-128.5"/>
<text text-anchor="start" x="357.75" y="-135.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="304,-106.5 304,-128.5 378,-128.5 378,-106.5 304,-106.5"/>
<text text-anchor="start" x="326" y="-112.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="378,-106.5 378,-128.5 446,-128.5 446,-106.5 378,-106.5"/>
<text text-anchor="start" x="405.25" y="-112.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="304,-84.5 304,-106.5 378,-106.5 378,-84.5 304,-84.5"/>
<text text-anchor="start" x="327.12" y="-90.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="378,-84.5 378,-106.5 446,-106.5 446,-84.5 378,-84.5"/>
<text text-anchor="start" x="380.88" y="-90.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="304,-62.5 304,-84.5 378,-84.5 378,-62.5 304,-62.5"/>
<text text-anchor="start" x="306.88" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="378,-62.5 378,-84.5 446,-84.5 446,-62.5 378,-62.5"/>
<text text-anchor="start" x="404.88" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="301.5,-131 301.5,-153.5 444,-153.5 444,-131 301.5,-131"/>
<text text-anchor="start" x="355.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="301.5,-108.5 301.5,-131 375.75,-131 375.75,-108.5 301.5,-108.5"/>
<text text-anchor="start" x="323.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.75,-108.5 375.75,-131 444,-131 444,-108.5 375.75,-108.5"/>
<text text-anchor="start" x="403.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="301.5,-86 301.5,-108.5 375.75,-108.5 375.75,-86 301.5,-86"/>
<text text-anchor="start" x="324.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="375.75,-86 375.75,-108.5 444,-108.5 444,-86 375.75,-86"/>
<text text-anchor="start" x="378.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="301.5,-63.5 301.5,-86 375.75,-86 375.75,-63.5 301.5,-63.5"/>
<text text-anchor="start" x="304.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="375.75,-63.5 375.75,-86 444,-86 444,-63.5 375.75,-63.5"/>
<text text-anchor="start" x="402.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -100,9 +100,9 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Quest:w</title>
<path fill="none" stroke="black" d="M205.73,-200.8C245.01,-194.92 251.04,-153.51 285.33,-142.29"/>
<polyline fill="none" stroke="black" points="196,-201.5 200.99,-201.14"/>
<polyline fill="none" stroke="black" points="200.99,-201.14 205.97,-200.79"/>
<polyline fill="none" stroke="black" points="304,-139.5 299.06,-140.24"/>
<polygon fill="black" stroke="black" points="297.33,-135.44 298.81,-145.33 296.83,-145.63 295.35,-135.74 297.33,-135.44"/>
<polyline fill="none" stroke="black" points="299.06,-140.24 294.11,-140.98"/>
<ellipse fill="none" stroke="black" cx="289.66" cy="-141.65" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M203.23,-203.8C242.55,-197.9 248.51,-156.32 282.82,-145.06"/>
<polyline fill="none" stroke="black" points="193.5,-204.5 198.49,-204.14"/>
<polyline fill="none" stroke="black" points="198.49,-204.14 203.47,-203.78"/>
<polyline fill="none" stroke="black" points="301.5,-142.25 296.56,-142.99"/>
<polygon fill="black" stroke="black" points="294.82,-138.2 296.31,-148.09 294.33,-148.38 292.85,-138.49 294.82,-138.2"/>
<polyline fill="none" stroke="black" points="296.56,-142.99 291.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="287.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -113,16 +113,16 @@ <!-- erdantic.examples.pydantic.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.pydantic.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="554,-84.5 554,-106.5 678,-106.5 678,-84.5 554,-84.5"/>
<text text-anchor="start" x="581.88" y="-91.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="554,-62.5 554,-84.5 603,-84.5 603,-62.5 554,-62.5"/>
<text text-anchor="start" x="563.5" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="603,-62.5 603,-84.5 678,-84.5 678,-62.5 603,-62.5"/>
<text text-anchor="start" x="633.75" y="-68.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="554,-40.5 554,-62.5 603,-62.5 603,-40.5 554,-40.5"/>
<text text-anchor="start" x="559.75" y="-46.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="603,-40.5 603,-62.5 678,-62.5 678,-40.5 603,-40.5"/>
<text text-anchor="start" x="605.62" y="-46.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="554,-18.5 554,-40.5 603,-40.5 603,-18.5 554,-18.5"/>
<text text-anchor="start" x="556.75" y="-24.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="603,-18.5 603,-40.5 678,-40.5 678,-18.5 603,-18.5"/>
<text text-anchor="start" x="633.75" y="-24.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-86 552,-108.5 677.25,-108.5 677.25,-86 552,-86"/>
<text text-anchor="start" x="580.5" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="552,-63.5 552,-86 601.5,-86 601.5,-63.5 552,-63.5"/>
<text text-anchor="start" x="561.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="601.5,-63.5 601.5,-86 677.25,-86 677.25,-63.5 601.5,-63.5"/>
<text text-anchor="start" x="632.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-41 552,-63.5 601.5,-63.5 601.5,-41 552,-41"/>
<text text-anchor="start" x="558" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="601.5,-41 601.5,-63.5 677.25,-63.5 677.25,-41 601.5,-41"/>
<text text-anchor="start" x="604.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="552,-18.5 552,-41 601.5,-41 601.5,-18.5 552,-18.5"/>
<text text-anchor="start" x="555" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="601.5,-18.5 601.5,-41 677.25,-41 677.25,-18.5 601.5,-18.5"/>
<text text-anchor="start" x="632.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -134,12 +134,12 @@ </g>

<title>erdantic.examples.pydantic.Quest:e&#45;&gt;erdantic.examples.pydantic.QuestGiver:w</title>
<path fill="none" stroke="black" d="M455.87,-95.5C491.07,-95.5 505.8,-95.5 539.08,-95.5"/>
<polyline fill="none" stroke="black" points="446,-95.5 451,-95.5"/>
<polyline fill="none" stroke="black" points="451,-95.5 456,-95.5"/>
<polyline fill="none" stroke="black" points="554,-95.5 549,-95.5"/>
<polygon fill="black" stroke="black" points="548,-90.5 548,-100.5 546,-100.5 546,-90.5 548,-90.5"/>
<polyline fill="none" stroke="black" points="549,-95.5 544,-95.5"/>
<polygon fill="black" stroke="black" points="543,-90.5 543,-100.5 541,-100.5 541,-90.5 543,-90.5"/>
<polyline fill="none" stroke="black" points="544,-95.5 539,-95.5"/>
<path fill="none" stroke="black" d="M453.87,-97.25C489.07,-97.25 503.8,-97.25 537.08,-97.25"/>
<polyline fill="none" stroke="black" points="444,-97.25 449,-97.25"/>
<polyline fill="none" stroke="black" points="449,-97.25 454,-97.25"/>
<polyline fill="none" stroke="black" points="552,-97.25 547,-97.25"/>
<polygon fill="black" stroke="black" points="546,-92.25 546,-102.25 544,-102.25 544,-92.25 546,-92.25"/>
<polyline fill="none" stroke="black" points="547,-97.25 542,-97.25"/>
<polygon fill="black" stroke="black" points="541,-92.25 541,-102.25 539,-102.25 539,-92.25 541,-92.25"/>
<polyline fill="none" stroke="black" points="542,-97.25 537,-97.25"/>
</g>
</g>
</svg>

@@ -12,3 +12,3 @@ import inspect

logger = logging.getLogger("mkdocs")
runner = CliRunner(mix_stderr=False)
runner = CliRunner()

@@ -15,0 +15,0 @@ REPO_ROOT = Path(__file__).resolve().parents[1]

@@ -6,3 +6,3 @@ from enum import Enum

from types import ModuleType
from typing import TYPE_CHECKING, Annotated, List, Optional, Union
from typing import TYPE_CHECKING, Annotated, Optional, Union

@@ -78,3 +78,3 @@ import typer

models_or_modules: Annotated[
List[str],
list[str],
typer.Argument(

@@ -94,3 +94,3 @@ help=(

terminal_models: Annotated[
List[str],
list[str],
typer.Option(

@@ -107,3 +107,3 @@ "--terminal-model",

termini: Annotated[
List[str],
list[str],
typer.Option(

@@ -115,3 +115,3 @@ "--terminus",

limit_search_models_to: Annotated[
List[AvailablePluginKeys],
list[AvailablePluginKeys],
typer.Option(

@@ -118,0 +118,0 @@ "--limit-search-models-to",

@@ -0,1 +1,2 @@

from collections.abc import Mapping
import inspect

@@ -5,3 +6,3 @@ import logging

from types import ModuleType
from typing import Any, Collection, Iterator, Mapping, Optional, Union
from typing import Any, Collection, Iterator, Optional, Union
import warnings

@@ -8,0 +9,0 @@

@@ -0,1 +1,2 @@

from collections.abc import Mapping
from enum import Enum

@@ -9,3 +10,3 @@ from functools import total_ordering

import textwrap
from typing import Any, Dict, Generic, Mapping, Optional, Type, TypeVar, Union, get_args
from typing import Any, Dict, Generic, Optional, Type, TypeVar, Union, get_args

@@ -12,0 +13,0 @@ if sys.version_info >= (3, 11):

@@ -6,3 +6,3 @@ """Example data model classes using standard library's

from enum import Enum
from typing import List, Optional
from typing import Optional

@@ -78,3 +78,3 @@ from attrs import define, field

formed_datetime (datetime): Timestamp of when the party was formed
members (List[Adventurer]): Adventurers that belong to this party
members (list[Adventurer]): Adventurers that belong to this party
active_quest (Optional[Quest]): Current quest that party is actively tackling

@@ -85,3 +85,3 @@ """

formed_datetime: datetime
members: List[Adventurer] = field(factory=list)
members: list[Adventurer] = field(factory=list)
active_quest: Optional[Quest] = None

@@ -7,3 +7,3 @@ """Example data model classes using standard library's

from enum import Enum
from typing import List, Optional
from typing import Optional

@@ -77,3 +77,3 @@

formed_datetime (datetime): Timestamp of when the party was formed
members (List[Adventurer]): Adventurers that belong to this party
members (list[Adventurer]): Adventurers that belong to this party
active_quest (Optional[Quest]): Current quest that party is actively tackling

@@ -84,3 +84,3 @@ """

formed_datetime: datetime
members: List[Adventurer] = field(default_factory=list)
members: list[Adventurer] = field(default_factory=list)
active_quest: Optional[Quest] = None

@@ -5,3 +5,3 @@ """Example struct classes using [msgspec](https://jcristharif.com/msgspec/)."""

from enum import Enum
from typing import List, Optional
from typing import Optional

@@ -73,3 +73,3 @@ import msgspec

formed_datetime (datetime): Timestamp of when the party was formed
members (List[Adventurer]): Adventurers that belong to this party
members (list[Adventurer]): Adventurers that belong to this party
active_quest (Optional[Quest]): Current quest that party is actively tackling

@@ -80,3 +80,3 @@ """

formed_datetime: datetime
members: List[Adventurer] = []
members: list[Adventurer] = []
active_quest: Optional[Quest] = None

@@ -6,3 +6,3 @@ """Example data model classes using legacy

from enum import Enum
from typing import List, Optional
from typing import Optional

@@ -74,3 +74,3 @@ from pydantic.v1 import BaseModel

formed_datetime (datetime): Timestamp of when the party was formed
members (List[Adventurer]): Adventurers that belong to this party
members (list[Adventurer]): Adventurers that belong to this party
active_quest (Optional[Quest]): Current quest that party is actively tackling

@@ -81,3 +81,3 @@ """

formed_datetime: datetime
members: List[Adventurer] = []
members: list[Adventurer] = []
active_quest: Optional[Quest] = None

@@ -5,3 +5,3 @@ """Example data model classes using [Pydantic](https://pydantic-docs.helpmanual.io/)."""

from enum import Enum
from typing import List, Optional
from typing import Optional

@@ -73,3 +73,3 @@ from pydantic import BaseModel

formed_datetime (datetime): Timestamp of when the party was formed
members (List[Adventurer]): Adventurers that belong to this party
members (list[Adventurer]): Adventurers that belong to this party
active_quest (Optional[Quest]): Current quest that party is actively tackling

@@ -80,3 +80,3 @@ """

formed_datetime: datetime
members: List[Adventurer] = []
members: list[Adventurer] = []
active_quest: Optional[Quest] = None
import sys
from typing import TYPE_CHECKING, List
from typing import TYPE_CHECKING

@@ -121,6 +121,6 @@ if TYPE_CHECKING:

model (type): The model class that was not recognized.
available_plugins (List[str]): List of plugin keys that were available.
available_plugins (list[str]): List of plugin keys that were available.
"""
def __init__(self, *args, model: type, available_plugins: List[str]):
def __init__(self, *args, model: type, available_plugins: list[str]):
mro = getattr(model, "__mro__", str(model))

@@ -127,0 +127,0 @@ message = (

import importlib.metadata
import logging
import sys
from typing import TYPE_CHECKING, Any, List, Optional, Protocol, Sequence, TypeVar
from typing import TYPE_CHECKING, Any, Optional, Protocol, Sequence, TypeVar

@@ -78,3 +78,3 @@ if sys.version_info >= (3, 10):

def list_plugins() -> List[str]:
def list_plugins() -> list[str]:
"""List the keys of all registered plugins."""

@@ -81,0 +81,0 @@ return list(_dict.keys())

import re
import sys
from typing import Any, List, Type
from typing import Any, Type

@@ -31,3 +31,3 @@ if sys.version_info >= (3, 10):

def get_fields_from_attrs_class(model: AttrsClassType) -> List[FieldInfo]:
def get_fields_from_attrs_class(model: AttrsClassType) -> list[FieldInfo]:
"""Given an attrs class, return a list of FieldInfo instances for each field in the class.

@@ -39,3 +39,3 @@

Returns:
List[FieldInfo]: List of FieldInfo instances for each field in the class
list[FieldInfo]: List of FieldInfo instances for each field in the class
"""

@@ -42,0 +42,0 @@ try:

import dataclasses
import re
import sys
from typing import TYPE_CHECKING, Any, List, Type, cast, get_type_hints
from typing import TYPE_CHECKING, Any, Type, cast, get_type_hints

@@ -34,3 +34,3 @@ if sys.version_info >= (3, 10):

def get_fields_from_dataclass(model: DataclassType) -> List[FieldInfo]:
def get_fields_from_dataclass(model: DataclassType) -> list[FieldInfo]:
"""Given a dataclass, return a list of FieldInfo instances for each field in the class.

@@ -42,3 +42,3 @@

Returns:
List[FieldInfo]: List of FieldInfo instances for each field in the class
list[FieldInfo]: List of FieldInfo instances for each field in the class
"""

@@ -45,0 +45,0 @@ try:

import re
import sys
from typing import Any, List, Type
from typing import Any, Type

@@ -31,3 +31,3 @@ if sys.version_info >= (3, 10):

def get_fields_from_msgspec_struct(model: MsgspecStruct) -> List[FieldInfo]:
def get_fields_from_msgspec_struct(model: MsgspecStruct) -> list[FieldInfo]:
"""Given a msgspec struct, return a list of FieldInfo instances for each field in the

@@ -40,3 +40,3 @@ struct.

Returns:
List[FieldInfo]: List of FieldInfo instances for each field in the struct
list[FieldInfo]: List of FieldInfo instances for each field in the struct
"""

@@ -43,0 +43,0 @@ try:

import re
import sys
from typing import Any, List, Optional, Type
from typing import Any, Optional, Type

@@ -34,3 +34,3 @@ if sys.version_info >= (3, 10):

def get_fields_from_pydantic_model(model: PydanticModel) -> List[FieldInfo]:
def get_fields_from_pydantic_model(model: PydanticModel) -> list[FieldInfo]:
"""Given a Pydantic model, return a list of FieldInfo instances for each field in the model.

@@ -42,7 +42,7 @@

Returns:
List[FieldInfo]: List of FieldInfo instances for each field in the model
list[FieldInfo]: List of FieldInfo instances for each field in the model
"""
try:
# Rebuild model schema to resolve forward references
model.model_rebuild()
model.model_rebuild(force=True)
except pydantic.errors.PydanticUndefinedAnnotation as e:

@@ -93,3 +93,3 @@ model_full_name = FullyQualifiedName.from_object(model)

def get_fields_from_pydantic_v1_model(model: PydanticV1Model) -> List[FieldInfo]:
def get_fields_from_pydantic_v1_model(model: PydanticV1Model) -> list[FieldInfo]:
"""Given a Pydantic V1 model, return a list of FieldInfo instances for each field in the model.

@@ -101,3 +101,3 @@

Returns:
List[FieldInfo]: List of FieldInfo instances for each field in the model
list[FieldInfo]: List of FieldInfo instances for each field in the model
"""

@@ -104,0 +104,0 @@ try:

import collections.abc
import sys
from typing import Any, ForwardRef, Iterator, List, Literal, TypeVar, Union, get_args, get_origin
from typing import Any, ForwardRef, Iterator, Literal, TypeVar, Union, get_args, get_origin

@@ -63,3 +63,3 @@ from typenames import BaseNode, GenericNode, parse_type_tree

def get_depth1_bases(tp: type) -> List[type]:
def get_depth1_bases(tp: type) -> list[type]:
"""Returns depth-1 base classes of a type."""

@@ -70,3 +70,3 @@ bases_of_bases = {bb for b in tp.__mro__[1:] for bb in b.__mro__[1:]}

def get_recursive_args(tp: _TypeForm) -> List[_TypeForm]:
def get_recursive_args(tp: _TypeForm) -> list[_TypeForm]:
"""Recursively finds leaf-node types of possibly-nested generic type."""

@@ -73,0 +73,0 @@

Metadata-Version: 2.4
Name: erdantic
Version: 1.1.0.post1
Version: 1.1.1
Summary: Entity relationship diagrams for Python data model classes like Pydantic.

@@ -49,3 +49,3 @@ Project-URL: Repository, https://github.com/drivendataorg/erdantic

**erdantic** is a simple tool for drawing [entity relationship diagrams (ERDs)](https://en.wikipedia.org/wiki/Data_modeling#Entity%E2%80%93relationship_diagrams) for Python data model classes. Diagrams are rendered using the venerable [Graphviz](https://graphviz.org/) library. Supported data modeling frameworks are:
**erdantic** is a simple tool for drawing [entity relationship diagrams (ERDs)](https://en.wikipedia.org/wiki/Data_modeling#Entity%E2%80%93relationship_diagrams) for Python data model classes. Diagrams are rendered using the [Graphviz](https://graphviz.org/) library. Supported data modeling frameworks are:

@@ -62,2 +62,4 @@ - [Pydantic V2](https://docs.pydantic.dev/latest/)

Type annotations are formatted using the [typenames](https://github.com/drivendataorg/typenames) library.
## Installation

@@ -82,5 +84,7 @@

```bash
pip install git+https://github.com/drivendataorg/erdantic.git#egg=erdantic
pip install "erdantic @ git+https://github.com/drivendataorg/erdantic.git"
```
See [pip's documentation](https://pip.pypa.io/en/stable/topics/vcs-support) for more on how to specify VCS dependencies.
## Quick usage

@@ -87,0 +91,0 @@

[project]
name = "erdantic"
version = "1.1.0.post1"
version = "1.1.1"
description = "Entity relationship diagrams for Python data model classes like Pydantic."

@@ -82,2 +82,3 @@ readme = "README.md"

"pytest-cov",
"pytest-echo",
"rich",

@@ -144,3 +145,3 @@ ]

minversion = "6.0"
addopts = "--cov=erdantic --cov-report=term --cov-report=html --cov-report=xml --cov-append"
addopts = "--cov=erdantic --cov-report=term --cov-report=html --cov-report=xml --cov-append --echo-version=*"
testpaths = ["tests"]

@@ -147,0 +148,0 @@

@@ -10,3 +10,3 @@ # erdantic: Entity Relationship Diagrams

**erdantic** is a simple tool for drawing [entity relationship diagrams (ERDs)](https://en.wikipedia.org/wiki/Data_modeling#Entity%E2%80%93relationship_diagrams) for Python data model classes. Diagrams are rendered using the venerable [Graphviz](https://graphviz.org/) library. Supported data modeling frameworks are:
**erdantic** is a simple tool for drawing [entity relationship diagrams (ERDs)](https://en.wikipedia.org/wiki/Data_modeling#Entity%E2%80%93relationship_diagrams) for Python data model classes. Diagrams are rendered using the [Graphviz](https://graphviz.org/) library. Supported data modeling frameworks are:

@@ -23,2 +23,4 @@ - [Pydantic V2](https://docs.pydantic.dev/latest/)

Type annotations are formatted using the [typenames](https://github.com/drivendataorg/typenames) library.
## Installation

@@ -43,5 +45,7 @@

```bash
pip install git+https://github.com/drivendataorg/erdantic.git#egg=erdantic
pip install "erdantic @ git+https://github.com/drivendataorg/erdantic.git"
```
See [pip's documentation](https://pip.pypa.io/en/stable/topics/vcs-support) for more on how to specify VCS dependencies.
## Quick usage

@@ -48,0 +52,0 @@

@@ -74,3 +74,3 @@ {

"name": "members",
"type_name": "List[Adventurer]"
"type_name": "list[Adventurer]"
},

@@ -86,3 +86,3 @@ "active_quest": {

},
"description": "erdantic.examples.attrs.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (List[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
"description": "erdantic.examples.attrs.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (list[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
},

@@ -89,0 +89,0 @@ "erdantic.examples.attrs.Quest": {

@@ -7,8 +7,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="689pt" height="314pt"
viewBox="0.00 0.00 689.00 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="685pt" height="314pt"
viewBox="0.00 0.00 685.25 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 685,-309.75 685,4 -4,4"/>
<text text-anchor="middle" x="340.5" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 681.25,-309.75 681.25,4 -4,4"/>
<text text-anchor="middle" x="338.62" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.attrs.Adventurer -->

@@ -18,20 +18,20 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.attrs.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10;">
<polygon fill="none" stroke="black" points="313.12,-279.25 313.12,-301.75 439.88,-301.75 439.88,-279.25 313.12,-279.25"/>
<text text-anchor="start" x="342.75" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="313.12,-256.75 313.12,-279.25 375.38,-279.25 375.38,-256.75 313.12,-256.75"/>
<text text-anchor="start" x="329.25" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.38,-256.75 375.38,-279.25 439.88,-279.25 439.88,-256.75 375.38,-256.75"/>
<text text-anchor="start" x="400.88" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-234.25 313.12,-256.75 375.38,-256.75 375.38,-234.25 313.12,-234.25"/>
<text text-anchor="start" x="316.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="375.38,-234.25 375.38,-256.75 439.88,-256.75 439.88,-234.25 375.38,-234.25"/>
<text text-anchor="start" x="400.88" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-211.75 313.12,-234.25 375.38,-234.25 375.38,-211.75 313.12,-211.75"/>
<text text-anchor="start" x="316.88" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="375.38,-211.75 375.38,-234.25 439.88,-234.25 439.88,-211.75 375.38,-211.75"/>
<text text-anchor="start" x="378.38" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="313.12,-189.25 313.12,-211.75 375.38,-211.75 375.38,-189.25 313.12,-189.25"/>
<text text-anchor="start" x="331.12" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="375.38,-189.25 375.38,-211.75 439.88,-211.75 439.88,-189.25 375.38,-189.25"/>
<text text-anchor="start" x="400.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="309.38,-279.25 309.38,-301.75 436.12,-301.75 436.12,-279.25 309.38,-279.25"/>
<text text-anchor="start" x="339" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="309.38,-256.75 309.38,-279.25 371.62,-279.25 371.62,-256.75 309.38,-256.75"/>
<text text-anchor="start" x="325.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="371.62,-256.75 371.62,-279.25 436.12,-279.25 436.12,-256.75 371.62,-256.75"/>
<text text-anchor="start" x="397.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-234.25 309.38,-256.75 371.62,-256.75 371.62,-234.25 309.38,-234.25"/>
<text text-anchor="start" x="312.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="371.62,-234.25 371.62,-256.75 436.12,-256.75 436.12,-234.25 371.62,-234.25"/>
<text text-anchor="start" x="397.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-211.75 309.38,-234.25 371.62,-234.25 371.62,-211.75 309.38,-211.75"/>
<text text-anchor="start" x="313.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="371.62,-211.75 371.62,-234.25 436.12,-234.25 436.12,-211.75 371.62,-211.75"/>
<text text-anchor="start" x="374.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="309.38,-189.25 309.38,-211.75 371.62,-211.75 371.62,-189.25 309.38,-189.25"/>
<text text-anchor="start" x="327.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="371.62,-189.25 371.62,-211.75 436.12,-211.75 436.12,-189.25 371.62,-189.25"/>
<text text-anchor="start" x="396.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -43,21 +43,21 @@ </g>

<title>erdantic.examples.attrs.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.attrs.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 197.25,-305.75 197.25,-283.25 0,-283.25"/>
<text text-anchor="start" x="82.5" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<g id="a_node2"><a xlink:title="erdantic.examples.attrs.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 193.5,-305.75 193.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="80.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 197.25,-283.25 197.25,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="141.75" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 197.25,-260.75 197.25,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="124.88" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 197.25,-238.25 197.25,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="102.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 197.25,-215.75 197.25,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="104.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
</a>

@@ -69,7 +69,7 @@ </g>

<title>erdantic.examples.attrs.Party:e&#45;&gt;erdantic.examples.attrs.Adventurer:w</title>
<path fill="none" stroke="black" d="M207.21,-227.67C250.68,-233.77 256.49,-279.62 296.96,-288.88"/>
<polyline fill="none" stroke="black" points="197.25,-227 202.24,-227.34"/>
<polyline fill="none" stroke="black" points="202.24,-227.34 207.23,-227.67"/>
<polygon fill="black" stroke="black" points="301.85,-289.4 311.31,-294.94 307.15,-289.97 311.46,-290.43 311.46,-290.43 311.46,-290.43 307.15,-289.97 312.27,-285.99 301.85,-289.4"/>
<polyline fill="none" stroke="black" points="300.64,-289.27 295.67,-288.74"/>
<path fill="none" stroke="black" d="M203.46,-227.67C246.93,-233.77 252.74,-279.62 293.21,-288.88"/>
<polyline fill="none" stroke="black" points="193.5,-227 198.49,-227.34"/>
<polyline fill="none" stroke="black" points="198.49,-227.34 203.48,-227.67"/>
<polygon fill="black" stroke="black" points="298.1,-289.4 307.56,-294.94 303.4,-289.97 307.71,-290.43 307.71,-290.43 307.71,-290.43 303.4,-289.97 308.52,-285.99 298.1,-289.4"/>
<polyline fill="none" stroke="black" points="296.89,-289.27 291.92,-288.74"/>
</g>

@@ -80,16 +80,16 @@ <!-- erdantic.examples.attrs.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.attrs.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="305.25,-131 305.25,-153.5 447.75,-153.5 447.75,-131 305.25,-131"/>
<text text-anchor="start" x="359.25" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="305.25,-108.5 305.25,-131 379.5,-131 379.5,-108.5 305.25,-108.5"/>
<text text-anchor="start" x="327.38" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="379.5,-108.5 379.5,-131 447.75,-131 447.75,-108.5 379.5,-108.5"/>
<text text-anchor="start" x="406.88" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="305.25,-86 305.25,-108.5 379.5,-108.5 379.5,-86 305.25,-86"/>
<text text-anchor="start" x="328.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="379.5,-86 379.5,-108.5 447.75,-108.5 447.75,-86 379.5,-86"/>
<text text-anchor="start" x="382.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="305.25,-63.5 305.25,-86 379.5,-86 379.5,-63.5 305.25,-63.5"/>
<text text-anchor="start" x="308.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="379.5,-63.5 379.5,-86 447.75,-86 447.75,-63.5 379.5,-63.5"/>
<text text-anchor="start" x="406.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="301.5,-131 301.5,-153.5 444,-153.5 444,-131 301.5,-131"/>
<text text-anchor="start" x="355.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="301.5,-108.5 301.5,-131 375.75,-131 375.75,-108.5 301.5,-108.5"/>
<text text-anchor="start" x="323.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.75,-108.5 375.75,-131 444,-131 444,-108.5 375.75,-108.5"/>
<text text-anchor="start" x="403.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="301.5,-86 301.5,-108.5 375.75,-108.5 375.75,-86 301.5,-86"/>
<text text-anchor="start" x="324.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="375.75,-86 375.75,-108.5 444,-108.5 444,-86 375.75,-86"/>
<text text-anchor="start" x="378.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="301.5,-63.5 301.5,-86 375.75,-86 375.75,-63.5 301.5,-63.5"/>
<text text-anchor="start" x="304.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="375.75,-63.5 375.75,-86 444,-86 444,-63.5 375.75,-63.5"/>
<text text-anchor="start" x="402.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -101,9 +101,9 @@ </g>

<title>erdantic.examples.attrs.Party:e&#45;&gt;erdantic.examples.attrs.Quest:w</title>
<path fill="none" stroke="black" d="M206.98,-203.8C246.3,-197.9 252.26,-156.32 286.57,-145.06"/>
<polyline fill="none" stroke="black" points="197.25,-204.5 202.24,-204.14"/>
<polyline fill="none" stroke="black" points="202.24,-204.14 207.22,-203.78"/>
<polyline fill="none" stroke="black" points="305.25,-142.25 300.31,-142.99"/>
<polygon fill="black" stroke="black" points="298.57,-138.2 300.06,-148.09 298.08,-148.38 296.6,-138.49 298.57,-138.2"/>
<polyline fill="none" stroke="black" points="300.31,-142.99 295.36,-143.74"/>
<ellipse fill="none" stroke="black" cx="290.91" cy="-144.4" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M203.23,-203.8C242.55,-197.9 248.51,-156.32 282.82,-145.06"/>
<polyline fill="none" stroke="black" points="193.5,-204.5 198.49,-204.14"/>
<polyline fill="none" stroke="black" points="198.49,-204.14 203.47,-203.78"/>
<polyline fill="none" stroke="black" points="301.5,-142.25 296.56,-142.99"/>
<polygon fill="black" stroke="black" points="294.82,-138.2 296.31,-148.09 294.33,-148.38 292.85,-138.49 294.82,-138.2"/>
<polyline fill="none" stroke="black" points="296.56,-142.99 291.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="287.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -114,16 +114,16 @@ <!-- erdantic.examples.attrs.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.attrs.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="555.75,-86 555.75,-108.5 681,-108.5 681,-86 555.75,-86"/>
<text text-anchor="start" x="584.25" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="555.75,-63.5 555.75,-86 605.25,-86 605.25,-63.5 555.75,-63.5"/>
<text text-anchor="start" x="565.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="605.25,-63.5 605.25,-86 681,-86 681,-63.5 605.25,-63.5"/>
<text text-anchor="start" x="636.38" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="555.75,-41 555.75,-63.5 605.25,-63.5 605.25,-41 555.75,-41"/>
<text text-anchor="start" x="561.75" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="605.25,-41 605.25,-63.5 681,-63.5 681,-41 605.25,-41"/>
<text text-anchor="start" x="608.25" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="555.75,-18.5 555.75,-41 605.25,-41 605.25,-18.5 555.75,-18.5"/>
<text text-anchor="start" x="558.75" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="605.25,-18.5 605.25,-41 681,-41 681,-18.5 605.25,-18.5"/>
<text text-anchor="start" x="636.38" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-86 552,-108.5 677.25,-108.5 677.25,-86 552,-86"/>
<text text-anchor="start" x="580.5" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="552,-63.5 552,-86 601.5,-86 601.5,-63.5 552,-63.5"/>
<text text-anchor="start" x="561.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="601.5,-63.5 601.5,-86 677.25,-86 677.25,-63.5 601.5,-63.5"/>
<text text-anchor="start" x="632.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-41 552,-63.5 601.5,-63.5 601.5,-41 552,-41"/>
<text text-anchor="start" x="558" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="601.5,-41 601.5,-63.5 677.25,-63.5 677.25,-41 601.5,-41"/>
<text text-anchor="start" x="604.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="552,-18.5 552,-41 601.5,-41 601.5,-18.5 552,-18.5"/>
<text text-anchor="start" x="555" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="601.5,-18.5 601.5,-41 677.25,-41 677.25,-18.5 601.5,-18.5"/>
<text text-anchor="start" x="632.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -135,12 +135,12 @@ </g>

<title>erdantic.examples.attrs.Quest:e&#45;&gt;erdantic.examples.attrs.QuestGiver:w</title>
<path fill="none" stroke="black" d="M457.62,-97.25C492.82,-97.25 507.55,-97.25 540.83,-97.25"/>
<polyline fill="none" stroke="black" points="447.75,-97.25 452.75,-97.25"/>
<polyline fill="none" stroke="black" points="452.75,-97.25 457.75,-97.25"/>
<polyline fill="none" stroke="black" points="555.75,-97.25 550.75,-97.25"/>
<polygon fill="black" stroke="black" points="549.75,-92.25 549.75,-102.25 547.75,-102.25 547.75,-92.25 549.75,-92.25"/>
<polyline fill="none" stroke="black" points="550.75,-97.25 545.75,-97.25"/>
<polygon fill="black" stroke="black" points="544.75,-92.25 544.75,-102.25 542.75,-102.25 542.75,-92.25 544.75,-92.25"/>
<polyline fill="none" stroke="black" points="545.75,-97.25 540.75,-97.25"/>
<path fill="none" stroke="black" d="M453.87,-97.25C489.07,-97.25 503.8,-97.25 537.08,-97.25"/>
<polyline fill="none" stroke="black" points="444,-97.25 449,-97.25"/>
<polyline fill="none" stroke="black" points="449,-97.25 454,-97.25"/>
<polyline fill="none" stroke="black" points="552,-97.25 547,-97.25"/>
<polygon fill="black" stroke="black" points="546,-92.25 546,-102.25 544,-102.25 544,-92.25 546,-92.25"/>
<polyline fill="none" stroke="black" points="547,-97.25 542,-97.25"/>
<polygon fill="black" stroke="black" points="541,-92.25 541,-102.25 539,-102.25 539,-92.25 541,-92.25"/>
<polyline fill="none" stroke="black" points="542,-97.25 537,-97.25"/>
</g>
</g>
</svg>

@@ -74,3 +74,3 @@ {

"name": "members",
"type_name": "List[Adventurer]"
"type_name": "list[Adventurer]"
},

@@ -86,3 +86,3 @@ "active_quest": {

},
"description": "erdantic.examples.dataclasses.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (List[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
"description": "erdantic.examples.dataclasses.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (list[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
},

@@ -89,0 +89,0 @@ "erdantic.examples.dataclasses.Quest": {

@@ -7,8 +7,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="689pt" height="314pt"
viewBox="0.00 0.00 689.00 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="685pt" height="314pt"
viewBox="0.00 0.00 685.25 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 685,-309.75 685,4 -4,4"/>
<text text-anchor="middle" x="340.5" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 681.25,-309.75 681.25,4 -4,4"/>
<text text-anchor="middle" x="338.62" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.dataclasses.Adventurer -->

@@ -18,20 +18,20 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.dataclasses.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10;">
<polygon fill="none" stroke="black" points="313.12,-279.25 313.12,-301.75 439.88,-301.75 439.88,-279.25 313.12,-279.25"/>
<text text-anchor="start" x="342.75" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="313.12,-256.75 313.12,-279.25 375.38,-279.25 375.38,-256.75 313.12,-256.75"/>
<text text-anchor="start" x="329.25" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.38,-256.75 375.38,-279.25 439.88,-279.25 439.88,-256.75 375.38,-256.75"/>
<text text-anchor="start" x="400.88" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-234.25 313.12,-256.75 375.38,-256.75 375.38,-234.25 313.12,-234.25"/>
<text text-anchor="start" x="316.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="375.38,-234.25 375.38,-256.75 439.88,-256.75 439.88,-234.25 375.38,-234.25"/>
<text text-anchor="start" x="400.88" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-211.75 313.12,-234.25 375.38,-234.25 375.38,-211.75 313.12,-211.75"/>
<text text-anchor="start" x="316.88" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="375.38,-211.75 375.38,-234.25 439.88,-234.25 439.88,-211.75 375.38,-211.75"/>
<text text-anchor="start" x="378.38" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="313.12,-189.25 313.12,-211.75 375.38,-211.75 375.38,-189.25 313.12,-189.25"/>
<text text-anchor="start" x="331.12" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="375.38,-189.25 375.38,-211.75 439.88,-211.75 439.88,-189.25 375.38,-189.25"/>
<text text-anchor="start" x="400.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="309.38,-279.25 309.38,-301.75 436.12,-301.75 436.12,-279.25 309.38,-279.25"/>
<text text-anchor="start" x="339" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="309.38,-256.75 309.38,-279.25 371.62,-279.25 371.62,-256.75 309.38,-256.75"/>
<text text-anchor="start" x="325.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="371.62,-256.75 371.62,-279.25 436.12,-279.25 436.12,-256.75 371.62,-256.75"/>
<text text-anchor="start" x="397.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-234.25 309.38,-256.75 371.62,-256.75 371.62,-234.25 309.38,-234.25"/>
<text text-anchor="start" x="312.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="371.62,-234.25 371.62,-256.75 436.12,-256.75 436.12,-234.25 371.62,-234.25"/>
<text text-anchor="start" x="397.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-211.75 309.38,-234.25 371.62,-234.25 371.62,-211.75 309.38,-211.75"/>
<text text-anchor="start" x="313.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="371.62,-211.75 371.62,-234.25 436.12,-234.25 436.12,-211.75 371.62,-211.75"/>
<text text-anchor="start" x="374.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="309.38,-189.25 309.38,-211.75 371.62,-211.75 371.62,-189.25 309.38,-189.25"/>
<text text-anchor="start" x="327.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="371.62,-189.25 371.62,-211.75 436.12,-211.75 436.12,-189.25 371.62,-189.25"/>
<text text-anchor="start" x="396.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -43,21 +43,21 @@ </g>

<title>erdantic.examples.dataclasses.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.dataclasses.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 197.25,-305.75 197.25,-283.25 0,-283.25"/>
<text text-anchor="start" x="82.5" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<g id="a_node2"><a xlink:title="erdantic.examples.dataclasses.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 193.5,-305.75 193.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="80.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 197.25,-283.25 197.25,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="141.75" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 197.25,-260.75 197.25,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="124.88" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 197.25,-238.25 197.25,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="102.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 197.25,-215.75 197.25,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="104.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
</a>

@@ -69,7 +69,7 @@ </g>

<title>erdantic.examples.dataclasses.Party:e&#45;&gt;erdantic.examples.dataclasses.Adventurer:w</title>
<path fill="none" stroke="black" d="M207.21,-227.67C250.68,-233.77 256.49,-279.62 296.96,-288.88"/>
<polyline fill="none" stroke="black" points="197.25,-227 202.24,-227.34"/>
<polyline fill="none" stroke="black" points="202.24,-227.34 207.23,-227.67"/>
<polygon fill="black" stroke="black" points="301.85,-289.4 311.31,-294.94 307.15,-289.97 311.46,-290.43 311.46,-290.43 311.46,-290.43 307.15,-289.97 312.27,-285.99 301.85,-289.4"/>
<polyline fill="none" stroke="black" points="300.64,-289.27 295.67,-288.74"/>
<path fill="none" stroke="black" d="M203.46,-227.67C246.93,-233.77 252.74,-279.62 293.21,-288.88"/>
<polyline fill="none" stroke="black" points="193.5,-227 198.49,-227.34"/>
<polyline fill="none" stroke="black" points="198.49,-227.34 203.48,-227.67"/>
<polygon fill="black" stroke="black" points="298.1,-289.4 307.56,-294.94 303.4,-289.97 307.71,-290.43 307.71,-290.43 307.71,-290.43 303.4,-289.97 308.52,-285.99 298.1,-289.4"/>
<polyline fill="none" stroke="black" points="296.89,-289.27 291.92,-288.74"/>
</g>

@@ -80,16 +80,16 @@ <!-- erdantic.examples.dataclasses.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.dataclasses.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="305.25,-131 305.25,-153.5 447.75,-153.5 447.75,-131 305.25,-131"/>
<text text-anchor="start" x="359.25" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="305.25,-108.5 305.25,-131 379.5,-131 379.5,-108.5 305.25,-108.5"/>
<text text-anchor="start" x="327.38" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="379.5,-108.5 379.5,-131 447.75,-131 447.75,-108.5 379.5,-108.5"/>
<text text-anchor="start" x="406.88" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="305.25,-86 305.25,-108.5 379.5,-108.5 379.5,-86 305.25,-86"/>
<text text-anchor="start" x="328.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="379.5,-86 379.5,-108.5 447.75,-108.5 447.75,-86 379.5,-86"/>
<text text-anchor="start" x="382.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="305.25,-63.5 305.25,-86 379.5,-86 379.5,-63.5 305.25,-63.5"/>
<text text-anchor="start" x="308.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="379.5,-63.5 379.5,-86 447.75,-86 447.75,-63.5 379.5,-63.5"/>
<text text-anchor="start" x="406.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="301.5,-131 301.5,-153.5 444,-153.5 444,-131 301.5,-131"/>
<text text-anchor="start" x="355.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="301.5,-108.5 301.5,-131 375.75,-131 375.75,-108.5 301.5,-108.5"/>
<text text-anchor="start" x="323.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.75,-108.5 375.75,-131 444,-131 444,-108.5 375.75,-108.5"/>
<text text-anchor="start" x="403.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="301.5,-86 301.5,-108.5 375.75,-108.5 375.75,-86 301.5,-86"/>
<text text-anchor="start" x="324.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="375.75,-86 375.75,-108.5 444,-108.5 444,-86 375.75,-86"/>
<text text-anchor="start" x="378.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="301.5,-63.5 301.5,-86 375.75,-86 375.75,-63.5 301.5,-63.5"/>
<text text-anchor="start" x="304.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="375.75,-63.5 375.75,-86 444,-86 444,-63.5 375.75,-63.5"/>
<text text-anchor="start" x="402.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -101,9 +101,9 @@ </g>

<title>erdantic.examples.dataclasses.Party:e&#45;&gt;erdantic.examples.dataclasses.Quest:w</title>
<path fill="none" stroke="black" d="M206.98,-203.8C246.3,-197.9 252.26,-156.32 286.57,-145.06"/>
<polyline fill="none" stroke="black" points="197.25,-204.5 202.24,-204.14"/>
<polyline fill="none" stroke="black" points="202.24,-204.14 207.22,-203.78"/>
<polyline fill="none" stroke="black" points="305.25,-142.25 300.31,-142.99"/>
<polygon fill="black" stroke="black" points="298.57,-138.2 300.06,-148.09 298.08,-148.38 296.6,-138.49 298.57,-138.2"/>
<polyline fill="none" stroke="black" points="300.31,-142.99 295.36,-143.74"/>
<ellipse fill="none" stroke="black" cx="290.91" cy="-144.4" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M203.23,-203.8C242.55,-197.9 248.51,-156.32 282.82,-145.06"/>
<polyline fill="none" stroke="black" points="193.5,-204.5 198.49,-204.14"/>
<polyline fill="none" stroke="black" points="198.49,-204.14 203.47,-203.78"/>
<polyline fill="none" stroke="black" points="301.5,-142.25 296.56,-142.99"/>
<polygon fill="black" stroke="black" points="294.82,-138.2 296.31,-148.09 294.33,-148.38 292.85,-138.49 294.82,-138.2"/>
<polyline fill="none" stroke="black" points="296.56,-142.99 291.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="287.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -114,16 +114,16 @@ <!-- erdantic.examples.dataclasses.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.dataclasses.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="555.75,-86 555.75,-108.5 681,-108.5 681,-86 555.75,-86"/>
<text text-anchor="start" x="584.25" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="555.75,-63.5 555.75,-86 605.25,-86 605.25,-63.5 555.75,-63.5"/>
<text text-anchor="start" x="565.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="605.25,-63.5 605.25,-86 681,-86 681,-63.5 605.25,-63.5"/>
<text text-anchor="start" x="636.38" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="555.75,-41 555.75,-63.5 605.25,-63.5 605.25,-41 555.75,-41"/>
<text text-anchor="start" x="561.75" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="605.25,-41 605.25,-63.5 681,-63.5 681,-41 605.25,-41"/>
<text text-anchor="start" x="608.25" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="555.75,-18.5 555.75,-41 605.25,-41 605.25,-18.5 555.75,-18.5"/>
<text text-anchor="start" x="558.75" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="605.25,-18.5 605.25,-41 681,-41 681,-18.5 605.25,-18.5"/>
<text text-anchor="start" x="636.38" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-86 552,-108.5 677.25,-108.5 677.25,-86 552,-86"/>
<text text-anchor="start" x="580.5" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="552,-63.5 552,-86 601.5,-86 601.5,-63.5 552,-63.5"/>
<text text-anchor="start" x="561.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="601.5,-63.5 601.5,-86 677.25,-86 677.25,-63.5 601.5,-63.5"/>
<text text-anchor="start" x="632.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-41 552,-63.5 601.5,-63.5 601.5,-41 552,-41"/>
<text text-anchor="start" x="558" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="601.5,-41 601.5,-63.5 677.25,-63.5 677.25,-41 601.5,-41"/>
<text text-anchor="start" x="604.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="552,-18.5 552,-41 601.5,-41 601.5,-18.5 552,-18.5"/>
<text text-anchor="start" x="555" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="601.5,-18.5 601.5,-41 677.25,-41 677.25,-18.5 601.5,-18.5"/>
<text text-anchor="start" x="632.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -135,12 +135,12 @@ </g>

<title>erdantic.examples.dataclasses.Quest:e&#45;&gt;erdantic.examples.dataclasses.QuestGiver:w</title>
<path fill="none" stroke="black" d="M457.62,-97.25C492.82,-97.25 507.55,-97.25 540.83,-97.25"/>
<polyline fill="none" stroke="black" points="447.75,-97.25 452.75,-97.25"/>
<polyline fill="none" stroke="black" points="452.75,-97.25 457.75,-97.25"/>
<polyline fill="none" stroke="black" points="555.75,-97.25 550.75,-97.25"/>
<polygon fill="black" stroke="black" points="549.75,-92.25 549.75,-102.25 547.75,-102.25 547.75,-92.25 549.75,-92.25"/>
<polyline fill="none" stroke="black" points="550.75,-97.25 545.75,-97.25"/>
<polygon fill="black" stroke="black" points="544.75,-92.25 544.75,-102.25 542.75,-102.25 542.75,-92.25 544.75,-92.25"/>
<polyline fill="none" stroke="black" points="545.75,-97.25 540.75,-97.25"/>
<path fill="none" stroke="black" d="M453.87,-97.25C489.07,-97.25 503.8,-97.25 537.08,-97.25"/>
<polyline fill="none" stroke="black" points="444,-97.25 449,-97.25"/>
<polyline fill="none" stroke="black" points="449,-97.25 454,-97.25"/>
<polyline fill="none" stroke="black" points="552,-97.25 547,-97.25"/>
<polygon fill="black" stroke="black" points="546,-92.25 546,-102.25 544,-102.25 544,-92.25 546,-92.25"/>
<polyline fill="none" stroke="black" points="547,-97.25 542,-97.25"/>
<polygon fill="black" stroke="black" points="541,-92.25 541,-102.25 539,-102.25 539,-92.25 541,-92.25"/>
<polyline fill="none" stroke="black" points="542,-97.25 537,-97.25"/>
</g>
</g>
</svg>

@@ -74,3 +74,3 @@ {

"name": "members",
"type_name": "List[Adventurer]"
"type_name": "list[Adventurer]"
},

@@ -86,3 +86,3 @@ "active_quest": {

},
"description": "erdantic.examples.pydantic_v1.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (List[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
"description": "erdantic.examples.pydantic_v1.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (list[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
},

@@ -89,0 +89,0 @@ "erdantic.examples.pydantic_v1.Quest": {

@@ -7,8 +7,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="689pt" height="314pt"
viewBox="0.00 0.00 689.00 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="685pt" height="314pt"
viewBox="0.00 0.00 685.25 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 685,-309.75 685,4 -4,4"/>
<text text-anchor="middle" x="340.5" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 681.25,-309.75 681.25,4 -4,4"/>
<text text-anchor="middle" x="338.62" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.pydantic_v1.Adventurer -->

@@ -18,20 +18,20 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.pydantic_v1.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10;">
<polygon fill="none" stroke="black" points="313.12,-279.25 313.12,-301.75 439.88,-301.75 439.88,-279.25 313.12,-279.25"/>
<text text-anchor="start" x="342.75" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="313.12,-256.75 313.12,-279.25 375.38,-279.25 375.38,-256.75 313.12,-256.75"/>
<text text-anchor="start" x="329.25" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.38,-256.75 375.38,-279.25 439.88,-279.25 439.88,-256.75 375.38,-256.75"/>
<text text-anchor="start" x="400.88" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-234.25 313.12,-256.75 375.38,-256.75 375.38,-234.25 313.12,-234.25"/>
<text text-anchor="start" x="316.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="375.38,-234.25 375.38,-256.75 439.88,-256.75 439.88,-234.25 375.38,-234.25"/>
<text text-anchor="start" x="400.88" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-211.75 313.12,-234.25 375.38,-234.25 375.38,-211.75 313.12,-211.75"/>
<text text-anchor="start" x="316.88" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="375.38,-211.75 375.38,-234.25 439.88,-234.25 439.88,-211.75 375.38,-211.75"/>
<text text-anchor="start" x="378.38" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="313.12,-189.25 313.12,-211.75 375.38,-211.75 375.38,-189.25 313.12,-189.25"/>
<text text-anchor="start" x="331.12" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="375.38,-189.25 375.38,-211.75 439.88,-211.75 439.88,-189.25 375.38,-189.25"/>
<text text-anchor="start" x="400.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="309.38,-279.25 309.38,-301.75 436.12,-301.75 436.12,-279.25 309.38,-279.25"/>
<text text-anchor="start" x="339" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="309.38,-256.75 309.38,-279.25 371.62,-279.25 371.62,-256.75 309.38,-256.75"/>
<text text-anchor="start" x="325.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="371.62,-256.75 371.62,-279.25 436.12,-279.25 436.12,-256.75 371.62,-256.75"/>
<text text-anchor="start" x="397.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-234.25 309.38,-256.75 371.62,-256.75 371.62,-234.25 309.38,-234.25"/>
<text text-anchor="start" x="312.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="371.62,-234.25 371.62,-256.75 436.12,-256.75 436.12,-234.25 371.62,-234.25"/>
<text text-anchor="start" x="397.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-211.75 309.38,-234.25 371.62,-234.25 371.62,-211.75 309.38,-211.75"/>
<text text-anchor="start" x="313.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="371.62,-211.75 371.62,-234.25 436.12,-234.25 436.12,-211.75 371.62,-211.75"/>
<text text-anchor="start" x="374.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="309.38,-189.25 309.38,-211.75 371.62,-211.75 371.62,-189.25 309.38,-189.25"/>
<text text-anchor="start" x="327.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="371.62,-189.25 371.62,-211.75 436.12,-211.75 436.12,-189.25 371.62,-189.25"/>
<text text-anchor="start" x="396.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -43,21 +43,21 @@ </g>

<title>erdantic.examples.pydantic_v1.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic_v1.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 197.25,-305.75 197.25,-283.25 0,-283.25"/>
<text text-anchor="start" x="82.5" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic_v1.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 193.5,-305.75 193.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="80.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 197.25,-283.25 197.25,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="141.75" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 197.25,-260.75 197.25,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="124.88" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 197.25,-238.25 197.25,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="102.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 197.25,-215.75 197.25,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="104.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
</a>

@@ -69,7 +69,7 @@ </g>

<title>erdantic.examples.pydantic_v1.Party:e&#45;&gt;erdantic.examples.pydantic_v1.Adventurer:w</title>
<path fill="none" stroke="black" d="M207.21,-227.67C250.68,-233.77 256.49,-279.62 296.96,-288.88"/>
<polyline fill="none" stroke="black" points="197.25,-227 202.24,-227.34"/>
<polyline fill="none" stroke="black" points="202.24,-227.34 207.23,-227.67"/>
<polygon fill="black" stroke="black" points="301.85,-289.4 311.31,-294.94 307.15,-289.97 311.46,-290.43 311.46,-290.43 311.46,-290.43 307.15,-289.97 312.27,-285.99 301.85,-289.4"/>
<polyline fill="none" stroke="black" points="300.64,-289.27 295.67,-288.74"/>
<path fill="none" stroke="black" d="M203.46,-227.67C246.93,-233.77 252.74,-279.62 293.21,-288.88"/>
<polyline fill="none" stroke="black" points="193.5,-227 198.49,-227.34"/>
<polyline fill="none" stroke="black" points="198.49,-227.34 203.48,-227.67"/>
<polygon fill="black" stroke="black" points="298.1,-289.4 307.56,-294.94 303.4,-289.97 307.71,-290.43 307.71,-290.43 307.71,-290.43 303.4,-289.97 308.52,-285.99 298.1,-289.4"/>
<polyline fill="none" stroke="black" points="296.89,-289.27 291.92,-288.74"/>
</g>

@@ -80,16 +80,16 @@ <!-- erdantic.examples.pydantic_v1.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.pydantic_v1.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="305.25,-131 305.25,-153.5 447.75,-153.5 447.75,-131 305.25,-131"/>
<text text-anchor="start" x="359.25" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="305.25,-108.5 305.25,-131 379.5,-131 379.5,-108.5 305.25,-108.5"/>
<text text-anchor="start" x="327.38" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="379.5,-108.5 379.5,-131 447.75,-131 447.75,-108.5 379.5,-108.5"/>
<text text-anchor="start" x="406.88" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="305.25,-86 305.25,-108.5 379.5,-108.5 379.5,-86 305.25,-86"/>
<text text-anchor="start" x="328.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="379.5,-86 379.5,-108.5 447.75,-108.5 447.75,-86 379.5,-86"/>
<text text-anchor="start" x="382.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="305.25,-63.5 305.25,-86 379.5,-86 379.5,-63.5 305.25,-63.5"/>
<text text-anchor="start" x="308.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="379.5,-63.5 379.5,-86 447.75,-86 447.75,-63.5 379.5,-63.5"/>
<text text-anchor="start" x="406.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="301.5,-131 301.5,-153.5 444,-153.5 444,-131 301.5,-131"/>
<text text-anchor="start" x="355.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="301.5,-108.5 301.5,-131 375.75,-131 375.75,-108.5 301.5,-108.5"/>
<text text-anchor="start" x="323.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.75,-108.5 375.75,-131 444,-131 444,-108.5 375.75,-108.5"/>
<text text-anchor="start" x="403.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="301.5,-86 301.5,-108.5 375.75,-108.5 375.75,-86 301.5,-86"/>
<text text-anchor="start" x="324.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="375.75,-86 375.75,-108.5 444,-108.5 444,-86 375.75,-86"/>
<text text-anchor="start" x="378.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="301.5,-63.5 301.5,-86 375.75,-86 375.75,-63.5 301.5,-63.5"/>
<text text-anchor="start" x="304.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="375.75,-63.5 375.75,-86 444,-86 444,-63.5 375.75,-63.5"/>
<text text-anchor="start" x="402.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -101,9 +101,9 @@ </g>

<title>erdantic.examples.pydantic_v1.Party:e&#45;&gt;erdantic.examples.pydantic_v1.Quest:w</title>
<path fill="none" stroke="black" d="M206.98,-203.8C246.3,-197.9 252.26,-156.32 286.57,-145.06"/>
<polyline fill="none" stroke="black" points="197.25,-204.5 202.24,-204.14"/>
<polyline fill="none" stroke="black" points="202.24,-204.14 207.22,-203.78"/>
<polyline fill="none" stroke="black" points="305.25,-142.25 300.31,-142.99"/>
<polygon fill="black" stroke="black" points="298.57,-138.2 300.06,-148.09 298.08,-148.38 296.6,-138.49 298.57,-138.2"/>
<polyline fill="none" stroke="black" points="300.31,-142.99 295.36,-143.74"/>
<ellipse fill="none" stroke="black" cx="290.91" cy="-144.4" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M203.23,-203.8C242.55,-197.9 248.51,-156.32 282.82,-145.06"/>
<polyline fill="none" stroke="black" points="193.5,-204.5 198.49,-204.14"/>
<polyline fill="none" stroke="black" points="198.49,-204.14 203.47,-203.78"/>
<polyline fill="none" stroke="black" points="301.5,-142.25 296.56,-142.99"/>
<polygon fill="black" stroke="black" points="294.82,-138.2 296.31,-148.09 294.33,-148.38 292.85,-138.49 294.82,-138.2"/>
<polyline fill="none" stroke="black" points="296.56,-142.99 291.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="287.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -114,16 +114,16 @@ <!-- erdantic.examples.pydantic_v1.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.pydantic_v1.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="555.75,-86 555.75,-108.5 681,-108.5 681,-86 555.75,-86"/>
<text text-anchor="start" x="584.25" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="555.75,-63.5 555.75,-86 605.25,-86 605.25,-63.5 555.75,-63.5"/>
<text text-anchor="start" x="565.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="605.25,-63.5 605.25,-86 681,-86 681,-63.5 605.25,-63.5"/>
<text text-anchor="start" x="636.38" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="555.75,-41 555.75,-63.5 605.25,-63.5 605.25,-41 555.75,-41"/>
<text text-anchor="start" x="561.75" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="605.25,-41 605.25,-63.5 681,-63.5 681,-41 605.25,-41"/>
<text text-anchor="start" x="608.25" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="555.75,-18.5 555.75,-41 605.25,-41 605.25,-18.5 555.75,-18.5"/>
<text text-anchor="start" x="558.75" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="605.25,-18.5 605.25,-41 681,-41 681,-18.5 605.25,-18.5"/>
<text text-anchor="start" x="636.38" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-86 552,-108.5 677.25,-108.5 677.25,-86 552,-86"/>
<text text-anchor="start" x="580.5" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="552,-63.5 552,-86 601.5,-86 601.5,-63.5 552,-63.5"/>
<text text-anchor="start" x="561.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="601.5,-63.5 601.5,-86 677.25,-86 677.25,-63.5 601.5,-63.5"/>
<text text-anchor="start" x="632.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-41 552,-63.5 601.5,-63.5 601.5,-41 552,-41"/>
<text text-anchor="start" x="558" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="601.5,-41 601.5,-63.5 677.25,-63.5 677.25,-41 601.5,-41"/>
<text text-anchor="start" x="604.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="552,-18.5 552,-41 601.5,-41 601.5,-18.5 552,-18.5"/>
<text text-anchor="start" x="555" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="601.5,-18.5 601.5,-41 677.25,-41 677.25,-18.5 601.5,-18.5"/>
<text text-anchor="start" x="632.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -135,12 +135,12 @@ </g>

<title>erdantic.examples.pydantic_v1.Quest:e&#45;&gt;erdantic.examples.pydantic_v1.QuestGiver:w</title>
<path fill="none" stroke="black" d="M457.62,-97.25C492.82,-97.25 507.55,-97.25 540.83,-97.25"/>
<polyline fill="none" stroke="black" points="447.75,-97.25 452.75,-97.25"/>
<polyline fill="none" stroke="black" points="452.75,-97.25 457.75,-97.25"/>
<polyline fill="none" stroke="black" points="555.75,-97.25 550.75,-97.25"/>
<polygon fill="black" stroke="black" points="549.75,-92.25 549.75,-102.25 547.75,-102.25 547.75,-92.25 549.75,-92.25"/>
<polyline fill="none" stroke="black" points="550.75,-97.25 545.75,-97.25"/>
<polygon fill="black" stroke="black" points="544.75,-92.25 544.75,-102.25 542.75,-102.25 542.75,-92.25 544.75,-92.25"/>
<polyline fill="none" stroke="black" points="545.75,-97.25 540.75,-97.25"/>
<path fill="none" stroke="black" d="M453.87,-97.25C489.07,-97.25 503.8,-97.25 537.08,-97.25"/>
<polyline fill="none" stroke="black" points="444,-97.25 449,-97.25"/>
<polyline fill="none" stroke="black" points="449,-97.25 454,-97.25"/>
<polyline fill="none" stroke="black" points="552,-97.25 547,-97.25"/>
<polygon fill="black" stroke="black" points="546,-92.25 546,-102.25 544,-102.25 544,-92.25 546,-92.25"/>
<polyline fill="none" stroke="black" points="547,-97.25 542,-97.25"/>
<polygon fill="black" stroke="black" points="541,-92.25 541,-102.25 539,-102.25 539,-92.25 541,-92.25"/>
<polyline fill="none" stroke="black" points="542,-97.25 537,-97.25"/>
</g>
</g>
</svg>

@@ -74,3 +74,3 @@ {

"name": "members",
"type_name": "List[Adventurer]"
"type_name": "list[Adventurer]"
},

@@ -86,3 +86,3 @@ "active_quest": {

},
"description": "erdantic.examples.pydantic.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (List[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
"description": "erdantic.examples.pydantic.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (list[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
},

@@ -89,0 +89,0 @@ "erdantic.examples.pydantic.Quest": {

@@ -7,8 +7,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="689pt" height="314pt"
viewBox="0.00 0.00 689.00 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="685pt" height="314pt"
viewBox="0.00 0.00 685.25 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 685,-309.75 685,4 -4,4"/>
<text text-anchor="middle" x="340.5" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 681.25,-309.75 681.25,4 -4,4"/>
<text text-anchor="middle" x="338.62" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.pydantic.Adventurer -->

@@ -18,20 +18,20 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.pydantic.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10;">
<polygon fill="none" stroke="black" points="313.12,-279.25 313.12,-301.75 439.88,-301.75 439.88,-279.25 313.12,-279.25"/>
<text text-anchor="start" x="342.75" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="313.12,-256.75 313.12,-279.25 375.38,-279.25 375.38,-256.75 313.12,-256.75"/>
<text text-anchor="start" x="329.25" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.38,-256.75 375.38,-279.25 439.88,-279.25 439.88,-256.75 375.38,-256.75"/>
<text text-anchor="start" x="400.88" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-234.25 313.12,-256.75 375.38,-256.75 375.38,-234.25 313.12,-234.25"/>
<text text-anchor="start" x="316.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="375.38,-234.25 375.38,-256.75 439.88,-256.75 439.88,-234.25 375.38,-234.25"/>
<text text-anchor="start" x="400.88" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="313.12,-211.75 313.12,-234.25 375.38,-234.25 375.38,-211.75 313.12,-211.75"/>
<text text-anchor="start" x="316.88" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="375.38,-211.75 375.38,-234.25 439.88,-234.25 439.88,-211.75 375.38,-211.75"/>
<text text-anchor="start" x="378.38" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="313.12,-189.25 313.12,-211.75 375.38,-211.75 375.38,-189.25 313.12,-189.25"/>
<text text-anchor="start" x="331.12" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="375.38,-189.25 375.38,-211.75 439.88,-211.75 439.88,-189.25 375.38,-189.25"/>
<text text-anchor="start" x="400.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="309.38,-279.25 309.38,-301.75 436.12,-301.75 436.12,-279.25 309.38,-279.25"/>
<text text-anchor="start" x="339" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="309.38,-256.75 309.38,-279.25 371.62,-279.25 371.62,-256.75 309.38,-256.75"/>
<text text-anchor="start" x="325.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="371.62,-256.75 371.62,-279.25 436.12,-279.25 436.12,-256.75 371.62,-256.75"/>
<text text-anchor="start" x="397.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-234.25 309.38,-256.75 371.62,-256.75 371.62,-234.25 309.38,-234.25"/>
<text text-anchor="start" x="312.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="371.62,-234.25 371.62,-256.75 436.12,-256.75 436.12,-234.25 371.62,-234.25"/>
<text text-anchor="start" x="397.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="309.38,-211.75 309.38,-234.25 371.62,-234.25 371.62,-211.75 309.38,-211.75"/>
<text text-anchor="start" x="313.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="371.62,-211.75 371.62,-234.25 436.12,-234.25 436.12,-211.75 371.62,-211.75"/>
<text text-anchor="start" x="374.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="309.38,-189.25 309.38,-211.75 371.62,-211.75 371.62,-189.25 309.38,-189.25"/>
<text text-anchor="start" x="327.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="371.62,-189.25 371.62,-211.75 436.12,-211.75 436.12,-189.25 371.62,-189.25"/>
<text text-anchor="start" x="396.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -43,21 +43,21 @@ </g>

<title>erdantic.examples.pydantic.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 197.25,-305.75 197.25,-283.25 0,-283.25"/>
<text text-anchor="start" x="82.5" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 193.5,-305.75 193.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="80.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 197.25,-283.25 197.25,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="141.75" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 197.25,-260.75 197.25,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="124.88" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 197.25,-238.25 197.25,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="102.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 197.25,-215.75 197.25,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="104.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
</a>

@@ -69,7 +69,7 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Adventurer:w</title>
<path fill="none" stroke="black" d="M207.21,-227.67C250.68,-233.77 256.49,-279.62 296.96,-288.88"/>
<polyline fill="none" stroke="black" points="197.25,-227 202.24,-227.34"/>
<polyline fill="none" stroke="black" points="202.24,-227.34 207.23,-227.67"/>
<polygon fill="black" stroke="black" points="301.85,-289.4 311.31,-294.94 307.15,-289.97 311.46,-290.43 311.46,-290.43 311.46,-290.43 307.15,-289.97 312.27,-285.99 301.85,-289.4"/>
<polyline fill="none" stroke="black" points="300.64,-289.27 295.67,-288.74"/>
<path fill="none" stroke="black" d="M203.46,-227.67C246.93,-233.77 252.74,-279.62 293.21,-288.88"/>
<polyline fill="none" stroke="black" points="193.5,-227 198.49,-227.34"/>
<polyline fill="none" stroke="black" points="198.49,-227.34 203.48,-227.67"/>
<polygon fill="black" stroke="black" points="298.1,-289.4 307.56,-294.94 303.4,-289.97 307.71,-290.43 307.71,-290.43 307.71,-290.43 303.4,-289.97 308.52,-285.99 298.1,-289.4"/>
<polyline fill="none" stroke="black" points="296.89,-289.27 291.92,-288.74"/>
</g>

@@ -80,16 +80,16 @@ <!-- erdantic.examples.pydantic.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.pydantic.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="305.25,-131 305.25,-153.5 447.75,-153.5 447.75,-131 305.25,-131"/>
<text text-anchor="start" x="359.25" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="305.25,-108.5 305.25,-131 379.5,-131 379.5,-108.5 305.25,-108.5"/>
<text text-anchor="start" x="327.38" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="379.5,-108.5 379.5,-131 447.75,-131 447.75,-108.5 379.5,-108.5"/>
<text text-anchor="start" x="406.88" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="305.25,-86 305.25,-108.5 379.5,-108.5 379.5,-86 305.25,-86"/>
<text text-anchor="start" x="328.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="379.5,-86 379.5,-108.5 447.75,-108.5 447.75,-86 379.5,-86"/>
<text text-anchor="start" x="382.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="305.25,-63.5 305.25,-86 379.5,-86 379.5,-63.5 305.25,-63.5"/>
<text text-anchor="start" x="308.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="379.5,-63.5 379.5,-86 447.75,-86 447.75,-63.5 379.5,-63.5"/>
<text text-anchor="start" x="406.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="301.5,-131 301.5,-153.5 444,-153.5 444,-131 301.5,-131"/>
<text text-anchor="start" x="355.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="301.5,-108.5 301.5,-131 375.75,-131 375.75,-108.5 301.5,-108.5"/>
<text text-anchor="start" x="323.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="375.75,-108.5 375.75,-131 444,-131 444,-108.5 375.75,-108.5"/>
<text text-anchor="start" x="403.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="301.5,-86 301.5,-108.5 375.75,-108.5 375.75,-86 301.5,-86"/>
<text text-anchor="start" x="324.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="375.75,-86 375.75,-108.5 444,-108.5 444,-86 375.75,-86"/>
<text text-anchor="start" x="378.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="301.5,-63.5 301.5,-86 375.75,-86 375.75,-63.5 301.5,-63.5"/>
<text text-anchor="start" x="304.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="375.75,-63.5 375.75,-86 444,-86 444,-63.5 375.75,-63.5"/>
<text text-anchor="start" x="402.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
</a>

@@ -101,9 +101,9 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Quest:w</title>
<path fill="none" stroke="black" d="M206.98,-203.8C246.3,-197.9 252.26,-156.32 286.57,-145.06"/>
<polyline fill="none" stroke="black" points="197.25,-204.5 202.24,-204.14"/>
<polyline fill="none" stroke="black" points="202.24,-204.14 207.22,-203.78"/>
<polyline fill="none" stroke="black" points="305.25,-142.25 300.31,-142.99"/>
<polygon fill="black" stroke="black" points="298.57,-138.2 300.06,-148.09 298.08,-148.38 296.6,-138.49 298.57,-138.2"/>
<polyline fill="none" stroke="black" points="300.31,-142.99 295.36,-143.74"/>
<ellipse fill="none" stroke="black" cx="290.91" cy="-144.4" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M203.23,-203.8C242.55,-197.9 248.51,-156.32 282.82,-145.06"/>
<polyline fill="none" stroke="black" points="193.5,-204.5 198.49,-204.14"/>
<polyline fill="none" stroke="black" points="198.49,-204.14 203.47,-203.78"/>
<polyline fill="none" stroke="black" points="301.5,-142.25 296.56,-142.99"/>
<polygon fill="black" stroke="black" points="294.82,-138.2 296.31,-148.09 294.33,-148.38 292.85,-138.49 294.82,-138.2"/>
<polyline fill="none" stroke="black" points="296.56,-142.99 291.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="287.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -114,16 +114,16 @@ <!-- erdantic.examples.pydantic.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.pydantic.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="555.75,-86 555.75,-108.5 681,-108.5 681,-86 555.75,-86"/>
<text text-anchor="start" x="584.25" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="555.75,-63.5 555.75,-86 605.25,-86 605.25,-63.5 555.75,-63.5"/>
<text text-anchor="start" x="565.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="605.25,-63.5 605.25,-86 681,-86 681,-63.5 605.25,-63.5"/>
<text text-anchor="start" x="636.38" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="555.75,-41 555.75,-63.5 605.25,-63.5 605.25,-41 555.75,-41"/>
<text text-anchor="start" x="561.75" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="605.25,-41 605.25,-63.5 681,-63.5 681,-41 605.25,-41"/>
<text text-anchor="start" x="608.25" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="555.75,-18.5 555.75,-41 605.25,-41 605.25,-18.5 555.75,-18.5"/>
<text text-anchor="start" x="558.75" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="605.25,-18.5 605.25,-41 681,-41 681,-18.5 605.25,-18.5"/>
<text text-anchor="start" x="636.38" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-86 552,-108.5 677.25,-108.5 677.25,-86 552,-86"/>
<text text-anchor="start" x="580.5" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="552,-63.5 552,-86 601.5,-86 601.5,-63.5 552,-63.5"/>
<text text-anchor="start" x="561.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="601.5,-63.5 601.5,-86 677.25,-86 677.25,-63.5 601.5,-63.5"/>
<text text-anchor="start" x="632.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="552,-41 552,-63.5 601.5,-63.5 601.5,-41 552,-41"/>
<text text-anchor="start" x="558" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="601.5,-41 601.5,-63.5 677.25,-63.5 677.25,-41 601.5,-41"/>
<text text-anchor="start" x="604.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="552,-18.5 552,-41 601.5,-41 601.5,-18.5 552,-18.5"/>
<text text-anchor="start" x="555" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="601.5,-18.5 601.5,-41 677.25,-41 677.25,-18.5 601.5,-18.5"/>
<text text-anchor="start" x="632.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
</a>

@@ -135,12 +135,12 @@ </g>

<title>erdantic.examples.pydantic.Quest:e&#45;&gt;erdantic.examples.pydantic.QuestGiver:w</title>
<path fill="none" stroke="black" d="M457.62,-97.25C492.82,-97.25 507.55,-97.25 540.83,-97.25"/>
<polyline fill="none" stroke="black" points="447.75,-97.25 452.75,-97.25"/>
<polyline fill="none" stroke="black" points="452.75,-97.25 457.75,-97.25"/>
<polyline fill="none" stroke="black" points="555.75,-97.25 550.75,-97.25"/>
<polygon fill="black" stroke="black" points="549.75,-92.25 549.75,-102.25 547.75,-102.25 547.75,-92.25 549.75,-92.25"/>
<polyline fill="none" stroke="black" points="550.75,-97.25 545.75,-97.25"/>
<polygon fill="black" stroke="black" points="544.75,-92.25 544.75,-102.25 542.75,-102.25 542.75,-92.25 544.75,-92.25"/>
<polyline fill="none" stroke="black" points="545.75,-97.25 540.75,-97.25"/>
<path fill="none" stroke="black" d="M453.87,-97.25C489.07,-97.25 503.8,-97.25 537.08,-97.25"/>
<polyline fill="none" stroke="black" points="444,-97.25 449,-97.25"/>
<polyline fill="none" stroke="black" points="449,-97.25 454,-97.25"/>
<polyline fill="none" stroke="black" points="552,-97.25 547,-97.25"/>
<polygon fill="black" stroke="black" points="546,-92.25 546,-102.25 544,-102.25 544,-92.25 546,-92.25"/>
<polyline fill="none" stroke="black" points="547,-97.25 542,-97.25"/>
<polygon fill="black" stroke="black" points="541,-92.25 541,-102.25 539,-102.25 539,-92.25 541,-92.25"/>
<polyline fill="none" stroke="black" points="542,-97.25 537,-97.25"/>
</g>
</g>
</svg>

@@ -80,3 +80,3 @@ {

"name": "members",
"type_name": "List[Adventurer]",
"type_name": "list[Adventurer]",
"default_value": "[]"

@@ -94,3 +94,3 @@ },

},
"description": "erdantic.examples.pydantic.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (List[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
"description": "erdantic.examples.pydantic.Party\n\nA group of adventurers finding themselves doing and saying things altogether unexpected.\n\nAttributes:\n name (str): Name that party is known by\n formed_datetime (datetime): Timestamp of when the party was formed\n members (list[Adventurer]): Adventurers that belong to this party\n active_quest (Optional[Quest]): Current quest that party is actively tackling\n"
},

@@ -97,0 +97,0 @@ "erdantic.examples.pydantic.Quest": {

@@ -7,8 +7,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!-- Title: Entity Relationship Diagram created by erdantic Pages: 1 -->
<svg width="883pt" height="314pt"
viewBox="0.00 0.00 882.50 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="879pt" height="314pt"
viewBox="0.00 0.00 878.75 313.75" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 309.75)">
<title>Entity Relationship Diagram created by erdantic</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 878.5,-309.75 878.5,4 -4,4"/>
<text text-anchor="middle" x="437.25" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-309.75 874.75,-309.75 874.75,4 -4,4"/>
<text text-anchor="middle" x="435.38" y="-5.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="9.00" fill="#a8a8a8">Created by erdantic vTEST &lt;https://github.com/drivendataorg/erdantic&gt;</text>
<!-- erdantic.examples.pydantic.Adventurer -->

@@ -18,25 +18,25 @@ <g id="node1" class="node">

<g id="a_node1"><a xlink:title="erdantic.examples.pydantic.Adventurer&#10;&#10;A person often late for dinner but with a tale or two to tell.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this adventurer&#10; &#160;&#160;&#160;profession (str): Profession of this adventurer&#10; &#160;&#160;&#160;alignment (Alignment): Alignment of this adventurer&#10; &#160;&#160;&#160;level (int): Level of this adventurer&#10;">
<polygon fill="none" stroke="black" points="349.12,-279.25 349.12,-301.75 511.88,-301.75 511.88,-279.25 349.12,-279.25"/>
<text text-anchor="start" x="396.75" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="349.12,-256.75 349.12,-279.25 411.38,-279.25 411.38,-256.75 349.12,-256.75"/>
<text text-anchor="start" x="365.25" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="411.38,-256.75 411.38,-279.25 475.88,-279.25 475.88,-256.75 411.38,-256.75"/>
<text text-anchor="start" x="436.88" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="475.88,-256.75 475.88,-279.25 511.88,-279.25 511.88,-256.75 475.88,-256.75"/>
<polygon fill="none" stroke="black" points="349.12,-234.25 349.12,-256.75 411.38,-256.75 411.38,-234.25 349.12,-234.25"/>
<text text-anchor="start" x="352.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="411.38,-234.25 411.38,-256.75 475.88,-256.75 475.88,-234.25 411.38,-234.25"/>
<text text-anchor="start" x="436.88" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="475.88,-234.25 475.88,-256.75 511.88,-256.75 511.88,-234.25 475.88,-234.25"/>
<polygon fill="none" stroke="black" points="349.12,-211.75 349.12,-234.25 411.38,-234.25 411.38,-211.75 349.12,-211.75"/>
<text text-anchor="start" x="352.88" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="411.38,-211.75 411.38,-234.25 475.88,-234.25 475.88,-211.75 411.38,-211.75"/>
<text text-anchor="start" x="414.38" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="475.88,-211.75 475.88,-234.25 511.88,-234.25 511.88,-211.75 475.88,-211.75"/>
<polygon fill="none" stroke="black" points="349.12,-189.25 349.12,-211.75 411.38,-211.75 411.38,-189.25 349.12,-189.25"/>
<text text-anchor="start" x="367.12" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="411.38,-189.25 411.38,-211.75 475.88,-211.75 475.88,-189.25 411.38,-189.25"/>
<text text-anchor="start" x="436.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="475.88,-189.25 475.88,-211.75 511.88,-211.75 511.88,-189.25 475.88,-189.25"/>
<text text-anchor="start" x="490.5" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">1</text>
<polygon fill="none" stroke="black" points="345.38,-279.25 345.38,-301.75 508.12,-301.75 508.12,-279.25 345.38,-279.25"/>
<text text-anchor="start" x="393" y="-286.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Adventurer</text>
<polygon fill="none" stroke="black" points="345.38,-256.75 345.38,-279.25 407.62,-279.25 407.62,-256.75 345.38,-256.75"/>
<text text-anchor="start" x="361.5" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="407.62,-256.75 407.62,-279.25 472.12,-279.25 472.12,-256.75 407.62,-256.75"/>
<text text-anchor="start" x="433.12" y="-262.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="472.12,-256.75 472.12,-279.25 508.12,-279.25 508.12,-256.75 472.12,-256.75"/>
<polygon fill="none" stroke="black" points="345.38,-234.25 345.38,-256.75 407.62,-256.75 407.62,-234.25 345.38,-234.25"/>
<text text-anchor="start" x="348.38" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">profession</text>
<polygon fill="none" stroke="black" points="407.62,-234.25 407.62,-256.75 472.12,-256.75 472.12,-234.25 407.62,-234.25"/>
<text text-anchor="start" x="433.12" y="-240.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="472.12,-234.25 472.12,-256.75 508.12,-256.75 508.12,-234.25 472.12,-234.25"/>
<polygon fill="none" stroke="black" points="345.38,-211.75 345.38,-234.25 407.62,-234.25 407.62,-211.75 345.38,-211.75"/>
<text text-anchor="start" x="349.12" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">alignment</text>
<polygon fill="none" stroke="black" points="407.62,-211.75 407.62,-234.25 472.12,-234.25 472.12,-211.75 407.62,-211.75"/>
<text text-anchor="start" x="410.62" y="-217.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Alignment</text>
<polygon fill="none" stroke="black" points="472.12,-211.75 472.12,-234.25 508.12,-234.25 508.12,-211.75 472.12,-211.75"/>
<polygon fill="none" stroke="black" points="345.38,-189.25 345.38,-211.75 407.62,-211.75 407.62,-189.25 345.38,-189.25"/>
<text text-anchor="start" x="363.38" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">level</text>
<polygon fill="none" stroke="black" points="407.62,-189.25 407.62,-211.75 472.12,-211.75 472.12,-189.25 407.62,-189.25"/>
<text text-anchor="start" x="432.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="472.12,-189.25 472.12,-211.75 508.12,-211.75 508.12,-189.25 472.12,-189.25"/>
<text text-anchor="start" x="486.75" y="-195.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">1</text>
</a>

@@ -48,27 +48,27 @@ </g>

<title>erdantic.examples.pydantic.Party</title>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (List[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 233.25,-305.75 233.25,-283.25 0,-283.25"/>
<text text-anchor="start" x="100.5" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<g id="a_node2"><a xlink:title="erdantic.examples.pydantic.Party&#10;&#10;A group of adventurers finding themselves doing and saying things altogether unexpected.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name that party is known by&#10; &#160;&#160;&#160;formed_datetime (datetime): Timestamp of when the party was formed&#10; &#160;&#160;&#160;members (list[Adventurer]): Adventurers that belong to this party&#10; &#160;&#160;&#160;active_quest (Optional[Quest]): Current quest that party is actively tackling&#10;">
<polygon fill="none" stroke="black" points="0,-283.25 0,-305.75 229.5,-305.75 229.5,-283.25 0,-283.25"/>
<text text-anchor="start" x="98.62" y="-290.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Party</text>
<polygon fill="none" stroke="black" points="0,-260.75 0,-283.25 99.75,-283.25 99.75,-260.75 0,-260.75"/>
<text text-anchor="start" x="34.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 197.25,-283.25 197.25,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="141.75" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="197.25,-260.75 197.25,-283.25 233.25,-283.25 233.25,-260.75 197.25,-260.75"/>
<polygon fill="none" stroke="black" points="99.75,-260.75 99.75,-283.25 193.5,-283.25 193.5,-260.75 99.75,-260.75"/>
<text text-anchor="start" x="139.88" y="-266.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="193.5,-260.75 193.5,-283.25 229.5,-283.25 229.5,-260.75 193.5,-260.75"/>
<polygon fill="none" stroke="black" points="0,-238.25 0,-260.75 99.75,-260.75 99.75,-238.25 0,-238.25"/>
<text text-anchor="start" x="3" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">formed_datetime</text>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 197.25,-260.75 197.25,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="124.88" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="197.25,-238.25 197.25,-260.75 233.25,-260.75 233.25,-238.25 197.25,-238.25"/>
<polygon fill="none" stroke="black" points="99.75,-238.25 99.75,-260.75 193.5,-260.75 193.5,-238.25 99.75,-238.25"/>
<text text-anchor="start" x="123" y="-244.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">datetime</text>
<polygon fill="none" stroke="black" points="193.5,-238.25 193.5,-260.75 229.5,-260.75 229.5,-238.25 193.5,-238.25"/>
<polygon fill="none" stroke="black" points="0,-215.75 0,-238.25 99.75,-238.25 99.75,-215.75 0,-215.75"/>
<text text-anchor="start" x="24.38" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">members</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 197.25,-238.25 197.25,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="102.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">List[Adventurer]</text>
<polygon fill="none" stroke="black" points="197.25,-215.75 197.25,-238.25 233.25,-238.25 233.25,-215.75 197.25,-215.75"/>
<text text-anchor="start" x="210.75" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">[]</text>
<polygon fill="none" stroke="black" points="99.75,-215.75 99.75,-238.25 193.5,-238.25 193.5,-215.75 99.75,-215.75"/>
<text text-anchor="start" x="103.12" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">list[Adventurer]</text>
<polygon fill="none" stroke="black" points="193.5,-215.75 193.5,-238.25 229.5,-238.25 229.5,-215.75 193.5,-215.75"/>
<text text-anchor="start" x="207" y="-221.95" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">[]</text>
<polygon fill="none" stroke="black" points="0,-193.25 0,-215.75 99.75,-215.75 99.75,-193.25 0,-193.25"/>
<text text-anchor="start" x="16.12" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">active_quest</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 197.25,-215.75 197.25,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="104.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="197.25,-193.25 197.25,-215.75 233.25,-215.75 233.25,-193.25 197.25,-193.25"/>
<text text-anchor="start" x="200.62" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">None</text>
<polygon fill="none" stroke="black" points="99.75,-193.25 99.75,-215.75 193.5,-215.75 193.5,-193.25 99.75,-193.25"/>
<text text-anchor="start" x="102.75" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[Quest]</text>
<polygon fill="none" stroke="black" points="193.5,-193.25 193.5,-215.75 229.5,-215.75 229.5,-193.25 193.5,-193.25"/>
<text text-anchor="start" x="196.88" y="-199.45" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">None</text>
</a>

@@ -80,7 +80,7 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Adventurer:w</title>
<path fill="none" stroke="black" d="M243.21,-227.67C286.68,-233.77 292.49,-279.62 332.96,-288.88"/>
<polyline fill="none" stroke="black" points="233.25,-227 238.24,-227.34"/>
<polyline fill="none" stroke="black" points="238.24,-227.34 243.23,-227.67"/>
<polygon fill="black" stroke="black" points="337.85,-289.4 347.31,-294.94 343.15,-289.97 347.46,-290.43 347.46,-290.43 347.46,-290.43 343.15,-289.97 348.27,-285.99 337.85,-289.4"/>
<polyline fill="none" stroke="black" points="336.64,-289.27 331.67,-288.74"/>
<path fill="none" stroke="black" d="M239.46,-227.67C282.93,-233.77 288.74,-279.62 329.21,-288.88"/>
<polyline fill="none" stroke="black" points="229.5,-227 234.49,-227.34"/>
<polyline fill="none" stroke="black" points="234.49,-227.34 239.48,-227.67"/>
<polygon fill="black" stroke="black" points="334.1,-289.4 343.56,-294.94 339.4,-289.97 343.71,-290.43 343.71,-290.43 343.71,-290.43 339.4,-289.97 344.52,-285.99 334.1,-289.4"/>
<polyline fill="none" stroke="black" points="332.89,-289.27 327.92,-288.74"/>
</g>

@@ -91,20 +91,20 @@ <!-- erdantic.examples.pydantic.Quest -->

<g id="a_node3"><a xlink:title="erdantic.examples.pydantic.Quest&#10;&#10;A task to complete, with some monetary reward.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name by which this quest is referred to&#10; &#160;&#160;&#160;giver (QuestGiver): Person who offered the quest&#10; &#160;&#160;&#160;reward_gold (int): Amount of gold to be rewarded for quest completion&#10;">
<polygon fill="none" stroke="black" points="341.25,-131 341.25,-153.5 519.75,-153.5 519.75,-131 341.25,-131"/>
<text text-anchor="start" x="413.25" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="341.25,-108.5 341.25,-131 415.5,-131 415.5,-108.5 341.25,-108.5"/>
<text text-anchor="start" x="363.38" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="415.5,-108.5 415.5,-131 483.75,-131 483.75,-108.5 415.5,-108.5"/>
<text text-anchor="start" x="442.88" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="483.75,-108.5 483.75,-131 519.75,-131 519.75,-108.5 483.75,-108.5"/>
<polygon fill="none" stroke="black" points="341.25,-86 341.25,-108.5 415.5,-108.5 415.5,-86 341.25,-86"/>
<text text-anchor="start" x="364.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="415.5,-86 415.5,-108.5 483.75,-108.5 483.75,-86 415.5,-86"/>
<text text-anchor="start" x="418.5" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="483.75,-86 483.75,-108.5 519.75,-108.5 519.75,-86 483.75,-86"/>
<polygon fill="none" stroke="black" points="341.25,-63.5 341.25,-86 415.5,-86 415.5,-63.5 341.25,-63.5"/>
<text text-anchor="start" x="344.25" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="415.5,-63.5 415.5,-86 483.75,-86 483.75,-63.5 415.5,-63.5"/>
<text text-anchor="start" x="442.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="483.75,-63.5 483.75,-86 519.75,-86 519.75,-63.5 483.75,-63.5"/>
<text text-anchor="start" x="491.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">100</text>
<polygon fill="none" stroke="black" points="337.5,-131 337.5,-153.5 516,-153.5 516,-131 337.5,-131"/>
<text text-anchor="start" x="409.5" y="-138.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">Quest</text>
<polygon fill="none" stroke="black" points="337.5,-108.5 337.5,-131 411.75,-131 411.75,-108.5 337.5,-108.5"/>
<text text-anchor="start" x="359.62" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="411.75,-108.5 411.75,-131 480,-131 480,-108.5 411.75,-108.5"/>
<text text-anchor="start" x="439.12" y="-114.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="480,-108.5 480,-131 516,-131 516,-108.5 480,-108.5"/>
<polygon fill="none" stroke="black" points="337.5,-86 337.5,-108.5 411.75,-108.5 411.75,-86 337.5,-86"/>
<text text-anchor="start" x="360.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">giver</text>
<polygon fill="none" stroke="black" points="411.75,-86 411.75,-108.5 480,-108.5 480,-86 411.75,-86"/>
<text text-anchor="start" x="414.75" y="-92.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="480,-86 480,-108.5 516,-108.5 516,-86 480,-86"/>
<polygon fill="none" stroke="black" points="337.5,-63.5 337.5,-86 411.75,-86 411.75,-63.5 337.5,-63.5"/>
<text text-anchor="start" x="340.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">reward_gold</text>
<polygon fill="none" stroke="black" points="411.75,-63.5 411.75,-86 480,-86 480,-63.5 411.75,-63.5"/>
<text text-anchor="start" x="438.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">int</text>
<polygon fill="none" stroke="black" points="480,-63.5 480,-86 516,-86 516,-63.5 480,-63.5"/>
<text text-anchor="start" x="487.88" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">100</text>
</a>

@@ -116,9 +116,9 @@ </g>

<title>erdantic.examples.pydantic.Party:e&#45;&gt;erdantic.examples.pydantic.Quest:w</title>
<path fill="none" stroke="black" d="M242.98,-203.8C282.3,-197.9 288.26,-156.32 322.57,-145.06"/>
<polyline fill="none" stroke="black" points="233.25,-204.5 238.24,-204.14"/>
<polyline fill="none" stroke="black" points="238.24,-204.14 243.22,-203.78"/>
<polyline fill="none" stroke="black" points="341.25,-142.25 336.31,-142.99"/>
<polygon fill="black" stroke="black" points="334.57,-138.2 336.06,-148.09 334.08,-148.38 332.6,-138.49 334.57,-138.2"/>
<polyline fill="none" stroke="black" points="336.31,-142.99 331.36,-143.74"/>
<ellipse fill="none" stroke="black" cx="326.91" cy="-144.4" rx="4" ry="4"/>
<path fill="none" stroke="black" d="M239.23,-203.8C278.55,-197.9 284.51,-156.32 318.82,-145.06"/>
<polyline fill="none" stroke="black" points="229.5,-204.5 234.49,-204.14"/>
<polyline fill="none" stroke="black" points="234.49,-204.14 239.47,-203.78"/>
<polyline fill="none" stroke="black" points="337.5,-142.25 332.56,-142.99"/>
<polygon fill="black" stroke="black" points="330.82,-138.2 332.31,-148.09 330.33,-148.38 328.85,-138.49 330.82,-138.2"/>
<polyline fill="none" stroke="black" points="332.56,-142.99 327.61,-143.74"/>
<ellipse fill="none" stroke="black" cx="323.16" cy="-144.4" rx="4" ry="4"/>
</g>

@@ -129,21 +129,21 @@ <!-- erdantic.examples.pydantic.QuestGiver -->

<g id="a_node4"><a xlink:title="erdantic.examples.pydantic.QuestGiver&#10;&#10;A person who offers a task that needs completing.&#10;&#10;Attributes:&#10; &#160;&#160;&#160;name (str): Name of this quest giver&#10; &#160;&#160;&#160;faction (str): Faction that this quest giver belongs to&#10; &#160;&#160;&#160;location (str): Location this quest giver can be found&#10;">
<polygon fill="none" stroke="black" points="627.75,-86 627.75,-108.5 874.5,-108.5 874.5,-86 627.75,-86"/>
<text text-anchor="start" x="717" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="627.75,-63.5 627.75,-86 677.25,-86 677.25,-63.5 627.75,-63.5"/>
<text text-anchor="start" x="637.5" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="677.25,-63.5 677.25,-86 753,-86 753,-63.5 677.25,-63.5"/>
<text text-anchor="start" x="708.38" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="753,-63.5 753,-86 874.5,-86 874.5,-63.5 753,-63.5"/>
<polygon fill="none" stroke="black" points="627.75,-41 627.75,-63.5 677.25,-63.5 677.25,-41 627.75,-41"/>
<text text-anchor="start" x="633.75" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="677.25,-41 677.25,-63.5 753,-63.5 753,-41 677.25,-41"/>
<text text-anchor="start" x="680.25" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="753,-41 753,-63.5 874.5,-63.5 874.5,-41 753,-41"/>
<text text-anchor="start" x="799.12" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">None</text>
<polygon fill="none" stroke="black" points="627.75,-18.5 627.75,-41 677.25,-41 677.25,-18.5 627.75,-18.5"/>
<text text-anchor="start" x="630.75" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="677.25,-18.5 677.25,-41 753,-41 753,-18.5 677.25,-18.5"/>
<text text-anchor="start" x="708.38" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="753,-18.5 753,-41 874.5,-41 874.5,-18.5 753,-18.5"/>
<text text-anchor="start" x="756" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">&quot;Adventurer&#39;s Guild&quot;</text>
<polygon fill="none" stroke="black" points="624,-86 624,-108.5 870.75,-108.5 870.75,-86 624,-86"/>
<text text-anchor="start" x="713.25" y="-93.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-weight="bold" font-size="14.00">QuestGiver</text>
<polygon fill="none" stroke="black" points="624,-63.5 624,-86 673.5,-86 673.5,-63.5 624,-63.5"/>
<text text-anchor="start" x="633.75" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">name</text>
<polygon fill="none" stroke="black" points="673.5,-63.5 673.5,-86 749.25,-86 749.25,-63.5 673.5,-63.5"/>
<text text-anchor="start" x="704.62" y="-69.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="749.25,-63.5 749.25,-86 870.75,-86 870.75,-63.5 749.25,-63.5"/>
<polygon fill="none" stroke="black" points="624,-41 624,-63.5 673.5,-63.5 673.5,-41 624,-41"/>
<text text-anchor="start" x="630" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">faction</text>
<polygon fill="none" stroke="black" points="673.5,-41 673.5,-63.5 749.25,-63.5 749.25,-41 673.5,-41"/>
<text text-anchor="start" x="676.5" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">Optional[str]</text>
<polygon fill="none" stroke="black" points="749.25,-41 749.25,-63.5 870.75,-63.5 870.75,-41 749.25,-41"/>
<text text-anchor="start" x="795.38" y="-47.2" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">None</text>
<polygon fill="none" stroke="black" points="624,-18.5 624,-41 673.5,-41 673.5,-18.5 624,-18.5"/>
<text text-anchor="start" x="627" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">location</text>
<polygon fill="none" stroke="black" points="673.5,-18.5 673.5,-41 749.25,-41 749.25,-18.5 673.5,-18.5"/>
<text text-anchor="start" x="704.62" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">str</text>
<polygon fill="none" stroke="black" points="749.25,-18.5 749.25,-41 870.75,-41 870.75,-18.5 749.25,-18.5"/>
<text text-anchor="start" x="752.25" y="-24.7" font-family="Times New Roman,Times,Liberation Serif,serif" font-size="14.00">&quot;Adventurer&#39;s Guild&quot;</text>
</a>

@@ -155,12 +155,12 @@ </g>

<title>erdantic.examples.pydantic.Quest:e&#45;&gt;erdantic.examples.pydantic.QuestGiver:w</title>
<path fill="none" stroke="black" d="M529.62,-97.25C564.82,-97.25 579.55,-97.25 612.83,-97.25"/>
<polyline fill="none" stroke="black" points="519.75,-97.25 524.75,-97.25"/>
<polyline fill="none" stroke="black" points="524.75,-97.25 529.75,-97.25"/>
<polyline fill="none" stroke="black" points="627.75,-97.25 622.75,-97.25"/>
<polygon fill="black" stroke="black" points="621.75,-92.25 621.75,-102.25 619.75,-102.25 619.75,-92.25 621.75,-92.25"/>
<polyline fill="none" stroke="black" points="622.75,-97.25 617.75,-97.25"/>
<polygon fill="black" stroke="black" points="616.75,-92.25 616.75,-102.25 614.75,-102.25 614.75,-92.25 616.75,-92.25"/>
<polyline fill="none" stroke="black" points="617.75,-97.25 612.75,-97.25"/>
<path fill="none" stroke="black" d="M525.87,-97.25C561.07,-97.25 575.8,-97.25 609.08,-97.25"/>
<polyline fill="none" stroke="black" points="516,-97.25 521,-97.25"/>
<polyline fill="none" stroke="black" points="521,-97.25 526,-97.25"/>
<polyline fill="none" stroke="black" points="624,-97.25 619,-97.25"/>
<polygon fill="black" stroke="black" points="618,-92.25 618,-102.25 616,-102.25 616,-92.25 618,-92.25"/>
<polyline fill="none" stroke="black" points="619,-97.25 614,-97.25"/>
<polygon fill="black" stroke="black" points="613,-92.25 613,-102.25 611,-102.25 611,-92.25 613,-92.25"/>
<polyline fill="none" stroke="black" points="614,-97.25 609,-97.25"/>
</g>
</g>
</svg>
from html import escape
from typing import Any, Dict, List
from typing import Any

@@ -60,3 +60,3 @@ import pydantic

fields: Dict[str, FieldInfoWithDefault] = {}
fields: dict[str, FieldInfoWithDefault] = {}

@@ -72,3 +72,3 @@

def get_fields_from_pydantic_model_with_default(model) -> List[FieldInfoWithDefault]:
def get_fields_from_pydantic_model_with_default(model) -> list[FieldInfoWithDefault]:
"""Copied from erdantic.plugins.pydantic.get_fields_from_pydantic_model and modified to

@@ -75,0 +75,0 @@ extract default values of fields.

@@ -45,3 +45,3 @@ from pprint import pprint

assert fields[2].name == "members"
assert fields[2].type_name == "List[Adventurer]"
assert fields[2].type_name == "list[Adventurer]"
# active_quest

@@ -48,0 +48,0 @@ assert fields[3].model_full_name == FullyQualifiedName.from_object(attrs_examples.Party)

@@ -5,2 +5,3 @@ import filecmp

import click
import pytest

@@ -17,3 +18,7 @@ from typer.testing import CliRunner

runner = CliRunner(mix_stderr=False)
if click.__version__.startswith("8.1"):
# Click <=8.1 had different behavior, but Python 3.9 is only supported up to 8.1.8
runner = CliRunner(mix_stderr=False)
else:
runner = CliRunner()

@@ -167,3 +172,3 @@

assert "Error" in result.stderr
assert "Missing option '--out' / '-o'." in result.stderr
assert "Missing option '--out' / '-o'" in result.stderr

@@ -170,0 +175,0 @@

@@ -70,3 +70,3 @@ import builtins

)
assert field_info.raw_type == List[Adventurer]
assert field_info.raw_type == list[Adventurer]

@@ -73,0 +73,0 @@

@@ -47,3 +47,3 @@ import dataclasses

assert fields[2].name == "members"
assert fields[2].type_name == "List[Adventurer]"
assert fields[2].type_name == "list[Adventurer]"
# active_quest

@@ -50,0 +50,0 @@ assert fields[3].model_full_name == FullyQualifiedName.from_object(dataclasses_examples.Party)

@@ -45,3 +45,3 @@ from pprint import pprint

assert fields[2].name == "members"
assert fields[2].type_name == "List[Adventurer]"
assert fields[2].type_name == "list[Adventurer]"
# active_quest

@@ -48,0 +48,0 @@ assert fields[3].model_full_name == FullyQualifiedName.from_object(msgspec_examples.Party)

@@ -48,3 +48,3 @@ from pprint import pprint

assert fields[2].name == "members"
assert fields[2].type_name == "List[Adventurer]"
assert fields[2].type_name == "list[Adventurer]"
# active_quest

@@ -51,0 +51,0 @@ assert fields[3].model_full_name == FullyQualifiedName.from_object(pydantic_v1_examples.Party)

@@ -48,3 +48,3 @@ from pprint import pprint

assert fields[2].name == "members"
assert fields[2].type_name == "List[Adventurer]"
assert fields[2].type_name == "list[Adventurer]"
# active_quest

@@ -51,0 +51,0 @@ assert fields[3].model_full_name == FullyQualifiedName.from_object(pydantic_examples.Party)

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet