def refresher(obj, *args, **kwargs): """Refresh model object cache.""" logger.info('Starting async refresh for model {name} : {uid}'.format( **kwargs )) obj.to_dict() obj.to_listing_dict() obj.to_summary_dict() logger.info('Finishing async refresh for model {name} : {uid}'.format( **kwargs ))
def _create_region(self): """Create a new region instance.""" backend = self._backend config = self._config = BACKENDS_CONFIG.get(backend) config['wrap'] = [LoggingProxy] region = make_region( function_key_generator=self.key_generator ).configure( backend, **config ) logger.info(f'New dogpile.cache region created. {backend}') self._region = region
def put(self, uid: str, data: dict) -> dict: """Update remote item.""" uri = f'{self.absolute_url}/{uid}' name = self.name logger.info(f'Updating item in {name}: {uri}') kwargs = self._requests_kwargs(data) response = requests.put(uri, **kwargs) if response.status_code == 200: return response.json() else: response = response.text error_msg = f'Fail to update item in {name}: {uri}. Response: {response}' logger.exception(error_msg) raise RuntimeError(error_msg)
def get(self, uid: str) -> dict: """Get remote item.""" uri = f'{self.absolute_url}/{uid}' name = self.name logger.info(f'Get item from {name}: {uri}') kwargs = self._requests_kwargs() response = requests.get(uri, **kwargs) if response.status_code == 200: data = response.json() return data elif response.status_code == 404: return None else: response = response.text error_msg = f'Fail to get item from {name}: {uri}. Response: {response}' logger.exception(error_msg) raise RuntimeError(error_msg)
def query(self, payload: dict=None, items_per_page=25) -> dict: """Get items using key:value payload as filter and number of results per page.""" uri = f'{self.absolute_url}' name = self.name logger.info(f'Listing items from {name}: {uri}') kwargs = self._requests_kwargs() if not payload: payload = {} payload['_items_per_page'] = items_per_page kwargs['params'] = payload response = requests.get(uri, **kwargs) if response.status_code == 200: data = response.json() return data else: response = response.text error_msg = f'Fail list items from {name}: {uri}. Response: {response}' logger.exception(error_msg) raise RuntimeError(error_msg)
def get_metadata_from_thumbor(source_path: str) -> dict: """Connect to briefy.thumbor to get metadata about an image. :param source_path: Relative path to the source image on S3. :return: Dictionary containing metadata information """ timeout = 20 # will timeout after 20 seconds metadata = {'width': 0, 'height': 0, 'raw_metadata': {}} url = generate_metadata_url(source_path) try: response = requests.get(url, timeout=timeout) except (requests.exceptions.Timeout, requests.exceptions.ConnectionError): logger.info(f'Connection issues updating metadata from {url}') return metadata if response.status_code == 200: data = response.json() original = data.get('original', {}) metadata['width'] = original.get('width', 0) metadata['height'] = original.get('height', 0) metadata['raw_metadata'] = original.get('metadata', {}) return metadata