Browse Source

add file path mapping and display

master
cinnaboot 7 years ago
parent
commit
95fcc29190
  1. 7
      video_metadata/schema.sql
  2. 6
      video_metadata/templates/file_listing/index.html
  3. 1
      video_metadata/templates/index.html
  4. 15
      video_metadata/templates/tmdb/create_mapping.html.jinja
  5. 26
      video_metadata/templates/tmdb/list_movie_test.html.jinja
  6. 8
      video_metadata/templates/tmdb/query.html
  7. 78
      video_metadata/views/tmdb.py

7
video_metadata/schema.sql

@ -41,6 +41,13 @@ CREATE TABLE movie_query_mapping(
foreign key(movie_id) references movie_details(movie_id) foreign key(movie_id) references movie_details(movie_id)
); );
DROP TABLE IF EXISTS movie_paths;
CREATE TABLE movie_paths(
movie_id int not null,
movie_path text unique not null,
foreign key(movie_id) references movie_details(movie_id)
);
DROP TABLE IF EXISTS movie_genres; DROP TABLE IF EXISTS movie_genres;
CREATE TABLE movie_genres( CREATE TABLE movie_genres(
genre_id integer primary key not null, genre_id integer primary key not null,

6
video_metadata/templates/file_listing/index.html

@ -11,10 +11,8 @@
{% if path.is_dir %} {% if path.is_dir %}
<span>{{ path.base_name }}</span> <span>{{ path.base_name }}</span>
{% else %} {% else %}
<a href="{{ url_for('tmdb.query_movie') <a href="{{ url_for('tmdb.query_movie', query=path.base_name, rel_path=path.rel_path) }}">
}}?query={{ path.base_name {{ path.base_name }}</a>
}}&rel_path={{ path.rel_path }}">{{
path.base_name }}</a>
{% endif %} {% endif %}
{% if path.contents %} {% if path.contents %}
<ul>{{ loop(path.contents) }}</ul> <ul>{{ loop(path.contents) }}</ul>

1
video_metadata/templates/index.html

@ -2,6 +2,7 @@
{% block header %} {% block header %}
<h1>{% block title %}INDEX PAGE!{% endblock %}</h1> <h1>{% block title %}INDEX PAGE!{% endblock %}</h1>
<div><a href="{{ url_for('tmdb.list_movie_test') }}">Movie Listing</a></div>
{% endblock %} {% endblock %}
{% block content %} {% block content %}

15
video_metadata/templates/tmdb/create_mapping.html.jinja

@ -0,0 +1,15 @@
{% extends 'base.html' %}
{% block header %}
<h1>{% block title %}Set Mapping{% endblock %}</h1>
{% endblock %}
{% block content %}
{% if success %}
<p>Successfully added file mapping for {{ rel_path }}</p>
{% endif %}
<div class="debug">
<pre>movie_id: {{ movie_id }}, rel_path: {{ rel_path }}</pre>
</div>
{% endblock %}

26
video_metadata/templates/tmdb/list_movie_test.html.jinja

@ -0,0 +1,26 @@
{% extends 'base.html' %}
{% block header %}
<h1>{% block title %}movie list test{% endblock %}</h1>
{% endblock %}
{% block content %}
<div id="search_results">
{% for r in view_results %}
<div class="search_result">
<h3><a href="{{ r.tmdb_link }}">{{ r.title }}</a></h3>
<ul>
<li>Relative Path: {{ r.rel_path }}</li>
<li>Release Date: {{ r.release_date }}</li>
<li>Description:
<p>{{ r.overview }}</p>
</li>
</ul>
</div>
{% endfor %}
</div>
<div class="debug">
<pre></pre>
</div>
{% endblock %}

8
video_metadata/templates/tmdb/query.html

@ -11,14 +11,17 @@
<input name="query" id="query"> <input name="query" id="query">
<input type="submit" value="Search"> <input type="submit" value="Search">
</form> </form>
{% endif %} {% else %}
<div id="search_results"> <div id="search_results">
<h2>Query Results</h2> <h2>Query Results</h2>
<h3>Choose the description that matches the file</h3>
<p>{{ rel_path }}</p>
{% for r in view_data %} {% for r in view_data %}
<div class="search_result"> <div class="search_result">
<h3><a href="{{ r.tmdb_link }}">{{ r.title }}</a></h3> <h3><a href="{{ r.tmdb_link }}">{{ r.title }}</a></h3>
<ul> <ul>
<li><a href="{{ url_for('tmdb.create_mapping', movie_id=r.id, rel_path=rel_path)
}}">Click here to select</a></li>
<li>Release Date: {{ r.release_date }}</li> <li>Release Date: {{ r.release_date }}</li>
<li>Description: <li>Description:
<p>{{ r.overview }}</p> <p>{{ r.overview }}</p>
@ -27,6 +30,7 @@
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{% endif %}
<div class="debug"> <div class="debug">
<h3>Debug Info</h3> <h3>Debug Info</h3>

78
video_metadata/views/tmdb.py

@ -78,6 +78,26 @@ class view_result(object):
#################### ####################
# flask routes # flask routes
@bp.route('/list_movie_test')
def list_movie_test():
conn = db.get_db()
cur = conn.cursor()
view_results = []
query = '''SELECT
movie_details.*, movie_paths.movie_path
FROM
movie_details
JOIN movie_paths ON movie_paths.movie_id=movie_details.movie_id'''
# TODO: should probably loop on movie_id, and add a list of movie_paths because
# there can be multiple paths associated with a movie_id
for row in cur.execute(query):
vr = buildViewResult(row)
vr.rel_path = row['movie_path']
view_results.append(vr)
return render_template('tmdb/list_movie_test.html.jinja', view_results = view_results)
@bp.route('/query_movie', methods=['GET', 'POST']) @bp.route('/query_movie', methods=['GET', 'POST'])
def query_movie(): def query_movie():
errors = [] errors = []
@ -95,6 +115,8 @@ def query_movie():
query.raw_query_str = request.args['query'] query.raw_query_str = request.args['query']
query.rel_path = request.args['rel_path'] query.rel_path = request.args['rel_path']
# TODO: if query_obj.query_type is still 'UNKNOWN' from parseQueryStr(), make queries to
# both tmdb endpoints (movie and tv)
if query.raw_query_str and parseQueryStr(query): if query.raw_query_str and parseQueryStr(query):
if isQueryCached(query.parsed_query_str): if isQueryCached(query.parsed_query_str):
view_results = makeLocalQuery(query) view_results = makeLocalQuery(query)
@ -126,6 +148,7 @@ def query_movie():
return render_template( return render_template(
'tmdb/query.html', 'tmdb/query.html',
view_data = view_results, view_data = view_results,
rel_path = query.rel_path,
debug_str = '{} \n {} \n {} \n'.format( debug_str = '{} \n {} \n {} \n'.format(
yaml.dump(query, indent=4), yaml.dump(query, indent=4),
yaml.dump(response, indent=4), yaml.dump(response, indent=4),
@ -133,6 +156,36 @@ def query_movie():
) )
) )
@bp.route('/create_mapping')
def create_mapping():
# TODO: add option for tv shows
movie_id = request.args.get('movie_id')
rel_path = request.args.get('rel_path')
errors = []
if not movie_id or not rel_path:
errors.append('invalid parameter')
else:
conn = db.get_db()
cur = conn.cursor()
try:
cur.execute('INSERT INTO movie_paths(movie_id, movie_path) VALUES(?, ?)',
(movie_id, rel_path))
except DatabaseError as e:
errors.append(e)
if len(errors) == 0:
conn.commit()
if errors:
flash(errors)
return render_template('tmdb/create_mapping.html.jinja',
movie_id = movie_id,
rel_path = rel_path,
success = (len(errors) == 0)
)
################### ###################
# helpers # helpers
@ -190,20 +243,23 @@ def makeLocalQuery(query_obj):
mq.query = ?''' mq.query = ?'''
for row in cur.execute(fancy_query, (query_obj.parsed_query_str, )): for row in cur.execute(fancy_query, (query_obj.parsed_query_str, )):
vr = view_result() results.append(buildViewResult(row))
vr.id = row['movie_id']
vr.title = row['title']
vr.overview = row['overview']
vr.release_date = row['release_date']
vr.original_language = row['original_language']
vr.tmdb_link = "{}{}{}".format(TMDB_MOVIE_LINK_URL, '/', vr.id)
if row['poster_path'] != None: return results
vr.poster_path = row['poster_path']
results.append(vr) def buildViewResult(db_row):
vr = view_result()
vr.id = db_row['movie_id']
vr.title = db_row['title']
vr.overview = db_row['overview']
vr.release_date = db_row['release_date']
vr.original_language = db_row['original_language']
vr.tmdb_link = "{}{}{}".format(TMDB_MOVIE_LINK_URL, '/', vr.id)
return results if db_row['poster_path'] != None:
vr.poster_path = db_row['poster_path']
return vr
def makeTMDBQuery(query_obj, response_obj): def makeTMDBQuery(query_obj, response_obj):
if query_obj.query_type == query_type.MOVIE: if query_obj.query_type == query_type.MOVIE:

Loading…
Cancel
Save