Exemple #1
0
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)
Exemple #2
0
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
Exemple #3
0
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'
Exemple #4
0
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!')
Exemple #5
0
def is_extension_allowed(filename):
    extension = utility.get_file_extension(filename)
    return extension and (extension
                          in current_app.config['ALLOWED_IMAGE_EXTENSION'])
Exemple #6
0
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)