Exemple #1
0
def setup_project():
    if DBProcessState.is_thread_alive():
        flash(f'{flash_err} Stop the current action before making a new '
              f'project')
        return redirect(url_for('records.index'))
    path = get_project_dir_path_from_cookie()
    return render_template('new_project.html', path=path)
Exemple #2
0
def update_history_chart(value):
    db_path = join(get_project_dir_path_from_cookie(), DB_NAME)
    decl_types = sqlite3.PARSE_DECLTYPES
    decl_colnames = sqlite3.PARSE_COLNAMES
    conn = sqlite_connection(db_path, detect_types=decl_types | decl_colnames)
    data = history_chart.retrieve_watch_data(conn, date_periods_vals[value])
    conn.close()
    return construct_history_chart(data), 'Videos opened/watched'
Exemple #3
0
def db_has_records():
    db_path = join(get_project_dir_path_from_cookie(), DB_NAME)
    if os.path.exists(db_path):
        conn = sqlite_connection(db_path)
        cur = conn.cursor()
        try:
            cur.execute("SELECT 'id' FROM videos")
            total_records = len(cur.fetchall())
            if total_records:
                return True
            cur.close()
        except sqlite3.OperationalError:
            return
        finally:
            conn.close()
Exemple #4
0
def index():
    project_path = get_project_dir_path_from_cookie()
    if not project_path:
        return redirect(url_for('project.setup_project'))
    elif not os.path.exists(project_path):
        flash(f'{flash_err} could not find directory {strong(project_path)}')
        return redirect(url_for('project.setup_project'))

    if not ProjectState.logger:
        ProjectState.logger = logging_config(join(project_path, 'events.log'))
    # projects (directories) were changed, changing the log file accordingly
    if project_path != ProjectState.cur_dir:
        for i in ProjectState.logger.handlers:
            if isinstance(i, handlers.RotatingFileHandler):
                i.stream.close()  # closing currently open file
                i.stream = open(join(project_path, 'events.log'), 'a')
    ProjectState.cur_dir = project_path

    if DBProcessState.active_event_stream is None:
        DBProcessState.active_event_stream = True
    else:
        # event_stream() will set this back to True after disengaging
        DBProcessState.active_event_stream = False
    # default values for forms, set when the user first submits a form
    logging_verbosity = request.cookies.get(logging_verbosity_cookie)
    takeout_dir = request.cookies.get(takeout_dir_cookie)
    cutoff_time = request.cookies.get(cutoff_value_cookie)
    cutoff_denomination = request.cookies.get(cutoff_denomination_cookie)

    db = db_has_records()
    if not request.cookies.get('description-seen'):
        resp = make_response(
            render_template('index.html',
                            path=project_path,
                            description=True,
                            db=db))
        resp.set_cookie('description-seen', 'True', max_age=31_536_000)
        return resp
    return render_template('index.html',
                           path=project_path,
                           db=db,
                           logging_verbosity=logging_verbosity,
                           takeout_dir=takeout_dir,
                           cutoff_time=cutoff_time,
                           cutoff_denomination=cutoff_denomination)
Exemple #5
0
def open_current_project_dir():
    run_args = [get_project_dir_path_from_cookie()]
    try:
        if sys.platform == 'win32':
            os.startfile(run_args[0])
            return ''
        elif sys.platform == 'linux':
            run_args.insert(0, 'xdg-open')
        elif sys.platform == 'darwin':
            run_args.insert(0, 'open')
        else:
            return ''

        subprocess.run(run_args)
    except OSError:
        pass

    return ''
Exemple #6
0
def update_v_scatter(x_axis_type: str, y_axis_type: str, views: list,
                     num_of_records: int):
    if not x_axis_type or not y_axis_type:
        return None
    num_of_records = v_scatter_slider_recs_nums[num_of_records]
    min_views = v_scatter_view_range_nums[views[0]]
    max_views = v_scatter_view_range_nums[views[1]]
    db_path = join(get_project_dir_path_from_cookie(), DB_NAME)
    conn = sqlite_connection(db_path)
    data = videos_scatter_graph.get_data(conn,
                                         x_axis_type,
                                         y_axis_type,
                                         min_views=min_views,
                                         max_views=max_views,
                                         number_of_records=num_of_records)
    conn.close()
    if x_axis_type in ['LikeRatioAsc', 'LikeRatioDesc']:
        x_axis_type = 'Ratio'
    return construct_v_scatter(data, x_axis_type, y_axis_type)
Exemple #7
0
def history_chart_date_summary(data, date_period):
    if data:
        date = data['points'][0]['x']
        if data['points'][0]['y'] == 0:
            return f'No videos for the period of {date}'
        if date_period == 0:
            date = date[:4]
        elif date_period == 1:
            date = date[:7]
        elif date_period == 2:
            date = date[:10]
        else:
            date = date[:13]

        db_path = join(get_project_dir_path_from_cookie(), DB_NAME)
        conn = sqlite_connection(db_path)
        summary_tables = history_chart.make_summary_tables_for_time_period(
            conn, date)
        conn.close()
        return [*summary_tables]
    else:
        return history_date_period_summary_msg
Exemple #8
0
def start_db_process():
    resp = make_response('')
    if DBProcessState.is_thread_alive():
        return DBProcessState.live_thread_warning

    logging_verbosity = request.form.get('logging-verbosity-level')
    resp.set_cookie(logging_verbosity_cookie,
                    logging_verbosity,
                    max_age=31_536_000)
    logging_verbosity = int(logging_verbosity)

    takeout_path = request.form.get('takeout-dir')

    project_path = get_project_dir_path_from_cookie()
    if takeout_path:
        takeout_dir = os.path.expanduser(takeout_path.strip())
        if os.path.exists(takeout_dir):
            resp.set_cookie(takeout_dir_cookie,
                            takeout_dir,
                            max_age=31_536_000)
        args = (takeout_dir, project_path, logging_verbosity)
        target = populate_db
    else:
        cutoff_time = request.form.get('update-cutoff')
        cutoff_denomination = request.form.get('update-cutoff-denomination')
        resp.set_cookie(cutoff_value_cookie, cutoff_time, max_age=31_536_000)
        resp.set_cookie(cutoff_denomination_cookie,
                        cutoff_denomination,
                        max_age=31_536_000)
        cutoff = int(cutoff_time) * int(cutoff_denomination)

        args = (project_path, cutoff, logging_verbosity)
        target = update_db

    DBProcessState.thread = Thread(target=target, args=args)
    DBProcessState.thread.start()

    return resp