From da10cae31a5493f4c26772f01e000a7793071e30 Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Wed, 27 May 2015 15:18:13 +0200 Subject: [PATCH] Small fixes/improvements in static site generation - rename `user` to `creator` - rename `User.static_site` backref to `static_sites` - update user when merging users - fix `delete_file()` if there's no file - use first name instead of full name in notification email - link to event in notification email footer --- indico/modules/events/static/__init__.py | 5 +++++ indico/modules/events/static/controllers.py | 2 +- indico/modules/events/static/models/static.py | 10 ++++++---- indico/modules/events/static/tasks.py | 7 +++---- .../events/static/emails/download_notification_email.txt | 7 ++++--- .../events/static/templates/events/static/static_sites.html | 13 +++++++------ indico/modules/users/models/users.py | 2 +- indico_zodbimport/modules/static_sites.py | 5 +---- .../201505211358_4e27c1f90362_create_static_sites_table.py | 4 ++-- 9 files changed, 30 insertions(+), 25 deletions(-) diff --git a/indico/modules/events/static/__init__.py b/indico/modules/events/static/__init__.py index 274aed3ed..4e4283287 100644 --- a/indico/modules/events/static/__init__.py +++ b/indico/modules/events/static/__init__.py @@ -28,3 +28,8 @@ def _event_deleted(event, **kwargs): return for static_site in StaticSite.find(event_id=int(event.id)): db.session.delete(static_site) + + +@signals.users.merged.connect +def _merge_users(target, source, **kwargs): + StaticSite.find(creator_id=source.id).update({StaticSite.creator_id: target.id}) diff --git a/indico/modules/events/static/controllers.py b/indico/modules/events/static/controllers.py index 6972a817e..ae1d82095 100644 --- a/indico/modules/events/static/controllers.py +++ b/indico/modules/events/static/controllers.py @@ -51,7 +51,7 @@ class RHStaticSiteList(RHStaticSiteBase): class RHStaticSiteBuild(RHStaticSiteBase): def _process(self): self.check_legacy_events() - static_site = StaticSite(user=session.user, event=self._conf) + static_site = StaticSite(creator=session.user, event=self._conf) db.session.add(static_site) transaction.commit() build_static_site.delay(static_site) diff --git a/indico/modules/events/static/models/static.py b/indico/modules/events/static/models/static.py index b4c5384de..da2b89f50 100644 --- a/indico/modules/events/static/models/static.py +++ b/indico/modules/events/static/models/static.py @@ -51,7 +51,7 @@ class StaticSite(db.Model): db.Integer, nullable=False ) - #: A :class:`StaticSiteState` + #: The state of the static site (a :class:`StaticSiteState` member) state = db.Column( PyIntEnum(StaticSiteState), default=StaticSiteState.pending, @@ -69,7 +69,7 @@ class StaticSite(db.Model): nullable=True ) #: ID of the user who created the static site - user_id = db.Column( + creator_id = db.Column( db.Integer, db.ForeignKey('users.users.id'), index=True, @@ -77,11 +77,11 @@ class StaticSite(db.Model): ) #: The user who created the static site - user = db.relationship( + creator = db.relationship( 'User', lazy=False, backref=db.backref( - 'static_site', + 'static_sites', lazy='dynamic' ) ) @@ -101,6 +101,8 @@ class StaticSite(db.Model): 'id': self.id} def delete_file(self): + if not self.path: + return try: os.remove(self.path) except OSError as err: diff --git a/indico/modules/events/static/tasks.py b/indico/modules/events/static/tasks.py index 850c59c35..4283a27f0 100644 --- a/indico/modules/events/static/tasks.py +++ b/indico/modules/events/static/tasks.py @@ -44,7 +44,7 @@ def build_static_site(static_site): clearCache() try: logger.info('Building static site: {}'.format(static_site)) - session.lang = static_site.user.settings.get('lang') + session.lang = static_site.creator.settings.get('lang') rh = RHCustomizable() rh._aw = AccessWrapper() rh._conf = rh._target = static_site.event @@ -79,10 +79,9 @@ def build_static_site(static_site): @email_sender def notify_static_site_success(static_site): template = get_template_module('events/static/emails/download_notification_email.txt', - user=static_site.user, - event_title=static_site.event.getTitle(), + user=static_site.creator, event=static_site.event, link=url_for('static_site.download', static_site, _external=True)) - return make_email({static_site.user.email}, template=template, html=False) + return make_email({static_site.creator.email}, template=template, html=False) @celery.periodic_task(name='static_sites_cleanup', run_every=crontab(minute='30', hour='3', day_of_week='monday')) diff --git a/indico/modules/events/static/templates/events/static/emails/download_notification_email.txt b/indico/modules/events/static/templates/events/static/emails/download_notification_email.txt index ce3978205..213c7f6e8 100644 --- a/indico/modules/events/static/templates/events/static/emails/download_notification_email.txt +++ b/indico/modules/events/static/templates/events/static/emails/download_notification_email.txt @@ -3,12 +3,13 @@ {% block subject %}Offline copy of an event ready for download{% endblock %} {% block header_recipient -%} - {{ user.full_name }} + {{ user.first_name }} {%- endblock %} {% block body -%} -The offline copy of the event "{{ event_title }}" is ready for download. +The offline copy of the event "{{ event.getTitle() }}" is ready for download. Download link: {{ link }} - {%- endblock %} + +{% block footer_url %}{{ url_for('event.conferenceDisplay', event, _external=true) }}{% endblock %} diff --git a/indico/modules/events/static/templates/events/static/static_sites.html b/indico/modules/events/static/templates/events/static/static_sites.html index 86b00915b..44f9fc229 100644 --- a/indico/modules/events/static/templates/events/static/static_sites.html +++ b/indico/modules/events/static/templates/events/static/static_sites.html @@ -40,16 +40,17 @@ {% for site in static_sites %} - {{ site.user.full_name }} + {{ site.creator.full_name }} {{ site.requested_dt|format_datetime }} {{ site.state.title }} {% if has_downloads %} - {% if site.state.name == 'success' %} - - {%- trans %}Download{% endtrans -%} - - {% endif %} + {% if site.state.name == 'success' %} + + {%- trans %}Download{% endtrans -%} + + {% endif %} {% endif %} diff --git a/indico/modules/users/models/users.py b/indico/modules/users/models/users.py index 67a5f0e5c..f8875f63b 100644 --- a/indico/modules/users/models/users.py +++ b/indico/modules/users/models/users.py @@ -248,7 +248,7 @@ class User(db.Model): # - agreements (Agreement.user) # - requests_created (Request.created_by_user) # - requests_processed (Request.processed_by_user) - # - static_site (StaticSite.user) + # - static_sites (StaticSite.user) @property def as_principal(self): diff --git a/indico_zodbimport/modules/static_sites.py b/indico_zodbimport/modules/static_sites.py index b2eabf87e..5281b12f3 100644 --- a/indico_zodbimport/modules/static_sites.py +++ b/indico_zodbimport/modules/static_sites.py @@ -65,10 +65,7 @@ class StaticSitesImporter(Importer): '%{yellow!}file missing, marking static site as expired.').format(event_id) state = StaticSite.expired - static_site = StaticSite(user=user, - event_id=event_id, - state=state, - requested_dt=requested_dt) + static_site = StaticSite(creator=user, event_id=event_id, state=state, requested_dt=requested_dt) if static_site.state == StaticSiteState.success: static_site.path = file_path db.session.add(static_site) diff --git a/migrations/versions/201505211358_4e27c1f90362_create_static_sites_table.py b/migrations/versions/201505211358_4e27c1f90362_create_static_sites_table.py index 26f288ae8..91308df56 100644 --- a/migrations/versions/201505211358_4e27c1f90362_create_static_sites_table.py +++ b/migrations/versions/201505211358_4e27c1f90362_create_static_sites_table.py @@ -24,8 +24,8 @@ def upgrade(): sa.Column('state', PyIntEnum(StaticSiteState), nullable=False), sa.Column('requested_dt', UTCDateTime, nullable=False), sa.Column('path', sa.String(), nullable=True), - sa.Column('user_id', sa.Integer(), index=True, nullable=False), - sa.ForeignKeyConstraint(['user_id'], ['users.users.id']), + sa.Column('creator_id', sa.Integer(), index=True, nullable=False), + sa.ForeignKeyConstraint(['creator_id'], ['users.users.id']), sa.PrimaryKeyConstraint('id'), schema='events') -- 2.11.4.GIT