mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-10-31 07:57:26 +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