Skip to content

ways/covjson-pydantic

 
 

Repository files navigation

CoverageJSON Pydantic

Test Coverage Package version Downloads License

This repository contains the coveragejson-pydantic Python package. It provides Pydantic models for CoverageJSON. This can, for example, be used to develop an API using FastAPI serving or receiving CoverageJSON.

Install

pip install covjson-pydantic

Or install from source:

pip install git+https://github.com/KNMI/covjson-pydantic.git

Usage

from datetime import datetime, timezone
from pydantic import AwareDatetime
from covjson_pydantic.coverage import Coverage
from covjson_pydantic.domain import Domain, Axes, ValuesAxis, DomainType
from covjson_pydantic.ndarray import NdArray

c = Coverage(
    domain=Domain(
        domainType=DomainType.point_series,
        axes=Axes(
            x=ValuesAxis[float](values=[1.23]),
            y=ValuesAxis[float](values=[4.56]),
            t=ValuesAxis[AwareDatetime](values=[datetime.now(tz=timezone.utc)])
        )
    ),
    ranges={
        "temperature": NdArray(axisNames=["x", "y", "t"], shape=[1, 1, 1], values=[42.0])
    }
)

print(c.model_dump_json(exclude_none=True, indent=4))

Will print

{
    "type": "Coverage",
    "domain": {
        "type": "Domain",
        "domainType": "PointSeries",
        "axes": {
            "x": {
                "values": [
                    1.23
                ]
            },
            "y": {
                "values": [
                    4.56
                ]
            },
            "t": {
                "values": [
                    "2023-09-14T11:54:02.151493Z"
                ]
            }
        }
    },
    "ranges": {
        "temperature": {
            "type": "NdArray",
            "dataType": "float",
            "axisNames": [
                "x",
                "y",
                "t"
            ],
            "shape": [
                1,
                1,
                1
            ],
            "values": [
                42.0
            ]
        }
    }
}

Contributing

Make an editable install from within the repository root

pip install -e '.[test]'

Running tests

pytest tests/

Real world usage

This library is used to build an Environmental Data Retrieval (EDR) API, serving automatic weather data station data from the KNMI. See the KNMI Data Platform.

TODOs

Help is wanted in the following areas to fully implement the CovJSON spec:

  • The polygon based domain types are not supported.
  • The Trajectory and Section domain type are not supported.
  • The NdArray only supports float data.
  • Not all requirements in the spec relating different fields are implemented.

License

Apache License, Version 2.0

Authors

Members of the KNMI Data Platform team. Reachable at [email protected].

Copyright

Koninklijk Nederlands Meteorologisch Instituut (KNMI)

About

Pydantic models for CoverageJSON

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Python 100.0%