Skip to content

Module stac_fastapi.sqlalchemy.extensions.query

STAC SQLAlchemy specific query search model.

TODO: replace with stac-pydantic

Variables

NumType
logger

Classes

Operator

class Operator(
    /,
    *args,
    **kwargs
)

Defines the set of operators supported by the API.

Ancestors (in MRO)

  • builtins.str
  • stac_pydantic.utils.AutoValueEnum
  • enum.Enum

Class variables

eq
gt
gte
lt
lte
ne

QueryExtension

class QueryExtension(
    conformance_classes: List[str] = NOTHING,
    schema_href: Optional[str] = None
)

Query Extenson.

Override the POST request model to add validation against supported fields

Ancestors (in MRO)

  • stac_fastapi.extensions.core.query.query.QueryExtension
  • stac_fastapi.types.extension.ApiExtension
  • abc.ABC

Class variables

GET
POST

Methods

get_request_model

def get_request_model(
    self,
    verb: Optional[str] = 'GET'
) -> Optional[pydantic.main.BaseModel]

Return the request model for the extension.method.

The model can differ based on HTTP verb

register

def register(
    self,
    app: fastapi.applications.FastAPI
) -> None

Register the extension with a FastAPI application.

Parameters:

Name Type Description Default
app None target FastAPI application. None

Returns:

Type Description
None None

QueryExtensionPostRequest

class QueryExtensionPostRequest(
    __pydantic_self__,
    **data: Any
)

Queryable validation.

Add queryables validation to the POST request to raise errors for unsupported querys.

Ancestors (in MRO)

  • pydantic.main.BaseModel
  • pydantic.utils.Representation

Class variables

Config

Static methods

construct

def construct(
    _fields_set: Optional[ForwardRef('SetStr')] = None,
    **values: Any
) -> 'Model'

Creates a new model setting dict and fields_set from trusted or pre-validated data.

Default values are respected, but no other validation is performed. Behaves as if Config.extra = 'allow' was set since it adds all passed values

from_orm

def from_orm(
    obj: Any
) -> 'Model'

parse_file

def parse_file(
    path: Union[str, pathlib.Path],
    *,
    content_type: 'unicode' = None,
    encoding: 'unicode' = 'utf8',
    proto: pydantic.parse.Protocol = None,
    allow_pickle: bool = False
) -> 'Model'

parse_obj

def parse_obj(
    obj: Any
) -> 'Model'

parse_raw

def parse_raw(
    b: Union[str, bytes],
    *,
    content_type: 'unicode' = None,
    encoding: 'unicode' = 'utf8',
    proto: pydantic.parse.Protocol = None,
    allow_pickle: bool = False
) -> 'Model'

schema

def schema(
    by_alias: bool = True,
    ref_template: 'unicode' = '#/definitions/{model}'
) -> 'DictStrAny'

schema_json

def schema_json(
    *,
    by_alias: bool = True,
    ref_template: 'unicode' = '#/definitions/{model}',
    **dumps_kwargs: Any
) -> 'unicode'

update_forward_refs

def update_forward_refs(
    **localns: Any
) -> None

Try to update ForwardRefs on fields based on this Model, globalns and localns.

validate

def validate(
    value: Any
) -> 'Model'

validate_query_fields

def validate_query_fields(
    values: Dict
) -> Dict

Validate query fields.

Methods

copy

def copy(
    self: 'Model',
    *,
    include: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    exclude: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    update: Optional[ForwardRef('DictStrAny')] = None,
    deep: bool = False
) -> 'Model'

Duplicate a model, optionally choose which fields to include, exclude and change.

Parameters:

Name Type Description Default
include None fields to include in new model None
exclude None fields to exclude from new model, as with values this takes precedence over include None
update None values to change/add in the new model. Note: the data is not validated before creating
the new model: you should trust this data
None
deep None set to True to make a deep copy of the model None

Returns:

Type Description
None new model instance

dict

def dict(
    self,
    *,
    include: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    exclude: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    by_alias: bool = False,
    skip_defaults: Optional[bool] = None,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False
) -> 'DictStrAny'

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

json

def json(
    self,
    *,
    include: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    exclude: Union[ForwardRef('AbstractSetIntStr'), ForwardRef('MappingIntStrAny'), NoneType] = None,
    by_alias: bool = False,
    skip_defaults: Optional[bool] = None,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    encoder: Optional[Callable[[Any], Any]] = None,
    models_as_dict: bool = True,
    **dumps_kwargs: Any
) -> 'unicode'

Generate a JSON representation of the model, include and exclude arguments as per dict().

encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

QueryableTypes

class QueryableTypes(

)

Defines a set of queryable fields.

TODO: Let the user define these in a config file

TODO: There is a much better way of defining this field <> type mapping than two enums with same keys

Class variables

dtype
epsg
gsd
height
maxzoom
minzoom
orientation
width

Queryables

class Queryables(
    /,
    *args,
    **kwargs
)

Queryable fields.

Define an enum of queryable fields and their data type. Queryable fields are explicitly defined for two reasons: 1. So the caller knows which fields they can query by 2. Because JSONB queries with sqlalchemy ORM require casting the type of the field at runtime (see QueryableTypes)

TODO: Let the user define these in a config file

Ancestors (in MRO)

  • builtins.str
  • stac_pydantic.utils.AutoValueEnum
  • enum.Enum

Class variables

dtype
epsg
foo
gsd
height
maxzoom
minzoom
orientation
width