Python API#
This reference is generated from module docstrings and public exports.
Inspection#
- rsm_schema.validate_document(document)[source]#
Validate a complete RSM document against the canonical JSON Schema.
This is the authoritative validation path when callers need conditional JSON Schema rules that generated Pydantic models cannot express.
Inspection helpers for the bundled RSM JSON Schema.
- class rsm_schema.inspector.SchemaNode(schema, raw, pointer, name=None, required=False)[source]#
Bases:
objectA view onto one node in a JSON Schema document.
- Parameters:
schema (rsm_schema.inspector.Schema) – Owning schema document.
raw (collections.abc.Mapping[str, Any]) – Raw mapping for this node.
pointer (str) – JSON Pointer locating the node in the document.
name (str | None) – Property or definition name, when the node has one.
required (bool) – Whether the node is required by its parent object.
- property types: tuple[str, ...]#
Return declared JSON Schema types.
- Returns:
tuple[str, …] – Zero, one, or multiple declared types. An empty tuple means the schema does not explicitly declare
type.
- property properties: tuple[SchemaNode, ...]#
Return direct object properties.
- property items: SchemaNode | None#
Return the array item schema, when it is a single schema object.
- resolve()[source]#
Resolve a local
$refor return this node unchanged.- Returns:
SchemaNode – Referenced node for local JSON Pointer references.
- Raises:
ValueError – If the reference is external. External reference resolution is deliberately not hidden behind network I/O in this package.
KeyError – If a local reference cannot be resolved.
- Return type:
- class rsm_schema.inspector.Schema(document)[source]#
Bases:
objectLoaded JSON Schema document with lightweight traversal helpers.
- Parameters:
document (Mapping[str, Any])
- classmethod bundled()[source]#
Load the schema bundled with the installed package.
- Returns:
Schema – Bundled RSM schema.
- Return type:
- property root: SchemaNode#
Return the root schema node.
- validate_schema()[source]#
Validate the schema against the declared JSON Schema meta-schema.
- Raises:
jsonschema.exceptions.SchemaError – If the schema itself is invalid.
- Return type:
None
- validate_document(document)[source]#
Validate an RSM document against this JSON Schema.
Unlike validation through the generated Pydantic model, this enforces composition and conditional keywords such as the requirement that a non-empty contributor list credit at least one author.
- at(pointer)[source]#
Return the node at a JSON Pointer.
- Parameters:
pointer (str) – JSON Pointer such as
/$defs/personor#/properties/project_slug.- Returns:
SchemaNode – Located schema node.
- Return type:
- definition(name)[source]#
Return a named schema definition from
$defsordefinitions.- Parameters:
name (str) – Definition name.
- Returns:
SchemaNode – Definition node.
- Return type:
- walk(start=None)[source]#
Depth-first traversal over structural child schemas.
- Parameters:
start (SchemaNode | None) – Node to start from. Defaults to the document root.
- Yields:
SchemaNode – Each reachable schema node once per structural location. References are not followed automatically, which prevents recursive schemas from looping.
- Return type:
Generated models#
datamodel-code-generator produces these classes from the bundled schema. The
public exports include the document root and reusable entities from $defs;
generator-internal wrappers remain in rsm_schema.generated.models.
Pydantic v2 models generated from the bundled RSM JSON Schema.
RSMMetadata is the document root. The other names re-exported here are the
reusable entities from the schema’s $defs; everything else the generator
emits (property wrappers, enums, and the Entry* value types) lives in
rsm_schema.generated.models under names the generator chooses, and is
not part of this package’s public surface.
- class rsm_schema.generated.Containerization(*, type, details=None)[source]#
Bases:
BaseModel- Parameters:
type (Type3)
details (str | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- type: Type3#
- class rsm_schema.generated.Contributor(*, name, given_names=None, family_names=None, email=None, affiliations=None, orcid=None, roles, url=None)[source]#
Bases:
Person- Parameters:
name (Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
given_names (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
family_names (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
email (EmailStr | None)
affiliations (list[Organization] | None)
orcid (str | None)
roles (Annotated[list[Role], FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class rsm_schema.generated.DataFormat(*, term=None, uri=None, version_constraint=None, schema_constraints=None, sample_url=None)[source]#
Bases:
BaseModel- Parameters:
term (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
uri (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
version_constraint (str | None)
schema_constraints (str | None)
sample_url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- term: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- class rsm_schema.generated.EdamTerm(*, term=None, uri=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class rsm_schema.generated.ExternalDependency(*, name, version_constraint=None, url=None, license=None, purpose=None)[source]#
Bases:
BaseModel- Parameters:
name (Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
version_constraint (str | None)
url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
license (str | None)
purpose (str | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- name: Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- class rsm_schema.generated.ExternalService(*, name, provider=None, service_types=None, quantity=None, cost_coverage=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class rsm_schema.generated.FunctionIo(*, data=None, format=None)[source]#
Bases:
BaseModel- Parameters:
data (EdamTerm | None)
format (list[DataFormat] | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- format: list[DataFormat] | None#
- class rsm_schema.generated.Funding(*, funder=None, funder_identifier=None, funder_identifier_type=None, funder_url=None, award_number=None, award_title=None, grant_url=None, project_code=None)[source]#
Bases:
BaseModel- Parameters:
funder (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
funder_identifier (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
funder_identifier_type (FunderIdentifierType | None)
funder_url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
award_number (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
award_title (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
grant_url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
project_code (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- funder: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- funder_identifier: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
Stable identifier for the funder, such as a ROR ID or Crossref Funder ID.
- funder_url: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])]#
Public webpage for the funding organization.
- award_number: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- award_title: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- class rsm_schema.generated.Interface(*, type, specification=None, status=None)[source]#
Bases:
BaseModel- Parameters:
type (Type2)
specification (str | None)
status (Status | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- type: Type2#
- class rsm_schema.generated.OperatingSystem(*, name, specification=None, status=None)[source]#
Bases:
BaseModel- Parameters:
name (Name)
specification (str | None)
status (Status1 | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- name: Name#
- class rsm_schema.generated.Organization(*, name, identifier=None, email=None, url=None, address=None)[source]#
Bases:
BaseModel- Parameters:
name (Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
identifier (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
email (EmailStr | None)
url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
address (str | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- name: Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- identifier: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])]#
- class rsm_schema.generated.PersistentIdentifier(*, type, identifier, associated_version=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- type: Type1#
- class rsm_schema.generated.Person(*, name, given_names=None, family_names=None, email=None, affiliations=None, orcid=None, roles=None, url=None)[source]#
Bases:
BaseModel- Parameters:
name (Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
given_names (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
family_names (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
email (EmailStr | None)
affiliations (list[Organization] | None)
orcid (str | None)
roles (list[Role] | None)
url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- name: Annotated[str, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- given_names: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- family_names: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- affiliations: list[Organization] | None#
Organizations the person is affiliated with, most relevant first.
- class rsm_schema.generated.ProgrammingLanguage(*, name, version_constraint=None, role=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class rsm_schema.generated.Publication(*, title=None, type=None, doi=None, pmid=None, pmcid=None, url=None, citation=None, note=None, preferred=None, authors=None)[source]#
Bases:
BaseModel- Parameters:
title (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
type (str | None)
doi (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
pmid (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
pmcid (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
url (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])])
citation (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])])
note (str | None)
preferred (bool | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- title: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- doi: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- pmid: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- pmcid: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- url: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(pattern='^(?:[A-Za-z][A-Za-z0-9+.-]*:.*)?$')])]#
- class rsm_schema.generated.RSMMetadata(*, project_name=None, project_slug, project_short_description=None, project_long_description=None, development_status=None, topics={'entries': []}, keywords={'entries': []}, contributors={'entries': []}, funding={'entries': []}, motivation={'categories': {'entries': []}}, audiences={'entries': []}, related_software={'entries': []}, urls={}, registries={'entries': []}, persistent_identifiers={'entries': []}, publications={'entries': []}, licensing={}, access={}, include_metadata=False, documentation_builder=None, documentation_types={'entries': []}, community_files={'entries': []}, code_review_policy=None, support_routes={'entries': []}, contacts={}, governance_notes=None, programming_languages={'entries': []}, software_functions={'entries': []}, interfaces={'entries': []}, operating_systems={'entries': []}, external_dependencies={'entries': []}, external_services={'entries': []}, test_types={'entries': []}, test_frameworks={'entries': []}, quality_tools={}, project_manager=None, versioning={}, distribution_channels={'entries': []}, containerization={'entries': []}, resource_requirements=None, maintenance_level=None, continuity_plan=None, retirement_criteria={'entries': []}, public_risk_notes=None, regulatory_requirements={'selected': {'entries': []}}, security_measures={'selected': {'entries': []}}, data_management={})[source]#
Bases:
BaseModelStructured metadata for research software management (RSM).
- Parameters:
project_name (str | None)
project_slug (str)
project_short_description (str | None)
project_long_description (str | None)
development_status (DevelopmentStatus | None)
topics (Annotated[Topics, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
keywords (Annotated[Keywords, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
contributors (Annotated[Contributors, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
funding (Annotated[FundingModel, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
motivation (Annotated[Motivation, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
audiences (Annotated[Audiences, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
related_software (Annotated[RelatedSoftwareModel, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
urls (Annotated[Urls, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
registries (Annotated[Registries, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
persistent_identifiers (Annotated[PersistentIdentifiers, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
publications (Annotated[Publications, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
licensing (Annotated[Licensing, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
access (Annotated[Access, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
include_metadata (bool)
documentation_builder (DocumentationBuilder | None)
documentation_types (Annotated[DocumentationTypes, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
community_files (Annotated[CommunityFiles, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
code_review_policy (Annotated[str | None, FieldInfo(annotation=NoneType, required=True, json_schema_extra={'contentMediaType': 'text/markdown'})])
support_routes (Annotated[SupportRoutes, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
contacts (Annotated[Contacts, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
governance_notes (str | None)
programming_languages (Annotated[ProgrammingLanguages, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
software_functions (Annotated[SoftwareFunctions, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
interfaces (Annotated[Interfaces, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
operating_systems (Annotated[OperatingSystems, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
external_dependencies (Annotated[ExternalDependencies, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
external_services (Annotated[ExternalServices, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
test_types (Annotated[TestTypes, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
test_frameworks (Annotated[TestFrameworks, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
quality_tools (Annotated[QualityTools, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
project_manager (ProjectManager | None)
versioning (Annotated[Versioning, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
distribution_channels (Annotated[DistributionChannels, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
containerization (Annotated[ContainerizationModel, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
resource_requirements (str | None)
maintenance_level (MaintenanceLevel | None)
continuity_plan (str | None)
retirement_criteria (Annotated[RetirementCriteria, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
public_risk_notes (str | None)
regulatory_requirements (Annotated[RegulatoryRequirements, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
security_measures (Annotated[SecurityMeasures, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
data_management (Annotated[DataManagement, FieldInfo(annotation=NoneType, required=True, validate_default=True)])
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- project_slug: str#
Machine-readable package and repository name. Consumers apply their own additional slug constraints.
- project_short_description: str | None#
One-sentence description used in README and package metadata.
- project_long_description: str | None#
Longer public description of the project motivation and scope.
- development_status: DevelopmentStatus | None#
Current repostatus.org lifecycle status for the software.
- topics: Annotated[Topics, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Research domains the software applies to, as EDAM topic terms. Entries may include term and uri. Broader and controlled where keywords are free text.
- keywords: Annotated[Keywords, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public keywords used in package metadata, citation metadata, registries, and archives.
- contributors: Annotated[Contributors, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Everyone credited for the software, each entry declaring one or more roles. Name and roles are required; entries may also include given_names, family_names, email, affiliations, orcid, and url. A non-empty list must credit at least one author, which is what citation metadata requires.
- funding: Annotated[FundingModel, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public funding records. Entries may include funder, funder identifiers and URLs, award_number, award_title, grant_url, and project_code.
- motivation: Annotated[Motivation, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public purpose, purpose categories, problem statement, and value proposition.
- audiences: Annotated[Audiences, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Intended users or stakeholder groups.
Related or upstream tools. Entries may include name, url_or_doi, and relationship.
- urls: Annotated[Urls, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Canonical source repository, project homepage, and published documentation URLs.
- registries: Annotated[Registries, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Registry entries such as PyPI, CRAN, bio.tools, WorkflowHub, or institutional catalogues. Entries may include name, url_or_id, and notes.
- persistent_identifiers: Annotated[PersistentIdentifiers, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Persistent identifiers. Each entry declares its CFF identifier type and value, with an optional associated version.
- publications: Annotated[Publications, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Associated publications. Entries may include title, type, authors, doi, pmid, pmcid, url, citation, note, and preferred.
- licensing: Annotated[Licensing, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
License text or SPDX identifier and the selected dependency-license compatibility method.
- access: Annotated[Access, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
How users can obtain or use the software, independently of its copyright license.
- include_metadata: bool#
Whether the project publishes CodeMeta and Citation File Format metadata files alongside their validation workflow.
- documentation_builder: DocumentationBuilder | None#
Optional documentation site generator. An empty selection means documentation is plain Markdown.
- documentation_types: Annotated[DocumentationTypes, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
SMP documentation categories the project provides. API and technical reference material are part of developer documentation.
- community_files: Annotated[CommunityFiles, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Standard root community files the project provides. CONTRIBUTING.md and SUPPORT.md imply the corresponding GitHub collaboration files.
- code_review_policy: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, json_schema_extra={'contentMediaType': 'text/markdown'})]#
Public code-review policy for proposed changes, including reviewer expectations, approval requirements, and merge conditions. Markdown is supported.
- support_routes: Annotated[SupportRoutes, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public support, bug-reporting, or feature-request systems and their public URLs.
- contacts: Annotated[Contacts, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public contact routes for general community, code-of-conduct, and private security reports.
- programming_languages: Annotated[ProgrammingLanguages, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Programming languages used by the project. Entries include a name and may include version_constraint and role from the SMP.
- software_functions: Annotated[SoftwareFunctions, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Functions or operations performed by the software. Entries may include operations, inputs, outputs, cmd, and note.
- interfaces: Annotated[Interfaces, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Interfaces exposed by the software. Type names the interface; specification and status describe it.
- operating_systems: Annotated[OperatingSystems, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Supported operating systems or platforms. Entries may include name, specification, and status from the SMP.
- external_dependencies: Annotated[ExternalDependencies, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
External software dependencies or standards. Entries may include name, version_constraint, url, license, and purpose.
- external_services: Annotated[ExternalServices, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
External public services, partners, or roles needed by the project. Entries may include name, provider, service_types, quantity, and cost_coverage.
- test_types: Annotated[TestTypes, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Types of tests used or desired. Supported values match the SMP testing checklist.
- test_frameworks: Annotated[TestFrameworks, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Testing frameworks used by the project.
- quality_tools: Annotated[QualityTools, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Optional primary formatter, linter, and static type checker.
- project_manager: ProjectManager | None#
Primary project and dependency manager, which determines setup, command execution, lockfile handling, and CI.
- versioning: Annotated[Versioning, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Version value and public release policy. Empty properties leave the policy unspecified.
- distribution_channels: Annotated[DistributionChannels, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Controlled public distribution routes, including package registries, releases, archives, installers, and hosted services.
- containerization: Annotated[ContainerizationModel, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Container recipes the project ships. Project managers and lockfiles are declared separately.
- resource_requirements: str | None#
Public typical and worst-case memory, storage, compute, GPU, wall-clock, or scaling requirements.
- maintenance_level: MaintenanceLevel | None#
Public maintenance commitment after active development winds down; leave empty when no commitment is declared.
- retirement_criteria: Annotated[RetirementCriteria, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Public conditions under which the software may be retired.
- public_risk_notes: str | None#
Public risk or mitigation notes. Sensitive security, privacy, or compliance details should not be included.
- regulatory_requirements: Annotated[RegulatoryRequirements, FieldInfo(annotation=NoneType, required=True, validate_default=True)]#
Controlled and additional public regulatory, quality, policy, or availability requirements.
- class rsm_schema.generated.Registry(*, name, url_or_id=None, notes=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class rsm_schema.generated.RelatedSoftware(*, name=None, url_or_doi=None, relationship=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- name: Annotated[str | None, FieldInfo(annotation=NoneType, required=True, metadata=[MinLen(min_length=1)])]#
- class rsm_schema.generated.SoftwareFunction(*, operations=None, inputs=None, outputs=None, cmd=None, note=None)[source]#
Bases:
BaseModelFunctions or operations performed by the software. Entries may include operations, inputs, outputs, cmd, and note.
- Parameters:
inputs (list[FunctionIo] | None)
outputs (list[FunctionIo] | None)
cmd (str | None)
note (str | None)
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- inputs: list[FunctionIo] | None#
- outputs: list[FunctionIo] | None#
- class rsm_schema.generated.SupportRoute(*, system, url=None)[source]#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'populate_by_name': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].