예제 #1
0
class wagtailCollectionPermissions(helpers.BaseField):
    WagtailCollectionPermission = g.ObjectType(
        'WagtailCollectionPermission',
        fields=g.fields({
            'id': 'ID!',
            'permission': g.NN(AuthPermission),
            'collection': g.NN(wagtail_types.WagtailCollection),
        }),
    )

    permissions = []

    def resolve(self, group, info):
        return group.collection_permissions.all()

    result = g.NNList(WagtailCollectionPermission)
예제 #2
0
class zadarmaPbxCall(helpers.BaseField):
    permissions = [staffonly]
    args = {'pbx_call_id': 'ID!'}
    result = g.NN(types.ZadarmaPbxCall)

    def resolve(self, _, info, pbx_call_id):
        return models.PbxCall.objects.get(pk=pbx_call_id)
예제 #3
0
class cashierPayments(helpers.BaseField):
    permissions = [staffonly]
    args = helpers.connection_args()
    result = g.NN(CashierPaymentConnection)

    def resolve(self, _, info, **pager):
        return models.Payment.objects.relay_page(**pager)  # FIXME - order
예제 #4
0
class ratioTicket(helpers.BaseField):
    def resolve(self, _, info, id):
        return models.Ticket.objects.get(pk=id)

    permissions = PERMISSIONS
    args = {'id': 'ID!'}
    result = g.NN(types.RatioTicket)
예제 #5
0
class cm2Order(helpers.BaseField):
    def resolve(self, _, info, id):
        return models.Order.objects.get(pk=id)

    args = {'id': 'ID!'}
    result = g.NN(types.Cm2Order)
    permissions = [staffonly]
예제 #6
0
class staffMember(helpers.BaseField):
    permissions = [permissions.staffonly]
    args = {'id': 'ID!'}
    result = g.NN(types.StaffMember)

    def resolve(self, _, info, id):
        return models.Member.objects.get(pk=id)
예제 #7
0
def mastermindDatingCreateParticipant(_):
    @check_permissions([staffonly])
    def resolve(_, info, cohort_id, email):
        KchUser = get_user_model()
        try:
            kocherga_user = KchUser.objects.get(email=email)
        except KchUser.DoesNotExist:
            kocherga_user = KchUser.objects.create_user(email)

        cohort = models.Cohort.objects.get(pk=cohort_id)

        (participant, _) = models.Participant.objects.get_or_create(
            user=kocherga_user,
            cohort=cohort,
        )

        return {'participant': participant}

    return g.Field(
        g.NN(ParticipantMutationResult),
        args=g.arguments({
            'cohort_id': 'ID!',
            'email': str
        }),
        resolve=resolve,
    )
예제 #8
0
def mastermindDatingCreateCohort(helper):
    @check_permissions([staffonly])
    def resolve(_, info):
        cohort = models.Cohort.objects.create()
        return {'cohort': cohort}

    return g.Field(g.NN(CohortMutationResult), resolve=resolve)
예제 #9
0
class ratioTrainingBySlug(helpers.BaseField):
    def resolve(self, _, info, slug):
        return models.Training.objects.get(slug=slug)

    permissions = PERMISSIONS
    args = {'slug': str}
    result = g.NN(types.RatioTraining)
예제 #10
0
class cm2CreateCustomer(helpers.BaseFieldWithInput):
    def resolve(self, _, info, input):
        return models.Customer.objects.create(**input)

    permissions = [staffonly]
    input = {'card_id': int, 'first_name': str, 'last_name': str}
    result = g.NN(types.Cm2Customer)
예제 #11
0
class eventAnnounce(helpers.BaseFieldWithInput):
    def resolve(self, _, info, input):
        event = models.Event.objects.get(uuid=input['event_id'])

        assert event.event_type == 'public'

        target = input['target']
        if target == 'VK':
            event.vk_announcement.announce()
        elif target == 'FB':
            event.fb_announcement.announce()
        elif target == 'TIMEPAD':
            event.timepad_announcement.announce()
        else:
            raise Exception(f"Unknown target {target}")

        event.notify_update()

        return {
            'ok': True,
            'event': event,
        }

    permissions = [permissions.manage_events]
    input = {
        'event_id': 'ID!',
        'target': g.NN(EventAnnounceTarget),
    }
    result = EventUpdateResult
