Skip to content
Snippets Groups Projects
Select Git revision
0 results

.git-blame-ignore-revs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    feeds.py NaN GiB
    from server import *
    
    def gen_atomid(s):
    	return 'urn:md5:'+hashlib.md5(s.encode('utf-8')).hexdigest().upper()
    
    def fixdate(d):
    	if not isinstance(d, datetime):
    		return datetime(MINYEAR, 1, 1)
    	return d
    
    @app.route('/feed')
    @app.route('/<handle>/feed')
    @handle_errors(None, 'Diese Veranstaltung existiert nicht!', 400, IndexError)
    def feed(handle=None):
    	id = None
    	course = {'id': None, 'title': 'Neueste Videos', 'time_created': None, 'time_updated': None}
    	course['atomid'] = gen_atomid('FROM videos SELECT *')
    	if handle:
    		course = query('SELECT * FROM courses WHERE handle = ? AND visible', handle)[0]
    		course['atomid'] = gen_atomid('Video AG, courses['+str(course['id'])+']: '+course['handle'])
    		id = course['id']
    	entries = query('''
    			SELECT lectures.*, "video" AS sep, videos.*, formats.description AS format_description, formats.prio, "course" AS sep, courses.*
    				FROM lectures
    				JOIN courses ON (courses.id = lectures.course_id)
    				JOIN videos ON (lectures.id = videos.lecture_id)
    				JOIN formats ON (formats.id = videos.video_format)
    				WHERE ((? IS NULL AND courses.listed) OR course_id = ?) AND courses.visible AND lectures.visible AND videos.visible
    				ORDER BY videos.time_created DESC, prio ASC
    				LIMIT 100''',
    			course['id'], course['id'])
    	updated = max(course['time_updated'], course['time_created'], key=fixdate)
    	for entry in entries:
    		entry['updated'] = max(entry['video']['time_created'], entry['video']['time_updated'], entry['time_created'], entry['time_updated'], key=fixdate)
    		if len(entry['video']['hash']) != 32:
    			entry['atomid'] = gen_atomid('Video AG, videos['+str(entry['video']['id'])+']')
    		else:
    			entry['atomid'] = 'urn:md5:'+(entry['video']['hash'].upper())
    		updated = max(updated, entry['updated'], key=fixdate)
    	course['updated'] = updated
    	return Response(render_template('feed.atom', course=course, entries=entries), 200, {'Content-Type': 'application/atom+xml'})
    
    @app.route('/courses/feed')
    def courses_feed():
    	courses = query('SELECT * FROM courses WHERE visible AND listed ORDER BY time_created DESC LIMIT 100')
    	atomid = gen_atomid('Video AG, courses')
    	updated = None
    	for course in courses:
    		course['updated'] = max(course['time_created'], course['time_updated'], key=fixdate)
    		course['atomid'] = gen_atomid('Video AG, courses['+str(course['id'])+']: '+course['handle'])
    		updated = max(updated, course['updated'], key=fixdate)
    	return Response(render_template('courses_feed.atom', updated=updated, atomid=atomid, courses=courses), 200, {'Content-Type': 'application/atom+xml'})