REST API

Subpackages

Submodules

ixmp4.server.rest.base module

class ixmp4.server.rest.base.BaseModel

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.EnumerationOutput(results: DataFrame | DataFrame | list[EnumeratedT], *, pagination: Pagination, total: int)

Bases: BaseModel, Generic[EnumeratedT]

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pagination: Pagination
results: DataFrame | list[EnumeratedT]
total: int
class ixmp4.server.rest.base.InitKwargs

Bases: TypedDict

pagination: Pagination
total: int
class ixmp4.server.rest.base.Pagination(*, limit: Annotated[int, Ge(ge=0), Le(le=10000)] = 5000, offset: Annotated[int, Ge(ge=0)] = 0)

Bases: BaseModel

limit: int
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

offset: int
class ixmp4.server.rest.base.TabulateVersionArgs(*, transaction__id: int | None = None)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

transaction__id: int | None

ixmp4.server.rest.deps module

async ixmp4.server.rest.deps.do_not_validate_token(authorization: str = Header(None)) dict[str, dict[str, Any]] | None

Override dependency used for skipping authentication while testing.

async ixmp4.server.rest.deps.get_backend(platform: str = Path(PydanticUndefined), user: User = Depends(get_user)) AsyncGenerator[SqlAlchemyBackend, None]

Returns a platform backend for a platform name as a path parameter. Also checks user access permissions if in managed mode.

async ixmp4.server.rest.deps.get_managed_backend(platform: str = Path(PydanticUndefined), user: User = Depends(get_user)) AsyncGenerator[SqlAlchemyBackend, None]

Returns a platform backend for a platform name as a path parameter. Also checks user access permissions if in managed mode.

ixmp4.server.rest.deps.get_test_backend_dependency(backend: SqlAlchemyBackend, auth_params: tuple[User, ManagerConfig, ManagerPlatformInfo]) Callable[[str, User], AsyncGenerator[SqlAlchemyBackend, None]]
async ixmp4.server.rest.deps.get_toml_backend(platform: str = Path(PydanticUndefined), user: User = Depends(get_user)) AsyncGenerator[SqlAlchemyBackend, None]
async ixmp4.server.rest.deps.get_user(token: dict[str, Any] | None = Depends(validate_token)) User

Returns a user object for permission checks.

async ixmp4.server.rest.deps.get_version() str
async ixmp4.server.rest.deps.validate_token(authorization: str | None = Header(None)) dict[str, Any] | None

Validates a JSON Web Token with the secret supplied in the IXMP4_SECRET_HS256 environment variable.

ixmp4.server.rest.meta module

class ixmp4.server.rest.meta.RunMetaEntryInput(*, run__id: int, key: str, value: Annotated[bool, Strict(strict=True)] | Annotated[int, Strict(strict=True)] | Annotated[float, Strict(strict=True)] | Annotated[str, Strict(strict=True)])

Bases: BaseModel

key: str
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

