Merge pull request #39 from DanielGrams/issues/38-cli-for-recurring-events

CLI for recurring events #38
This commit is contained in:
Daniel Grams 2020-12-09 09:16:48 +01:00 committed by GitHub
commit 8aa6bc35f9
6 changed files with 47 additions and 1 deletions

View File

@ -31,6 +31,16 @@ flask db upgrade
flask run --host 0.0.0.0
```
## Scheduled/Cron jobs
Jobs that should run on a regular basis.
### Daily
```sh
flask event update-recurring-dates
```
## Administration
```sh

View File

@ -123,6 +123,7 @@ from project.views import (
)
# Command line
import project.cli.event
import project.cli.user
if __name__ == "__main__": # pragma: no cover

23
project/cli/event.py Normal file
View File

@ -0,0 +1,23 @@
import click
from flask.cli import AppGroup
from project import app, db
from project.services.event import (
get_recurring_events,
update_event_dates_with_recurrence_rule,
)
event_cli = AppGroup("event")
@event_cli.command("update-recurring-dates")
def update_recurring_dates():
events = get_recurring_events()
for event in events:
update_event_dates_with_recurrence_rule(event)
db.session.commit()
click.echo(f"{len(events)} event(s) where updated.")
app.cli.add_command(event_cli)

View File

@ -122,6 +122,10 @@ def get_events_query(params):
)
def get_recurring_events():
return Event.query.filter(Event.recurrence_rule is not None).all()
def update_event_dates_with_recurrence_rule(event):
start = event.start
end = event.end

7
tests/cli/test_event.py Normal file
View File

@ -0,0 +1,7 @@
def test_update_recurring_dates(client, seeder, app):
user_id, admin_unit_id = seeder.setup_base()
seeder.create_event(admin_unit_id, "RRULE:FREQ=DAILY;COUNT=7")
runner = app.test_cli_runner()
result = runner.invoke(args=["event", "update-recurring-dates"])
assert "1 event(s) where updated." in result.output

View File

@ -125,7 +125,7 @@ class Seeder(object):
return organizer_id
def create_event(self, admin_unit_id):
def create_event(self, admin_unit_id, recurrence_rule=None):
from project.models import Event
from project.services.event import insert_event, upsert_event_category
from project.dateutils import now
@ -139,6 +139,7 @@ class Seeder(object):
event.start = now
event.event_place_id = self.upsert_default_event_place(admin_unit_id)
event.organizer_id = self.upsert_default_event_organizer(admin_unit_id)
event.recurrence_rule = recurrence_rule
insert_event(event)
self._db.session.commit()
event_id = event.id