Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions hsmodels/schemas/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import inspect
from enum import Enum

from pydantic import BaseModel
from pydantic import AnyUrl, BaseModel
from pydantic_core import Url
from rdflib import Graph, Literal, URIRef

Expand Down Expand Up @@ -127,7 +127,7 @@ def _rdf_graph(schema, graph=None):
graph = _rdf_graph(value, graph)
else:
# primitive value
if isinstance(value, Url):
if isinstance(value, (Url, AnyUrl)):
value = URIRef(str(value))
elif isinstance(value, TermEnum):
value = URIRef(value.value)
Expand Down
30 changes: 10 additions & 20 deletions hsmodels/schemas/rdf/aggregations.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ class BaseAggregationMetadataInRDF(RDFBaseModel):

class GeographicRasterMetadataInRDF(BaseAggregationMetadataInRDF):
rdf_type: AnyUrl = Field(json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.GeographicRasterAggregation)
_label_literal = Literal["Geographic Raster Content: A geographic grid represented by a virtual raster tile (.vrt) file and one or more geotiff (.tif) files"]
label: _label_literal = Field(
label: Literal["Geographic Raster Content: A geographic grid represented by a virtual raster tile (.vrt) file and one or more geotiff (.tif) files"] = Field(
frozen=True,
default="Geographic Raster Content: A geographic grid represented by a virtual "
"raster tile (.vrt) file and one or more geotiff (.tif) files",
Expand All @@ -79,8 +78,7 @@ class GeographicFeatureMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.GeographicFeatureAggregation
)

_label_literal = Literal["Geographic Feature Content: The multiple files that are part of a geographic shapefile"]
label: _label_literal = Field(
label: Literal["Geographic Feature Content: The multiple files that are part of a geographic shapefile"] = Field(
frozen=True, default="Geographic Feature Content: The multiple files that are part of a " "geographic shapefile"
)
dc_type: AnyUrl = Field(
Expand Down Expand Up @@ -108,8 +106,7 @@ class MultidimensionalMetadataInRDF(BaseAggregationMetadataInRDF):
rdf_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.MultidimensionalAggregation
)
_label_literal = Literal['Multidimensional Content: A multidimensional dataset represented by a NetCDF file (.nc) and text file giving its NetCDF header content']
label: _label_literal = Field(
label: Literal['Multidimensional Content: A multidimensional dataset represented by a NetCDF file (.nc) and text file giving its NetCDF header content'] = Field(
frozen=True,
default="Multidimensional Content: A multidimensional dataset represented by a "
"NetCDF file (.nc) and text file giving its NetCDF header content",
Expand All @@ -135,8 +132,7 @@ class TimeSeriesMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.TimeSeriesAggregation
)

_label_literal = Literal["Time Series Content: One or more time series held in an ODM2 format SQLite file and optional source comma separated (.csv) files"]
label: _label_literal = Field(
label: Literal["Time Series Content: One or more time series held in an ODM2 format SQLite file and optional source comma separated (.csv) files"] = Field(
frozen=True,
default="Time Series Content: One or more time series held in an ODM2 format "
"SQLite file and optional source comma separated (.csv) files",
Expand Down Expand Up @@ -164,8 +160,7 @@ class ReferencedTimeSeriesMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.ReferencedTimeSeriesAggregation
)

_label_literal = Literal["Referenced Time Series Content: A reference to one or more time series served from HydroServers outside of HydroShare in WaterML format"]
label: _label_literal = Field(
label: Literal["Referenced Time Series Content: A reference to one or more time series served from HydroServers outside of HydroShare in WaterML format"] = Field(
frozen=True,
default="Referenced Time Series Content: A reference to one or more time series "
"served from HydroServers outside of HydroShare in WaterML format",
Expand All @@ -183,8 +178,7 @@ class FileSetMetadataInRDF(BaseAggregationMetadataInRDF):
rdf_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.FileSetAggregation
)
_label_literal = Literal["File Set Content: One or more files with specific metadata"]
label: _label_literal = Field(frozen=True, default="File Set Content: One or more files with specific metadata")
label: Literal["File Set Content: One or more files with specific metadata"] = Field(frozen=True, default="File Set Content: One or more files with specific metadata")
dc_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": DC.type}, default=HSTERMS.FileSetAggregation, frozen=True
)
Expand All @@ -199,8 +193,7 @@ class SingleFileMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.SingleFileAggregation
)

_label_literal = Literal["Single File Content: A single file with file specific metadata"]
label: _label_literal = Field(frozen=True, default="Single File Content: A single file with file specific metadata")
label: Literal["Single File Content: A single file with file specific metadata"] = Field(frozen=True, default="Single File Content: A single file with file specific metadata")
dc_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": DC.type}, default=HSTERMS.SingleFileAggregation, frozen=True
)
Expand All @@ -215,8 +208,7 @@ class ModelProgramMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.ModelProgramAggregation
)

_label_literal = Literal["Model Program Content: One or more files with specific metadata"]
label: _label_literal = Field(frozen=True, default="Model Program Content: One or more files with specific metadata")
label: Literal["Model Program Content: One or more files with specific metadata"] = Field(frozen=True, default="Model Program Content: One or more files with specific metadata")
dc_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": DC.type}, default=HSTERMS.ModelProgramAggregation, frozen=True
)
Expand Down Expand Up @@ -255,8 +247,7 @@ class ModelInstanceMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.ModelInstanceAggregation
)

_label_literal = Literal["Model Instance Content: One or more files with specific metadata"]
label: _label_literal = Field(frozen=True, default="Model Instance Content: One or more files with specific metadata")
label: Literal["Model Instance Content: One or more files with specific metadata"] = Field(frozen=True, default="Model Instance Content: One or more files with specific metadata")
dc_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": DC.type}, default=HSTERMS.ModelInstanceAggregation, frozen=True
)
Expand All @@ -278,8 +269,7 @@ class CSVFileMetadataInRDF(BaseAggregationMetadataInRDF):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.CSVFileAggregation
)

_label_literal = Literal["CSV File Content: A CSV file with file specific metadata"]
label: _label_literal = Field(
label: Literal["CSV File Content: A CSV file with file specific metadata"] = Field(
frozen=True,
default="CSV File Content: A CSV file with file specific metadata"
)
Expand Down
9 changes: 3 additions & 6 deletions hsmodels/schemas/rdf/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,7 @@ class ResourceMetadataInRDF(BaseResource):
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.CompositeResource
)

_label_literal = Literal["Composite Resource"]
label: _label_literal = Field(default="Composite Resource", frozen=True, alias='label')
label: Literal["Composite Resource"] = Field(default="Composite Resource", frozen=True, alias='label')

@field_serializer('dc_type', 'rdf_type')
def serialize_url(self, _type: URIRef, _info):
Expand All @@ -124,8 +123,7 @@ class CollectionMetadataInRDF(BaseResource):
rdf_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.CollectionResource
)
_label_literal = Literal["Collection Resource"]
label: _label_literal = Field(default="Collection Resource", frozen=True, alias='label')
label: Literal["Collection Resource"] = Field(default="Collection Resource", frozen=True, alias='label')

@field_serializer('dc_type', 'rdf_type')
def serialize_url(self, _type: URIRef, _info):
Expand All @@ -139,8 +137,7 @@ class WebAppMetadataInRDF(BaseResource):
rdf_type: AnyUrl = Field(
json_schema_extra={"rdf_predicate": RDF.type}, frozen=True, default=HSTERMS.ToolResource
)
_label_literal = Literal["Web App Resource"]
label: _label_literal = Field(default="Web App Resource", frozen=True, alias='label')
label: Literal["Web App Resource"] = Field(default="Web App Resource", frozen=True, alias='label')

@field_serializer('dc_type', 'rdf_type')
def serialize_url(self, _type: URIRef, _info):
Expand Down
3 changes: 2 additions & 1 deletion hsmodels/schemas/rdf/validators.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from pydantic import AnyUrl
from pydantic_core import Url

from hsmodels.schemas.enums import CoverageType, DateType
Expand All @@ -15,7 +16,7 @@ def rdf_parse_extended_metadata(cls, value):


def rdf_parse_identifier(cls, value):
if isinstance(value, Url):
if isinstance(value, (Url, AnyUrl, str)):
return {"hydroshare_identifier": value}
return value

Expand Down
12 changes: 8 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
exclude=("tests",)),
install_requires=[
'rdflib<6.0.0',
'pydantic==2.8.*',
'pydantic>=2.8,<3',
'email-validator'
],
url='https://github.com/hydroshare/hsmodels',
Expand All @@ -21,11 +21,15 @@
long_description=README,
long_description_content_type="text/markdown",
classifiers=[
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
],

)
Loading