예제 #12
0
class ratioOrders(helpers.BaseField):
    def resolve(self, _, info, **pager):
        return models.Order.objects.relay_page(order='-created', **pager)

    permissions = PERMISSIONS
    args = helpers.connection_args()
    result = g.NN(types.RatioOrderConnection)
예제 #13
0
class updateRatioTicketType(helpers.BaseFieldWithInput):
    def resolve(self, _, info, input):
        ticket_type = models.TicketType.objects.get(uuid=input['id'])

        for field in (
            'price',
            'name',
            'discount_by_email',
            'discount_percent_by_email',
        ):
            if input.get(field) is not None:
                setattr(ticket_type, field, input[field])

        ticket_type.full_clean()
        ticket_type.save()
        return ticket_type

    permissions = [user_perm('ratio.manage')]
    input = {
        'id': 'ID!',
        'price': Optional[int],
        'name': Optional[str],
        'discount_by_email': Optional[int],
        'discount_percent_by_email': Optional[int],
    }
    result = g.NN(types.RatioTicketType)
예제 #14
0
class events(helpers.BaseField):
    def resolve(self, obj, info, search=None, filter=None, **pager):
        qs = models.Event.objects.all()
        if not info.context.user.is_staff:
            # only staff can access old anticafe events which might include personal data (phone numbers, emails)
            qs = qs.exclude_anticafe_dates()

        if search:
            qs = qs.filter(
                title__icontains=search
            )  # TODO - use wagtail/elastic search instead

        if filter:
            if 'event_type' in filter:
                qs = qs.filter(event_type=filter['event_type'])
        return qs.relay_page(order='start', **pager)

    permissions = [permissions.manage_events]
    FilterInput = g.InputObjectType(
        'EventsFilterInput', g.input_fields({'event_type': Optional[str]})
    )

    args = {**helpers.connection_args(), 'search': Optional[str], 'filter': FilterInput}

    result = g.NN(types.EventConnection)
예제 #15
0
class updateRatioTicket(helpers.BaseFieldWithInput):
    def resolve(self, _, info, input):
        ticket = models.Ticket.objects.get(pk=input['id'])

        for field in (
                'first_name',
                'last_name',
                'notion_link',
        ):
            if input.get(field) is not None:
                setattr(ticket, field, input[field])

        if input.get('ticket_type') is not None:
            ticket_type_id = input['ticket_type']
            ticket_type = models.TicketType.objects.get(uuid=ticket_type_id)
            ticket.ticket_type = ticket_type

        ticket.full_clean()
        ticket.save()
        return ticket

    permissions = [user_perm('ratio.manage')]
    input = {
        'id': 'ID!',
        'first_name': Optional[str],
        'last_name': Optional[str],
        'notion_link': Optional[str],
        'ticket_type': 'ID',
    }

    result = g.NN(types.RatioTicket)
예제 #16
0
class ratioAddTicket(helpers.BaseFieldWithInput):
    def resolve(self, _, info, input):
        training_id = input.pop('training')
        training = models.Training.objects.get(pk=training_id)

        ticket_type_id = input.pop('ticket_type', None)
        ticket_type = None
        if ticket_type_id:
            ticket_type = models.TicketType.objects.get(uuid=ticket_type_id)

        ticket = models.Ticket.objects.create(
            **input,
            training=training,
            ticket_type=ticket_type,
        )
        return ticket

    permissions = [user_perm('ratio.manage')]
    input = {
        'training': 'ID!',  # TODO - remove and derive from ticket_type
        'ticket_type': 'ID',  # TODO - required
        'email': str,
        'first_name': Optional[str],
        'last_name': Optional[str],
        'payment_amount': int,
        'ticket_class': Optional[str],
        'comment': Optional[str],
    }

    result = g.NN(types.RatioTicket)
예제 #17
0
def events(_):
    async def subscribe(obj, info):
        # check permissions
        await sync_to_async(permissions.manage_events,
                            thread_sensitive=True)(obj, info)

        async for msg in channels.update_group.subscribe():
            logger.debug('Event update: ' + str(msg))
            yield msg

    @check_permissions([permissions.manage_events])
    def resolve(msg, info):
        logger.debug(info.context)

        if not msg:
            # this can happen if we invoke subscription via HTTP due to incorrectly configured Apollo client & link
            logger.error('weird, msg is empty')
            return  # this will cause an exception anyway since `events` result is non-nullable

        # It'd be better to yield event, but it's problematic because all other resolver are sync
        # and Django ORM can't be called in async context.
        return {
            'type': msg['type'],
            'id': msg['uuid'],
        }

    return g.Field(g.NN(EventNotification),
                   resolve=resolve,
                   subscribe=subscribe)
