From 3564c19838b0d7b5d1f608fe248296d829e0f955 Mon Sep 17 00:00:00 2001 From: Christiankoo Date: Tue, 3 Nov 2020 22:00:38 +0100 Subject: [PATCH] Background process for importing data --- app/routes.py | 55 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/app/routes.py b/app/routes.py index 7dc24a0..13c639b 100644 --- a/app/routes.py +++ b/app/routes.py @@ -7,6 +7,7 @@ import random import re import time import urllib +from multiprocessing import Process from concurrent.futures import as_completed import bleach @@ -30,6 +31,7 @@ from app.models import User, twitterPost, ytPost, Post, youtubeFollow, twitterFo from youtube import comments, utils, channel as ytch, search as yts from youtube import watch as ytwatch from youtube import video as ytvid + ######################################### ######################################### @@ -84,10 +86,10 @@ def twitter(page=0): c = len(followingList) for user in followingList: if c != 0: - nitter_feed_link = nitter_feed_link+"{},".format(user.username) - c = c-1 + nitter_feed_link = nitter_feed_link + "{},".format(user.username) + c = c - 1 else: - nitter_feed_link = nitter_feed_link+user.username + nitter_feed_link = nitter_feed_link + user.username cache_file = glob.glob("app/cache/{}_*".format(current_user.username)) if (len(cache_file) > 0): @@ -426,7 +428,7 @@ def channel(id): if config['isInstance']: hostName = urllib.parse.urlparse(video['thumbnail'][1:]).netloc video['thumbnail'] = video['thumbnail'].replace("https://{}".format(hostName), "")[1:].replace("hqdefault", - "mqdefault") + "&host=" + hostName + "mqdefault") + "&host=" + hostName else: video['thumbnail'] = video['thumbnail'].replace('/', '~') @@ -443,7 +445,8 @@ def channel(id): prev_page = "/channel/{q}?s={s}&p={p}".format(q=id, s=sort, p=int(page) - 1) return render_template('channel.html', form=form, btform=button_form, data=data, - restricted=config['restrictPublicUsage'], config=config, next_page=next_page, prev_page=prev_page) + restricted=config['restrictPublicUsage'], config=config, next_page=next_page, + prev_page=prev_page) def get_best_urls(urls): @@ -467,24 +470,27 @@ def get_live_urls(urls): best_urls.append(url) return best_urls + @app.route('/watch', methods=['GET']) @login_required def watch(): id = request.args.get('v', None) info = ytvid.get_info(id) - + if info['error'] == False: for format in info['formats']: hostName = urllib.parse.urlparse(format['url']).netloc format['url'] = format['url'].replace("https://{}".format(hostName), "") + "&host=" + hostName - + for format in info['audio_formats']: hostName = urllib.parse.urlparse(format['url']).netloc format['url'] = format['url'].replace("https://{}".format(hostName), "") + "&host=" + hostName # Markup description try: - info['description'] = Markup(bleach.linkify(info['description'].replace("\n", "
"))).replace('www.youtube.com', config['serverName']).replace('youtube.com', config['serverName']).replace("/join","") + info['description'] = Markup(bleach.linkify(info['description'].replace("\n", "
"))).replace( + 'www.youtube.com', config['serverName']).replace('youtube.com', config['serverName']).replace("/join", + "") except AttributeError or TypeError: print(info['description']) @@ -495,11 +501,11 @@ def watch(): if videocomments is not None: videocomments.sort(key=lambda x: x['likes'], reverse=True) else: - videocomments=False - + videocomments = False + return render_template("video.html", info=info, title=info['title'], config=config, - videocomments=videocomments) - + videocomments=videocomments) + return render_template("video.html", info=info, title='Scheduled Video', config=config) @@ -679,16 +685,25 @@ def importdata(): flash('No selected file') return redirect(request.referrer) else: - option = request.form['import_format'] - if option == 'yotter': - importYotterSubscriptions(file) - elif option == 'youtube': - importYoutubeSubscriptions(file) + importdataasync(file) return redirect(request.referrer) return redirect(request.referrer) +def importdataasync(file): + p = Process(target=importdataforprocess, args=(file,)) + p.start() + + +def importdataforprocess(file): + option = request.form['import_format'] + if option == 'yotter': + importYotterSubscriptions(file) + elif option == 'youtube': + importYoutubeSubscriptions(file) + + @app.route('/deleteme', methods=['GET', 'POST']) @login_required def deleteme(): @@ -759,7 +774,9 @@ def status(): filen = url_for('static', filename='img/open.png') caniregister = True - return render_template('status.html', title='STATUS', count=count, max=config['maxInstanceUsers'], file=filen, cani=caniregister) + return render_template('status.html', title='STATUS', count=count, max=config['maxInstanceUsers'], file=filen, + cani=caniregister) + @app.route('/error/') def error(errno): @@ -871,7 +888,7 @@ def getFeed(urls): newPost["twitterName"] = post.find('a', attrs={'class': 'fullname'}).text newPost["timeStamp"] = date_time_str newPost["date"] = post.find('span', attrs={'class': 'tweet-date'}).find('a').text - content=post.find('div', attrs={'class': 'tweet-content'}) + content = post.find('div', attrs={'class': 'tweet-content'}) newPost["content"] = Markup(str(content).replace("\n", "
")) if post.find('div', attrs={'class': 'retweet-header'}):