Source code for bridge.core.biotools

"""
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 Tool(BaseModel): pass
[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 ToolTypeEnum(Enum): Bioinformatics_portal = 'Bioinformatics portal' Command_line_tool = 'Command-line tool' Database_portal = 'Database portal' Desktop_application = 'Desktop application' Mobile_application = 'Mobile application' Library = 'Library' Ontology = 'Ontology' Plug_in = 'Plug-in' Script = 'Script' SPARQL_endpoint = 'SPARQL endpoint' Suite = 'Suite' Web_application = 'Web application' Web_API = 'Web API' Web_service = 'Web service' Workbench = 'Workbench' Workflow = 'Workflow'
[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 OperatingSystemEnum(Enum): Linux = 'Linux' Windows = 'Windows' Mac = 'Mac' Android = 'Android' iOS = 'iOS'
[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 ElixirPlatformEnum(Enum): Data = 'Data' Tools = 'Tools' Compute = 'Compute' Interoperability = 'Interoperability' Training = 'Training'
[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 ElixirCommunityEnum(Enum): field_3D_BioInfo = '3D-BioInfo' Biodiversity = 'Biodiversity' Cancer_Data = 'Cancer Data' Federated_Human_Data = 'Federated Human Data' Food_and_Nutrition = 'Food and Nutrition' Galaxy = 'Galaxy' Human_Copy_Number_Variation = 'Human Copy Number Variation' Intrinsically_Disordered_Proteins = 'Intrinsically Disordered Proteins' Marine_Metagenomics = 'Marine Metagenomics' Metabolomics = 'Metabolomics' Microbial_Biotechnology = 'Microbial Biotechnology' Microbiome = 'Microbiome' Plant_Sciences = 'Plant Sciences' Proteomics = 'Proteomics' Rare_Diseases = 'Rare Diseases' Research_Data_Management = 'Research Data Management' Single_Cell_Omics = 'Single-Cell Omics' Systems_Biology = 'Systems Biology' Toxicology = 'Toxicology'
[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 EDAMformat(BaseModel): model_config = ConfigDict( extra='ignore', ) term: Optional[str] = Field( None, description='An EDAM Format term (preferred label or synonym).', examples=['FASTA'], title='EDAM Format term', ) uri: Optional[ constr(pattern=r'^(http\://edamontology\.org/format_[0-9]{4,4})$') ] = Field( None, description='URL of an EDAM Format concept.', examples=['http://edamontology.org/format_1929'], title='EDAM Format URI', )
[docs] class BiotoolsIdType(RootModel[constr(pattern=r'^([\--\.0-9A-Z_a-z]*)$')]): root: constr(pattern=r'^([\--\.0-9A-Z_a-z]*)$') = Field( ..., description='Tool unique identifier assigned by bio.tools.', examples=['needle'], title='bio.tools toolID', )
[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 InputItem(BaseModel): model_config = ConfigDict( extra='ignore', ) data: EDAMdata = Field( ..., description='Type of primary input data, if any (EDAM data).', title='Input data (EDAM Data)', ) format: Optional[List[EDAMformat]] = Field( None, description='EDAM Format concept(s).', title='EDAM Format concept(s)' )
[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', )
[docs] class ToolModel(BaseModel): model_config = ConfigDict( extra='ignore', ) name: constr( pattern=r'^([ \(-\)\+-\.0-;A-Z_a-z  ᠎ -    ]*)$', min_length=1, max_length=100 ) = Field( ..., description='Canonical software name assigned by the software developer or service provider.', examples=['needle'], title='Tool name', ) description: constr(min_length=10, max_length=1000) = Field( ..., description='Textual description of the software.\nThis can be a few sentences copy-pasted from the software homepage.', examples=[ 'needle reads two input sequences and writes their optimal global sequence alignment to file. It uses the Needleman-Wunsch alignment algorithm to find the optimum alignment (including gaps) of two sequences along their entire length. The algorithm uses a dynamic programming method to ensure the alignment is optimum, by exploring all possible alignments and choosing the best.' ], title='Tool description', ) homepage: UrlftpType = Field( ..., description='Homepage of the software, or some URL that best serves this purpose.', title='Tool homepage URL', ) biotoolsID: Optional[BiotoolsIdType] = Field( None, description='Unique ID (case insensitive) of the tool that is assigned upon registration of the software in bio.tools, normally identical to tool name.', title='bio.tools toolID', ) biotoolsCURIE: Optional[constr(pattern=r'^(biotools\:[\--\.0-9A-Z_a-z]*)$')] = ( Field( None, description='bio.tools CURIE (compact URI) based on the bio.tools tool ID.', examples=['biotools:signalp'], title='bio.tools CURIE', ) ) version: Optional[List[VersionType]] = None otherID: Optional[List[OtherIDItem]] = None toolType: Optional[List[ToolTypeEnum]] = None topic: Optional[List[TopicItem]] = None operatingSystem: Optional[List[OperatingSystemEnum]] = None language: Optional[List[LanguageEnum]] = None license: Optional[License] = Field( None, description='Software or data usage license.', title='Software or data usage license', ) collectionID: Optional[ List[ constr( pattern=r'^([ \(-\)\+-\.0-;A-Z_a-z  ᠎ -    ]*)$', min_length=1, max_length=100, ) ] ] = None maturity: Optional[Maturity] = Field( None, description='Development stage of the software product.', title='Sofware product maturity', ) cost: Optional[Cost] = Field( None, description='Monetary cost of acquiring the software.', title='Cost' ) accessibility: Optional[Accessibility] = Field( None, description='Whether an online service is freely available for use.', title='Accessibility', ) elixirPlatform: Optional[List[ElixirPlatformEnum]] = None elixirNode: Optional[List[ElixirNodeEnum]] = None elixirCommunity: Optional[List[ElixirCommunityEnum]] = None function: Optional[List[FunctionItem]] = None link: Optional[List[LinkItem]] = None download: Optional[List[DownloadItem]] = None documentation: Optional[List[DocumentationItem]] = None relation: Optional[List[RelationItem]] = None publication: Optional[List[PublicationItem]] = None credit: Optional[List[CreditItem]] = None