"""
Auto-generated Pydantic models for the bio.tools schema.
Do not edit this file manually — it is generated by `scripts/gen_models.py`
from the JSON schema at https://raw.githubusercontent.com/bio-tools/biotoolsSchema/refs/heads/main/jsonschema/biotoolsj.json.
"""
# generated by datamodel-codegen:
# filename: tool_root.json
# timestamp: 2026-08-18T10:52:32+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'
Cython = 'Cython'
ColdFusion = 'ColdFusion'
CUDA = 'CUDA'
CWL = 'CWL'
D = 'D'
Delphi = 'Delphi'
Dylan = 'Dylan'
Eiffel = 'Eiffel'
Elm = 'Elm'
F_ = 'F#'
Forth = 'Forth'
Fortran = 'Fortran'
Go = 'Go'
Groovy = 'Groovy'
Haskell = 'Haskell'
Java = 'Java'
JavaScript = 'JavaScript'
Julia = 'Julia'
Jython = 'Jython'
JSP = 'JSP'
Kotlin = 'Kotlin'
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'
Q_ = 'Q#'
QCL = 'QCL'
R = 'R'
Racket = 'Racket'
REXX = 'REXX'
Ruby = 'Ruby'
Rust = 'Rust'
SAS = 'SAS'
Scala = 'Scala'
Scheme = 'Scheme'
Shell = 'Shell'
Smalltalk = 'Smalltalk'
SQL = 'SQL'
Swift = 'Swift'
Turing = 'Turing'
TypeScript = 'TypeScript'
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'
AGPL_1_0_or_later = 'AGPL-1.0-or-later'
AGPL_3_0_or_later = 'AGPL-3.0-or-later'
ANTLR_PD_fallback = 'ANTLR-PD-fallback'
blessing = 'blessing'
BlueOak_1_0_0 = 'BlueOak-1.0.0'
BSD_1_Clause = 'BSD-1-Clause'
BSD_2_Clause_Patent = 'BSD-2-Clause-Patent'
BSD_2_Clause_Views = 'BSD-2-Clause-Views'
BSD_3_Clause_Modification = 'BSD-3-Clause-Modification'
BSD_3_Clause_No_Military_License = 'BSD-3-Clause-No-Military-License'
BSD_3_Clause_Open_MPI = 'BSD-3-Clause-Open-MPI'
BSD_4_Clause_Shortened = 'BSD-4-Clause-Shortened'
BUSL_1_1 = 'BUSL-1.1'
CAL_1_0 = 'CAL-1.0'
CAL_1_0_Combined_Work_Exception = 'CAL-1.0-Combined-Work-Exception'
CC_BY_3_0_AT = 'CC-BY-3.0-AT'
CC_BY_3_0_US = 'CC-BY-3.0-US'
CC_BY_NC_ND_3_0_IGO = 'CC-BY-NC-ND-3.0-IGO'
CC_BY_SA_2_0_UK = 'CC-BY-SA-2.0-UK'
CC_BY_SA_2_1_JP = 'CC-BY-SA-2.1-JP'
CC_BY_SA_3_0_AT = 'CC-BY-SA-3.0-AT'
CC_PDDC = 'CC-PDDC'
CDL_1_0 = 'CDL-1.0'
CDLA_Permissive_1_0 = 'CDLA-Permissive-1.0'
CDLA_Sharing_1_0 = 'CDLA-Sharing-1.0'
CERN_OHL_1_1 = 'CERN-OHL-1.1'
CERN_OHL_1_2 = 'CERN-OHL-1.2'
CERN_OHL_P_2_0 = 'CERN-OHL-P-2.0'
CERN_OHL_S_2_0 = 'CERN-OHL-S-2.0'
CERN_OHL_W_2_0 = 'CERN-OHL-W-2.0'
copyleft_next_0_3_0 = 'copyleft-next-0.3.0'
copyleft_next_0_3_1 = 'copyleft-next-0.3.1'
C_UDA_1_0 = 'C-UDA-1.0'
DRL_1_0 = 'DRL-1.0'
EPICS = 'EPICS'
EPL_2_0_1 = 'EPL-2.0'
etalab_2_0 = 'etalab-2.0'
EUPL_1_2 = 'EUPL-1.2'
FreeBSD_DOC = 'FreeBSD-DOC'
GD = 'GD'
GFDL_1_1_invariants_only = 'GFDL-1.1-invariants-only'
GFDL_1_1_invariants_or_later = 'GFDL-1.1-invariants-or-later'
GFDL_1_1_no_invariants_only = 'GFDL-1.1-no-invariants-only'
GFDL_1_1_no_invariants_or_later = 'GFDL-1.1-no-invariants-or-later'
GFDL_1_1_or_later = 'GFDL-1.1-or-later'
GFDL_1_2_invariants_only = 'GFDL-1.2-invariants-only'
GFDL_1_2_invariants_or_later = 'GFDL-1.2-invariants-or-later'
GFDL_1_2_no_invariants_only = 'GFDL-1.2-no-invariants-only'
GFDL_1_2_no_invariants_or_later = 'GFDL-1.2-no-invariants-or-later'
GFDL_1_2_or_later = 'GFDL-1.2-or-later'
GFDL_1_3_invariants_only = 'GFDL-1.3-invariants-only'
GFDL_1_3_invariants_or_later = 'GFDL-1.3-invariants-or-later'
GFDL_1_3_no_invariants_only = 'GFDL-1.3-no-invariants-only'
GFDL_1_3_no_invariants_or_later = 'GFDL-1.3-no-invariants-or-later'
GFDL_1_3_or_later = 'GFDL-1.3-or-later'
GLWTPL = 'GLWTPL'
GPL_1_0_or_later = 'GPL-1.0-or-later'
GPL_2_0_or_later = 'GPL-2.0-or-later'
GPL_3_0_or_later = 'GPL-3.0-or-later'
Hippocratic_2_1 = 'Hippocratic-2.1'
HPND_sell_variant = 'HPND-sell-variant'
HTMLTIDY = 'HTMLTIDY'
JPNIC = 'JPNIC'
LGPL_2_0_or_later = 'LGPL-2.0-or-later'
LGPL_2_1_or_later = 'LGPL-2.1-or-later'
LGPL_3_0_or_later = 'LGPL-3.0-or-later'
libpng_2_0 = 'libpng-2.0'
libselinux_1_0 = 'libselinux-1.0'
Linux_OpenIB = 'Linux-OpenIB'
MIT_0 = 'MIT-0'
MIT_Modern_Variant = 'MIT-Modern-Variant'
MIT_open_group = 'MIT-open-group'
MulanPSL_1_0 = 'MulanPSL-1.0'
MulanPSL_2_0 = 'MulanPSL-2.0'
NAIST_2003 = 'NAIST-2003'
NCGL_UK_2_0 = 'NCGL-UK-2.0'
Net_SNMP = 'Net-SNMP'
NIST_PD = 'NIST-PD'
NIST_PD_fallback = 'NIST-PD-fallback'
ODC_By_1_0 = 'ODC-By-1.0'
OFL_1_0_no_RFN = 'OFL-1.0-no-RFN'
OFL_1_0_RFN = 'OFL-1.0-RFN'
OFL_1_1_no_RFN = 'OFL-1.1-no-RFN'
OFL_1_1_RFN = 'OFL-1.1-RFN'
OGC_1_0 = 'OGC-1.0'
OGDL_Taiwan_1_0 = 'OGDL-Taiwan-1.0'
OGL_Canada_2_0 = 'OGL-Canada-2.0'
OGL_UK_1_0 = 'OGL-UK-1.0'
OGL_UK_2_0 = 'OGL-UK-2.0'
OGL_UK_3_0 = 'OGL-UK-3.0'
O_UDA_1_0 = 'O-UDA-1.0'
Parity_6_0_0 = 'Parity-6.0.0'
Parity_7_0_0 = 'Parity-7.0.0'
PolyForm_Noncommercial_1_0_0 = 'PolyForm-Noncommercial-1.0.0'
PolyForm_Small_Business_1_0_0 = 'PolyForm-Small-Business-1.0.0'
PSF_2_0 = 'PSF-2.0'
Sendmail_8_23 = 'Sendmail-8.23'
SHL_0_5 = 'SHL-0.5'
SHL_0_51 = 'SHL-0.51'
SSH_OpenSSH = 'SSH-OpenSSH'
SSH_short = 'SSH-short'
SSPL_1_0 = 'SSPL-1.0'
TAPR_OHL_1_0 = 'TAPR-OHL-1.0'
TCP_wrappers = 'TCP-wrappers'
TU_Berlin_1_0 = 'TU-Berlin-1.0'
TU_Berlin_2_0 = 'TU-Berlin-2.0'
UCL_1_0 = 'UCL-1.0'
Unicode_DFS_2015 = 'Unicode-DFS-2015'
Unicode_DFS_2016 = 'Unicode-DFS-2016'
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'
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'
Preprint = 'Preprint'
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: constr(min_length=1, max_length=100) = Field(
...,
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',
)