def get_images(filenames): if not filenames: raise StopIteration dynamo = Config().get_dynamodb() table = Config().table('image') batch_list = BatchList(dynamo) batch_list.add_batch(table, filenames, attributes_to_get=['tags', HASH_KEY]) response = dynamo.batch_get_item(batch_list) items = response['Responses'][table.name]['Items'] for item in items: item['filename'] = item.pop(HASH_KEY) item['tags'] = json.loads(item['tags']) unprocessed_keys = [] if response['UnprocessedKeys'] \ and table.name in response['UnprocessedKeys']: for key in response['UnprocessedKeys'][table.name]['Keys']: unprocessed_keys.append(key['HashKeyElement']) for item in items: yield item if not unprocessed_keys: raise StopIteration for item in get_images(unprocessed_keys): yield item
def get_tag_items(tag_names): if not tag_names: raise StopIteration dynamo = Config().get_dynamodb() table = Config().table('tag') batch_list = BatchList(dynamo) batch_list.add_batch(table, tag_names, attributes_to_get=['filenames', HASH_KEY]) response = dynamo.batch_get_item(batch_list) items = response['Responses'][table.name]['Items'] unprocessed_keys = [] if response['UnprocessedKeys'] \ and table.name in response['UnprocessedKeys']: for key in response['UnprocessedKeys'][table.name]['Keys']: unprocessed_keys.append(key['HashKeyElement']) for item in items: yield item for item in get_tag_items(unprocessed_keys): yield item