Source code for sevenbridges.meta.data

import logging


logger = logging.getLogger(__name__)


[docs]class DataContainer: """ Utility for fetching data from the API server using, resource identifier or href. """ def __init__(self, urls, api, parent): self.data = {} self._URL = urls self.api = api self.parent = parent self.fetched = False
[docs] def fetch(self, item=None): logger.debug( 'Property "%s" is not set, fetching resource from server', item ) if item else logger.debug( 'Requested property is not set, fetching resource from server', ) href = self.data.get('href', None) headers = dict(self.api.headers) if href: self.data = self.api.get( href, headers=headers, append_base=False ).json() logger.debug('Resource fetched using the "href" property.') elif self._URL is not None and 'get' in self._URL: resource_id = self.data.get('id', None) if resource_id is None: logger.debug( 'Failed to fetch resource, "id" or "href" property ' 'not set' ) return self.data = self.api.get( self._URL['get'].format(id=resource_id), headers=headers, append_base=True ).json() logger.debug('Resource fetched using the id property.') else: logger.debug( 'Skipping resource fetch, retrieval for this resource is ' 'not available.' ) return self.parent.update_old() self.fetched = True
def __getitem__(self, item): if item not in self.data and not self.fetched: self.fetch(item=item) try: return self.data[item] except KeyError: return None def __setitem__(self, key, value): self.data[key] = value