got the del topics to work

This commit is contained in:
Alan Roberts 2024-08-09 13:29:54 -04:00
parent e28ffb3d40
commit 00daa365a4
3 changed files with 146 additions and 62 deletions

View file

@ -9,7 +9,13 @@ from app import db
class AddTestCommunities(FlaskForm): class AddTestCommunities(FlaskForm):
communities_submit = SubmitField(_l('Populate Communities for Testing')) communities_submit = SubmitField(_l('Populate Communities'))
class AddTestTopics(FlaskForm): class AddTestTopics(FlaskForm):
topics_submit = SubmitField(_l('Populate Topics for Testing')) topics_submit = SubmitField(_l('Populate Topics'))
class DeleteTestCommunities(FlaskForm):
delete_communities_submit = SubmitField(_l('Delete Communities'))
class DeleteTestTopics(FlaskForm):
delete_topics_submit = SubmitField(_l('Delete Topics'))

View file

@ -1,27 +1,28 @@
from flask import request, flash, json, url_for, current_app, redirect, g, abort import random
from flask import request, flash, url_for, current_app, redirect, g
from flask_login import login_required, current_user from flask_login import login_required, current_user
from flask_babel import _ from flask_babel import _
from sqlalchemy import desc, or_, and_, text
from app import db, cache
from app.activitypub.signature import RsaKeys from app.activitypub.signature import RsaKeys
from app import db, celery, cache from app.admin.routes import unsubscribe_everyone_then_delete
from app.dev.forms import AddTestCommunities, AddTestTopics
from app.models import Site, User, Community, CommunityMember, Language, Topic
from app.utils import render_template, community_membership, moderating_communities, joined_communities, menu_topics, markdown_to_html
from app.dev import bp from app.dev import bp
import random from app.dev.forms import AddTestCommunities, AddTestTopics, DeleteTestCommunities, DeleteTestTopics
from app.models import Site, User, Community, CommunityMember, Language, Topic, utcnow
from app.utils import render_template, community_membership, moderating_communities, joined_communities, menu_topics, markdown_to_html
# use this to populate communities in the database # a page for handy dev tools
@bp.route('/dev/tools', methods=['GET', 'POST']) @bp.route('/dev/tools', methods=['GET', 'POST'])
@login_required @login_required
def tools(): def tools():
communities_form = AddTestCommunities() communities_form = AddTestCommunities()
topics_form = AddTestTopics() topics_form = AddTestTopics()
delete_communities_form = DeleteTestCommunities()
delete_topics_form = DeleteTestTopics()
# create 30 dev_ communities
if communities_form.communities_submit.data and communities_form.validate(): if communities_form.communities_submit.data and communities_form.validate():
# do a for loop for a range up to 30 or so
# build the community title from that and then submit it
# to the db
for n in range(30): for n in range(30):
# generate a keypair # generate a keypair
private_key, public_key = RsaKeys.generate_keypair() private_key, public_key = RsaKeys.generate_keypair()
@ -42,27 +43,26 @@ def tools():
ap_followers_url='https://' + current_app.config['SERVER_NAME'] + '/c/' + name.lower() + '/followers', ap_followers_url='https://' + current_app.config['SERVER_NAME'] + '/c/' + name.lower() + '/followers',
ap_domain=current_app.config['SERVER_NAME'], ap_domain=current_app.config['SERVER_NAME'],
subscriptions_count=1, instance_id=1, low_quality='memes' in name) subscriptions_count=1, instance_id=1, low_quality='memes' in name)
#
# add and commit to db # add and commit to db
db.session.add(community) db.session.add(community)
db.session.commit() db.session.commit()
#
# add community membership for current user # add community membership for current user
# add to db # add to db
membership = CommunityMember(user_id=current_user.id, community_id=community.id, is_moderator=True, membership = CommunityMember(user_id=current_user.id, community_id=community.id, is_moderator=True,
is_owner=True) is_owner=True)
db.session.add(membership) db.session.add(membership)
#
# add english as language choice # do the cache clearing bits
# commit to db
# community.languages.append(Language.query.filter(Language.name.in_('English')))
# db.session.commit()
#
# do the cache.dememoiz
cache.delete_memoized(community_membership, current_user, community) cache.delete_memoized(community_membership, current_user, community)
cache.delete_memoized(joined_communities, current_user.id) cache.delete_memoized(joined_communities, current_user.id)
cache.delete_memoized(moderating_communities, current_user.id) cache.delete_memoized(moderating_communities, current_user.id)
# redirect browser to communities list page
return redirect(url_for('main.list_communities')) return redirect(url_for('main.list_communities'))
# create 10 dev_ topics
elif topics_form.topics_submit.data and topics_form.validate(): elif topics_form.topics_submit.data and topics_form.validate():
# get the list of communities in the db # get the list of communities in the db
communities = Community.query.filter_by(banned=False) communities = Community.query.filter_by(banned=False)
@ -72,25 +72,20 @@ def tools():
for c in range(10): for c in range(10):
rand_communities.append(random.choice(communities.all())) rand_communities.append(random.choice(communities.all()))
# get those community_ids
# rand_community_ids = []
# for c in rand_communities:
# rand_community_ids.append(c.id)
# generate new topics # generate new topics
# for n in range(10): for n in range(10):
# # generate strings for name, machine_name, and default to 0 communities # generate strings for name, machine_name, and default to 0 communities
# loop_num = "{:02d}".format(n) loop_num = "{:02d}".format(n)
# name = "dev_Topic_" + loop_num name = "dev_Topic_" + loop_num
# machine_name = "dev-topic-" + loop_num machine_name = "dev-topic-" + loop_num
# num_communities = 0 num_communities = 0
# # make the topic # make the topic
# topic = Topic(name=name, machine_name=machine_name, num_communities=num_communities) topic = Topic(name=name, machine_name=machine_name, num_communities=num_communities)
# # add the new topic to the db # add the new topic to the db
# db.session.add(topic) db.session.add(topic)
# db.session.commit() db.session.commit()
# # refresh the topic menu # refresh the topic menu
# cache.delete_memoized(menu_topics) cache.delete_memoized(menu_topics)
# get the list of topics in the db # get the list of topics in the db
topics = Topic.query.filter_by() topics = Topic.query.filter_by()
@ -112,16 +107,77 @@ def tools():
# update the num_communities for the topic # update the num_communities for the topic
# save the db again # save the db again
for i in range(10): for i in range(10):
community = rand_communities[i] community = rand_communities[i]
community.topic_id = rand_topic_ids[i] community.topic_id = rand_topic_ids[i]
db.session.commit() db.session.commit()
community.topic.num_communities = community.topic.communities.count() community.topic.num_communities = community.topic.communities.count()
db.session.commit() db.session.commit()
# flash(_(f'rand_topic_ids: {rand_topic_ids}')) # redirect browser to topics list page
# return redirect(url_for('dev.tools'))
return redirect(url_for('main.list_topics')) return redirect(url_for('main.list_topics'))
# delete dev_ communities
elif delete_communities_form.delete_communities_submit.data and delete_communities_form.validate():
# get the list of local communities
communities = Community.query.filter_by(banned=False, local_only=True)
# sort for ones whose name field starts with "dev_"
dev_communities = []
for c in communities.all():
if c.name.startswith("dev_"):
dev_communities.append(c)
# loop through the list and:
# - ban the community
# - set its last active state
# - commit to db
# - call the unsubscribe and delete from admin.routes
for c in dev_communities:
c.banned = True
c.last_active = utcnow()
db.session.commit()
unsubscribe_everyone_then_delete(c.id)
# redirect browser to communities list page
flash(f'{len(dev_communities)} Dev Communities Deleted')
return redirect(url_for('main.list_communities'))
# delete dev_ topics
elif delete_topics_form.delete_topics_submit.data and delete_topics_form.validate():
# get the list of topics in the db
topics = Topic.query.filter_by()
# sort for the ones whose name field starts with "dev_"
dev_topics = []
for t in topics.all():
if t.name.startswith("dev_"):
dev_topics.append(t)
# loop through the topics
# if the topic has communities in it, set it aside and tell the dev
# else delete it
topics_with_communities = 0
deleted_topics = 0
for t in dev_topics:
topic = Topic.query.filter_by(id=t.id).first()
topic.num_communities = topic.communities.count()
if topic.num_communities == 0:
db.session.delete(topic)
db.session.commit()
else:
topics_with_communities += 1
if topics_with_communities > 0:
flash(_(f'{deleted_topics} Dev Topics Deleted. {topics_with_communities} Dev Topics remain as they still have communities'))
return redirect(url_for('main.list_topics'))
else:
flash(_(f'{deleted_topics} Dev Topics Deleted.'))
return redirect(url_for('main.list_topics'))
else: else:
return render_template('dev/tools.html', communities_form=communities_form, topics_form=topics_form) return render_template('dev/tools.html',
communities_form=communities_form,
topics_form=topics_form,
delete_communities_form=delete_communities_form,
delete_topics_form=delete_topics_form)

View file

@ -7,25 +7,47 @@
{% block app_content %} {% block app_content %}
<div class="row"> <div class="row">
<div class="col col-login mx-auto"> <div class="col col-login mx-auto">
<div class="card mt-5"> <div class="card mt-5">
<div class="card-body p-6"> <div class="card-body p-6">
<div class="card-title">{{ _('Add Communities to DB for Testing') }}</div> <div class="card-title">{{ _('Add Dev Communities') }}</div>
<div class="card-body"> <div class="card-body">
{{ render_form(communities_form) }} {{ render_form(communities_form) }}
</div>
</div>
</div>
</div>
<div class="col col-login mx-auto">
<div class="card mt-5">
<div class="card-body p-6">
<div class="card-title">{{ _('Add Topics to DB for Testing') }}</div>
<div class="card-body">
{{ render_form(topics_form) }}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="col col-login mx-auto">
<div class="card mt-5">
<div class="card-body p-6">
<div class="card-title">{{ _('Add Dev Topics') }}</div>
<div class="card-body">
{{ render_form(topics_form) }}
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col col-login mx-auto">
<div class="card mt-5">
<div class="card-body p-6">
<div class="card-title">{{ _('Delete Dev Communities') }}</div>
<div class="card-body">
{{ render_form(delete_communities_form) }}
</div>
</div>
</div>
</div>
<div class="col col-login mx-auto">
<div class="card mt-5">
<div class="card-body p-6">
<div class="card-title">{{ _('Delete Dev Topics') }}</div>
<div class="card-body">
{{ render_form(delete_topics_form) }}
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}