def search(self, asset_manager_ids=None, asset_ids=None, asset_classes=None, asset_types=None, page_no=None, page_size=None): self.logger.info('Search for Assets - Asset Manager(s): %s', asset_manager_ids) search_params = {} # Potentially roll this into a loop through args rather than explicitly named - depends on additional validation if asset_manager_ids: search_params['asset_manager_ids'] = ','.join([str(amid) for amid in asset_manager_ids]) if asset_ids: search_params['asset_ids'] = ','.join(asset_ids) if asset_classes: search_params['asset_classes'] = ','.join(asset_classes) if asset_types: search_params['asset_types'] = ','.join(asset_types) if page_no is not None: search_params['page_no'] = page_no if page_size: search_params['page_size'] = page_size url = self.endpoint + '/assets' response = self.session.get(url, params=search_params) if response.ok: assets = [json_to_asset(json_asset) for json_asset in response.json()] self.logger.info('Returned %s Assets.', len(assets)) return assets else: self.logger.error(response.text) response.raise_for_status()
def assets_by_asset_manager(self, asset_manager_id): self.logger.info('Retrieve Assets By Asset Manager: %s', asset_manager_id) url = '%s/assets/%s' % (self.endpoint, asset_manager_id) response = self.session.get(url) if response.ok: assets = [json_to_asset(json_asset) for json_asset in response.json()] self.logger.info('Returned %s Assets.', len(assets)) return assets else: self.logger.error(response.text) response.raise_for_status()
def deactivate(self, asset_manager_id, asset_id): self.logger.info('Deactivate Asset - Asset Manager: %s - Asset ID: %s', asset_manager_id, asset_id) url = '%s/assets/%s/%s' % (self.endpoint, asset_manager_id, asset_id) json = {'asset_status': 'Inactive'} response = self.session.patch(url, json=json) if response.ok: self.logger.info('Successfully Deactivated Asset - Asset Manager: %s - Asset ID: %s', asset_manager_id, asset_id) return json_to_asset(response.json()) else: self.logger.error(response.text) response.raise_for_status()
def partial(self, asset_manager_id, asset_id, updates): self.logger.info('Partial Amend Asset - Asset Manager: %s - Asset ID: %s', asset_manager_id, asset_id) url = '%s/assets/%s/%s' % (self.endpoint, asset_manager_id, asset_id) # Setting handler ourselves so we can be sure Decimals work response = self.session.patch(url, data=json.dumps(updates, default=json_handler), headers=self.json_header) if response.ok: asset = json_to_asset(response.json()) return asset else: self.logger.error(response.text) response.raise_for_status()
def amend(self, asset): self.logger.info('Amend Asset - Asset Manager: %s - Asset ID: %s', asset.asset_manager_id, asset.asset_id) url = '%s/assets/%s/%s' % (self.endpoint, asset.asset_manager_id, asset.asset_id) response = self.session.put(url, json=asset.to_interface()) if response.ok: self.logger.info('Successfully Amended Asset - Asset Manager: %s - Asset ID: %s', asset.asset_manager_id, asset.asset_id) asset = json_to_asset(response.json()) return asset else: self.logger.error(response.text) response.raise_for_status()
def retrieve(self, asset_manager_id, asset_id, version=None): self.logger.info('Retrieve Asset - Asset Manager: %s - Asset ID: %s', asset_manager_id, asset_id) url = '%s/assets/%s/%s' % (self.endpoint, asset_manager_id, asset_id) if version: url += '?version=%d' % int(version) response = self.session.get(url) if response.ok: self.logger.info('Successfully Retrieved Asset - Asset Manager: %s - Asset ID: %s', asset_manager_id, asset_id) return json_to_asset(response.json()) else: self.logger.error(response.text) response.raise_for_status()
def upsert(self, asset): ''' upsert only support upserting one asset at a time''' self.logger.info('Upsert Asset - Asset Manager: %s - Asset ID: %s', asset.asset_manager_id, asset.asset_id) url = '%s/assets/%s' % (self.endpoint, asset.asset_manager_id) response = self.session.post(url, json=asset.to_interface(), params={'upsert': True}) if response.ok: self.logger.info( 'Successfully Upserted Asset - Asset Manager: %s - Asset ID: %s', asset.asset_manager_id, asset.asset_id) asset = json_to_asset(response.json()) return asset else: self.logger.error(response.text) response.raise_for_status()
def search(self, asset_manager_id, **kwargs): """ Search for assets. Possible kwargs: * client_ids: list[int] * asset_statuses: list * asset_ids: list * reference_types: list * reference_values: list * asset_issuer_ids: list[int] * asset_classes: list * asset_types: list * country_ids: list * currencies: list * include_public: bool (default = True) * include_data_sources: bool (default = True) * page_no = int(query_params.get('page_no', '1')) if query_params else None * page_size = int(query_params.get('page_size', '100')) if query_params else None """ self.logger.info("Search for Assets - Asset Manager: %s", asset_manager_id) search_params = {} for k, v in kwargs.items(): if not isinstance(v, str) and isinstance(v, Iterable): v = ",".join(str(i) for i in v) search_params[k] = v url = "%s/assets/%s" % (self.endpoint, asset_manager_id) response = self.session.get(url, params=search_params) if response.ok: return response.json( ) # Temporary hack since json won't map properly assets = [ json_to_asset(json_asset) for json_asset in response.json() ] self.logger.info("Returned %s Assets.", len(assets)) return assets else: self.logger.error(response.text) response.raise_for_status()
def new(self, asset): self.logger.info( "New Asset - Asset Manager: %s - Asset ID: %s", asset.asset_manager_id, asset.asset_id, ) url = "%s/assets/%s" % (self.endpoint, asset.asset_manager_id) response = self.session.post(url, json=asset.to_interface()) if response.ok: self.logger.info( "Successfully Created Asset - Asset Manager: %s - Asset ID: %s", asset.asset_manager_id, asset.asset_id, ) asset = json_to_asset(response.json()) return asset else: self.logger.error(response.text) response.raise_for_status()
def loose_search(self, asset_manager_id, query="", **kwargs): """ Asset search API. Possible kwargs: * threshold: int (default = 0) * page_no: int (default = 1) * page_size: int (default = 100) * sort_fields: list (default = []) * asset_types: list (default = []) * include_public: bool (default = True) * include_data_sources: bool (default = True) """ self.logger.info("Asset Search - Asset Manager: %s", asset_manager_id) url = "{endpoint}/assets/search/{asset_manager_id}".format( asset_manager_id=asset_manager_id, endpoint=self.endpoint, ) params = {"query": query} for k, v in kwargs.items(): if not isinstance(v, str) and isinstance(v, Iterable): v = ",".join(str(i) for i in v) params[k] = v response = self.session.get(url, params=params) if response.ok: data = response.json() assets = [ json_to_asset(json_asset) for json_asset in data.get("hits", []) ] self.logger.info("Returned %s Assets.", len(assets)) return assets else: self.logger.error(response.text) response.raise_for_status()
def test_JsonToAsset(self): asset = generate_asset() json_asset = asset.to_json() gen_asset = json_to_asset(json_asset) self.assertEqual(gen_asset, asset)