"""
Auto-generated Pydantic models for the bio.tools schema.
Do not edit this file manually — it is generated by `scripts/gen_biotools_models.py`
from the JSON schema at https://raw.githubusercontent.com/bio-tools/biotoolsSchema/refs/heads/v4-dev/biotools.schema.json.
"""
# generated by datamodel-codegen:
# filename: tool_root.json
# timestamp: 2025-10-28T20:34:22+00:00
from __future__ import annotations
from enum import Enum
from typing import List, Optional, Union
from pydantic import BaseModel, ConfigDict, Field, RootModel, constr
[docs]
class Type(Enum):
doi = "doi"
rrid = "rrid"
cpe = "cpe"
biotoolsCURIE = "biotoolsCURIE"
[docs]
class OtherIDItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
type: Optional[Type] = Field(
None,
description="Type of tool identifier.",
examples=["doi"],
title="Type of tool identifier",
)
value: Union[
constr(pattern=r"^(10\.[0-9]{4,9}/[\(-\)\--<>A-\[\]_a-z]+)$"),
constr(pattern=r"^((r|r|i|d|RRID)\:[\w\D]+)$"),
constr(pattern=r"^((c|p|e|CPE)\:[\w\D]+)$"),
constr(pattern=r"^((B|I|O|T|O|O|L|S|biotools)\:[\--\.0-9A-Z_a-z]*)$"),
] = Field(
...,
description="Value of tool identifier.",
examples=["10.1038/nmeth.1701"],
title="Value of tool identifier",
)
version: Optional[
constr(
pattern=r"^([ \(-\)\+-\.0-;A-Z_a-z - ]*)$",
min_length=1,
max_length=100,
)
] = Field(
None,
description="Version information (typically a version number) of the software applicable to this identifier.",
examples=["2.0 - 2.7"],
title="Tool version information (other IDs)",
)
[docs]
class TopicItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
term: Optional[str] = Field(
None,
description="An EDAM Topic term (preferred label or synonym).",
examples=["Proteomics"],
title="EDAM topic term",
)
uri: Optional[constr(pattern=r"^(http\://edamontology\.org/topic_[0-9]{4,4})$")] = Field(
None,
description="URL of an EDAM Topic concept.",
examples=["http://edamontology.org/topic_0121"],
title="EDAM Topic URI",
)
[docs]
class LanguageEnum(Enum):
ActionScript = "ActionScript"
Ada = "Ada"
AppleScript = "AppleScript"
Assembly_language = "Assembly language"
AWK = "AWK"
Bash = "Bash"
C = "C"
C_ = "C#"
C__ = "C++"
Clojure = "Clojure"
COBOL = "COBOL"
ColdFusion = "ColdFusion"
CUDA = "CUDA"
CWL = "CWL"
D = "D"
Delphi = "Delphi"
Dylan = "Dylan"
Eiffel = "Eiffel"
Elm = "Elm"
Forth = "Forth"
Fortran = "Fortran"
Groovy = "Groovy"
Haskell = "Haskell"
Icarus = "Icarus"
Java = "Java"
JavaScript = "JavaScript"
Julia = "Julia"
JSP = "JSP"
LabVIEW = "LabVIEW"
Lisp = "Lisp"
Lua = "Lua"
Maple = "Maple"
Mathematica = "Mathematica"
MATLAB = "MATLAB"
MLXTRAN = "MLXTRAN"
NMTRAN = "NMTRAN"
OCaml = "OCaml"
Pascal = "Pascal"
Perl = "Perl"
PHP = "PHP"
Prolog = "Prolog"
PyMOL = "PyMOL"
Python = "Python"
R = "R"
Racket = "Racket"
REXX = "REXX"
Ruby = "Ruby"
SAS = "SAS"
Scala = "Scala"
Scheme = "Scheme"
Shell = "Shell"
Smalltalk = "Smalltalk"
SQL = "SQL"
Turing = "Turing"
Verilog = "Verilog"
VHDL = "VHDL"
Visual_Basic = "Visual Basic"
XAML = "XAML"
Other = "Other"
[docs]
class License(Enum):
field_0BSD = "0BSD"
AAL = "AAL"
ADSL = "ADSL"
AFL_1_1 = "AFL-1.1"
AFL_1_2 = "AFL-1.2"
AFL_2_0 = "AFL-2.0"
AFL_2_1 = "AFL-2.1"
AFL_3_0 = "AFL-3.0"
AGPL_1_0 = "AGPL-1.0"
AGPL_3_0 = "AGPL-3.0"
AMDPLPA = "AMDPLPA"
AML = "AML"
AMPAS = "AMPAS"
ANTLR_PD = "ANTLR-PD"
APAFML = "APAFML"
APL_1_0 = "APL-1.0"
APSL_1_0 = "APSL-1.0"
APSL_1_1 = "APSL-1.1"
APSL_1_2 = "APSL-1.2"
APSL_2_0 = "APSL-2.0"
Abstyles = "Abstyles"
Adobe_2006 = "Adobe-2006"
Adobe_Glyph = "Adobe-Glyph"
Afmparse = "Afmparse"
Aladdin = "Aladdin"
Apache_1_0 = "Apache-1.0"
Apache_1_1 = "Apache-1.1"
Apache_2_0 = "Apache-2.0"
Artistic_1_0 = "Artistic-1.0"
Artistic_1_0_Perl = "Artistic-1.0-Perl"
Artistic_1_0_cl8 = "Artistic-1.0-cl8"
Artistic_2_0 = "Artistic-2.0"
BSD_2_Clause = "BSD-2-Clause"
BSD_2_Clause_FreeBSD = "BSD-2-Clause-FreeBSD"
BSD_2_Clause_NetBSD = "BSD-2-Clause-NetBSD"
BSD_3_Clause = "BSD-3-Clause"
BSD_3_Clause_Attribution = "BSD-3-Clause-Attribution"
BSD_3_Clause_Clear = "BSD-3-Clause-Clear"
BSD_3_Clause_LBNL = "BSD-3-Clause-LBNL"
BSD_3_Clause_No_Nuclear_License = "BSD-3-Clause-No-Nuclear-License"
BSD_3_Clause_No_Nuclear_License_2014 = "BSD-3-Clause-No-Nuclear-License-2014"
BSD_3_Clause_No_Nuclear_Warranty = "BSD-3-Clause-No-Nuclear-Warranty"
BSD_4_Clause = "BSD-4-Clause"
BSD_4_Clause_UC = "BSD-4-Clause-UC"
BSD_Protection = "BSD-Protection"
BSD_Source_Code = "BSD-Source-Code"
BSL_1_0 = "BSL-1.0"
Bahyph = "Bahyph"
Barr = "Barr"
Beerware = "Beerware"
BitTorrent_1_0 = "BitTorrent-1.0"
BitTorrent_1_1 = "BitTorrent-1.1"
Borceux = "Borceux"
CATOSL_1_1 = "CATOSL-1.1"
CC_BY_1_0 = "CC-BY-1.0"
CC_BY_2_0 = "CC-BY-2.0"
CC_BY_2_5 = "CC-BY-2.5"
CC_BY_3_0 = "CC-BY-3.0"
CC_BY_4_0 = "CC-BY-4.0"
CC_BY_NC_1_0 = "CC-BY-NC-1.0"
CC_BY_NC_2_0 = "CC-BY-NC-2.0"
CC_BY_NC_2_5 = "CC-BY-NC-2.5"
CC_BY_NC_3_0 = "CC-BY-NC-3.0"
CC_BY_NC_4_0 = "CC-BY-NC-4.0"
CC_BY_NC_ND_1_0 = "CC-BY-NC-ND-1.0"
CC_BY_NC_ND_2_0 = "CC-BY-NC-ND-2.0"
CC_BY_NC_ND_2_5 = "CC-BY-NC-ND-2.5"
CC_BY_NC_ND_3_0 = "CC-BY-NC-ND-3.0"
CC_BY_NC_ND_4_0 = "CC-BY-NC-ND-4.0"
CC_BY_NC_SA_1_0 = "CC-BY-NC-SA-1.0"
CC_BY_NC_SA_2_0 = "CC-BY-NC-SA-2.0"
CC_BY_NC_SA_2_5 = "CC-BY-NC-SA-2.5"
CC_BY_NC_SA_3_0 = "CC-BY-NC-SA-3.0"
CC_BY_NC_SA_4_0 = "CC-BY-NC-SA-4.0"
CC_BY_ND_1_0 = "CC-BY-ND-1.0"
CC_BY_ND_2_0 = "CC-BY-ND-2.0"
CC_BY_ND_2_5 = "CC-BY-ND-2.5"
CC_BY_ND_3_0 = "CC-BY-ND-3.0"
CC_BY_ND_4_0 = "CC-BY-ND-4.0"
CC_BY_SA_1_0 = "CC-BY-SA-1.0"
CC_BY_SA_2_0 = "CC-BY-SA-2.0"
CC_BY_SA_2_5 = "CC-BY-SA-2.5"
CC_BY_SA_3_0 = "CC-BY-SA-3.0"
CC_BY_SA_4_0 = "CC-BY-SA-4.0"
CC0_1_0 = "CC0-1.0"
CDDL_1_0 = "CDDL-1.0"
CDDL_1_1 = "CDDL-1.1"
CECILL_1_0 = "CECILL-1.0"
CECILL_1_1 = "CECILL-1.1"
CECILL_2_0 = "CECILL-2.0"
CECILL_2_1 = "CECILL-2.1"
CECILL_B = "CECILL-B"
CECILL_C = "CECILL-C"
CNRI_Jython = "CNRI-Jython"
CNRI_Python = "CNRI-Python"
CNRI_Python_GPL_Compatible = "CNRI-Python-GPL-Compatible"
CPAL_1_0 = "CPAL-1.0"
CPL_1_0 = "CPL-1.0"
CPOL_1_02 = "CPOL-1.02"
CUA_OPL_1_0 = "CUA-OPL-1.0"
Caldera = "Caldera"
ClArtistic = "ClArtistic"
Condor_1_1 = "Condor-1.1"
Crossword = "Crossword"
CrystalStacker = "CrystalStacker"
Cube = "Cube"
D_FSL_1_0 = "D-FSL-1.0"
DOC = "DOC"
DSDP = "DSDP"
Dotseqn = "Dotseqn"
ECL_1_0 = "ECL-1.0"
ECL_2_0 = "ECL-2.0"
EFL_1_0 = "EFL-1.0"
EFL_2_0 = "EFL-2.0"
EPL_1_0 = "EPL-1.0"
EPL_2_0 = "EPL-2.0"
EUDatagrid = "EUDatagrid"
EUPL_1_0 = "EUPL-1.0"
EUPL_1_1 = "EUPL-1.1"
Entessa = "Entessa"
ErlPL_1_1 = "ErlPL-1.1"
Eurosym = "Eurosym"
FSFAP = "FSFAP"
FSFUL = "FSFUL"
FSFULLR = "FSFULLR"
FTL = "FTL"
Fair = "Fair"
Frameworx_1_0 = "Frameworx-1.0"
FreeImage = "FreeImage"
GFDL_1_1 = "GFDL-1.1"
GFDL_1_2 = "GFDL-1.2"
GFDL_1_3 = "GFDL-1.3"
GL2PS = "GL2PS"
GPL_1_0 = "GPL-1.0"
GPL_2_0 = "GPL-2.0"
GPL_3_0 = "GPL-3.0"
Giftware = "Giftware"
Glide = "Glide"
Glulxe = "Glulxe"
HPND = "HPND"
HaskellReport = "HaskellReport"
IBM_pibs = "IBM-pibs"
ICU = "ICU"
IJG = "IJG"
IPA = "IPA"
IPL_1_0 = "IPL-1.0"
ISC = "ISC"
ImageMagick = "ImageMagick"
Imlib2 = "Imlib2"
Info_ZIP = "Info-ZIP"
Intel = "Intel"
Intel_ACPI = "Intel-ACPI"
Interbase_1_0 = "Interbase-1.0"
JSON = "JSON"
JasPer_2_0 = "JasPer-2.0"
LAL_1_2 = "LAL-1.2"
LAL_1_3 = "LAL-1.3"
LGPL_2_0 = "LGPL-2.0"
LGPL_2_1 = "LGPL-2.1"
LGPL_3_0 = "LGPL-3.0"
LGPLLR = "LGPLLR"
LPL_1_0 = "LPL-1.0"
LPL_1_02 = "LPL-1.02"
LPPL_1_0 = "LPPL-1.0"
LPPL_1_1 = "LPPL-1.1"
LPPL_1_2 = "LPPL-1.2"
LPPL_1_3a = "LPPL-1.3a"
LPPL_1_3c = "LPPL-1.3c"
Latex2e = "Latex2e"
Leptonica = "Leptonica"
LiLiQ_P_1_1 = "LiLiQ-P-1.1"
LiLiQ_R_1_1 = "LiLiQ-R-1.1"
LiLiQ_Rplus_1_1 = "LiLiQ-Rplus-1.1"
Libpng = "Libpng"
MIT = "MIT"
MIT_CMU = "MIT-CMU"
MIT_advertising = "MIT-advertising"
MIT_enna = "MIT-enna"
MIT_feh = "MIT-feh"
MITNFA = "MITNFA"
MPL_1_0 = "MPL-1.0"
MPL_1_1 = "MPL-1.1"
MPL_2_0 = "MPL-2.0"
MPL_2_0_no_copyleft_exception = "MPL-2.0-no-copyleft-exception"
MS_PL = "MS-PL"
MS_RL = "MS-RL"
MTLL = "MTLL"
MakeIndex = "MakeIndex"
MirOS = "MirOS"
Motosoto = "Motosoto"
Multics = "Multics"
Mup = "Mup"
NASA_1_3 = "NASA-1.3"
NBPL_1_0 = "NBPL-1.0"
NCSA = "NCSA"
NGPL = "NGPL"
NLOD_1_0 = "NLOD-1.0"
NLPL = "NLPL"
NOSL = "NOSL"
NPL_1_0 = "NPL-1.0"
NPL_1_1 = "NPL-1.1"
NPOSL_3_0 = "NPOSL-3.0"
NRL = "NRL"
NTP = "NTP"
Naumen = "Naumen"
NetCDF = "NetCDF"
Newsletr = "Newsletr"
Nokia = "Nokia"
Noweb = "Noweb"
Nunit = "Nunit"
OCCT_PL = "OCCT-PL"
OCLC_2_0 = "OCLC-2.0"
ODbL_1_0 = "ODbL-1.0"
OFL_1_0 = "OFL-1.0"
OFL_1_1 = "OFL-1.1"
OGTSL = "OGTSL"
OLDAP_1_1 = "OLDAP-1.1"
OLDAP_1_2 = "OLDAP-1.2"
OLDAP_1_3 = "OLDAP-1.3"
OLDAP_1_4 = "OLDAP-1.4"
OLDAP_2_0 = "OLDAP-2.0"
OLDAP_2_0_1 = "OLDAP-2.0.1"
OLDAP_2_1 = "OLDAP-2.1"
OLDAP_2_2 = "OLDAP-2.2"
OLDAP_2_2_1 = "OLDAP-2.2.1"
OLDAP_2_2_2 = "OLDAP-2.2.2"
OLDAP_2_3 = "OLDAP-2.3"
OLDAP_2_4 = "OLDAP-2.4"
OLDAP_2_5 = "OLDAP-2.5"
OLDAP_2_6 = "OLDAP-2.6"
OLDAP_2_7 = "OLDAP-2.7"
OLDAP_2_8 = "OLDAP-2.8"
OML = "OML"
OPL_1_0 = "OPL-1.0"
OSET_PL_2_1 = "OSET-PL-2.1"
OSL_1_0 = "OSL-1.0"
OSL_1_1 = "OSL-1.1"
OSL_2_0 = "OSL-2.0"
OSL_2_1 = "OSL-2.1"
OSL_3_0 = "OSL-3.0"
OpenSSL = "OpenSSL"
PDDL_1_0 = "PDDL-1.0"
PHP_3_0 = "PHP-3.0"
PHP_3_01 = "PHP-3.01"
Plexus = "Plexus"
PostgreSQL = "PostgreSQL"
Python_2_0 = "Python-2.0"
QPL_1_0 = "QPL-1.0"
Qhull = "Qhull"
RHeCos_1_1 = "RHeCos-1.1"
RPL_1_1 = "RPL-1.1"
RPL_1_5 = "RPL-1.5"
RPSL_1_0 = "RPSL-1.0"
RSA_MD = "RSA-MD"
RSCPL = "RSCPL"
Rdisc = "Rdisc"
Ruby = "Ruby"
SAX_PD = "SAX-PD"
SCEA = "SCEA"
SGI_B_1_0 = "SGI-B-1.0"
SGI_B_1_1 = "SGI-B-1.1"
SGI_B_2_0 = "SGI-B-2.0"
SISSL = "SISSL"
SISSL_1_2 = "SISSL-1.2"
SMLNJ = "SMLNJ"
SMPPL = "SMPPL"
SNIA = "SNIA"
SPL_1_0 = "SPL-1.0"
SWL = "SWL"
Saxpath = "Saxpath"
Sendmail = "Sendmail"
SimPL_2_0 = "SimPL-2.0"
Sleepycat = "Sleepycat"
Spencer_86 = "Spencer-86"
Spencer_94 = "Spencer-94"
Spencer_99 = "Spencer-99"
SugarCRM_1_1_3 = "SugarCRM-1.1.3"
TCL = "TCL"
TMate = "TMate"
TORQUE_1_1 = "TORQUE-1.1"
TOSL = "TOSL"
UPL_1_0 = "UPL-1.0"
Unicode_TOU = "Unicode-TOU"
Unlicense = "Unlicense"
VOSTROM = "VOSTROM"
VSL_1_0 = "VSL-1.0"
Vim = "Vim"
W3C = "W3C"
W3C_19980720 = "W3C-19980720"
WTFPL = "WTFPL"
Watcom_1_0 = "Watcom-1.0"
Wsuipa = "Wsuipa"
X11 = "X11"
XFree86_1_1 = "XFree86-1.1"
XSkat = "XSkat"
Xerox = "Xerox"
Xnet = "Xnet"
YPL_1_0 = "YPL-1.0"
YPL_1_1 = "YPL-1.1"
ZPL_1_1 = "ZPL-1.1"
ZPL_2_0 = "ZPL-2.0"
ZPL_2_1 = "ZPL-2.1"
Zed = "Zed"
Zend_2_0 = "Zend-2.0"
Zimbra_1_3 = "Zimbra-1.3"
Zimbra_1_4 = "Zimbra-1.4"
Zlib = "Zlib"
bzip2_1_0_5 = "bzip2-1.0.5"
bzip2_1_0_6 = "bzip2-1.0.6"
curl = "curl"
diffmark = "diffmark"
dvipdfm = "dvipdfm"
eGenix = "eGenix"
gSOAP_1_3b = "gSOAP-1.3b"
gnuplot = "gnuplot"
iMatix = "iMatix"
libtiff = "libtiff"
mpich2 = "mpich2"
psfrag = "psfrag"
psutils = "psutils"
xinetd = "xinetd"
xpp = "xpp"
zlib_acknowledgement = "zlib-acknowledgement"
Proprietary = "Proprietary"
Other = "Other"
Not_licensed = "Not licensed"
Freeware = "Freeware"
[docs]
class Maturity(Enum):
Emerging = "Emerging"
Mature = "Mature"
Legacy = "Legacy"
[docs]
class Cost(Enum):
Free_of_charge = "Free of charge"
Free_of_charge__with_restrictions_ = "Free of charge (with restrictions)"
Commercial = "Commercial"
[docs]
class Accessibility(Enum):
Open_access = "Open access"
Open_access__with_restrictions_ = "Open access (with restrictions)"
Restricted_access = "Restricted access"
[docs]
class ElixirNodeEnum(Enum):
Belgium = "Belgium"
Czech_Republic = "Czech Republic"
Denmark = "Denmark"
EMBL = "EMBL"
Estonia = "Estonia"
Finland = "Finland"
France = "France"
Germany = "Germany"
Greece = "Greece"
Hungary = "Hungary"
Ireland = "Ireland"
Israel = "Israel"
Italy = "Italy"
Luxembourg = "Luxembourg"
Netherlands = "Netherlands"
Norway = "Norway"
Portugal = "Portugal"
Slovenia = "Slovenia"
Spain = "Spain"
Sweden = "Sweden"
Switzerland = "Switzerland"
UK = "UK"
[docs]
class OperationItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
term: Optional[str] = Field(
None,
description="An EDAM Operation term (preferred label or synonym).",
examples=["Multiple sequence alignment"],
title="EDAM Operation term",
)
uri: Optional[constr(pattern=r"^(http\://edamontology\.org/operation_[0-9]{4,4})$")] = Field(
None,
description="URL of an EDAM Operation concept. (NOTE: The URL must be in the EDAM Operation namespace, i.e. http://edamontology.org/operation.)",
examples=["http://edamontology.org/operation_0492"],
title="EDAM Operation URI",
)
[docs]
class TypeEnum(Enum):
Discussion_forum = "Discussion forum"
Galaxy_service = "Galaxy service"
Helpdesk = "Helpdesk"
Issue_tracker = "Issue tracker"
Mailing_list = "Mailing list"
Mirror = "Mirror"
Software_catalogue = "Software catalogue"
Repository = "Repository"
Service = "Service"
Social_media = "Social media"
Technical_monitoring = "Technical monitoring"
Other = "Other"
[docs]
class Type1(Enum):
API_specification = "API specification"
Biological_data = "Biological data"
Binaries = "Binaries"
Command_line_specification = "Command-line specification"
Container_file = "Container file"
Icon = "Icon"
Software_package = "Software package"
Screenshot = "Screenshot"
Source_code = "Source code"
Test_data = "Test data"
Test_script = "Test script"
Tool_wrapper__CWL_ = "Tool wrapper (CWL)"
Tool_wrapper__Galaxy_ = "Tool wrapper (Galaxy)"
Tool_wrapper__Taverna_ = "Tool wrapper (Taverna)"
Tool_wrapper__Other_ = "Tool wrapper (Other)"
VM_image = "VM image"
Downloads_page = "Downloads page"
Other = "Other"
[docs]
class TypeEnum1(Enum):
API_documentation = "API documentation"
Citation_instructions = "Citation instructions"
Code_of_conduct = "Code of conduct"
Command_line_options = "Command-line options"
Contributions_policy = "Contributions policy"
FAQ = "FAQ"
General = "General"
Governance = "Governance"
Installation_instructions = "Installation instructions"
Quick_start_guide = "Quick start guide"
Release_notes = "Release notes"
Terms_of_use = "Terms of use"
Training_material = "Training material"
User_manual = "User manual"
Other = "Other"
[docs]
class Type2(Enum):
isNewVersionOf = "isNewVersionOf"
hasNewVersion = "hasNewVersion"
uses = "uses"
usedBy = "usedBy"
includes = "includes"
includedIn = "includedIn"
[docs]
class TypeEnum2(Enum):
Primary = "Primary"
Benchmarking_study = "Benchmarking study"
Method = "Method"
Usage = "Usage"
Review = "Review"
Other = "Other"
[docs]
class TypeEntity(Enum):
Person = "Person"
Project = "Project"
Division = "Division"
Institute = "Institute"
Consortium = "Consortium"
Funding_agency = "Funding agency"
[docs]
class TypeRoleEnum(Enum):
Primary_contact = "Primary contact"
Contributor = "Contributor"
Developer = "Developer"
Documentor = "Documentor"
Maintainer = "Maintainer"
Provider = "Provider"
Support = "Support"
[docs]
class EDAMdata(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
term: Optional[str] = Field(
None,
description="An EDAM Data term (preferred label or synonym).",
examples=["Protein sequences"],
title="EDAM Data term",
)
uri: Optional[constr(pattern=r"^(http\://edamontology\.org/data_[0-9]{4,4})$")] = Field(
None,
description="URL of an EDAM Data concept.",
examples=["http://edamontology.org/data_2976"],
title="EDAM Data URI",
)
[docs]
class DataType(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
data: EDAMdata = Field(..., description="Type of data: EDAM Data term(s).", title="EDAM Data concept")
format: Optional[List[EDAMformat]] = None
[docs]
class OntologyConcept(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
term: Optional[List[str]] = Field(None, max_length=1, min_length=0)
uri: Optional[str] = Field(
None,
description="Unique identifier of the concept (URI).",
title="Ontology concept URI",
)
[docs]
class TextType(RootModel[constr(min_length=10, max_length=1000)]):
root: constr(min_length=10, max_length=1000) = Field(
...,
description="Free text with a minimum length of 10 and maximum length of 1000.",
examples=["Comment about the link."],
title="Free text",
)
[docs]
class UrlftpType(RootModel[str]):
root: str = Field(
...,
description="Homepage of the software, or some URL that best serves this purpose.",
examples=["https://someurl.org"],
title="Tool homepage URL",
)
[docs]
class VersionType(
RootModel[
constr(
pattern=r"^([ \(-\)\+-\.0-;A-Z_a-z - ]*)$",
min_length=1,
max_length=100,
)
]
):
root: constr(pattern=r"^([ \(-\)\+-\.0-;A-Z_a-z - ]*)$", min_length=1, max_length=100) = Field(
...,
description="Tool version label or version range.",
examples=["2.0 - 2.7"],
title="Tool version information",
)
[docs]
class OutputItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
data: EDAMdata = Field(
...,
description="Type of primary output data, if any (EDAM Data).",
title="Output data (EDAM Data)",
)
format: Optional[List[EDAMformat]] = Field(
None, description="EDAM Foramt concept(s)", title="EDAM Format concept(s)"
)
[docs]
class FunctionItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
operation: List[OperationItem] = Field(..., min_length=1)
input: Optional[List[InputItem]] = None
output: Optional[List[OutputItem]] = None
note: Optional[constr(min_length=10, max_length=1000)] = Field(
None,
description="Concise comment about this function, if not apparent from the software description and EDAM annotations.",
examples=[
"Concise comment about this function, if not apparent from the software description and EDAM annotations."
],
title="Function note",
)
cmd: Optional[constr(min_length=1, max_length=1000)] = Field(
None,
description="Relevant command, command-line fragment or option for executing this function / running the tool in this mode.",
examples=["-s best"],
title="Command-line snippet",
)
[docs]
class LinkItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
url: UrlftpType = Field(
...,
description="A link of some relevance to the software (URL).",
title="Link URL",
)
type: List[TypeEnum] = Field(..., min_length=1)
note: Optional[TextType] = Field(None, description="Comment about the link.", title="Link comment")
[docs]
class DownloadItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
url: UrlftpType = Field(
...,
description="Link to download (or repository providing a download) for the software.",
title="Download URL",
)
type: Type1 = Field(..., description="Type of download that is linked to.", title="Download type")
note: Optional[TextType] = Field(None, description="Comment about the download.", title="Downlad comment")
version: Optional[VersionType] = Field(
None,
description="Version information (typically a version number) of the software applicable to this download.",
title="Tool version information (download)",
)
[docs]
class DocumentationItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
url: UrlftpType = Field(
...,
description="Link to documentation on the web for the tool.",
title="Documentation URL",
)
type: List[TypeEnum1] = Field(..., min_length=1)
note: Optional[TextType] = Field(
None,
description="Comment about the documentation.",
title="Documentation comment",
)
[docs]
class RelationItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
type: Type2 = Field(
...,
description="Type of relation between this and another registered software. (NOTE: Certain relations may only be defined between certain types of tool.)",
title="Tool relationship type",
)
biotoolsID: BiotoolsIdType = Field(
...,
description="bio.tools ID of an existing bio.tools entry to which this software is related.",
title="bio.tools toolID",
)
[docs]
class PublicationItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
doi: Optional[constr(pattern=r"^(10\.[0-9]{4,9}/[\(-\)\--<>A-\[\]_a-z]+)$")] = Field(
None,
description="Digital Object Identifier (DOI) of a publication about the software.",
examples=["10.1093/nar/gkv1116"],
title="Publication DOI",
)
pmid: Optional[constr(pattern=r"^([1-9][0-9]{0,8})$")] = Field(
None,
description="PubMed Identifier (PMID) of a publication about the software.",
examples=["26538599"],
title="Publication PMID",
)
pmcid: Optional[constr(pattern=r"^((PMC)[1-9][0-9]{0,8})$")] = Field(
None,
description="PubMed Central Identifier (PMCID) of a publication about the software.",
examples=["PMC4702812"],
title="Publicaction PMCID",
)
type: Optional[List[TypeEnum2]] = None
note: Optional[TextType] = Field(None, description="Comment about the publication.", title="Publication comment")
version: Optional[VersionType] = Field(
None,
description="Version information (typically a version number) of the software applicable to this publication.",
)
[docs]
class CreditItem(BaseModel):
model_config = ConfigDict(
extra="ignore",
)
name: Optional[constr(min_length=1, max_length=100)] = Field(
None,
description="Name of the entity that is credited.",
title="Tool credit name",
)
email: Optional[
constr(
pattern=r"^([0-9A-Z_a-z]+([\'\+\--\.][0-9A-Z_a-z]+)*@[0-9A-Z_a-z]+([\--\.][0-9A-Z_a-z]+)*\.[0-9A-Z_a-z]+([\--\.][0-9A-Z_a-z]+)*)$"
)
] = Field(
None,
description="Email address of the entity that is credited.",
title="Tool credit email",
)
url: Optional[str] = Field(
None,
description="URL for the entity that is credited, e.g. homepage of an institute. (NOTE: An HTTP or HTTPS URL.)",
title="Tool credit URL",
)
orcidid: Optional[
Union[
constr(pattern=r"^(http\://orcid\.org/[0-9]{4,4}\-[0-9]{4,4}\-[0-9]{4,4}\-[0-9]{3,3}[0-9X])$"),
constr(pattern=r"^(https\://orcid\.org/[0-9]{4,4}\-[0-9]{4,4}\-[0-9]{4,4}\-[0-9]{3,3}[0-9X])$"),
]
] = Field(
None,
description="Unique identifier (ORCID iD) of a person that is credited. (NOTE: Open Researcher and Contributor IDs (ORCID IDs) provide a persistent reference to information on a researcher, see http://orcid.org/.)",
title="Tool credit ORCID iD",
)
gridid: Optional[constr(pattern=r"^(grid[\w\D][0-9]{4,}[\w\D][0-9a-f]{1,2})$")] = Field(
None,
description="Unique identifier (GRID ID) of an organisation that is credited. (NOTE: Global Research Identifier Database (GRID) IDs provide a persistent reference to information on research organisations, see https://www.grid.ac/.)",
title="Tool credit GRID ID",
)
rorid: Optional[constr(pattern=r"")] = Field(
None,
description="Unique identifier (ROR ID) of an organisation that is credited. (NOTE: Research Organization Registry (ROR) IDs provide a persistent reference to information on research organisations, see https://ror.org/.)",
title="Tool credit ROR ID",
)
fundrefid: Optional[constr(pattern=r"")] = Field(
None,
description="Unique identifier (FundRef ID or Funder ID) of a funding organisation that is credited. (NOTE: The Funder Registry (formerly FundRef) IDs provide a persistent reference to information on funding organisations registered in the Crossref registry, see https://www.crossref.org/services/funder-registry/.)",
title="Tool credit FundRef ID",
)
typeEntity: Optional[TypeEntity] = Field(
None,
description="Type of entity that is credited.",
title="Tool credit entity type",
)
typeRole: Optional[List[TypeRoleEnum]] = None
note: Optional[TextType] = Field(
None,
description="A comment about the credit.\nThis can elaborate on the contribution of the credited entity.",
title="Tool credit comment",
)