Source code for bridge.pipelines.bt2gh_for_pr_issues.map
"""
Mapping classes for bio.tools to GitHub.
"""
from pathlib import Path
from pydantic import BaseModel
from bridge.pipelines.protocols import MapItem, Method, ModelsMap
from bridge.pipelines.utils import load_dict_from_yaml_file
from .map_funcs import (
map_citation,
map_description,
map_homepage,
map_license,
map_name,
map_readme,
map_topics,
map_version,
)
[docs]
class MapDestination(BaseModel):
"""
Set destination (issue or PR) for each mapped property.
Parameters
----------
issue : list[str]
List of properties to be mapped to issues.
pr : list[str]
List of properties to be mapped to pull requests.
"""
issue: list[str] = ["name", "description", "homepage", "topics", "version"]
pr: list[str] = ["citation", "readme", "license"]
[docs]
class MapBioTools2GitHub(ModelsMap):
"""
Map bio.tools metadata record to GitHub
"""
def __init__(self, repo, metadata, repo_path: str):
super().__init__(repo=repo, metadata=metadata)
self.repo_path = Path(repo_path)
@property
def map(self) -> dict[str, MapItem]:
"""
Map bio.tools metadata property to corresponding GitHub property.
"""
return {
"name": MapItem(
schema_entry={
"name": self.metadata.name,
"biotoolsID": self.metadata.biotoolsID.root,
},
repo_entry=self.repo.repo.name,
method=Method.EXACT,
fn=map_name,
),
"version": MapItem(
schema_entry=self.metadata.version,
repo_entry=self.repo.latest_release.tag_name,
method=Method.EXACT,
fn=map_version,
),
"description": MapItem(
schema_entry=self.metadata.description,
repo_entry=self.repo.repo.description,
method=Method.EXACT,
fn=map_description,
),
"citation": MapItem(
schema_entry={
"publication": self.metadata.publication,
"name": self.metadata.name,
"biotoolsID": self.metadata.biotoolsID,
"homepage": self.metadata.homepage,
"license": self.metadata.license,
"topic": self.metadata.topic,
"description": self.metadata.description,
},
repo_entry=load_dict_from_yaml_file(self.repo_path / "CITATION.cff"),
method=Method.FUZZY,
fn=map_citation,
),
"topics": MapItem(
schema_entry={"topics": self.metadata.topic, "functions": self.metadata.function},
repo_entry=self.repo.repo.topics,
method=Method.FUZZY,
fn=map_topics,
),
# TODO: function2readme
"homepage": MapItem(
schema_entry=self.metadata.homepage,
repo_entry={"homepage": self.repo.repo.homepage, "html_url": self.repo.repo.html_url},
method=Method.EXACT,
fn=map_homepage,
),
"readme": MapItem(
schema_entry={
"name": self.metadata.name,
"biotoolsID": self.metadata.biotoolsID.root,
"toolType": self.metadata.toolType,
},
repo_entry=self.repo.readme,
method=Method.FUZZY,
fn=map_readme,
),
"license": MapItem(
schema_entry=self.metadata.license,
repo_entry=self.repo.repo.license,
method=Method.FUZZY,
fn=map_license,
),
}