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 | import six | ||||||
|  | from django.conf import settings | ||||||
| from django.db import models | from django.db import models | ||||||
| from django_filters import Filter | from django_filters import Filter | ||||||
| from django_filters.filterset import FilterSetMetaclass, FilterSet | from django_filters.filterset import FilterSetMetaclass, FilterSet | ||||||
|  | @ -15,6 +16,9 @@ class GlobalIDFilter(Filter): | ||||||
|         return super(GlobalIDFilter, self).filter(qs, gid.id) |         return super(GlobalIDFilter, self).filter(qs, gid.id) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | ORDER_BY_FIELD = getattr(settings, 'GRAPHENE_ORDER_BY_FIELD', 'order') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| GRAPHENE_FILTER_SET_OVERRIDES = { | GRAPHENE_FILTER_SET_OVERRIDES = { | ||||||
|     models.AutoField: { |     models.AutoField: { | ||||||
|         'filter_class': GlobalIDFilter, |         'filter_class': GlobalIDFilter, | ||||||
|  | @ -45,7 +49,7 @@ class GrapheneFilterSet(six.with_metaclass(GrapheneFilterSetMetaclass, FilterSet | ||||||
|     DjangoFilterConnectionField will wrap FilterSets with this class as |     DjangoFilterConnectionField will wrap FilterSets with this class as | ||||||
|     necessary |     necessary | ||||||
|     """ |     """ | ||||||
|     pass |     order_by_field = ORDER_BY_FIELD | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def setup_filterset(filterset_class): | def setup_filterset(filterset_class): | ||||||
|  | @ -54,7 +58,9 @@ def setup_filterset(filterset_class): | ||||||
|     return type( |     return type( | ||||||
|         'Graphene{}'.format(filterset_class.__name__), |         'Graphene{}'.format(filterset_class.__name__), | ||||||
|         (six.with_metaclass(GrapheneFilterSetMetaclass, filterset_class),), |         (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, |         'model': model, | ||||||
|     }) |     }) | ||||||
|     meta_class = type(str('Meta'), (object,), meta) |     meta_class = type(str('Meta'), (object,), meta) | ||||||
|     filterset = type(str('%sFilterSet' % model._meta.object_name), |     filterset = type( | ||||||
|                      (filterset_base_class,), {'Meta': meta_class}) |         str('%sFilterSet' % model._meta.object_name), | ||||||
|  |         (filterset_base_class,), | ||||||
|  |         { | ||||||
|  |             'Meta': meta_class | ||||||
|  |         } | ||||||
|  |     ) | ||||||
|     return filterset |     return filterset | ||||||
|  |  | ||||||
|  | @ -24,27 +24,27 @@ class PetNode(DjangoNode): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def assert_arguments(field, *arguments): | def assert_arguments(field, *arguments): | ||||||
|     ignore = ('after', 'before', 'first', 'last', 'o') |     ignore = ('after', 'before', 'first', 'last', 'order') | ||||||
|     actual = [ |     actual = [ | ||||||
|         name |         name | ||||||
|         for name in field.arguments.arguments.keys() |         for name in field.arguments.arguments.keys() | ||||||
|         if name not in ignore and not name.startswith('_') |         if name not in ignore and not name.startswith('_') | ||||||
|     ] |     ] | ||||||
|     assert set(arguments) == set(actual), \ |     assert set(arguments) == set(actual), \ | ||||||
|         'Expected arguments ({}) did not match actual ({])'.format( |         'Expected arguments ({}) did not match actual ({})'.format( | ||||||
|             arguments, |             arguments, | ||||||
|             actual |             actual | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def assert_orderable(field): | def assert_orderable(field): | ||||||
|     assert 'o' in field.arguments.arguments.keys(), \ |     assert 'order' in field.arguments.arguments.keys(), \ | ||||||
|         'Field cannot be ordered' |         'Field cannot be ordered' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def assert_not_orderable(field): | def assert_not_orderable(field): | ||||||
|     assert 'o' in field.arguments.arguments.keys(), \ |     assert 'order' in field.arguments.arguments.keys(), \ | ||||||
|         'Field cannot be ordered' |         'Field can be ordered' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def test_filter_explicit_filterset_arguments(): | def test_filter_explicit_filterset_arguments(): | ||||||
|  |  | ||||||
|  | @ -64,8 +64,7 @@ def test_filter_order(): | ||||||
|     resolver = FilterConnectionResolver(ArticleNode, |     resolver = FilterConnectionResolver(ArticleNode, | ||||||
|                                         filterset_class=ArticleFilter) |                                         filterset_class=ArticleFilter) | ||||||
|     resolved = resolver(inst=article, args={ |     resolved = resolver(inst=article, args={ | ||||||
|         # TODO: This should be 'order', not 'o' |         'order': 'headline' | ||||||
|         'o': 'headline' |  | ||||||
|     }, info=None) |     }, info=None) | ||||||
|     assert 'WHERE' not in str(resolved.query) |     assert 'WHERE' not in str(resolved.query) | ||||||
|     assert 'ORDER BY' in str(resolved.query) |     assert 'ORDER BY' in str(resolved.query) | ||||||
|  | @ -77,8 +76,7 @@ def test_filter_order_not_available(): | ||||||
|     resolver = FilterConnectionResolver(ReporterNode, |     resolver = FilterConnectionResolver(ReporterNode, | ||||||
|                                         filterset_class=ReporterFilter) |                                         filterset_class=ReporterFilter) | ||||||
|     resolved = resolver(inst=reporter, args={ |     resolved = resolver(inst=reporter, args={ | ||||||
|         # TODO: This should be 'order', not 'o' |         'order': 'last_name' | ||||||
|         'o': 'last_name' |  | ||||||
|     }, info=None) |     }, info=None) | ||||||
|     assert 'WHERE' not in str(resolved.query) |     assert 'WHERE' not in str(resolved.query) | ||||||
|     assert 'ORDER BY' not in str(resolved.query) |     assert 'ORDER BY' not in str(resolved.query) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user