From e5c883dd1a62044d0ce93a0745fc09c63ecd4b64 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Wed, 24 May 2023 08:20:40 +0200 Subject: [PATCH] CLI logging #480 --- project/cli/__init__.py | 17 +++++++++++++++++ project/cli/cache.py | 2 ++ project/cli/dump.py | 3 +++ project/cli/event.py | 3 +++ project/cli/seo.py | 7 ++++--- project/services/event.py | 15 ++++++++++----- project/services/reference.py | 8 ++++++-- tests/cli/test_event.py | 1 + 8 files changed, 46 insertions(+), 10 deletions(-) diff --git a/project/cli/__init__.py b/project/cli/__init__.py index e69de29..774fb1f 100644 --- a/project/cli/__init__.py +++ b/project/cli/__init__.py @@ -0,0 +1,17 @@ +import logging +from functools import wraps + +from flask import current_app + + +def click_logging(func): + @wraps(func) + def wrapper(*args, **kwargs): + logger = current_app.logger + original_level = logger.level + logger.setLevel(logging.INFO) + result = func(*args, **kwargs) + logger.setLevel(original_level) + return result + + return wrapper diff --git a/project/cli/cache.py b/project/cli/cache.py index f176788..01b430e 100644 --- a/project/cli/cache.py +++ b/project/cli/cache.py @@ -1,12 +1,14 @@ from flask.cli import AppGroup from project import app +from project.cli import click_logging from project.services import cache cache_cli = AppGroup("cache") @cache_cli.command("clear-images") +@click_logging def clear_images(): cache.clear_images() diff --git a/project/cli/dump.py b/project/cli/dump.py index 42643ea..d4c16e2 100644 --- a/project/cli/dump.py +++ b/project/cli/dump.py @@ -2,18 +2,21 @@ import click from flask.cli import AppGroup from project import app +from project.cli import click_logging from project.services import dump dump_cli = AppGroup("dump") @dump_cli.command("all") +@click_logging def dump_all(): dump.dump_all() @dump_cli.command("organization") @click.argument("admin_unit_id") +@click_logging def dump_admin_unit(admin_unit_id): dump.dump_admin_unit(admin_unit_id) diff --git a/project/cli/event.py b/project/cli/event.py index fa38172..124c954 100644 --- a/project/cli/event.py +++ b/project/cli/event.py @@ -2,12 +2,14 @@ import click from flask.cli import AppGroup from project import app +from project.cli import click_logging from project.services import event event_cli = AppGroup("event") @event_cli.command("update-recurring-dates") +@click_logging def update_recurring_dates(): event.update_recurring_dates() @@ -15,6 +17,7 @@ def update_recurring_dates(): @event_cli.command("create-bulk-references") @click.argument("admin_unit_id") @click.argument("postal_codes", nargs=-1) +@click_logging def create_bulk_event_references(admin_unit_id, postal_codes): event.create_bulk_event_references(admin_unit_id, list(postal_codes)) diff --git a/project/cli/seo.py b/project/cli/seo.py index 7f20d99..1df0589 100644 --- a/project/cli/seo.py +++ b/project/cli/seo.py @@ -1,7 +1,8 @@ import click -from flask.cli import AppGroup, with_appcontext +from flask.cli import AppGroup from project import app +from project.cli import click_logging from project.services import seo seo_cli = AppGroup("seo") @@ -9,13 +10,13 @@ seo_cli = AppGroup("seo") @seo_cli.command("generate-sitemap") @click.option("--pinggoogle/--no-pinggoogle", default=False) -@with_appcontext +@click_logging def generate_sitemap(pinggoogle): seo.generate_sitemap(pinggoogle) @seo_cli.command("generate-robots-txt") -@with_appcontext +@click_logging def generate_robots_txt(): seo.generate_robots_txt() diff --git a/project/services/event.py b/project/services/event.py index 71baae9..63ce85b 100644 --- a/project/services/event.py +++ b/project/services/event.py @@ -46,7 +46,7 @@ from project.models import ( sanitize_allday_instance, ) from project.services.event_search import EventSearchParams -from project.services.reference import upsert_event_reference +from project.services.reference import get_event_reference, upsert_event_reference from project.utils import get_pending_changes, get_place_str from project.views.utils import truncate @@ -662,11 +662,16 @@ def create_bulk_event_references(admin_unit_id: int, postalCodes: list): query = get_events_query(params) query = query.filter(Event.admin_unit_id != admin_unit_id) - count = 0 + new_references = list() events = query.all() for event in events: - if upsert_event_reference(event.id, admin_unit_id): - count = count + 1 + if not get_event_reference(event.id, admin_unit_id): + reference = upsert_event_reference(event.id, admin_unit_id) + new_references.append(reference) db.session.commit() - app.logger.info(f"{count} reference(s) created.") + app.logger.info(f"{len(new_references)} reference(s) created.") + + for new_reference in new_references: + url = url_for("event", event_id=new_reference.event_id, _external=True) + app.logger.info(url) diff --git a/project/services/reference.py b/project/services/reference.py index 8048d9e..7c9ed29 100644 --- a/project/services/reference.py +++ b/project/services/reference.py @@ -15,14 +15,18 @@ def create_event_reference_for_request(request): return upsert_event_reference(request.event_id, request.admin_unit_id) -def upsert_event_reference(event_id: int, admin_unit_id: int): - result = EventReference.query.filter( +def get_event_reference(event_id: int, admin_unit_id: int): + return EventReference.query.filter( and_( EventReference.event_id == event_id, EventReference.admin_unit_id == admin_unit_id, ) ).first() + +def upsert_event_reference(event_id: int, admin_unit_id: int): + result = get_event_reference(event_id, admin_unit_id) + if result is None: result = EventReference(event_id=event_id, admin_unit_id=admin_unit_id) result.rating = 50 diff --git a/tests/cli/test_event.py b/tests/cli/test_event.py index 407c78c..ee81006 100644 --- a/tests/cli/test_event.py +++ b/tests/cli/test_event.py @@ -31,6 +31,7 @@ def test_create_bulk_event_references(client, seeder, app): event_id_38690 = _create_event(seeder, other_admin_unit_id, "38690") event_id_55555 = _create_event(seeder, other_admin_unit_id, "55555") + app.config["SERVER_NAME"] = "localhost" runner = app.test_cli_runner() result = runner.invoke( args=[