def test_to_graph_should_return_skolemization(mocker: MockFixture) -> None: """It returns a endpointURL graph isomorphic to spec.""" dataService = DataService() src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://wwww.digdir.no/.well-known/skolem/284db4d2-80c2-11eb-82c3-83e80baa2f94> a dcat:DataService ; . """ mocker.patch( "skolemizer.Skolemizer.add_skolemization", return_value=skolemization, ) g1 = Graph().parse(data=dataService.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_servesDataset_as_graph() -> None: """It returns a servesDataset graph isomorphic to spec.""" dataService = DataService() dataService.identifier = "http://example.com/dataservices/1" dataset1 = Dataset() dataset1.identifier = "http://example.com/datasets/1" dataService.servesdatasets.append(dataset1) dataset2 = Dataset() dataset2.identifier = "http://example.com/datasets/2" dataService.servesdatasets.append(dataset2) src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/dataservices/1> a dcat:DataService ; dcat:servesDataset <http://example.com/datasets/1>, <http://example.com/datasets/2> . """ g1 = Graph().parse(data=dataService.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_media_type() -> None: """It returns a media type graph isomorphic to spec.""" dataService = DataService() dataService.identifier = "http://example.com/dataservices/1" dataService.media_types.append( "https://www.iana.org/assignments/media-types/application/ld+json" ) src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/dataservices/1> a dcat:DataService ; dcat:mediaType \ <https://www.iana.org/assignments/media-types/application/ld+json> ; . """ g1 = Graph().parse(data=dataService.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_access_service() -> None: """It returns a access service graph isomorphic to spec.""" distribution = Distribution() distribution.identifier = "http://example.com/distributions/1" service = DataService() service.identifier = "http://example.com/dataservices/1" distribution.access_service = service src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/distributions/1> a dcat:Distribution ; dcat:accessService <http://example.com/dataservices/1> ; . """ g1 = Graph().parse(data=distribution.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_catalog_without_services_as_graph() -> None: """It returns a catalog graph isomorphic to spec.""" catalog = Catalog() catalog.identifier = "http://example.com/catalogs/1" service1 = DataService() service1.identifier = "http://example.com/services/1" service1.title = {"nb": "Datatjeneste 1", "en": "Dataservice 1"} catalog.services.append(service1) service2 = DataService() service2.identifier = "http://example.com/services/2" service2.title = {"nb": "Datatjeneste 2", "en": "Dataservice 2"} catalog.services.append(service2) src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/catalogs/1> a dcat:Catalog ; dcat:service <http://example.com/services/1>, <http://example.com/services/2> . """ g1 = Graph().parse(data=catalog.to_rdf(include_services=False), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def _add_optional_props(api: DataService, es_hit: Mapping) -> None: api.description = { "nb": es_hit["content"].get("clean_description", es_hit["content"]["description"]) } try: api.endpointURL = es_hit["content"]["url"] except KeyError: pass if es_hit["content"].get("swagger", es_hit["content"].get("api_dec")): api.endpointDescription = es_hit["content"].get( "swagger", es_hit["content"].get("api_dec"))
def _create_dataservice(self, url: Optional[str] = None) -> None: """Creates a dataservice instance and appends it to list of dataservices.""" self._dataservice = DataService() if url: self._dataservice.endpointURL = url self._dataservice.endpointDescription = self.endpointdescription try: self._dataservice.publisher = self.publisher except AttributeError: pass try: self._dataservice.conformsTo = self.conforms_to except AttributeError: self.conforms_to: List[str] = [] self._parse_specification() # We may be given an identifier "template" ending with {id}. # We create the identifier and url based on title and complete the identifer: id = (self._dataservice.title["en"] if url is None else self._dataservice.title["en"] + url) self._dataservice.identifier = URI( self.identifier.format(id=create_id(id))) self.dataservices.append(self._dataservice)
def test_to_graph_should_return_access_service_skolemized( mocker: MockFixture) -> None: """It returns a access service graph isomorphic to spec.""" distribution = Distribution() distribution.identifier = "http://example.com/distributions/1" service = DataService() distribution.access_service = service src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/distributions/1> a dcat:Distribution ; dcat:accessService <http://wwww.digdir.no/.well-known/skolem/284db4d2-80c2-11eb-82c3-83e80baa2f94> . """ mocker.patch( "skolemizer.Skolemizer.add_skolemization", return_value=skolemization, ) g1 = Graph().parse(data=distribution.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_identifier_set_at_constructor() -> None: """It returns an identifier graph isomorphic to spec.""" dataService = DataService("http://example.com/dataservices/1") src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/dataservices/1> a dcat:DataService ; . """ g1 = Graph().parse(data=dataService.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_endpointDescription_as_graph() -> None: """It returns a endpointDescription graph isomorphic to spec.""" dataService = DataService() dataService.identifier = "http://example.com/dataservices/1" dataService.endpointDescription = "http://example.com/endpointdescription/1" src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/dataservices/1> a dcat:DataService ; dcat:endpointDescription <http://example.com/endpointdescription/1> . """ g1 = Graph().parse(data=dataService.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def test_to_graph_should_return_dataservice_skolemization( mocker: MockFixture) -> None: """It returns a dataservice graph isomorphic to spec.""" catalog = Catalog() catalog.identifier = "http://example.com/catalogs/1" dataservice1 = DataService() dataservice1.title = {"nb": "Dataservice 1", "en": "Dataservice 1"} catalog.services.append(dataservice1) dataservice2 = DataService() dataservice2.title = {"nb": "Dataservice 2", "en": "Dataservice 2"} catalog.services.append(dataservice2) src = """ @prefix dct: <http://purl.org/dc/terms/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcat: <http://www.w3.org/ns/dcat#> . <http://example.com/catalogs/1> a dcat:Catalog ; dcat:service <http://wwww.digdir.no/.well-known/skolem/21043186-80ce-11eb-9829-cf7c8fc855ce> , <http://wwww.digdir.no/.well-known/skolem/284db4d2-80c2-11eb-82c3-83e80baa2f94> ; . <http://wwww.digdir.no/.well-known/skolem/284db4d2-80c2-11eb-82c3-83e80baa2f94> a dcat:DataService ; dct:title "Dataservice 1"@en, "Dataservice 1"@nb ; . <http://wwww.digdir.no/.well-known/skolem/21043186-80ce-11eb-9829-cf7c8fc855ce> a dcat:DataService ; dct:title "Dataservice 2"@en, "Dataservice 2"@nb ; . """ skolemutils = SkolemUtils() mocker.patch( "skolemizer.Skolemizer.add_skolemization", side_effect=skolemutils.get_skolemization, ) g1 = Graph().parse(data=catalog.to_rdf(), format="turtle") g2 = Graph().parse(data=src, format="turtle") _isomorphic = isomorphic(g1, g2) if not _isomorphic: _dump_diff(g1, g2) pass assert _isomorphic
def create_api(es_hit: Mapping) -> DataService: api = DataService() _add_mandatory_props(api, es_hit) _add_optional_props(api, es_hit) return api
def _add_mandatory_props(api: DataService, es_hit: Mapping) -> None: api.title = {"nb": es_hit["title"]} api.identifier = es_hit["id"] api.publisher = URI(os.environ["PUBLISHER"]) if es_hit.get("master") == "NAV API PORTAL": api.landing_page = [os.environ["NAV_API_PORTAL"]]
def _add_optional_props(api: DataService, es_hit: Mapping) -> None: api.publisher = URI(os.environ["PUBLISHER"]) api.description = {"nb": es_hit["content"]["description"]} api.endpointURL = es_hit["content"]["url"] api.endpointDescription = es_hit["content"]["swagger"]
def _add_mandatory_props(api: DataService, es_hit: Mapping) -> None: api.title = {"nb": es_hit["title"]} api.identifier = es_hit["id"]