Source code for acapi2.resources.acquialist
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Dictionary of Acquia Cloud API resources."""
import abc
import typing
from acapi2.exceptions import AcquiaCloudNoDataException
from acapi2.resources.acquiadata import AcquiaData
[docs]class AcquiaList(AcquiaData, dict):
def __init__(
self, base_uri: str, api_key: str, api_secret: str, *args, **kwargs
) -> None:
self._sorted_keys = [] # type: typing.List[typing.Any]
# Initialise the dict
dict.__init__(self, *args, **kwargs)
# Initialise the list
self._base_uri: str = ""
self.base_uri: str = base_uri # type: ignore
AcquiaData.__init__(self, self.base_uri, api_key, api_secret)
def __delitem__(self, key):
super(AcquiaList, self).__delitem__(key)
self.sorted_keys = []
def __setitem__(self, key, value):
super(AcquiaList, self).__setitem__(key, value)
self.sorted_keys = []
[docs] def first(self) -> typing.Any:
if not len(self):
raise AcquiaCloudNoDataException("No data available.")
key = self.search_pos(0)
return self[key]
[docs] def generate_resource_uri(self, resource: str) -> str:
return f"{self.base_uri}/{resource}"
[docs] def last(self):
if not len(self):
raise AcquiaCloudNoDataException("No data available.")
key = self.search_pos(-1)
return self[key]
[docs] def search_pos(self, pos: int) -> str:
keys = self.sorted_keys
return keys[pos]
@property
def sorted_keys(self) -> list:
if not self._sorted_keys:
keys = list(self.keys())
self._sorted_keys = sorted(keys)
return self._sorted_keys
@sorted_keys.setter
def sorted_keys(self, keys: list):
self._sorted_keys = keys
@property # type: ignore
@abc.abstractmethod
def base_uri(self) -> str:
return self._base_uri
@base_uri.setter # type: ignore
@abc.abstractmethod
def base_uri(self, base_uri: str):
self._base_uri = base_uri