def _import_programme(event, payload): assert event.programme_event_meta category, created = Category.objects.get_or_create( event=event, slug='desu', defaults=dict( title='Desusaitilta tuotu ohjelma', style='anime', ) ) desuprogrammes = [Desuprogramme.from_dict(programme_dict) for programme_dict in payload] # Make sure all listed programmes exist for programme_dict in payload: desuprogramme = Desuprogramme.from_dict(programme_dict) programme, created = desuprogramme.get_or_create(category=category) if not created: programme.state = 'accepted' programme.title = desuprogramme.title programme.description = desuprogramme.description programme.save() log_get_or_create(logger, programme, created) # Cancel removed programmes known_slugs = [desuprogramme.identifier for desuprogramme in desuprogrammes] for removed_programme in Programme.objects.filter(category=category).exclude(slug__in=known_slugs): logger.debug('Programme %s removed from Desusite, marking cancelled', removed_programme) removed_programme.state = 'cancelled' removed_programme.save() removed_programme.apply_state()
def ensure_internal_email_aliases(cls): from core.models import Event from .email_alias_domain import EmailAliasDomain domains = EmailAliasDomain.objects.filter(has_internal_aliases=True) if not domains.exists(): logger.warn('No EmailAliasDomain with has_internal_aliases=True. Not creating internal aliases.') return domain = domains.get() logger.info('Creating internal e-mail aliases in domain %s', domain) alias, created = cls.objects.get_or_create( domain=domain, app_label='core', defaults=dict( target_emails="\n".join(email for (name, email) in settings.ADMINS), ) ) log_get_or_create(logger, alias, created) # Null start times are interpreted to mean "sometime in the future" t = now() query = Q(start_time__gte=t) | Q(start_time__isnull=True) for event in Event.objects.filter(query): for app_label in [ 'labour', 'programme', 'tickets', ]: meta = event.app_event_meta(app_label) if not meta: continue alias, created = cls.objects.get_or_create( domain=domain, app_label=app_label, event=event, defaults=dict( target_emails=meta.plain_contact_email, ), ) log_get_or_create(logger, alias, created)
def _import_programme(event, payload): assert event.programme_event_meta category, created = Category.objects.get_or_create( event=event, slug='desu', defaults=dict( title='Desusaitilta tuotu ohjelma', style='anime', )) desuprogrammes = [ Desuprogramme.from_dict(programme_dict) for programme_dict in payload ] # Make sure all listed programmes exist for programme_dict in payload: desuprogramme = Desuprogramme.from_dict(programme_dict) programme, created = desuprogramme.get_or_create(category=category) if not created: programme.state = 'accepted' programme.title = desuprogramme.title programme.description = desuprogramme.description programme.save() log_get_or_create(logger, programme, created) # Cancel removed programmes known_slugs = [ desuprogramme.identifier for desuprogramme in desuprogrammes ] for removed_programme in Programme.objects.filter( category=category).exclude(slug__in=known_slugs): logger.debug('Programme %s removed from Desusite, marking cancelled', removed_programme) removed_programme.state = 'cancelled' removed_programme.save() removed_programme.apply_state()
def ensure_admin_group_privileges_for_event(cls, event, *, t: datetime = None, request = None): if t is None: t = now() for app_name in SUPPORTED_APPS: meta = event.get_app_event_meta(app_name) if not meta: continue admin_group = meta.admin_group admin_group_members = admin_group.user_set.all() # remove access from those who should not have it entries_to_remove = cls.objects.filter(granted_by_group=admin_group).exclude(user__in=admin_group_members) for cbac_entry in entries_to_remove: emit('access.cbacentry.deleted', request=request, other_fields=cbac_entry.as_dict()) entries_to_remove.delete() # add access to those who should have it but do not yet have for user in admin_group_members: cbac_entry, created = cls.objects.get_or_create( user=user, granted_by_group=admin_group, defaults=dict( valid_from=t, valid_until=event.end_time + timedelta(CBAC_VALID_AFTER_EVENT_DAYS), claims={ "organization": event.organization.slug, "event": event.slug, "app": app_name, }, created_by=request.user if request else None, ), ) log_get_or_create(logger, cbac_entry, created) if created: emit('access.cbacentry.created', request=request, other_fields=cbac_entry.as_dict())