Skip to main content

An extension for graphene

Project description

Disclaimer

Проект находится на ранней стадии разработки

Как пользоваться?

Обязательные поля в инпутах

import graphene
from graphene_t2 import InputObjectType

class AddSomethingInput(InputObjectType):
    field1 = graphene.String(required=True)
    field2 = graphene.String(required=True)

class EditSomethingInput(AddSomethingInput):
    class T2Meta:
        required = {
            False: '__all__', # или список полей
            True: ['id'],
        }

    id = graphene.ID()

Примечания

  • нет поддержки graphene.Argument
  • порядок ключей (True, False) в параметре required важен. Изменения применяются в порядке их объявления

Документирование изменений (changes.py)

Автоматически изменяет описание полей. Может использоваться для генерации документации.

import graphene
from graphene_t2 import InputObjectType
from graphene_t2.features.changes import Alter, Deprecate

class SomeInputType(InputObjectType):
    class T2Meta:
        changes = [
            Deprecate('legacy_field1', '03/20', replaced_by='new_field1'),
            Deprecate('legacy_field2', '02/20', comment='Не используется'),
            Alter('new_field1', '03/20', required=True),
        ]

    legacy_field1 = graphene.String()
    legacy_field2 = graphene.String()
    new_field1 = graphene.String()

Сортировка (ordering.py)

В классе-нследнике ObjectType нужно объявить класс T2Meta. Внутри него можно создать две переменные:

  1. can_order_by - обязательный, список с названием полей, по которым можно производить сортировку;
  2. default_ordering - необязательный, сортировка по-умолчанию, строка или список строк с названием полей.

Примеры:

class Model1Type(DjangoObjectType):
       class T2Meta:
           can_order_by = ['id']


class Model2Type(DjangoObjectType):
       class T2Meta:
           can_order_by = ['id']
           default_ordering = 'id' # или '-id'


class Model3Type(DjangoObjectType):
       class T2Meta:
           can_order_by = ['id', 'name', 'date_created']
           default_ordering = '-date_created', 'name' # или ['-date_created', 'name']

Класс с объявлением методов нужно отнаследовать от graphene_t2.QueriesType, объявить вложенный класс T2Meta. Внутри объявить переменную enable_ordering_for.

Возможны два вида значения:

  1. __auto__ - включает возможность сортировки, для методов для которых это возможно сделать;
  2. список с названием полей

Ресолверы в качестве аргумента должны принимать **kwargs или sort_by.

from graphene_t2 import QueriesType


class Query1(QueriesType):
    class T2Meta:
        enable_ordering_for = '__auto__'

    items = graphene.List(Model1Type)

    def resolve_items(self, info, **kwargs):
        pass



class Query2(QueriesType):
    class T2Meta:
        enable_ordering_for = ['items']

    items = graphene.List(Model1Type)

    def resolve_items(self, info, sort_by):
        pass

Примечания

  • Нет поддержки случаев, когда название поля в модели отличается от названия в API;
  • Нет возможности сортировать по полям вложенных структур;

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graphene-t2-0.4.0.tar.gz (6.9 kB view hashes)

Uploaded Source

Built Distribution

graphene_t2-0.4.0-py3-none-any.whl (10.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page