Source code for sisense.resource

from .api import API
import json


[docs]class Resource: def __init__(self, api: API, rjson: dict = None): """ Super for any API's resource. :param api: (API) Used to make API's requests. :param rjson: (dict) Resource representation. """ # If you add a new attribute, always remember to include it on __setattr__ self._api = api self.json = rjson if rjson else {} self.fix_shares()
[docs] def new(self, rjson: dict) -> object: """ Create a new resource with different properties, but same API. :param rjson: (dict) Resource representation. :return: (Resource) The new resource """ return self.__class__(self._api, rjson)
[docs] def save(self, filepath: str): """ Save the object representation as a .json file. :param filepath: (str) Relative/absolute path, including filename. """ with open(filepath, 'w') as file: json.dump(self.json, file)
[docs] def load(self, filepath: str) -> object: """ Load the object representation. :param filepath: (str) Relative/absolute path to a .json file. """ with open(filepath, 'r') as file: rjson = json.load(file) return self.new(rjson)
[docs] def fix_shares(self) -> object: """ When API returns some resource with shares, each share has a field called 'partyId'. However, when adding or updating this resource, the API only accepts the field 'party'. So, this method replaces 'partyId' with 'party'. :return: (Resource) The updated resource. """ if hasattr(self, 'shares'): for i, share in enumerate(self.shares): if 'partyId' in share: share['party'] = share['partyId'] share.pop('partyId', None) share.pop('partyName', None) self.shares[i] = share elif hasattr(self, 'partyId'): self.json['party'] = self.json['partyId'] self.json.pop('partyId') return self
def __setattr__(self, key, value): if key in self.__dict__ or key in ['json', '_api', '_elasticube']: self.__dict__[key] = value else: self.__dict__['json'][key] = value def __getattr__(self, item): if item in self.__dict__: return self.__dict__[item] if item in self.__dict__['json']: return self.__dict__['json'][item] raise AttributeError(f'"{item}" does not exist in {type(self)}.') def __repr__(self): return str(self.json)