From f2661debb737dbfbc5faadf8fa3046c2a261adf9 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 1 Jan 2024 13:22:37 +1300 Subject: [PATCH] Add 'create_tags' cfp task We want the cfp tags to be relatively limited so it (should) be fine to manage them via CLI. If need-be a management page can be added but I'd like to avoid that for the time being as hopefully they'll be a one-and-done set up. It's a separate command but I've also hooked it into the `dev data` command just to make sure there's something there. --- apps/base/dev/tasks.py | 3 +++ apps/cfp/tasks.py | 25 +++++++++++++++++++++++++ models/cfp_tag.py | 13 +++++++++++++ 3 files changed, 41 insertions(+) diff --git a/apps/base/dev/tasks.py b/apps/base/dev/tasks.py index c737a45dd..9cfd47fd9 100644 --- a/apps/base/dev/tasks.py +++ b/apps/base/dev/tasks.py @@ -9,6 +9,8 @@ from models.volunteer.shift import Shift from models.volunteer.role import Role +from apps.cfp.tasks import create_tags + from . import dev_cli from .fake import FakeDataGenerator @@ -20,6 +22,7 @@ def dev_data(ctx): ctx.invoke(fake_data) ctx.invoke(volunteer_data) ctx.invoke(volunteer_shifts) + ctx.invoke(create_tags) @dev_cli.command("cfp_data") diff --git a/apps/cfp/tasks.py b/apps/cfp/tasks.py index 66904a696..42f5b0fb6 100644 --- a/apps/cfp/tasks.py +++ b/apps/cfp/tasks.py @@ -6,6 +6,7 @@ from main import db from models.cfp import Proposal, TalkProposal, WorkshopProposal, InstallationProposal +from models.cfp_tag import Tag, DEFAULT_TAGS from models.user import User from apps.cfp_review.base import send_email_for_proposal from ..common.email import from_email @@ -125,3 +126,27 @@ def email_reserve(): send_email_for_proposal( proposal, reason="reserve-list", from_address=from_email("SPEAKERS_EMAIL") ) + + +@cfp.cli.command( + "create_tags", + help=f"Add tags to the database. Defaults are {DEFAULT_TAGS}.", +) +@click.argument("tags_to_create", nargs=-1) +def create_tags(tags_to_create): + """Upset tag list""" + if not tags_to_create: + tags_to_create = DEFAULT_TAGS + + tags_created = 0 + for tag in tags_to_create: + if Tag.query.filter_by(tag=tag).all(): + app.logger.info(f"'{tag}' already exists, skipping.") + continue + + db.session.add(Tag(tag)) + tags_created += 1 + app.logger.info(f"'{tag}' added to session.") + + db.session.commit() + app.logger.info(f"Successfully created {tags_created} new tags.") diff --git a/models/cfp_tag.py b/models/cfp_tag.py index d687ad74e..c3c5a99f0 100644 --- a/models/cfp_tag.py +++ b/models/cfp_tag.py @@ -3,6 +3,19 @@ from . import BaseModel +DEFAULT_TAGS = [ + "security", + "robotics", + "trains", + "radio", + "health", + "science", + "music", + "computing", + "film", +] + + class Tag(BaseModel): __versioned__: dict = {} __tablename__ = "tag"