Pydantic
Example Output
Overview
The Pydantic Generator produces Pydantic flavored python dataclasses from a linkml model, with optional support for user-supplied jinja2 templates to generate alternate classes.
Example
Given a definition of a Person class:
Person:
is_a: NamedThing
description: >-
A person (alive, dead, undead, or fictional).
class_uri: schema:Person
mixins:
- HasAliases
slots:
- primary_email
- birth_date
- age_in_years
- gender
- current_address
- has_employment_history
- has_familial_relationships
- has_medical_history
(some details omitted for brevity, including slot definitions and parent classes)
The generate python looks like this:
class Person(NamedThing):
"""
A person (alive, dead, undead, or fictional).
"""
primary_email: Optional[str] = Field(None)
birth_date: Optional[str] = Field(None)
age_in_years: Optional[int] = Field(None, ge=0, le=999)
gender: Optional[GenderType] = Field(None)
current_address: Optional[Address] = Field(None, description="""The address at which a person currently lives""")
has_employment_history: Optional[List[EmploymentEvent]] = Field(None)
has_familial_relationships: Optional[List[FamilialRelationship]] = Field(None)
has_medical_history: Optional[List[MedicalEvent]] = Field(None)
aliases: Optional[List[str]] = Field(None)
id: Optional[str] = Field(None)
name: Optional[str] = Field(None)
description: Optional[str] = Field(None)
image: Optional[str] = Field(None)
Docs
Command Line
gen-pydantic
Generate pydantic classes to represent a LinkML model
gen-pydantic [OPTIONS] YAMLFILE
Options
- --template_file <template_file>
Optional jinja2 template to use for class generation
- -f, --format <format>
Output format
- Default
pydantic
- Options
pydantic
- --metadata, --no-metadata
Include metadata in output
- Default
True
- --useuris, --metauris
Include metadata in output
- Default
True
- -im, --importmap <importmap>
Import mapping file
- --log_level <log_level>
Logging level
- Default
WARNING
- Options
CRITICAL | ERROR | WARNING | INFO | DEBUG
- -v, --verbose
verbosity
- --mergeimports, --no-mergeimports
Merge imports into source file (default=mergeimports)
Arguments
- YAMLFILE
Required argument
Code
- class linkml.generators.pydanticgen.PydanticGenerator(schema: Union[str, TextIO, linkml_runtime.linkml_model.meta.SchemaDefinition], template_file: Optional[str] = None, allow_extra=False, format: str = 'pydantic', genmeta: bool = False, gen_classvars: bool = True, gen_slots: bool = True, gen_mixin_inheritance: bool = True, **kwargs)[source]
Additional Notes
LinkML contains two Python generators. The Pydantic dataclass generator is specifically useful for FastAPI, but is newer and less full featured than the standard Python generator.
Biolink Example
Begin by downloading the Biolink Model YAML and adding a virtual environment and installing linkml.
curl -OJ https://raw.githubusercontent.com/biolink/biolink-model/master/biolink-model.yaml
python3 -m venv venv
source venv/bin/activate
pip install linkml
Now generate the classes using the gen-pydantic command
gen-pydantic biolink-model.yaml > biolink-model.py