1
0
Fork 0
mirror of https://github.com/Lynnesbian/FediBooks/ synced 2024-11-25 16:48:58 +00:00

Compare commits

..

9 commits

Author SHA1 Message Date
001dbadf9e started work on docker stuff 2019-09-17 20:00:38 +10:00
c9dbc6fba4 Merge branch 'master' of https://github.com/Lynnesbian/FediBooks 2019-09-17 19:59:39 +10:00
a34cf43f75
Merge pull request #24 from Lynnesbian/dependabot/pip/beautifulsoup4-4.8.0
Bump beautifulsoup4 from 4.7.1 to 4.8.0
2019-09-17 19:59:25 +10:00
dependabot-preview[bot]
aebe495282
Bump beautifulsoup4 from 4.7.1 to 4.8.0
Bumps [beautifulsoup4](http://www.crummy.com/software/BeautifulSoup/bs4/) from 4.7.1 to 4.8.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-09-17 09:59:16 +00:00
03da5cb44f
Merge pull request #23 from Lynnesbian/dependabot/pip/markovify-0.7.2
Bump markovify from 0.7.1 to 0.7.2
2019-09-17 19:58:07 +10:00
dependabot-preview[bot]
4cddfdd50b
Bump markovify from 0.7.1 to 0.7.2
Bumps [markovify](https://github.com/jsvine/markovify) from 0.7.1 to 0.7.2.
- [Release notes](https://github.com/jsvine/markovify/releases)
- [Commits](https://github.com/jsvine/markovify/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-09-17 09:54:10 +00:00
421cc04e74 minor css change 2019-09-17 19:20:27 +10:00
e8c666c711 display bot icons! 2019-09-17 19:13:36 +10:00
f46e954f5a update cached icons periodically 2019-09-17 19:06:40 +10:00
8 changed files with 67 additions and 7 deletions

6
.dockerignore Normal file
View file

@ -0,0 +1,6 @@
__pycache__
config.json
planning.txt
README.md
.git
.vscode

4
Dockerfile Normal file
View file

@ -0,0 +1,4 @@
FROM python:3.7-slim-buster
WORKDIR /fedibooks
COPY . fedibooks
RUN pip install -r requirements.txt

15
docker-compose.yml Normal file
View file

@ -0,0 +1,15 @@
version: '3'
services:
fedibooks:
build: .
links:
- db
ports:
5000:5000
db:
image: mariadb/server:10.4
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: fedibooks
MARIADB_USER: fedibooks
MARIADB_PASSWORD: fedibooks

View file

@ -1,6 +1,6 @@
Mastodon.py==1.4.6 Mastodon.py==1.4.6
markovify==0.7.1 markovify==0.7.2
beautifulsoup4==4.7.1 beautifulsoup4==4.8.0
requests==2.22.0 requests==2.22.0
Flask==1.1.1 Flask==1.1.1
flask-mysqldb==0.2.0 flask-mysqldb==0.2.0

View file

@ -1,11 +1,35 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import MySQLdb import MySQLdb
from mastodon import Mastodon
from multiprocessing import Pool from multiprocessing import Pool
import json import json
import functions import functions
cfg = json.load(open('config.json')) cfg = json.load(open('config.json'))
def update_icon(bot):
db = MySQLdb.connect(
host = cfg['db_host'],
user=cfg['db_user'],
passwd=cfg['db_pass'],
db=cfg['db_name'],
use_unicode=True,
charset="utf8mb4"
)
print("Updating cached icon for {}".format(bot['handle']))
client = Mastodon(
client_id = bot['client_id'],
client_secret = bot['client_secret'],
access_token = bot['secret'],
api_base_url = "https://{}".format(bot['handle'].split("@")[2])
)
avatar = client.account_verify_credentials()['avatar']
c = db.cursor()
c.execute("UPDATE bots SET icon = %s, icon_update_time = CURRENT_TIMESTAMP() WHERE handle = %s", (avatar, bot['handle']))
db.commit()
print("Establishing DB connection") print("Establishing DB connection")
db = MySQLdb.connect( db = MySQLdb.connect(
host = cfg['db_host'], host = cfg['db_host'],
@ -23,12 +47,23 @@ cursor.execute("DELETE FROM fedi_accounts WHERE handle NOT IN (SELECT fedi_id FR
db.commit() db.commit()
print("Generating posts") print("Generating posts")
cursor.execute("SELECT handle FROM bots WHERE enabled = TRUE AND TIMESTAMPDIFF(MINUTE, last_post, CURRENT_TIMESTAMP()) > post_frequency") cursor.execute("SELECT handle FROM bots WHERE enabled = TRUE AND TIMESTAMPDIFF(MINUTE, last_post, CURRENT_TIMESTAMP()) >= post_frequency")
bots = cursor.fetchall() bots = cursor.fetchall()
with Pool(cfg['service_threads']) as p: with Pool(cfg['service_threads']) as p:
p.map(functions.make_post, bots) p.map(functions.make_post, bots)
#TODO: other cron tasks should be done here, like updating profile pictures print("Updating cached icons")
dc = db.cursor(MySQLdb.cursors.DictCursor)
dc.execute("""
SELECT handle, instance_type, client_id, client_secret, secret
FROM bots
INNER JOIN credentials
ON bots.credentials_id = credentials.id
WHERE TIMESTAMPDIFF(HOUR, icon_update_time, CURRENT_TIMESTAMP()) > 2""")
bots = dc.fetchall()
with Pool(cfg['service_threads']) as p:
p.map(update_icon, bots)
db.commit() db.commit()

View file

@ -75,7 +75,7 @@ body {
} }
.panel-text { .panel-text {
flex-grow: 1; flex-grow: 1;
margin: 0 0 10px 10px; margin: 0 0 10px 15px;
} }
.panel-name { .panel-name {
font-size: 1.8em; font-size: 1.8em;

View file

@ -19,7 +19,7 @@
<div class="container" style="min-height: 300px;"> <div class="container" style="min-height: 300px;">
{% for bot in bots %} {% for bot in bots %}
<div class="row light"> <div class="row light">
<div class="panel-icon {{ "online" if bot['enabled'] else "offline"}}"></div> <div class="panel-icon {{ "online" if bot['enabled'] else "offline"}}" style="{{ "background-image: url('" + bot['icon'] + "')" if bot['icon'] else "" }}"></div>
<div class="panel-text"> <div class="panel-text">
{% set handle_list = bot['handle'].split('@') %} {% set handle_list = bot['handle'].split('@') %}
<div class="panel-name">@{{ handle_list[1] }}<span class="subtle tiny">@{{ handle_list[2] }}</span></div> <div class="panel-name">@{{ handle_list[1] }}<span class="subtle tiny">@{{ handle_list[2] }}</span></div>

View file

@ -44,7 +44,7 @@ def home():
c.execute("SELECT COUNT(*) FROM `bots` WHERE user_id = %s AND enabled = TRUE", (session['user_id'],)) c.execute("SELECT COUNT(*) FROM `bots` WHERE user_id = %s AND enabled = TRUE", (session['user_id'],))
active_count = c.fetchone()[0] active_count = c.fetchone()[0]
dc = mysql.connection.cursor(MySQLdb.cursors.DictCursor) dc = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
dc.execute("SELECT `handle`, `enabled`, `last_post`, `post_frequency` FROM `bots` WHERE user_id = %s", (session['user_id'],)) dc.execute("SELECT `handle`, `enabled`, `last_post`, `post_frequency`, `icon` FROM `bots` WHERE user_id = %s", (session['user_id'],))
bots = dc.fetchall() bots = dc.fetchall()
dc.close() dc.close()