Skip to content

Aliases in FilterExtensionGetRequest model are not working  #638

@thomas-maschler

Description

@thomas-maschler

FilterExtensionGetRequest uses pydantic.Field instead of attr.ib to define aliases. This does not work and fields filter_crs and filter_lang are not recognized.

from stac_fastapi.extensions.core.filter.request import FilterExtensionGetRequest
filter = FilterExtensionGetRequest(filter="test", filter_crs="EPSG:4326")

# >>> TypeError: FilterExtensionGetRequest.__init__() got an unexpected keyword argument 'filter_crs'
filter = FilterExtensionGetRequest(filter="test", **{"filter-crs":"EPSG:4326"})

# >>> TypeError: FilterExtensionGetRequest.__init__() got an unexpected keyword argument 'filter-crs'

When trying to define the fields using attr.ib hypen aliases are not excepted

from typing import Optional

import attr

from stac_fastapi.types.search import APIRequest
from stac_fastapi.extensions.core.filter.request import FilterLang

@attr.s
class FilterExtensionGetRequest(APIRequest):
    """Filter extension GET request model."""

    filter: Optional[str] = attr.ib(default=None)
    filter_crs: Optional[str] =  attr.ib(alias="filter-crs", default=None)
    filter_lang: Optional[FilterLang] =  attr.ib(alias="filter-lang", default="cql2-text")

# >>>  File <attrs generated init __main__.FilterExtensionGetRequest>:1
#    def __init__(self, filter=attr_dict['filter'].default, filter-crs=attr_dict['filter_crs'].default, filter-lang=attr_dict['filter_lang'].default):
#                                                                 ^
# SyntaxError: invalid syntax

I tried various other approaches including adding an __init__ method to sanitize fields name with hyphens but that didn't play nice with create_async_endpoint.

What was the reason to use attr classes over Pydantic classes for GET Request Models?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions