|
|
|
@ -16,6 +16,7 @@ from flask import Blueprint, current_app, flash, Flask, jsonify, request, render |
|
|
|
|
|
|
|
|
|
|
|
from .. import util |
|
|
|
from .. import util |
|
|
|
from .. import db |
|
|
|
from .. import db |
|
|
|
|
|
|
|
from . import tv_shows |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#################### |
|
|
|
#################### |
|
|
|
@ -64,8 +65,10 @@ class response_data: |
|
|
|
|
|
|
|
|
|
|
|
@dataclass |
|
|
|
@dataclass |
|
|
|
class view_result: |
|
|
|
class view_result: |
|
|
|
|
|
|
|
detail_id:int = 0 |
|
|
|
media_type:str = 'unknown' |
|
|
|
media_type:str = 'unknown' |
|
|
|
id: int = 0 |
|
|
|
movie_id: int = 0 |
|
|
|
|
|
|
|
tv_id: int = 0 |
|
|
|
title: str = '' |
|
|
|
title: str = '' |
|
|
|
release_date: str = '' |
|
|
|
release_date: str = '' |
|
|
|
overview: str = '' |
|
|
|
overview: str = '' |
|
|
|
@ -101,9 +104,9 @@ class result_encoder(json.JSONEncoder): |
|
|
|
@bp.route('/list_movie_test/<string:sorting>') |
|
|
|
@bp.route('/list_movie_test/<string:sorting>') |
|
|
|
def list_movie_test(sorting = 'title'): |
|
|
|
def list_movie_test(sorting = 'title'): |
|
|
|
if sorting == 'add-date': |
|
|
|
if sorting == 'add-date': |
|
|
|
orderby = 'mp.add_date' |
|
|
|
orderby = 'pc.add_date' |
|
|
|
elif sorting == 'add-date-desc': |
|
|
|
elif sorting == 'add-date-desc': |
|
|
|
orderby = 'mp.add_date DESC' |
|
|
|
orderby = 'pc.add_date DESC' |
|
|
|
elif sorting == 'release-date': |
|
|
|
elif sorting == 'release-date': |
|
|
|
orderby = 'md.release_date' |
|
|
|
orderby = 'md.release_date' |
|
|
|
elif sorting == 'release-date-desc': |
|
|
|
elif sorting == 'release-date-desc': |
|
|
|
@ -136,6 +139,25 @@ def list_movie_test(sorting = 'title'): |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/tv_show_test', methods=['GET', ]) |
|
|
|
|
|
|
|
def tv_show_test(): |
|
|
|
|
|
|
|
shows = [] |
|
|
|
|
|
|
|
errors = [] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if 'query' in request.args: |
|
|
|
|
|
|
|
result = tv_shows.doTVQuery(request.args['query']) |
|
|
|
|
|
|
|
shows = result['shows'] |
|
|
|
|
|
|
|
errors = result['errors'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (shows): |
|
|
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return render_template('tmdb/tv_show_test.html', |
|
|
|
|
|
|
|
shows = shows, |
|
|
|
|
|
|
|
debug_str = f'{util.dumpObject(errors)}' |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/manual_query', methods=['GET', 'POST']) |
|
|
|
@bp.route('/manual_query', methods=['GET', 'POST']) |
|
|
|
def manual_query(): |
|
|
|
def manual_query(): |
|
|
|
query = query_data() |
|
|
|
query = query_data() |
|
|
|
@ -195,22 +217,17 @@ def query_path_json(): |
|
|
|
path = request.args['rel_path'] |
|
|
|
path = request.args['rel_path'] |
|
|
|
cur = db.get_db().cursor() |
|
|
|
cur = db.get_db().cursor() |
|
|
|
|
|
|
|
|
|
|
|
# NOTE: need to make an extra query to see what our id column is, tv_id or movie_id |
|
|
|
q = f'''SELECT |
|
|
|
mr = cur.execute('SELECT media_type FROM path_cache WHERE path=?', (path, )).fetchone() |
|
|
|
qd.*, pc.* |
|
|
|
if mr != None: |
|
|
|
FROM |
|
|
|
id_column = getIDColumn(mr['media_type']) |
|
|
|
path_cache pc |
|
|
|
|
|
|
|
JOIN query_details qd ON qd.detail_id = pc.detail_id |
|
|
|
|
|
|
|
WHERE |
|
|
|
|
|
|
|
pc.path = ? |
|
|
|
|
|
|
|
LIMIT 1''' |
|
|
|
|
|
|
|
|
|
|
|
q = f'''SELECT |
|
|
|
cur.execute(q, (path, )) |
|
|
|
qd.*, pc.* |
|
|
|
row = cur.fetchone() |
|
|
|
FROM |
|
|
|
|
|
|
|
path_cache pc |
|
|
|
|
|
|
|
JOIN query_details qd ON qd.{id_column} = pc.{id_column} |
|
|
|
|
|
|
|
WHERE |
|
|
|
|
|
|
|
pc.path = ? |
|
|
|
|
|
|
|
LIMIT 1''' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cur.execute(q, (path, )) |
|
|
|
|
|
|
|
row = cur.fetchone() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if errors: |
|
|
|
if errors: |
|
|
|
for e in errors: |
|
|
|
for e in errors: |
|
|
|
@ -227,22 +244,19 @@ def create_path_mapping(): |
|
|
|
errors = [] |
|
|
|
errors = [] |
|
|
|
|
|
|
|
|
|
|
|
if not ('rel_path' in request.form |
|
|
|
if not ('rel_path' in request.form |
|
|
|
and 'media_type' in request.form |
|
|
|
and 'detail_id' in request.form |
|
|
|
and 'id' in request.form |
|
|
|
|
|
|
|
): |
|
|
|
): |
|
|
|
errors.append(f'required parameters: rel_path, media_type, id') |
|
|
|
errors.append(f'required parameters: rel_path, id') |
|
|
|
else: |
|
|
|
else: |
|
|
|
id = request.form['id'] |
|
|
|
detail_id = request.form['detail_id'] |
|
|
|
media_type = request.form['media_type'] |
|
|
|
|
|
|
|
rel_path = request.form['rel_path'] |
|
|
|
rel_path = request.form['rel_path'] |
|
|
|
id_column = getIDColumn(media_type) |
|
|
|
|
|
|
|
conn = db.get_db() |
|
|
|
conn = db.get_db() |
|
|
|
cur = conn.cursor() |
|
|
|
cur = conn.cursor() |
|
|
|
current_app.logger.debug(f'mapping path "{rel_path}" for id: {id}') |
|
|
|
current_app.logger.debug(f'mapping path "{rel_path}" for detail_id: {detail_id}') |
|
|
|
try: |
|
|
|
try: |
|
|
|
cur.execute(f'INSERT INTO path_cache({id_column}, media_type, path, add_date) ' |
|
|
|
cur.execute(f'INSERT INTO path_cache(detail_id, path, add_date) ' |
|
|
|
f'VALUES(?,?,?, datetime())', |
|
|
|
f'VALUES(?,?, datetime())', |
|
|
|
(id, media_type, rel_path )) |
|
|
|
(detail_id, rel_path )) |
|
|
|
except DatabaseError as e: |
|
|
|
except DatabaseError as e: |
|
|
|
errors.append(str(e)) |
|
|
|
errors.append(str(e)) |
|
|
|
|
|
|
|
|
|
|
|
@ -278,7 +292,13 @@ def doQueryAlgorithm(query:query_data) -> dict: |
|
|
|
except json.JSONDecodeError as e: |
|
|
|
except json.JSONDecodeError as e: |
|
|
|
errors.append(e) |
|
|
|
errors.append(e) |
|
|
|
|
|
|
|
|
|
|
|
if 'total_results' in response.parsed_response: |
|
|
|
# TODO: testing ############ |
|
|
|
|
|
|
|
errors.extend(query.errors) |
|
|
|
|
|
|
|
errors.extend(response.errors) |
|
|
|
|
|
|
|
return {'errors': errors, 'results': view_results} |
|
|
|
|
|
|
|
########################### |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if response.parsed_response and 'total_results' in response.parsed_response: |
|
|
|
response.result_count = response.parsed_response['total_results'] |
|
|
|
response.result_count = response.parsed_response['total_results'] |
|
|
|
|
|
|
|
|
|
|
|
# TODO: it's possible for the query results to span multiple 'pages' |
|
|
|
# TODO: it's possible for the query results to span multiple 'pages' |
|
|
|
@ -357,11 +377,11 @@ def makeLocalQuery(query_obj): |
|
|
|
query = f'''SELECT |
|
|
|
query = f'''SELECT |
|
|
|
qd.* |
|
|
|
qd.* |
|
|
|
FROM |
|
|
|
FROM |
|
|
|
query_cache mq |
|
|
|
query_cache qc |
|
|
|
JOIN query_mapping map ON mq.query_id = map.query_id |
|
|
|
JOIN query_mapping map ON qc.query_id = map.query_id |
|
|
|
JOIN query_details qd ON qd.{id_column} = map.{id_column} |
|
|
|
JOIN query_details qd ON qd.detail_id = map.detail_id |
|
|
|
WHERE |
|
|
|
WHERE |
|
|
|
mq.query = ?''' |
|
|
|
qc.query = ?''' |
|
|
|
|
|
|
|
|
|
|
|
for row in cur.execute(query, (query_obj.parsed_query_str, )): |
|
|
|
for row in cur.execute(query, (query_obj.parsed_query_str, )): |
|
|
|
results.append(buildViewResult(row)) |
|
|
|
results.append(buildViewResult(row)) |
|
|
|
@ -371,17 +391,19 @@ def makeLocalQuery(query_obj): |
|
|
|
|
|
|
|
|
|
|
|
def buildViewResult(db_row): |
|
|
|
def buildViewResult(db_row): |
|
|
|
vr = view_result() |
|
|
|
vr = view_result() |
|
|
|
|
|
|
|
vr.detail_id = db_row['detail_id'] |
|
|
|
vr.media_type = db_row['media_type'] |
|
|
|
vr.media_type = db_row['media_type'] |
|
|
|
vr.id = db_row[getIDColumn(vr.media_type)] |
|
|
|
|
|
|
|
vr.title = db_row['title'] |
|
|
|
vr.title = db_row['title'] |
|
|
|
vr.overview = db_row['overview'] |
|
|
|
vr.overview = db_row['overview'] |
|
|
|
vr.release_date = db_row['release_date'] |
|
|
|
vr.release_date = db_row['release_date'] |
|
|
|
vr.original_language = db_row['original_language'] |
|
|
|
vr.original_language = db_row['original_language'] |
|
|
|
|
|
|
|
|
|
|
|
if vr.media_type == media_type.MOVIE: |
|
|
|
if vr.media_type == media_type.MOVIE: |
|
|
|
vr.tmdb_link = f'{TMDB_MOVIE_LINK_URL}{vr.id}' |
|
|
|
vr.movie_id = db_row['movie_id'] |
|
|
|
|
|
|
|
vr.tmdb_link = f'{TMDB_MOVIE_LINK_URL}{vr.movie_id}' |
|
|
|
elif vr.media_type == media_type.TV_SHOW: |
|
|
|
elif vr.media_type == media_type.TV_SHOW: |
|
|
|
vr.tmdb_link = f'{TMDB_TV_LINK_URL}{vr.id}' |
|
|
|
vr.tv_id = db_row['tv_id'] |
|
|
|
|
|
|
|
vr.tmdb_link = f'{TMDB_TV_LINK_URL}{vr.tv_id}' |
|
|
|
|
|
|
|
|
|
|
|
if db_row['poster_path'] != None: |
|
|
|
if db_row['poster_path'] != None: |
|
|
|
vr.poster_path = db_row['poster_path'] |
|
|
|
vr.poster_path = db_row['poster_path'] |
|
|
|
@ -508,8 +530,8 @@ def storeTMDBQueryResults(query_obj, result_list): |
|
|
|
(r.id, r.media_type, r.title, r.overview, r.release_date, r.original_language, r.poster_path) |
|
|
|
(r.id, r.media_type, r.title, r.overview, r.release_date, r.original_language, r.poster_path) |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
cur.execute(f'INSERT INTO query_mapping(query_id, {id_column}, media_type)' |
|
|
|
cur.execute(f'INSERT INTO query_mapping(query_id, detail_id)' |
|
|
|
+ ' VALUES (?,?,?)', (query_id, r.id, r.media_type) |
|
|
|
+ ' VALUES (?,?)', (query_id, cur.lastrowid) |
|
|
|
) |
|
|
|
) |
|
|
|
except DatabaseError as e: |
|
|
|
except DatabaseError as e: |
|
|
|
query_obj.errors.append(f'database error \'{e}\'') |
|
|
|
query_obj.errors.append(f'database error \'{e}\'') |
|
|
|
|