Commit 74727405 authored by Julian Rother's avatar Julian Rother
Browse files

Moved {job,edit}_handler functions back into the corresponding modules

parent 4003c9b7
......@@ -210,3 +210,15 @@ def set_responsible(course_id, user_id, value):
modify('DELETE FROM responsible WHERE course_id = ? AND user_id = ?', course_id, user_id);
return "OK", 200
edit_handlers = {}
def edit_handler(*tables, field=None):
def wrapper(func):
for table in tables:
if table not in edit_handlers:
edit_handlers[table] = {}
if field not in edit_handlers[table]:
edit_handlers[table][field] = []
edit_handlers[table][field].append(func)
return func
return wrapper
......@@ -2,7 +2,24 @@ from server import *
import traceback
import json
import random
from sorter import schedule_thumbnail
job_handlers = {}
def job_handler(*types, state='finished'):
def wrapper(func):
for jobtype in types:
if jobtype not in job_handlers:
job_handlers[jobtype] = {}
if state not in job_handlers[jobtype]:
job_handlers[jobtype][state] = []
job_handlers[jobtype][state].append(func)
return func
return wrapper
def schedule_job(jobtype, data=None, priority=0, queue="default"):
if not data:
data = {}
modify('INSERT INTO jobs (type, priority, queue, data, time_created) VALUES (?, ?, ?, ?, ?)',
jobtype, priority, queue, json.dumps(data, default=date_json_handler), datetime.now())
@app.route('/internal/jobs/overview')
@register_navbar('Jobs', iconlib='fa', icon='suitcase')
......@@ -42,19 +59,14 @@ def jobs_overview():
def jobs_action(action, jobid=None):
if action == 'clear_failed':
query('UPDATE jobs SET state="deleted" WHERE state = "failed" AND (id = ? OR ? IS NULL)', jobid, jobid)
if action == 'retry_failed':
elif action == 'retry_failed':
query('UPDATE jobs SET state="ready" WHERE state = "failed" AND (id = ? OR ? IS NULL)', jobid, jobid)
if action == 'copy':
elif action == 'copy':
if jobid:
query("INSERT INTO jobs SELECT NULL, type, priority, queue, 'ready', '', '' , ?, '', NULL, data, '{}' FROM jobs where ID=?;", datetime.now(), jobid)
if action == 'delete':
elif action == 'delete':
if jobid:
query('UPDATE jobs SET state="deleted" WHERE id = ?', jobid)
if action == 'add':
jobtype = request.values.get('type', None)
if jobtype == 'thumbnail':
lectureid = int(request.values.get('lecture_id', -1))
schedule_thumbnail(lectureid)
return redirect(request.values.get('ref', url_for('jobs_overview')))
def jobs_api_token_required(func):
......
......@@ -3,9 +3,8 @@ from server import *
@sched_func(30)
def livestream_thumbnail():
livestreams = query('SELECT streams.lecture_id, streams.handle AS livehandle FROM streams WHERE streams.active')
for v in genlive(livestreams):
sorter.schedule_thumbnail(v['lecture_id'], v['path'])
schedule_job('thumbnail', {'lectureid': v['lecture_id'], 'path': v['path']})
@app.route('/internal/streaming/legacy_auth', methods=['GET', 'POST'])
def streamauth():
......
......@@ -483,47 +483,17 @@ def dbstatus():
clusters[cluster].append(host)
return render_template('dbstatus.html', clusters=clusters, statuses=status, vars=variables), 200
job_handlers = {}
def job_handler(*types, state='finished'):
def wrapper(func):
for jobtype in types:
if jobtype not in job_handlers:
job_handlers[jobtype] = {}
if state not in job_handlers[jobtype]:
job_handlers[jobtype][state] = []
job_handlers[jobtype][state].append(func)
return func
return wrapper
def date_json_handler(obj):
return obj.isoformat() if hasattr(obj, 'isoformat') else obj
def schedule_job(jobtype, data=None, priority=0, queue="default"):
if not data:
data = {}
modify('INSERT INTO jobs (type, priority, queue, data, time_created) VALUES (?, ?, ?, ?, ?)',
jobtype, priority, queue, json.dumps(data, default=date_json_handler), datetime.now())
edit_handlers = {}
def edit_handler(*tables, field=None):
def wrapper(func):
for table in tables:
if table not in edit_handlers:
edit_handlers[table] = {}
if field not in edit_handlers[table]:
edit_handlers[table][field] = []
edit_handlers[table][field].append(func)
return func
return wrapper
import edit
from jobs import job_handler, schedule_job
from edit import edit_handler
import feeds
import importer
import stats
if 'ICAL_URL' in config:
import meetings
import l2pauth
import jobs
import sorter
import encoding
import timetable
......
......@@ -49,21 +49,22 @@ def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1):
schedule_thumbnail(lectureid)
schedule_job('probe', {'path': dbfilepath, 'lecture_id': lectureid, 'video_id': video_id, 'import-chapters': True})
def schedule_thumbnail(lectureid, filePath=None):
@app.route('/internal/jobs/add/thumbnail', methods=['GET', 'POST'])
@mod_required
@handle_errors('jobs_overview', 'Zu dieser Veranstaltung existieren keine Videos!', 404, IndexError)
def schedule_thumbnail(lectureid=None):
ret = None
if not lectureid:
lectureid = request.values['lectureid']
ret = redirect(request.values.get('ref', url_for('jobs_overview')))
videos = query('''
SELECT videos.path
FROM videos
JOIN formats ON (videos.video_format = formats.id)
WHERE videos.lecture_id = ?
ORDER BY formats.prio DESC''', lectureid )
if videos:
path = videos[0]['path']
elif filePath:
path = filePath
else:
return
data = '{"lectureid": "'+str(lectureid)+'", "path": "'+path+'"}'
query('INSERT INTO jobs (type, data, time_created) VALUES ("thumbnail", ?, ?)', data, datetime.now());
ORDER BY formats.prio DESC''', lectureid)
schedule_job('thumbnail', {'lectureid': lectureid, 'path': videos[0]['path']})
return ret
@job_handler('transcode')
def insert_transcoded_video(jobid, jobtype, data, state, status):
......
from server import *
import json
from jobs import date_json_handler
from hashlib import md5
from datetime import datetime
......
......@@ -17,10 +17,9 @@
<div class="tab-content" style="margin-top: 10px;">
<div role="tabpanel" class="tab-pane active" id="add_thumbnail">
<form class="form-inline" action="{{url_for('jobs_action', action='add', ref=request.url)}}" method="post">
<form class="form-inline" action="{{url_for('schedule_thumbnail', ref=request.url)}}" method="post">
<div class="form-group">
<input type="hidden" name="type" value="thumbnail">
<input type="text" class="form-control" id="thumbnail_lectureid" placeholder="Lecture ID" name="lecture_id">
<input type="text" class="form-control" placeholder="Lecture ID" name="lectureid">
<button type="submit" class="btn btn-primary">Hinzufügen</button>
</div>
</form>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment