graphene-t2

An extension for graphene


Keywords
api, graphql, graphene
License
MIT
Install
pip install graphene-t2==0.4.0

Documentation

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;
  • НСт возмоТности ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ полям Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур;