From 614db2964d4d0e3a857e17dde57169c5da179b45 Mon Sep 17 00:00:00 2001 From: codl Date: Sun, 17 Sep 2017 15:12:46 +0200 Subject: [PATCH] update mastodon instance score based on active accounts this is far more interesting than updating every time someone logs in, since users don't have a reason to log in very often --- model.py | 4 ++-- routes/__init__.py | 4 ---- tasks.py | 39 +++++++++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/model.py b/model.py index 28fd8a4..20dcb41 100644 --- a/model.py +++ b/model.py @@ -304,5 +304,5 @@ class MastodonInstance(db.Model): instance = db.Column(db.String, primary_key=True) popularity = db.Column(db.Float, server_default='10', nullable=False) - def bump(self): - self.popularity = (self.popularity or 10) + 1 + def bump(self, value=1): + self.popularity = (self.popularity or 10) + value diff --git a/routes/__init__.py b/routes/__init__.py index d150074..5ee8e15 100644 --- a/routes/__init__.py +++ b/routes/__init__.py @@ -266,10 +266,6 @@ def mastodon_login_step2(instance_url): session = login(account.id) - instance = MastodonInstance(instance=instance_url) - instance = db.session.merge(instance) - instance.bump() - db.session.commit() g.viewer = session diff --git a/tasks.py b/tasks.py index 5147141..51bd722 100644 --- a/tasks.py +++ b/tasks.py @@ -234,16 +234,6 @@ def periodic_cleanup(): you have restored access and you can now re-enable Forget if you wish. """.format(service=account.service.capitalize()) - # normalise mastodon instance popularity scores - biggest_instance = ( - MastodonInstance.query - .order_by(db.desc(MastodonInstance.popularity)).first()) - if biggest_instance.popularity > 40: - MastodonInstance.query.update({ - MastodonInstance.popularity: - MastodonInstance.popularity * 40 / biggest_instance.popularity - }) - db.session.commit() @@ -288,11 +278,40 @@ def refresh_account_with_longest_time_since_refresh(): refresh_account(acc.id) +@app.task +def update_mastodon_instances_popularity(): + # bump score for each active account + for acct in ( + Account.query + .filter(Account.policy_enabled) + .filter(~Account.dormant) + .filter(Account.id.like('mastodon:%'))): + instance = MastodonInstance.query.get(acct.mastodon_instance) + if not instance: + instance = MastodonInstance(instance=acct.mastodon_instance, + popularity=10) + db.session.add(instance) + print('bamp {}'.format(instance.instance)) + instance.bump(0.01) + db.session.commit() + + # normalise scores + biggest_instance = ( + MastodonInstance.query + .order_by(db.desc(MastodonInstance.popularity)).first()) + if biggest_instance.popularity > 40: + MastodonInstance.query.update({ + MastodonInstance.popularity: + MastodonInstance.popularity * 40 / biggest_instance.popularity + }) + + app.add_periodic_task(120, periodic_cleanup) app.add_periodic_task(40, queue_fetch_for_most_stale_accounts) app.add_periodic_task(17, queue_deletes) app.add_periodic_task(60, refresh_account_with_oldest_post) app.add_periodic_task(180, refresh_account_with_longest_time_since_refresh) +app.add_periodic_task(60, update_mastodon_instances_popularity) if __name__ == '__main__': app.worker_main()