コード例 #1
0
ファイル: utils.py プロジェクト: Hilzu/kompassi
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()
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
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()
コード例 #5
0
ファイル: cbac_entry.py プロジェクト: darkismus/kompassi
    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())