def choose_photo(photo_search_client, photo, photo_history, sms, history): database = DynamoDB() if not photo and photo_history['Count'] == 0: # search photo, return first photo, write all to dynamodb (background) logger.critical("Case 1") new_photos = photo_search_client.photosSearch( tags=sms['body'], per_page=int(parser.get('flickr', 'per_page')), page=SelectPhotoTask.randnum( int(parser.get('flickr', 'max_results')) / int(parser.get('flickr', 'per_page')))) #SelectPhotoTask.store_all_photos(database, new_photos, sms['body']) # to be ran in background task = StoreAllPhotos.delay(new_photos, sms['body']) ##### logger.info("Photo fetched from database %s" % str(Response.generateMediaURL(new_photos['photo'][0]))) cache.write(SelectPhotoTask.generateCacheKey(sms['body'], 1), Response.generateMediaURL(new_photos['photo'][0])) return Response.generateMediaURL(new_photos['photo'][0]) elif history[1] >= photo_history['Items'][0]['id']: # choose random from existing logger.critical("Case 2") randid = SelectPhotoTask.randnum(photo_history['Items'][0]['id']) # cache first cache_photo = SelectPhotoTask.checkCache( SelectPhotoTask.generateCacheKey(sms['body'], randid)) if cache_photo: return cache_photo ##### kce = Key('tag').eq(sms['body']) & Key('id').eq(randid) photo = database.query_photo(kce) logger.info("Photo fetched from database %s" % str(photo['Items'][0]['url'])) cache.write(SelectPhotoTask.generateCacheKey(sms['body'], randid), photo['Items'][0]['url']) return photo['Items'][0]['url'] elif photo_history['Items'][0]['id'] - 5 <= history[1] + 1: # almost got all the photos, return, get more photos (background) logger.critical("Case 3") id = photo_history['Items'][0]['id'] + 1 new_photos = photo_search_client.photosSearch( tags=sms['body'], per_page=int(parser.get('flickr', 'per_page')), page=SelectPhotoTask.randnum( int(parser.get('flickr', 'max_results')) / int(parser.get('flickr', 'per_page')))) # SelectPhotoTask.store_all_photos(database, new_photos, sms['body'], id) # to be ran in background StoreAllPhotos.delay(new_photos, sms['body'], id) logger.info("Photo fetched from database %s" % str(photo)) return photo else: # just return photo logger.critical("Case 4") logger.info("Photo fetched from database %s" % str(photo)) return photo
def run(self, photos, tag, id=1): database = DynamoDB() for photo in photos['photo']: url = Response.generateMediaURL(photo) try: # valid = image_validator.validate(tag, url) # if valid == 1: # logger.info(database.write_item("Pictures", "url", tag=tag, id=id, url=url)) # else: # logger.debug("HERE " + str(valid)) # raise database.write_item("Pictures", "url", tag=tag, id=id, url=url) except: continue id += 1 logger.info("All images for %s is stored to database" % tag)
def choose_random_photo(photo_search_client, sms): photo = photo_search_client.photoSearchRandom(tags=sms['body'], media='photos') mediaURL = Response.generateMediaURL(photo) return mediaURL