Пример #1
0
 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
Пример #2
0
 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)
Пример #3
0
 def choose_random_photo(photo_search_client, sms):
     photo = photo_search_client.photoSearchRandom(tags=sms['body'],
                                                   media='photos')
     mediaURL = Response.generateMediaURL(photo)
     return mediaURL