run__id: int
value: Annotated[bool, Strict(strict=True)] | Annotated[int, Strict(strict=True)] | Annotated[float, Strict(strict=True)] | Annotated[str, Strict(strict=True)]
ixmp4.server.rest.meta.bulk_delete(df: DataFrame, backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.meta.bulk_upsert(df: DataFrame, backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.meta.create(runmeta: RunMetaEntryInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) RunMetaEntry
ixmp4.server.rest.meta.delete(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.meta.query(filter: RunMetaEntryFilter = Body(None), join_run_index: bool | None = Query(False), table: bool | None = Query(False), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[RunMetaEntry]
ixmp4.server.rest.meta.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame

ixmp4.server.rest.model module

class ixmp4.server.rest.model.ModelInput(*, name: str)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
ixmp4.server.rest.model.create(model: ModelInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) Model

ixmp4.server.rest.model.create()

ixmp4.server.rest.model.query(filter: ModelFilter = Body(None), table: bool | None = Query(False), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[Model]

ixmp4.server.rest.model.query()

ixmp4.server.rest.model.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame

ixmp4.server.rest.region module

class ixmp4.server.rest.region.RegionInput(*, name: str, hierarchy: str)

Bases: BaseModel

hierarchy: str
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
ixmp4.server.rest.region.create(region: RegionInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) Region

ixmp4.server.rest.region.create()

ixmp4.server.rest.region.delete(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.region.query(filter: ~ixmp4.data.db.region.filter.RegionFilter = Body(id=None name=None hierarchy=None id__in=None name__notlike=None name__notilike=None name__ilike=None name__in=None name__like=None hierarchy__notlike=None hierarchy__notilike=None hierarchy__ilike=None hierarchy__in=None hierarchy__like=None iamc=None), table: bool = Query(False), pagination: ~ixmp4.server.rest.base.Pagination = Depends(NoneType), backend: ~ixmp4.data.backend.db.SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[Region]

ixmp4.server.rest.region.query()

ixmp4.server.rest.region.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame

ixmp4.server.rest.run module

class ixmp4.server.rest.run.RevertInput(*, transaction__id: int)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

transaction__id: int
class ixmp4.server.rest.run.RunInput(*, model_name: str, scenario_name: str)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name_of_model: str
scenario_name: str
ixmp4.server.rest.run.create(run: RunInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) Run
ixmp4.server.rest.run.get_by_id(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) Run
ixmp4.server.rest.run.lock(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) Run
ixmp4.server.rest.run.query(filter: ~ixmp4.data.db.run.filter.RunFilter = Body(id=None version=None default_only=True is_default=None model=None scenario=None id__in=None version__lt=None version__gte=None version__gt=None version__lte=None version__in=None iamc=None), table: bool | None = Query(False), pagination: ~ixmp4.server.rest.base.Pagination = Depends(NoneType), backend: ~ixmp4.data.backend.db.SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[Run]
ixmp4.server.rest.run.revert(id: int = Path(PydanticUndefined), input: RevertInput = Body(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.run.set_as_default_version(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.run.tabulate_transactions(pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame
ixmp4.server.rest.run.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame
ixmp4.server.rest.run.unlock(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) Run
ixmp4.server.rest.run.unset_as_default_version(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None

ixmp4.server.rest.scenario module

class ixmp4.server.rest.scenario.ScenarioInput(*, name: str)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
ixmp4.server.rest.scenario.create(scenario: ScenarioInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) Scenario

ixmp4.server.rest.scenario.create()

ixmp4.server.rest.scenario.query(filter: ScenarioFilter = Body(None), table: bool | None = Query(False), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[Scenario]

ixmp4.server.rest.scenario.query()

ixmp4.server.rest.scenario.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame

ixmp4.server.rest.unit module

class ixmp4.server.rest.unit.UnitInput(*, name: str)

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
ixmp4.server.rest.unit.create(unit: UnitInput, backend: SqlAlchemyBackend = Depends(get_managed_backend)) Unit
ixmp4.server.rest.unit.delete(id: int = Path(PydanticUndefined), backend: SqlAlchemyBackend = Depends(get_managed_backend)) None
ixmp4.server.rest.unit.query(filter: UnitFilter = Body(None), table: bool = Query(False), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) EnumerationOutput[Unit]

ixmp4.server.rest.unit.query()

ixmp4.server.rest.unit.tabulate_versions(filter: TabulateVersionArgs = Body(transaction__id=None), pagination: Pagination = Depends(NoneType), backend: SqlAlchemyBackend = Depends(get_managed_backend)) DataFrame

Module contents

class ixmp4.server.rest.APIInfo(*, name: str, version: str, is_managed: bool, manager_url: None | str, utcnow: datetime)

Bases: BaseModel

is_managed: bool
manager_url: None | str
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
utcnow: datetime
version: str
async ixmp4.server.rest.http_exception_handler(request: Request, exc: IxmpError) JSONResponse
ixmp4.server.rest.root(platform: str = Path(PydanticUndefined), version: str = Depends(get_version)) APIInfo