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 )
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.