Informasjonsforvaltning / datacatalogtordf

A library that will map a data catalog (inkl dataset, dataservices and other dcat resources) to rdf
Apache License 2.0
5 stars 1 forks source link

Forskningsoppgave: Løse MyPY-utfordringer ved bruk av datacatalogtordf.URI #27

Closed frederik-ronnevig closed 3 years ago

frederik-ronnevig commented 3 years ago

Betrakt følgande kode:

    @spatial_coverage.setter
    def spatial_coverage(self: Dataset, spatial_coverage: Union[Location, URI]) -> None:
        self._spatial_coverage = spatial_coverage

Og i testen gjer eg følgande:

    """It returns a spatial coverage graph isomorphic to spec."""
    dataset = Dataset()
    dataset.identifier = "http://example.com/datasets/1"
    # Add link to location:
    location = "http://publications.europa.eu/resource/authority/country/NOR"
    dataset.spatial_coverage = location

Resultat: eg får kjeft av mypy:

tests/test_dataset.py:112: error: Incompatible types in assignment (expression has type "str", variable has type "Union[Location, URI]")
12:08

Eg trudde eg hadde gjort det på same måte som du knytta feks her:

    @licensedocument.setter
    def licensedocument(self, licensedocument: Union[LicenseDocument, URI]) -> None:
        """Set for license."""
        self._licensedocument = licensedocument

Spørsmål: kvifor får ikkje modeldcatno kjeft av mypy når man gjer følgande:

def test_to_graph_should_return_licensedocument_as_uri() -> None:
    """It returns a information model graph isomorphic to spec."""
    """It returns an licensedocument graph isomorphic to spec."""
    informationmodel = InformationModel()
    informationmodel.identifier = "http://example.com/informationmodels/1"
    informationmodel.licensedocument = "https://example.com/licensedocuments/1"
frederik-ronnevig commented 3 years ago

Jeg har fått litt utvidet forståelse av hvorfor feilen oppstår i datacatalogtordf og ikke i modelldcatno. Jeg mistenkte at siden URI-klassen (som MyPy der ikke skjønner er en str) ligger i datacatalogtordf så vil MyPy på en eller annen måte kanskje være mer aggressiv med typesjekking.

Når jeg flytter klassen URI over til modelldcatno og bruker denne, i stedet for den eksterne avhengigheten til datacatalogtodf.URI så oppstår samme feil i modelldcatno. Men når denne ligger i et eksternt bibliotek så enten skjønner MyPy at URI er en str eller så sjekker den det ikke. Nå tror jeg kanskje det er det siste.