rename lib to libforget
This commit is contained in:
parent
89e35786d0
commit
c135dc793e
13
app.py
13
app.py
|
@ -4,13 +4,13 @@ from sqlalchemy import MetaData, event
|
||||||
from sqlalchemy.engine import Engine
|
from sqlalchemy.engine import Engine
|
||||||
from flask_migrate import Migrate
|
from flask_migrate import Migrate
|
||||||
import version
|
import version
|
||||||
from lib.cachebust import cachebust
|
from libforget.cachebust import cachebust
|
||||||
from flask_limiter import Limiter
|
from flask_limiter import Limiter
|
||||||
from lib.auth import get_viewer
|
from libforget.auth import get_viewer
|
||||||
import os
|
import os
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import lib.brotli
|
import libforget.brotli
|
||||||
import lib.img_proxy
|
import libforget.img_proxy
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@ -113,6 +113,7 @@ def install_security_headers(resp):
|
||||||
|
|
||||||
mimetypes.add_type('image/webp', '.webp')
|
mimetypes.add_type('image/webp', '.webp')
|
||||||
|
|
||||||
lib.brotli.brotli(app)
|
libforget.brotli.brotli(app)
|
||||||
|
|
||||||
imgproxy = lib.img_proxy.ImgProxyCache(redis_uri=app.config.get('REDIS_URI'))
|
imgproxy = (
|
||||||
|
libforget.img_proxy.ImgProxyCache(redis_uri=app.config.get('REDIS_URI')))
|
||||||
|
|
|
@ -6,7 +6,7 @@ from requests import head
|
||||||
from app import db, sentry
|
from app import db, sentry
|
||||||
from math import inf
|
from math import inf
|
||||||
import iso8601
|
import iso8601
|
||||||
from lib.exceptions import TemporaryError
|
from libforget.exceptions import TemporaryError
|
||||||
|
|
||||||
|
|
||||||
def get_or_create_app(instance_url, callback, website):
|
def get_or_create_app(instance_url, callback, website):
|
|
@ -7,7 +7,7 @@ from datetime import datetime
|
||||||
import locale
|
import locale
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from lib.exceptions import PermanentError, TemporaryError
|
from libforget.exceptions import PermanentError, TemporaryError
|
||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
|
|
||||||
|
|
2
model.py
2
model.py
|
@ -2,7 +2,7 @@ from datetime import timedelta, datetime, timezone
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
import secrets
|
import secrets
|
||||||
from lib.interval import decompose_interval
|
from libforget.interval import decompose_interval
|
||||||
|
|
||||||
|
|
||||||
class TimestampMixin(object):
|
class TimestampMixin(object):
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from flask import render_template, url_for, redirect, request, g,\
|
from flask import render_template, url_for, redirect, request, g,\
|
||||||
make_response
|
make_response
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
import lib.twitter
|
import libforget.twitter
|
||||||
import lib.mastodon
|
import libforget.mastodon
|
||||||
from lib.auth import require_auth, csrf,\
|
from libforget.auth import require_auth, csrf,\
|
||||||
get_viewer
|
get_viewer
|
||||||
from model import Session, TwitterArchive, MastodonApp, MastodonInstance
|
from model import Session, TwitterArchive, MastodonApp, MastodonInstance
|
||||||
from app import app, db, sentry, limiter, imgproxy
|
from app import app, db, sentry, limiter, imgproxy
|
||||||
|
@ -11,9 +11,9 @@ import tasks
|
||||||
from zipfile import BadZipFile
|
from zipfile import BadZipFile
|
||||||
from twitter import TwitterError
|
from twitter import TwitterError
|
||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
import lib.version
|
import libforget.version
|
||||||
import lib.settings
|
import libforget.settings
|
||||||
import lib.json
|
import libforget.json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,10 +23,10 @@ def index():
|
||||||
if viewer:
|
if viewer:
|
||||||
return render_template(
|
return render_template(
|
||||||
'logged_in.html',
|
'logged_in.html',
|
||||||
scales=lib.interval.SCALES,
|
scales=libforget.interval.SCALES,
|
||||||
tweet_archive_failed='tweet_archive_failed' in request.args,
|
tweet_archive_failed='tweet_archive_failed' in request.args,
|
||||||
settings_error='settings_error' in request.args,
|
settings_error='settings_error' in request.args,
|
||||||
viewer_json=lib.json.account(viewer),
|
viewer_json=libforget.json.account(viewer),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return redirect(url_for('about'))
|
return redirect(url_for('about'))
|
||||||
|
@ -50,7 +50,7 @@ def about():
|
||||||
@limiter.limit('10/minute')
|
@limiter.limit('10/minute')
|
||||||
def twitter_login_step1():
|
def twitter_login_step1():
|
||||||
try:
|
try:
|
||||||
return redirect(lib.twitter.get_login_url(
|
return redirect(libforget.twitter.get_login_url(
|
||||||
callback=url_for('twitter_login_step2', _external=True),
|
callback=url_for('twitter_login_step2', _external=True),
|
||||||
**app.config.get_namespace("TWITTER_")
|
**app.config.get_namespace("TWITTER_")
|
||||||
))
|
))
|
||||||
|
@ -80,7 +80,7 @@ def twitter_login_step2():
|
||||||
try:
|
try:
|
||||||
oauth_token = request.args['oauth_token']
|
oauth_token = request.args['oauth_token']
|
||||||
oauth_verifier = request.args['oauth_verifier']
|
oauth_verifier = request.args['oauth_verifier']
|
||||||
token = lib.twitter.receive_verifier(
|
token = libforget.twitter.receive_verifier(
|
||||||
oauth_token, oauth_verifier,
|
oauth_token, oauth_verifier,
|
||||||
**app.config.get_namespace("TWITTER_"))
|
**app.config.get_namespace("TWITTER_"))
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ def upload_tweet_archive():
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
files = lib.twitter.chunk_twitter_archive(ta.id)
|
files = libforget.twitter.chunk_twitter_archive(ta.id)
|
||||||
|
|
||||||
ta.chunks = len(files)
|
ta.chunks = len(files)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -136,7 +136,7 @@ def upload_tweet_archive():
|
||||||
def settings():
|
def settings():
|
||||||
viewer = get_viewer()
|
viewer = get_viewer()
|
||||||
try:
|
try:
|
||||||
for attr in lib.settings.attrs:
|
for attr in libforget.settings.attrs:
|
||||||
if attr in request.form:
|
if attr in request.form:
|
||||||
setattr(viewer, attr, request.form[attr])
|
setattr(viewer, attr, request.form[attr])
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -235,7 +235,7 @@ def mastodon_login_step1(instance=None):
|
||||||
instance_url=instance_url, _external=True)
|
instance_url=instance_url, _external=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
app = lib.mastodon.get_or_create_app(
|
app = libforget.mastodon.get_or_create_app(
|
||||||
instance_url,
|
instance_url,
|
||||||
callback,
|
callback,
|
||||||
url_for('index', _external=True))
|
url_for('index', _external=True))
|
||||||
|
@ -243,7 +243,7 @@ def mastodon_login_step1(instance=None):
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return redirect(lib.mastodon.login_url(app, callback))
|
return redirect(libforget.mastodon.login_url(app, callback))
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
if sentry:
|
if sentry:
|
||||||
|
@ -261,7 +261,7 @@ def mastodon_login_step2(instance_url):
|
||||||
callback = url_for('mastodon_login_step2',
|
callback = url_for('mastodon_login_step2',
|
||||||
instance_url=instance_url, _external=True)
|
instance_url=instance_url, _external=True)
|
||||||
|
|
||||||
token = lib.mastodon.receive_code(code, app, callback)
|
token = libforget.mastodon.receive_code(code, app, callback)
|
||||||
account = token.account
|
account = token.account
|
||||||
|
|
||||||
session = login(account.id)
|
session = login(account.id)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from app import app, db
|
from app import app, db
|
||||||
from lib.auth import require_auth_api, get_viewer
|
from libforget.auth import require_auth_api, get_viewer
|
||||||
from flask import jsonify, redirect, make_response, request
|
from flask import jsonify, redirect, make_response, request
|
||||||
from model import Account
|
from model import Account
|
||||||
import lib.settings
|
import libforget.settings
|
||||||
import lib.json
|
import libforget.json
|
||||||
|
|
||||||
|
|
||||||
@app.route('/api/settings', methods=('PUT',))
|
@app.route('/api/settings', methods=('PUT',))
|
||||||
|
@ -12,7 +12,7 @@ def api_settings_put():
|
||||||
viewer = get_viewer()
|
viewer = get_viewer()
|
||||||
data = request.json
|
data = request.json
|
||||||
updated = dict()
|
updated = dict()
|
||||||
for key in lib.settings.attrs:
|
for key in libforget.settings.attrs:
|
||||||
if key in data:
|
if key in data:
|
||||||
setattr(viewer, key, data[key])
|
setattr(viewer, key, data[key])
|
||||||
updated[key] = data[key]
|
updated[key] = data[key]
|
||||||
|
@ -24,7 +24,7 @@ def api_settings_put():
|
||||||
@require_auth_api
|
@require_auth_api
|
||||||
def api_viewer():
|
def api_viewer():
|
||||||
viewer = get_viewer()
|
viewer = get_viewer()
|
||||||
resp = make_response(lib.json.account(viewer))
|
resp = make_response(libforget.json.account(viewer))
|
||||||
resp.headers.set('content-type', 'application/json')
|
resp.headers.set('content-type', 'application/json')
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
from app import app, db, sentry
|
from app import app, db, sentry
|
||||||
from flask import g, render_template, make_response, redirect
|
from flask import g, render_template, make_response, redirect
|
||||||
import version
|
import version
|
||||||
import lib.version
|
import libforget.version
|
||||||
from lib.auth import get_viewer_session, set_session_cookie
|
from libforget.auth import get_viewer_session, set_session_cookie
|
||||||
|
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
|
@ -20,7 +20,7 @@ def load_viewer():
|
||||||
def inject_version():
|
def inject_version():
|
||||||
return dict(
|
return dict(
|
||||||
version=version.version,
|
version=version.version,
|
||||||
repo_url=lib.version.url_for_version(version.version),
|
repo_url=libforget.version.url_for_version(version.version),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
20
tasks.py
20
tasks.py
|
@ -3,8 +3,8 @@ from app import app as flaskapp
|
||||||
from app import db
|
from app import db
|
||||||
from model import Session, Account, TwitterArchive, Post, OAuthToken,\
|
from model import Session, Account, TwitterArchive, Post, OAuthToken,\
|
||||||
MastodonInstance
|
MastodonInstance
|
||||||
import lib.twitter
|
import libforget.twitter
|
||||||
import lib.mastodon
|
import libforget.mastodon
|
||||||
from datetime import timedelta, datetime, timezone
|
from datetime import timedelta, datetime, timezone
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from io import BytesIO, TextIOWrapper
|
from io import BytesIO, TextIOWrapper
|
||||||
|
@ -12,7 +12,7 @@ import json
|
||||||
from kombu import Queue
|
from kombu import Queue
|
||||||
import random
|
import random
|
||||||
import version
|
import version
|
||||||
from lib.exceptions import PermanentError, TemporaryError
|
from libforget.exceptions import PermanentError, TemporaryError
|
||||||
import redis
|
import redis
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import pickle
|
import pickle
|
||||||
|
@ -92,9 +92,9 @@ def fetch_acc(id_, cursor=None):
|
||||||
try:
|
try:
|
||||||
action = noop
|
action = noop
|
||||||
if(acc.service == 'twitter'):
|
if(acc.service == 'twitter'):
|
||||||
action = lib.twitter.fetch_acc
|
action = libforget.twitter.fetch_acc
|
||||||
elif(acc.service == 'mastodon'):
|
elif(acc.service == 'mastodon'):
|
||||||
action = lib.mastodon.fetch_acc
|
action = libforget.mastodon.fetch_acc
|
||||||
cursor = action(acc, cursor)
|
cursor = action(acc, cursor)
|
||||||
if cursor:
|
if cursor:
|
||||||
fetch_acc.si(id_, cursor).apply_async()
|
fetch_acc.si(id_, cursor).apply_async()
|
||||||
|
@ -124,7 +124,7 @@ def import_twitter_archive_month(archive_id, month_path):
|
||||||
tweets = json.load(f)
|
tweets = json.load(f)
|
||||||
|
|
||||||
for tweet in tweets:
|
for tweet in tweets:
|
||||||
post = lib.twitter.post_from_api_tweet_object(tweet)
|
post = libforget.twitter.post_from_api_tweet_object(tweet)
|
||||||
existing_post = db.session.query(Post).get(post.id)
|
existing_post = db.session.query(Post).get(post.id)
|
||||||
|
|
||||||
if post.author_id != ta.account_id or\
|
if post.author_id != ta.account_id or\
|
||||||
|
@ -166,7 +166,7 @@ def delete_from_account(account_id):
|
||||||
|
|
||||||
action = noop
|
action = noop
|
||||||
if account.service == 'twitter':
|
if account.service == 'twitter':
|
||||||
action = lib.twitter.delete
|
action = libforget.twitter.delete
|
||||||
posts = refresh_posts(posts)
|
posts = refresh_posts(posts)
|
||||||
if posts:
|
if posts:
|
||||||
eligible = list(( # nosec
|
eligible = list(( # nosec
|
||||||
|
@ -177,7 +177,7 @@ def delete_from_account(account_id):
|
||||||
if eligible:
|
if eligible:
|
||||||
to_delete = random.choice(eligible)
|
to_delete = random.choice(eligible)
|
||||||
elif account.service == 'mastodon':
|
elif account.service == 'mastodon':
|
||||||
action = lib.mastodon.delete
|
action = libforget.mastodon.delete
|
||||||
for post in posts:
|
for post in posts:
|
||||||
refreshed = refresh_posts((post,))
|
refreshed = refresh_posts((post,))
|
||||||
if refreshed and \
|
if refreshed and \
|
||||||
|
@ -203,9 +203,9 @@ def refresh_posts(posts):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if posts[0].service == 'twitter':
|
if posts[0].service == 'twitter':
|
||||||
return lib.twitter.refresh_posts(posts)
|
return libforget.twitter.refresh_posts(posts)
|
||||||
elif posts[0].service == 'mastodon':
|
elif posts[0].service == 'mastodon':
|
||||||
return lib.mastodon.refresh_posts(posts)
|
return libforget.mastodon.refresh_posts(posts)
|
||||||
|
|
||||||
|
|
||||||
@app.task()
|
@app.task()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
import lib.brotli
|
import libforget.brotli
|
||||||
|
|
||||||
|
|
||||||
BEE_SCRIPT = bytes("According to all known laws of aviation,", 'UTF-8')
|
BEE_SCRIPT = bytes("According to all known laws of aviation,", 'UTF-8')
|
||||||
|
@ -22,7 +22,7 @@ def app(redisdb):
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def br_app(app):
|
def br_app(app):
|
||||||
lib.brotli.brotli(app, timeout=TIMEOUT_TARGET)
|
libforget.brotli.brotli(app, timeout=TIMEOUT_TARGET)
|
||||||
return app
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ def test_brotli_dynamic_cache(br_client):
|
||||||
def test_brotli_dynamic_timeout(app):
|
def test_brotli_dynamic_timeout(app):
|
||||||
from secrets import token_urlsafe
|
from secrets import token_urlsafe
|
||||||
|
|
||||||
lib.brotli.brotli(app, timeout=0.01)
|
libforget.brotli.brotli(app, timeout=0.01)
|
||||||
|
|
||||||
@app.route('/hard_to_compress')
|
@app.route('/hard_to_compress')
|
||||||
def hard_to_compress():
|
def hard_to_compress():
|
||||||
|
@ -111,7 +111,7 @@ def test_brotli_dynamic_timeout(app):
|
||||||
def test_brotli_dynamic_expire(app):
|
def test_brotli_dynamic_expire(app):
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
lib.brotli.brotli(app, expire=0.1)
|
libforget.brotli.brotli(app, expire=0.1)
|
||||||
|
|
||||||
client = app.test_client()
|
client = app.test_client()
|
||||||
client.get(
|
client.get(
|
||||||
|
|
Loading…
Reference in New Issue