All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Note: Minor version 0.X.0
update might break the API, It's recommended to pin geojson-pydantic to minor version: geojson-pydantic>=0.6,<0.7
1.1.2 - 2024-10-22
- relax
bbox
validation and allow antimeridian crossing bboxes
1.1.1 - 2024-08-29
- add python 3.12 support
- switch to
flit-core
for packaging build backend
1.1.0 - 2024-05-10
- Add Position2D and Position3D of type NamedTuple (author @impocode, #161)
1.0.2 - 2024-01-16
- Temporary workaround for surfacing model attributes in FastAPI application (author @markus-work, #153)
1.0.1 - 2023-10-04
- Model serialization when using include/exclude (ref: #148)
1.0.0 - 2023-07-24
- reduce validation error message verbosity when discriminating Geometry types
- MultiPoint WKT now includes parentheses around each Point
- more tests for
GeometryCollection
warnings
-
update pydantic requirement to
~=2.0
-
update pydantic
FeatureCollection
generic model to allow named features in the generated schemas.# before FeatureCollection[Geometry, Properties] # now FeatureCollection[Feature[Geometry, Properties]]
-
raise
ValueError
ingeometries.parse_geometry_obj
instead ofValidationError
# before parse_geometry_obj({"type": "This type", "obviously": "doesn't exist"}) >> ValidationError # now parse_geometry_obj({"type": "This type", "obviously": "doesn't exist"}) >> ValueError("Unknown type: This type")
-
update JSON serializer to exclude null
bbox
andid
# before Point(type="Point", coordinates=[0, 0]).json() >> '{"type":"Point","coordinates":[0.0,0.0],"bbox":null}' # now Point(type="Point", coordinates=[0, 0]).model_dump_json() >> '{"type":"Point","coordinates":[0.0,0.0]}'
-
delete
geojson_pydantic.geo_interface.GeoInterfaceMixin
and replaced bygeojson_pydantic.base._GeoJsonBase
class -
delete
geojson_pydantic.types.validate_bbox
0.6.3 - 2023-07-02
- limit pydantic requirement to
~=1.0
0.6.2 - 2023-05-16
- Additional bbox validation (author @eseglem, #122)
0.6.1 - 2023-05-12
- Fix issue with null bbox validation (author @bmschmidt, #119)
0.6.0 - 2023-05-09
No change since 0.6.0a0
-
Validate order of bounding box values. (author @moradology, #114)
-
Enforce required keys and avoid defaults. This aim to follow the geojson specification to the letter.
# Before Feature(geometry=Point(coordinates=(0,0))) # Now Feature( type="Feature", geometry=Point( type="Point", coordinates=(0,0) ), properties=None, )
-
Add has_z function to Geometries (author @eseglem, #103)
-
Add optional bbox to geometries. (author @eseglem, #108)
-
Add support for nested GeometryCollection and a corresponding warning. (author @eseglem, #111)
- Refactor and simplify WKT construction (author @eseglem, #97)
- Support empty geometry coordinates (author @eseglem, #100)
- Refactored
__geo_interface__
to be a Mixin which returnsself.dict
(author @eseglem, #105) - GeometryCollection containing a single geometry or geometries of only one type will now produce a warning. (author @eseglem, #111)
- Do not validates arbitrary dictionaries. Make
Type
a mandatory key for objects (author @vincentsarago, #94) - Add Geometry discriminator when parsing geometry objects (author @eseglem, #101)
- Mixed Dimensionality WKTs (make sure the coordinates are either all 2D or 3D) (author @eseglem, #107)
- Allow Feature's id to be either a String or a Number (author @vincentsarago, #91)
0.5.0 - 2022-12-16
- python 3.11 support
- Derive WKT type from Geometry's type instead of class name (author @eseglem, #81)
- Replace
NumType
withfloat
throughout (author @eseglem, #83) __geo_interface__
definition to not use pydanticBaseModel.dict()
method and better match the specification- Adjusted mypy configuration and updated type definitions to satisfy all rules (author @eseglem, #87)
- Updated pre-commit config to run mypy on the whole library instead of individual changed files.
- Defaults are more explicit. This keeps pyright from thinking they are required.
- Remove
validate
classmethods used to implicitly load json strings (author @eseglem, #88)
0.4.3 - 2022-07-18
- The bbox key should not be in a
__geo_interface__
object if the bbox is None (author @yellowcap, #77)
0.4.2 - 2022-06-13
GeometryCollection
as optional input to geometry field inFeature
(author @davidraleigh, #72)
0.4.1 - 2022-06-10
-
Geometry
andGeometryCollection
validation from dict or string (author @Vikka, #69)Point.validate('{"coordinates": [1.0, 2.0], "type": "Point"}') >> Point(coordinates=(1.0, 2.0), type='Point')
-
Feature
andFeatureCollection
validation from dict or stringFeatureCollection.validate('{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"coordinates": [1.0, 2.0], "type": "Point"}}]}') >> FeatureCollection(type='FeatureCollection', features=[Feature(type='Feature', geometry=Point(coordinates=(1.0, 2.0), type='Point'), properties=None, id=None, bbox=None)], bbox=None)
0.4.0 - 2022-06-03
-
.wkt
property for Geometry objectfrom geojson_pydantic.geometries import Point Point(coordinates=(1, 2)).wkt >> 'POINT (1.0 2.0)'
-
.exterior
and.interiors
properties forgeojson_pydantic.geometries.Polygon
object.from geojson_pydantic.geometries import Polygon polygon = Polygon( coordinates=[ [(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)], [(2, 2), (2, 4), (4, 4), (4, 2), (2, 2)], ] ) polygon.exterior >> [(0.0, 0.0), (0.0, 10.0), (10.0, 10.0), (10.0, 0.0), (0.0, 0.0)] list(polygon.interiors) >> [[(2.0, 2.0), (2.0, 4.0), (4.0, 4.0), (4.0, 2.0), (2.0, 2.0)]]
-
__geo_interface__
togeojson_pydantic.geometries.GeometryCollection
object -
__geo_interface__
togeojson_pydantic.feature.Feature
andgeojson_pydantic.feature.FeatureCollection
object -
geojson_pydantic.__all__
to declaring public objects (author @farridav, #52)
- switch to
pyproject.toml
- rename
geojson_pydantic.version
togeojson_pydantic.__version__
- changelog compare links
0.3.4 - 2022-04-28
- Fix optional geometry and bbox fields on
Feature
; allowing users to pass inNone
or even omit either field (author @moradology, #56) - Fix
Polygon.from_bounds
to respect geojson specification and return counterclockwise linear ring (author @jmfee-usgs, #49)
0.3.3 - 2022-03-04
- Follow geojson specification and make feature geometry optional (author @yellowcap, #47)
from geojson_pydantic import Feature # Before feature = Feature(type="Feature", geometry=None, properties={}) >> ValidationError: 1 validation error for Feature geometry none is not an allowed value (type=type_error.none.not_allowed) # Now feature = Feature(type="Feature", geometry=None, properties={}) assert feature.geometry is None
0.3.2 - 2022-02-21
- fix
parse_geometry_obj
potential bug (author @geospatial-jeff, #45) - improve type definition (and validation) for geometry coordinate arrays (author @geospatial-jeff, #44)
0.3.1 - 2021-08-04
Polygon.from_bounds
class method to create a Polygon geometry from a bounding box.from geojson_pydantic import Polygon print(Polygon.from_bounds((1, 2, 3, 4)).dict(exclude_none=True)) >> {'coordinates': [[(1.0, 2.0), (1.0, 4.0), (3.0, 4.0), (3.0, 2.0), (1.0, 2.0)]], 'type': 'Polygon'}
- Added validation for Polygons with zero size.
0.3.0 - 2021-05-25
-
Feature
andFeatureCollection
model generics to support custom geometry and/or properties validation (author @iwpnd, #29)from pydantic import BaseModel from geojson_pydantic.features import Feature from geojson_pydantic.geometries import Polygon class MyFeatureProperties(BaseModel): name: str value: int feature = Feature[Polygon, MyFeatureProperties]( **{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [13.38272,52.46385], [13.42786,52.46385], [13.42786,52.48445], [13.38272,52.48445], [13.38272,52.46385] ] ] }, "properties": { "name": "test", "value": 1 } } )
-
Top level export (#34)
# before from geojson_pydantic.features import Feature, FeatureCollection from geojson_pydantic.geometries import Polygon # now from geojson_pydantic import Feature, Polygon
- Drop python 3.6 support
- Renamed
utils.py
totypes.py
- Removed
Coordinate
type ingeojson_pydantic.features
(replaced byPosition
)
0.2.3 - 2021-05-05
- incorrect version number set in
__init__.py
0.2.2 - 2020-12-29
- Made collections iterable (#12)
- Added
parse_geometry_obj
function (#9)
0.2.1 - 2020-08-07
Although the type file was added in 0.2.0
it wasn't included in the distributed package. Use this version 0.2.1
for type annotations.
- Correct package type information files
0.2.0 - 2020-08-06
- Added documentation on locally running tests (#3)
- Publish type information (#6)
- Removed geojson dependency (#4)
- Include MultiPoint as a valid geometry for a Feature (#1)
0.1.0 - 2020-05-21
- Initial Release