예제 #18
0
파일: utils.py 프로젝트: KochergaClub/core
def build_comments_count_field(permissions: List[helpers.PermissionType]):
    def resolve(obj, info, **pager):
        assert isinstance(obj, models.Commentable)
        return obj.comments.count()

    result = g.NN(g.Int)
    return g.Field(result, resolve=check_permissions(permissions)(resolve))
예제 #19
0
class imageTemplateBySlug(helpers.BaseField):
    def resolve(self, _, info, slug):
        return models.Template.by_name(slug)

    permissions = [staffonly]
    args = {'slug': str}
    result = g.NN(types.ImageTemplate)
예제 #20
0
class ofdDocuments(helpers.BaseField):
    def resolve(self, _, info, **pager):
        return models.OfdDocument.objects.relay_page(**pager)

    permissions = [user_perm('kkm.ofd')]

    args = helpers.connection_args()
    result = g.NN(types.OfdDocumentConnection)
예제 #21
0
파일: login.py 프로젝트: KochergaClub/core
class authLogout(helpers.BaseField):
    permissions = [authenticated]
    result = g.NN(
        g.ObjectType('AuthLogoutResult', g.fields({'ok': Optional[bool]})))

    def resolve(self, _, info):
        logout(info.context)
        return {'ok': True}
예제 #22
0
class closeKkmShift(helpers.BaseField):
    def resolve(self, _, info):
        models.Controller.load().close_shift()
        return {'ok': True}

    permissions = [user_perm('kkm.kkmserver')]

    result = g.NN(basic_types.BasicResult)
예제 #23
0
class ratioTestimonials(helpers.BaseField):
    def resolve(self, _, info, **pager):
        return models.Testimonial.objects.select_related('product').relay_page(
            **pager)

    permissions = []
    args = helpers.connection_args()
    result = g.NN(types.RatioTestimonialConnection)
예제 #24
0
class eventsPrototype(helpers.BaseField):
    def resolve(self, obj, info, id):
        return models.EventPrototype.objects.get(pk=id)

    permissions = [permissions.manage_events]
    args = {'id': 'ID!'}

    result = g.NN(types.EventsPrototype)
예제 #25
0
class eventsWeeklyDigestCurrent(helpers.BaseField):
    def resolve(self, obj, info):
        digest = models.WeeklyDigest.objects.current_digest()
        digest.create_image_if_necessary()

        return digest

    permissions = [permissions.manage_events]
    result = g.NN(types.EventsWeeklyDigest)
예제 #26
0
class importer(helpers.BaseField):
    permissions = [permissions.staffonly]
    result = g.NN(Importer)
    args = g.arguments({
        'module_name': str,
    })

    def resolve(self, _, info, module_name):
        return get_importer(module_name)
예제 #27
0
파일: audit.py 프로젝트: KochergaClub/core
class deleteAuthGroup(helpers.BaseField):
    def resolve(self, _, info, id):
        group = auth_models.Group.objects.get(pk=id)
        group.delete()
        return {'ok': True}

    permissions = [user_perm('auth.audit')]
    args = {'id': 'ID!'}
    result = g.NN(basic_types.BasicResult)
예제 #28
0
파일: audit.py 프로젝트: KochergaClub/core
class createAuthGroup(helpers.BaseField):
    def resolve(self, _, info, name):
        group = auth_models.Group.objects.create(name=name)
        group.full_clean()
        return group

    permissions = [user_perm('auth.audit')]
    args = {'name': str}
    result = g.NN(types.AuthGroup)
예제 #29
0
class ratioPaymentDelete(helpers.BaseField):
    def resolve(self, _, info, payment_id):
        payment = models.Payment.objects.get(pk=payment_id)
        payment.delete()
        return {'ok': True}

    permissions = [user_perm('ratio.manage')]
    args = {'payment_id': 'ID!'}
    result = g.NN(basic_types.BasicResult)
예제 #30
0
class promocodes(helpers.BaseField):
    def resolve(self, obj, info, **pager):
        return models.Promocode.objects.filter(
            ticket_type_promocodes=obj.pk).relay_page(**pager)

    permissions = [user_perm('ratio.manage')]

    args = helpers.connection_args()
    result = g.NN(RatioPromocodeConnection)