def delete_photo_from_s3_and_database(photo_id, photo_name): saved_photo_file_name = str(photo_id) + utility.get_file_extension( photo_name) photo_s3_key = s3.PHOTOS_DIR + saved_photo_file_name thumbnail_s3_key = s3.THUMBNAILS_DIR + saved_photo_file_name rectangle_s3_key = s3.RECTANGLES_DIR + saved_photo_file_name s3.delete_object(key=photo_s3_key) s3.delete_object(key=thumbnail_s3_key) s3.delete_object(key=rectangle_s3_key) database.delete_photo(photo_id)
def get_thumbnails(): ''' [(photo_id_str, photo_name, thumbnail_url)] ''' result = list() rows = database.get_account_photo(account.account_get_logged_in_userid()) if rows: for photo_id, photo_name in rows: photo_id_str = str(photo_id) thumbnail_s3_key = s3.THUMBNAILS_DIR + photo_id_str + utility.get_file_extension( photo_name) thumbnail_url = s3.get_object_url(key=thumbnail_s3_key) if thumbnail_url: result.append((photo_id_str, photo_name, thumbnail_url)) return result
def process_and_save_image(request): image = request.files['file'] original_filename = image.filename original_photo_file_bytes = image.read() # Register the photo in database photo_id = database.create_new_photo( account.account_get_logged_in_userid(), original_filename) if photo_id: # Get the new filename extension = utility.get_file_extension(original_filename) saved_filename = str(photo_id) + extension # Save the original photo original_photo_s3_key = s3.PHOTOS_DIR + saved_filename res = s3.upload_file_bytes_object(key=original_photo_s3_key, file_bytes=original_photo_file_bytes) assert res # Save the rectanged photo rectangled_photo_cv_bytes = image_processing.detect_and_draw_rectangles_on_cv_image( image_processing.convert_file_bytes_to_cv_bytes( original_photo_file_bytes)) rectangled_photo_s3_key = s3.RECTANGLES_DIR + saved_filename rectangled_photo_file_bytes = image_processing.convert_cv_bytes_to_file_bytes( extension, rectangled_photo_cv_bytes) res = s3.upload_file_bytes_object( key=rectangled_photo_s3_key, file_bytes=rectangled_photo_file_bytes) assert res thumbnail_cv_bytes = image_processing.generate_thumbnail_for_cv_image( rectangled_photo_cv_bytes) thumbnail_s3_key = s3.THUMBNAILS_DIR + saved_filename thumbnail_file_bytes = image_processing.convert_cv_bytes_to_file_bytes( extension, thumbnail_cv_bytes) res = s3.upload_file_bytes_object(key=thumbnail_s3_key, file_bytes=thumbnail_file_bytes) assert res else: return 'Server has encountered a problem with database when storing the photo'
def display_photo_handler(): # TODO: Also display the original file name if account.account_is_logged_in(): photo_id_str = request.form.get('photo_id') result = database.get_photo(int(photo_id_str)) if result: userid, photo_name = result if userid == account.account_get_logged_in_userid(): saved_photo_file = photo_id_str + utility.get_file_extension( photo_name) rectangled_photo_url = s3.get_object_url( key=s3.RECTANGLES_DIR + saved_photo_file) rectangled_photo_size = s3.get_bucket_content_size( key=s3.RECTANGLES_DIR + saved_photo_file)[0] original_photo_url = s3.get_object_url(key=s3.PHOTOS_DIR + saved_photo_file) original_photo_size = s3.get_bucket_content_size( key=s3.PHOTOS_DIR + saved_photo_file)[0] if rectangled_photo_url and original_photo_url: return render_template( 'display_photo.html', saved_photo_file=saved_photo_file, photo_name=photo_name, photo_id=int(photo_id_str), rectangled_photo_url=rectangled_photo_url, original_photo_url=original_photo_url, rectangled_photo_size=utility. convert_bytes_to_human_readable(rectangled_photo_size), original_photo_size=utility. convert_bytes_to_human_readable(original_photo_size)) return render_template('empty_go_home.html', title='Error', message='Please try again!')
def is_extension_allowed(filename): extension = utility.get_file_extension(filename) return extension and (extension in current_app.config['ALLOWED_IMAGE_EXTENSION'])
def table_user_details_handler(): description = request.args.get('description') if description: description = urllib.parse.unquote(description) # {userid: dict(key='username', 'num_photos', 'num_photos_files', 'photos_size', 'num_rectangles_files', 'rectangles_size', 'num_thumbnails_files', 'thumbnails_size')} user_details_dict = {row[0]: {'username':row[1], 'num_photos_files':0, 'photos_size':0, 'num_rectangles_files':0, 'rectangles_size':0, 'num_thumbnails_files':0, 'thumbnails_size':0, 'num_photos':0} for row in database.get_account_table()} s3_photos_list = {row[0]: row[1] for row in s3.list_bucket_content(directory=s3.PHOTOS_DIR, recursive=False)} s3_rectangles_list = {row[0]: row[1] for row in s3.list_bucket_content(directory=s3.RECTANGLES_DIR, recursive=False)} s3_thumbnails_list = {row[0]: row[1] for row in s3.list_bucket_content(directory=s3.THUMBNAILS_DIR, recursive=False)} for photo_table_row in database.get_photo_table(): photo_id, userid, photo_name = photo_table_row saved_file_name = str(photo_id) + utility.get_file_extension(photo_name) user_entry = user_details_dict[userid] photo_size = s3_photos_list.get(s3.PHOTOS_DIR + saved_file_name) if photo_size: user_entry['num_photos_files'] += 1 user_entry['photos_size'] += photo_size rectangle_size = s3_rectangles_list.get(s3.RECTANGLES_DIR + saved_file_name) if rectangle_size: user_entry['num_rectangles_files'] += 1 user_entry['rectangles_size'] += rectangle_size thumbnail_size = s3_thumbnails_list.get(s3.THUMBNAILS_DIR + saved_file_name) if thumbnail_size: user_entry['num_thumbnails_files'] += 1 user_entry['thumbnails_size'] += thumbnail_size user_entry['num_photos'] += 1 # 'userid', 'username', 'num_photos', 'total_num_files', 'total_size', 'num_photos_files', 'photos_size', 'num_rectangles_files', 'rectangles_size', 'num_thumbnails_files', 'thumbnails_size' user_details_table = list() for user_details_dict_row in user_details_dict.items(): userid, user_entry = user_details_dict_row total_num_files = user_entry['num_photos_files'] + user_entry['num_rectangles_files'] + user_entry['num_thumbnails_files'] total_size = user_entry['photos_size'] + user_entry['rectangles_size'] + user_entry['thumbnails_size'] user_details_table.append((str(userid), user_entry['username'], user_entry['num_photos'], total_num_files, utility.convert_bytes_to_human_readable(total_size), user_entry['num_photos_files'], utility.convert_bytes_to_human_readable(user_entry['photos_size']), user_entry['num_rectangles_files'], utility.convert_bytes_to_human_readable(user_entry['rectangles_size']), user_entry['num_thumbnails_files'], utility.convert_bytes_to_human_readable(user_entry['thumbnails_size']), 'Delete')) title_rows = ('userid', 'username', 'num_photos', 'total_num_files', 'total_size', 'num_photos_files', 'photos_size', 'num_rectangles_files', 'rectangles_size', 'num_thumbnails_files', 'thumbnails_size', 'Delete User Photo') ahs_userid = lambda item, _: url_for('table_ece1779_account_handler', find_key='id', find_value=item) ahs_username = lambda item, _: url_for('table_ece1779_account_handler', find_key='username', find_value=item) ahs_num_photos = lambda item, row: url_for('table_ece1779_photo_handler', find_key='account_id', find_value=row[0]) ahs_delete_user_photo = lambda _, row: url_for('table_delete_user_photos_handler', userid=row[0]) action_handler_assigner_row=(ahs_userid, ahs_username, ahs_num_photos, None, None, None, None, None, None, None, None, ahs_delete_user_photo) return render_table_page(title='User Details', title_row=title_rows, action_handler_assigner_row=action_handler_assigner_row, table=user_details_table, description=description)