nrp_cmd.rdm_compat

  1from yarl import URL
  2
  3from .types.info import (
  4    ModelInfo,
  5    ModelInfoContentType,
  6    ModelInfoLinks,
  7    RepositoryInfo,
  8    RepositoryInfoLinks,
  9)
 10
 11
 12def _generate_rdm_vocabulary(
 13    url: URL, vocabulary_type: str, vocabulary_name: str, special: bool, schema: str
 14) -> ModelInfo:
 15    url_prefix = url / "api" if special else url / "api" / "vocabularies"
 16    return ModelInfo(
 17        schema=schema,
 18        type=vocabulary_type,
 19        name=vocabulary_name,
 20        description="Vocabulary for " + vocabulary_name,
 21        version="unknown",
 22        features=[
 23            "rdm",
 24        ],
 25        links=ModelInfoLinks(
 26            records=url_prefix / vocabulary_type,
 27        ),
 28        content_types=[
 29            ModelInfoContentType(
 30                content_type="application/json",
 31                name="Invenio RDM JSON",
 32                description="Vocabulary JSON",
 33                schema=None,
 34                can_export=True,
 35                can_deposit=False,
 36            )
 37        ],
 38        metadata=False
 39    )
 40
 41
 42def make_rdm_info(url: URL) -> RepositoryInfo:
 43    """If repository does not provide the info endpoint, we assume it is a plain invenio rdm."""
 44    url = url.with_path("/")
 45
 46    return RepositoryInfo(
 47        schema="local://introspection-v1.0.0.json",
 48        name="RDM repository",
 49        description="",
 50        version="rdm",
 51        invenio_version="rdm",
 52        transfers=[
 53            "L",
 54        ],
 55        links=RepositoryInfoLinks(
 56            self_=url,
 57            records=url / "api" / "records/",
 58            user_records=url / "api" / "user" / "records/",
 59            requests=url / "api" / "requests/",
 60            models=None,
 61        ),
 62        default_model="records",
 63        models={
 64            "records": ModelInfo(
 65                schema="local://records-v6.0.0.json",
 66                type="rdm-records",
 67                name="RDM Records",
 68                description="RDM Records",
 69                version="unknown",
 70                features=[
 71                    "rdm",
 72                ],
 73                links=ModelInfoLinks(
 74                    html=url / "records/",
 75                    records=url / "api" / "records/",
 76                    user_records=url / "api" / "user" / "records/",
 77                    model=None,
 78                ),
 79                content_types=[
 80                    ModelInfoContentType(
 81                        content_type="application/json",
 82                        name="Invenio RDM JSON",
 83                        description="Invenio RDM JSON as described in "
 84                        "https://inveniordm.docs.cern.ch/reference/metadata/",
 85                        schema=url / "schemas" / "records" / "record-v6.0.0.json",
 86                        can_export=True,
 87                        can_deposit=True,
 88                    )
 89                ],
 90                metadata=True,
 91            ),
 92            "affiliations": _generate_rdm_vocabulary(
 93                url,
 94                "affiliations",
 95                "Affiliations",
 96                special=True,
 97                schema="local://affiliation-v1.0.0.json",
 98            ),
 99            "awards": _generate_rdm_vocabulary(
100                url,
101                "awards",
102                "Awards",
103                special=True,
104                schema="local://award-v1.0.0.json",
105            ),
106            "funders": _generate_rdm_vocabulary(
107                url,
108                "funders",
109                "Funders",
110                special=True,
111                schema="local://funder-v1.0.0.json",
112            ),
113            "subjects": _generate_rdm_vocabulary(
114                url,
115                "subjects",
116                "Subjects",
117                special=True,
118                schema="local://subject-v1.0.0.json",
119            ),
120            "names": _generate_rdm_vocabulary(
121                url,
122                "names",
123                "Names",
124                special=True,
125                schema="local://name-v1.0.0.json",
126            ),
127            "licenses": _generate_rdm_vocabulary(
128                url, "licenses", "Licenses", special=False,
129                schema="local://vocabulary-v1.0.0.json",
130            ),
131            "resource_types": _generate_rdm_vocabulary(
132                url, "resource_types", "Resource Types", special=False,
133                schema="local://vocabulary-v1.0.0.json",
134            ),
135            "languages": _generate_rdm_vocabulary(
136                url, "languages", "Languages", special=False,
137                schema="local://vocabulary-v1.0.0.json",
138            ),
139            "titletypes": _generate_rdm_vocabulary(
140                url, "titletypes", "Title Types", special=False,
141                schema="local://vocabulary-v1.0.0.json",
142            ),
143            "creatorsroles": _generate_rdm_vocabulary(
144                url, "creatorsroles", "Creators Roles", special=False,
145                schema="local://vocabulary-v1.0.0.json",
146            ),
147            "contributorsroles": _generate_rdm_vocabulary(
148                url, "contributorsroles", "Contributors Roles", special=False,
149                schema="local://vocabulary-v1.0.0.json",
150            ),
151            "descriptiontypes": _generate_rdm_vocabulary(
152                url, "descriptiontypes", "Description Types", special=False,
153                schema="local://vocabulary-v1.0.0.json",
154            ),
155            "datetypes": _generate_rdm_vocabulary(
156                url, "datetypes", "Date Types", special=False,
157                schema="local://vocabulary-v1.0.0.json",
158            ),
159            "relationtypes": _generate_rdm_vocabulary(
160                url, "relationtypes", "Relation Types", special=False,
161                schema="local://vocabulary-v1.0.0.json",
162            ),
163            "removalreasons": _generate_rdm_vocabulary(
164                url, "removalreasons", "Removal Reasons", special=False,
165                schema="local://vocabulary-v1.0.0.json",
166            ),
167        },
168    )
def make_rdm_info(url: yarl.URL) -> nrp_cmd.types.RepositoryInfo:
 43def make_rdm_info(url: URL) -> RepositoryInfo:
 44    """If repository does not provide the info endpoint, we assume it is a plain invenio rdm."""
 45    url = url.with_path("/")
 46
 47    return RepositoryInfo(
 48        schema="local://introspection-v1.0.0.json",
 49        name="RDM repository",
 50        description="",
 51        version="rdm",
 52        invenio_version="rdm",
 53        transfers=[
 54            "L",
 55        ],
 56        links=RepositoryInfoLinks(
 57            self_=url,
 58            records=url / "api" / "records/",
 59            user_records=url / "api" / "user" / "records/",
 60            requests=url / "api" / "requests/",
 61            models=None,
 62        ),
 63        default_model="records",
 64        models={
 65            "records": ModelInfo(
 66                schema="local://records-v6.0.0.json",
 67                type="rdm-records",
 68                name="RDM Records",
 69                description="RDM Records",
 70                version="unknown",
 71                features=[
 72                    "rdm",
 73                ],
 74                links=ModelInfoLinks(
 75                    html=url / "records/",
 76                    records=url / "api" / "records/",
 77                    user_records=url / "api" / "user" / "records/",
 78                    model=None,
 79                ),
 80                content_types=[
 81                    ModelInfoContentType(
 82                        content_type="application/json",
 83                        name="Invenio RDM JSON",
 84                        description="Invenio RDM JSON as described in "
 85                        "https://inveniordm.docs.cern.ch/reference/metadata/",
 86                        schema=url / "schemas" / "records" / "record-v6.0.0.json",
 87                        can_export=True,
 88                        can_deposit=True,
 89                    )
 90                ],
 91                metadata=True,
 92            ),
 93            "affiliations": _generate_rdm_vocabulary(
 94                url,
 95                "affiliations",
 96                "Affiliations",
 97                special=True,
 98                schema="local://affiliation-v1.0.0.json",
 99            ),
100            "awards": _generate_rdm_vocabulary(
101                url,
102                "awards",
103                "Awards",
104                special=True,
105                schema="local://award-v1.0.0.json",
106            ),
107            "funders": _generate_rdm_vocabulary(
108                url,
109                "funders",
110                "Funders",
111                special=True,
112                schema="local://funder-v1.0.0.json",
113            ),
114            "subjects": _generate_rdm_vocabulary(
115                url,
116                "subjects",
117                "Subjects",
118                special=True,
119                schema="local://subject-v1.0.0.json",
120            ),
121            "names": _generate_rdm_vocabulary(
122                url,
123                "names",
124                "Names",
125                special=True,
126                schema="local://name-v1.0.0.json",
127            ),
128            "licenses": _generate_rdm_vocabulary(
129                url, "licenses", "Licenses", special=False,
130                schema="local://vocabulary-v1.0.0.json",
131            ),
132            "resource_types": _generate_rdm_vocabulary(
133                url, "resource_types", "Resource Types", special=False,
134                schema="local://vocabulary-v1.0.0.json",
135            ),
136            "languages": _generate_rdm_vocabulary(
137                url, "languages", "Languages", special=False,
138                schema="local://vocabulary-v1.0.0.json",
139            ),
140            "titletypes": _generate_rdm_vocabulary(
141                url, "titletypes", "Title Types", special=False,
142                schema="local://vocabulary-v1.0.0.json",
143            ),
144            "creatorsroles": _generate_rdm_vocabulary(
145                url, "creatorsroles", "Creators Roles", special=False,
146                schema="local://vocabulary-v1.0.0.json",
147            ),
148            "contributorsroles": _generate_rdm_vocabulary(
149                url, "contributorsroles", "Contributors Roles", special=False,
150                schema="local://vocabulary-v1.0.0.json",
151            ),
152            "descriptiontypes": _generate_rdm_vocabulary(
153                url, "descriptiontypes", "Description Types", special=False,
154                schema="local://vocabulary-v1.0.0.json",
155            ),
156            "datetypes": _generate_rdm_vocabulary(
157                url, "datetypes", "Date Types", special=False,
158                schema="local://vocabulary-v1.0.0.json",
159            ),
160            "relationtypes": _generate_rdm_vocabulary(
161                url, "relationtypes", "Relation Types", special=False,
162                schema="local://vocabulary-v1.0.0.json",
163            ),
164            "removalreasons": _generate_rdm_vocabulary(
165                url, "removalreasons", "Removal Reasons", special=False,
166                schema="local://vocabulary-v1.0.0.json",
167            ),
168        },
169    )

If repository does not provide the info endpoint, we assume it is a plain invenio rdm.