mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-11-04 09:57:53 +03:00 
			
		
		
		
	Merge pull request #335 from urbandove/master
models.DateField => graphene Date Scalar
This commit is contained in:
		
						commit
						adde400893
					
				| 
						 | 
					@ -5,7 +5,7 @@ from .fields import (
 | 
				
			||||||
    DjangoConnectionField,
 | 
					    DjangoConnectionField,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__version__ = '2.0.0'
 | 
					__version__ = '2.0.1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__all__ = [
 | 
					__all__ = [
 | 
				
			||||||
    '__version__',
 | 
					    '__version__',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ from django.utils.encoding import force_text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from graphene import (ID, Boolean, Dynamic, Enum, Field, Float, Int, List,
 | 
					from graphene import (ID, Boolean, Dynamic, Enum, Field, Float, Int, List,
 | 
				
			||||||
                      NonNull, String, UUID)
 | 
					                      NonNull, String, UUID)
 | 
				
			||||||
from graphene.types.datetime import DateTime, Time
 | 
					from graphene.types.datetime import DateTime, Date, Time
 | 
				
			||||||
from graphene.types.json import JSONString
 | 
					from graphene.types.json import JSONString
 | 
				
			||||||
from graphene.utils.str_converters import to_camel_case, to_const
 | 
					from graphene.utils.str_converters import to_camel_case, to_const
 | 
				
			||||||
from graphql import assert_valid_name
 | 
					from graphql import assert_valid_name
 | 
				
			||||||
| 
						 | 
					@ -121,9 +121,14 @@ def convert_field_to_float(field, registry=None):
 | 
				
			||||||
    return Float(description=field.help_text, required=not field.null)
 | 
					    return Float(description=field.help_text, required=not field.null)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@convert_django_field.register(models.DateTimeField)
 | 
				
			||||||
 | 
					def convert_datetime_to_string(field, registry=None):
 | 
				
			||||||
 | 
					    return DateTime(description=field.help_text, required=not field.null)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@convert_django_field.register(models.DateField)
 | 
					@convert_django_field.register(models.DateField)
 | 
				
			||||||
def convert_date_to_string(field, registry=None):
 | 
					def convert_date_to_string(field, registry=None):
 | 
				
			||||||
    return DateTime(description=field.help_text, required=not field.null)
 | 
					    return Date(description=field.help_text, required=not field.null)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@convert_django_field.register(models.TimeField)
 | 
					@convert_django_field.register(models.TimeField)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -157,8 +157,8 @@ def test_filter_shortcut_filterset_context():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com')
 | 
					    r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com')
 | 
				
			||||||
    r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com')
 | 
					    r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com')
 | 
				
			||||||
    Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1, editor=r1)
 | 
					    Article.objects.create(headline='a1', pub_date=datetime.now(), pub_date_time=datetime.now(), reporter=r1, editor=r1)
 | 
				
			||||||
    Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2, editor=r2)
 | 
					    Article.objects.create(headline='a2', pub_date=datetime.now(), pub_date_time=datetime.now(), reporter=r2, editor=r2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class context(object):
 | 
					    class context(object):
 | 
				
			||||||
        reporter = r2
 | 
					        reporter = r2
 | 
				
			||||||
| 
						 | 
					@ -245,8 +245,8 @@ def test_filter_filterset_related_results():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com')
 | 
					    r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com')
 | 
				
			||||||
    r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com')
 | 
					    r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com')
 | 
				
			||||||
    Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1)
 | 
					    Article.objects.create(headline='a1', pub_date=datetime.now(), pub_date_time=datetime.now(), reporter=r1)
 | 
				
			||||||
    Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2)
 | 
					    Article.objects.create(headline='a2', pub_date=datetime.now(), pub_date_time=datetime.now(), reporter=r2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    query = '''
 | 
					    query = '''
 | 
				
			||||||
    query {
 | 
					    query {
 | 
				
			||||||
| 
						 | 
					@ -464,6 +464,7 @@ def test_should_query_filter_node_limit():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 1',
 | 
					        headline='Article Node 1',
 | 
				
			||||||
        pub_date=datetime.now(),
 | 
					        pub_date=datetime.now(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='es'
 | 
					        lang='es'
 | 
				
			||||||
| 
						 | 
					@ -471,6 +472,7 @@ def test_should_query_filter_node_limit():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 2',
 | 
					        headline='Article Node 2',
 | 
				
			||||||
        pub_date=datetime.now(),
 | 
					        pub_date=datetime.now(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='en'
 | 
					        lang='en'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,9 +92,13 @@ def convert_serializer_field_to_float(field):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@get_graphene_type_from_serializer_field.register(serializers.DateTimeField)
 | 
					@get_graphene_type_from_serializer_field.register(serializers.DateTimeField)
 | 
				
			||||||
 | 
					def convert_serializer_field_to_datetime_time(field):
 | 
				
			||||||
 | 
					    return graphene.types.datetime.DateTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@get_graphene_type_from_serializer_field.register(serializers.DateField)
 | 
					@get_graphene_type_from_serializer_field.register(serializers.DateField)
 | 
				
			||||||
def convert_serializer_field_to_date_time(field):
 | 
					def convert_serializer_field_to_date_time(field):
 | 
				
			||||||
    return graphene.types.datetime.DateTime
 | 
					    return graphene.types.datetime.Date
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@get_graphene_type_from_serializer_field.register(serializers.TimeField)
 | 
					@get_graphene_type_from_serializer_field.register(serializers.TimeField)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,8 +87,8 @@ def test_should_date_time_convert_datetime():
 | 
				
			||||||
    assert_conversion(serializers.DateTimeField, graphene.types.datetime.DateTime)
 | 
					    assert_conversion(serializers.DateTimeField, graphene.types.datetime.DateTime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_should_date_convert_datetime():
 | 
					def test_should_date_convert_date():
 | 
				
			||||||
    assert_conversion(serializers.DateField, graphene.types.datetime.DateTime)
 | 
					    assert_conversion(serializers.DateField, graphene.types.datetime.Date)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_should_time_convert_time():
 | 
					def test_should_time_convert_time():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,7 @@ class Reporter(models.Model):
 | 
				
			||||||
class Article(models.Model):
 | 
					class Article(models.Model):
 | 
				
			||||||
    headline = models.CharField(max_length=100)
 | 
					    headline = models.CharField(max_length=100)
 | 
				
			||||||
    pub_date = models.DateField()
 | 
					    pub_date = models.DateField()
 | 
				
			||||||
 | 
					    pub_date_time = models.DateTimeField()
 | 
				
			||||||
    reporter = models.ForeignKey(Reporter, related_name='articles')
 | 
					    reporter = models.ForeignKey(Reporter, related_name='articles')
 | 
				
			||||||
    editor = models.ForeignKey(Reporter, related_name='edited_articles_+')
 | 
					    editor = models.ForeignKey(Reporter, related_name='edited_articles_+')
 | 
				
			||||||
    lang = models.CharField(max_length=2, help_text='Language', choices=[
 | 
					    lang = models.CharField(max_length=2, help_text='Language', choices=[
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ from py.test import raises
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import graphene
 | 
					import graphene
 | 
				
			||||||
from graphene.relay import ConnectionField, Node
 | 
					from graphene.relay import ConnectionField, Node
 | 
				
			||||||
from graphene.types.datetime import DateTime, Time
 | 
					from graphene.types.datetime import DateTime, Date, Time
 | 
				
			||||||
from graphene.types.json import JSONString
 | 
					from graphene.types.json import JSONString
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ..compat import JSONField, ArrayField, HStoreField, RangeField, MissingType
 | 
					from ..compat import JSONField, ArrayField, HStoreField, RangeField, MissingType
 | 
				
			||||||
| 
						 | 
					@ -38,9 +38,12 @@ def test_should_unknown_django_field_raise_exception():
 | 
				
			||||||
        convert_django_field(None)
 | 
					        convert_django_field(None)
 | 
				
			||||||
    assert 'Don\'t know how to convert the Django field' in str(excinfo.value)
 | 
					    assert 'Don\'t know how to convert the Django field' in str(excinfo.value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test_should_date_time_convert_string():
 | 
				
			||||||
 | 
					    assert_conversion(models.DateTimeField, DateTime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_should_date_convert_string():
 | 
					def test_should_date_convert_string():
 | 
				
			||||||
    assert_conversion(models.DateField, DateTime)
 | 
					    assert_conversion(models.DateField, Date)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_should_time_convert_string():
 | 
					def test_should_time_convert_string():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,8 @@ def test_should_date_convert_string():
 | 
				
			||||||
def test_should_time_convert_string():
 | 
					def test_should_time_convert_string():
 | 
				
			||||||
    assert_conversion(forms.TimeField, graphene.String)
 | 
					    assert_conversion(forms.TimeField, graphene.String)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test_should_date_convert_string():
 | 
				
			||||||
 | 
					    assert_conversion(forms.DateField, graphene.String)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_should_date_time_convert_string():
 | 
					def test_should_date_time_convert_string():
 | 
				
			||||||
    assert_conversion(forms.DateTimeField, graphene.String)
 | 
					    assert_conversion(forms.DateTimeField, graphene.String)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -371,6 +371,7 @@ def test_should_query_node_filtering():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 1',
 | 
					        headline='Article Node 1',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='es'
 | 
					        lang='es'
 | 
				
			||||||
| 
						 | 
					@ -378,6 +379,7 @@ def test_should_query_node_filtering():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 2',
 | 
					        headline='Article Node 2',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='en'
 | 
					        lang='en'
 | 
				
			||||||
| 
						 | 
					@ -453,6 +455,7 @@ def test_should_query_node_multiple_filtering():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 1',
 | 
					        headline='Article Node 1',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='es'
 | 
					        lang='es'
 | 
				
			||||||
| 
						 | 
					@ -460,6 +463,7 @@ def test_should_query_node_multiple_filtering():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 2',
 | 
					        headline='Article Node 2',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='es'
 | 
					        lang='es'
 | 
				
			||||||
| 
						 | 
					@ -467,6 +471,7 @@ def test_should_query_node_multiple_filtering():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 3',
 | 
					        headline='Article Node 3',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='en'
 | 
					        lang='en'
 | 
				
			||||||
| 
						 | 
					@ -842,6 +847,7 @@ def test_should_query_dataloader_fields():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 1',
 | 
					        headline='Article Node 1',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='es'
 | 
					        lang='es'
 | 
				
			||||||
| 
						 | 
					@ -849,6 +855,7 @@ def test_should_query_dataloader_fields():
 | 
				
			||||||
    Article.objects.create(
 | 
					    Article.objects.create(
 | 
				
			||||||
        headline='Article Node 2',
 | 
					        headline='Article Node 2',
 | 
				
			||||||
        pub_date=datetime.date.today(),
 | 
					        pub_date=datetime.date.today(),
 | 
				
			||||||
 | 
					        pub_date_time=datetime.datetime.now(),
 | 
				
			||||||
        reporter=r,
 | 
					        reporter=r,
 | 
				
			||||||
        editor=r,
 | 
					        editor=r,
 | 
				
			||||||
        lang='en'
 | 
					        lang='en'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@ def test_django_objecttype_map_correct_fields():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_django_objecttype_with_node_have_correct_fields():
 | 
					def test_django_objecttype_with_node_have_correct_fields():
 | 
				
			||||||
    fields = Article._meta.fields
 | 
					    fields = Article._meta.fields
 | 
				
			||||||
    assert list(fields.keys()) == ['id', 'headline', 'pub_date', 'reporter', 'editor', 'lang', 'importance']
 | 
					    assert list(fields.keys()) == ['id', 'headline', 'pub_date', 'pub_date_time', 'reporter', 'editor', 'lang', 'importance']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_django_objecttype_with_custom_meta():
 | 
					def test_django_objecttype_with_custom_meta():
 | 
				
			||||||
| 
						 | 
					@ -96,7 +96,8 @@ schema {
 | 
				
			||||||
type Article implements Node {
 | 
					type Article implements Node {
 | 
				
			||||||
  id: ID!
 | 
					  id: ID!
 | 
				
			||||||
  headline: String!
 | 
					  headline: String!
 | 
				
			||||||
  pubDate: DateTime!
 | 
					  pubDate: Date!
 | 
				
			||||||
 | 
					  pubDateTime: DateTime!
 | 
				
			||||||
  reporter: Reporter!
 | 
					  reporter: Reporter!
 | 
				
			||||||
  editor: Reporter!
 | 
					  editor: Reporter!
 | 
				
			||||||
  lang: ArticleLang!
 | 
					  lang: ArticleLang!
 | 
				
			||||||
| 
						 | 
					@ -124,6 +125,8 @@ enum ArticleLang {
 | 
				
			||||||
  EN
 | 
					  EN
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					scalar Date
 | 
				
			||||||
 | 
					
 | 
				
			||||||
scalar DateTime
 | 
					scalar DateTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface Node {
 | 
					interface Node {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user