mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 12:44:15 +03:00
Ordering parameter now called 'order' rather than 'o'
This can be customsied via the GRAPHENE_ORDER_BY_FIELD setting, or by extending GrapheneFilterSet. I'm open to this being called 'order_by'.
This commit is contained in:
parent
4f054b3640
commit
6e07ef0c38
|
@ -1,4 +1,5 @@
|
|||
import six
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django_filters import Filter
|
||||
from django_filters.filterset import FilterSetMetaclass, FilterSet
|
||||
|
@ -15,6 +16,9 @@ class GlobalIDFilter(Filter):
|
|||
return super(GlobalIDFilter, self).filter(qs, gid.id)
|
||||
|
||||
|
||||
ORDER_BY_FIELD = getattr(settings, 'GRAPHENE_ORDER_BY_FIELD', 'order')
|
||||
|
||||
|
||||
GRAPHENE_FILTER_SET_OVERRIDES = {
|
||||
models.AutoField: {
|
||||
'filter_class': GlobalIDFilter,
|
||||
|
@ -45,7 +49,7 @@ class GrapheneFilterSet(six.with_metaclass(GrapheneFilterSetMetaclass, FilterSet
|
|||
DjangoFilterConnectionField will wrap FilterSets with this class as
|
||||
necessary
|
||||
"""
|
||||
pass
|
||||
order_by_field = ORDER_BY_FIELD
|
||||
|
||||
|
||||
def setup_filterset(filterset_class):
|
||||
|
@ -54,7 +58,9 @@ def setup_filterset(filterset_class):
|
|||
return type(
|
||||
'Graphene{}'.format(filterset_class.__name__),
|
||||
(six.with_metaclass(GrapheneFilterSetMetaclass, filterset_class),),
|
||||
{},
|
||||
{
|
||||
'order_by_field': ORDER_BY_FIELD
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
@ -66,6 +72,11 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
|
|||
'model': model,
|
||||
})
|
||||
meta_class = type(str('Meta'), (object,), meta)
|
||||
filterset = type(str('%sFilterSet' % model._meta.object_name),
|
||||
(filterset_base_class,), {'Meta': meta_class})
|
||||
filterset = type(
|
||||
str('%sFilterSet' % model._meta.object_name),
|
||||
(filterset_base_class,),
|
||||
{
|
||||
'Meta': meta_class
|
||||
}
|
||||
)
|
||||
return filterset
|
||||
|
|
|
@ -24,27 +24,27 @@ class PetNode(DjangoNode):
|
|||
|
||||
|
||||
def assert_arguments(field, *arguments):
|
||||
ignore = ('after', 'before', 'first', 'last', 'o')
|
||||
ignore = ('after', 'before', 'first', 'last', 'order')
|
||||
actual = [
|
||||
name
|
||||
for name in field.arguments.arguments.keys()
|
||||
if name not in ignore and not name.startswith('_')
|
||||
]
|
||||
assert set(arguments) == set(actual), \
|
||||
'Expected arguments ({}) did not match actual ({])'.format(
|
||||
'Expected arguments ({}) did not match actual ({})'.format(
|
||||
arguments,
|
||||
actual
|
||||
)
|
||||
|
||||
|
||||
def assert_orderable(field):
|
||||
assert 'o' in field.arguments.arguments.keys(), \
|
||||
assert 'order' in field.arguments.arguments.keys(), \
|
||||
'Field cannot be ordered'
|
||||
|
||||
|
||||
def assert_not_orderable(field):
|
||||
assert 'o' in field.arguments.arguments.keys(), \
|
||||
'Field cannot be ordered'
|
||||
assert 'order' in field.arguments.arguments.keys(), \
|
||||
'Field can be ordered'
|
||||
|
||||
|
||||
def test_filter_explicit_filterset_arguments():
|
||||
|
|
|
@ -64,8 +64,7 @@ def test_filter_order():
|
|||
resolver = FilterConnectionResolver(ArticleNode,
|
||||
filterset_class=ArticleFilter)
|
||||
resolved = resolver(inst=article, args={
|
||||
# TODO: This should be 'order', not 'o'
|
||||
'o': 'headline'
|
||||
'order': 'headline'
|
||||
}, info=None)
|
||||
assert 'WHERE' not in str(resolved.query)
|
||||
assert 'ORDER BY' in str(resolved.query)
|
||||
|
@ -77,8 +76,7 @@ def test_filter_order_not_available():
|
|||
resolver = FilterConnectionResolver(ReporterNode,
|
||||
filterset_class=ReporterFilter)
|
||||
resolved = resolver(inst=reporter, args={
|
||||
# TODO: This should be 'order', not 'o'
|
||||
'o': 'last_name'
|
||||
'order': 'last_name'
|
||||
}, info=None)
|
||||
assert 'WHERE' not in str(resolved.query)
|
||||
assert 'ORDER BY' not in str(resolved.query)
|
||||
|
|
Loading…
Reference in New Issue
Block a user