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_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 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" 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"
[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 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" Federated_Human_Data = "Federated Human Data" 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" Plant_Sciences = "Plant Sciences" Proteomics = "Proteomics" Rare_Diseases = "Rare Diseases"
[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 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: 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", )
[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