From 73706fa6bbe692642db28a622d28db7894506072 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 5 Dec 2017 15:01:52 -0500 Subject: [PATCH 1/7] Add on_delete atrributes to test models foreignkeys --- examples/starwars/models.py | 6 +++--- graphene_django/tests/models.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/starwars/models.py b/examples/starwars/models.py index 2f80e2712..45741da8c 100644 --- a/examples/starwars/models.py +++ b/examples/starwars/models.py @@ -5,7 +5,7 @@ class Character(models.Model): name = models.CharField(max_length=50) - ship = models.ForeignKey('Ship', blank=True, null=True, related_name='characters') + ship = models.ForeignKey('Ship', on_delete=models.CASCADE, blank=True, null=True, related_name='characters') def __str__(self): return self.name @@ -13,7 +13,7 @@ def __str__(self): class Faction(models.Model): name = models.CharField(max_length=50) - hero = models.ForeignKey(Character) + hero = models.ForeignKey(Character, on_delete=models.CASCADE) def __str__(self): return self.name @@ -21,7 +21,7 @@ def __str__(self): class Ship(models.Model): name = models.CharField(max_length=50) - faction = models.ForeignKey(Faction, related_name='ships') + faction = models.ForeignKey(Faction, on_delete=models.CASCADE, related_name='ships') def __str__(self): return self.name diff --git a/graphene_django/tests/models.py b/graphene_django/tests/models.py index 0c62f28ba..db1fca482 100644 --- a/graphene_django/tests/models.py +++ b/graphene_django/tests/models.py @@ -15,7 +15,7 @@ class Pet(models.Model): class FilmDetails(models.Model): location = models.CharField(max_length=30) - film = models.OneToOneField('Film', related_name='details') + film = models.OneToOneField('Film', on_delete=models.CASCADE, related_name='details') class Film(models.Model): @@ -37,8 +37,8 @@ def __str__(self): # __unicode__ on Python 2 class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() - reporter = models.ForeignKey(Reporter, related_name='articles') - editor = models.ForeignKey(Reporter, related_name='edited_articles_+') + reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='articles') + editor = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='edited_articles_+') lang = models.CharField(max_length=2, help_text='Language', choices=[ ('es', 'Spanish'), ('en', 'English') From 62c0694901cb0e4f711750bebb2901d509088cc0 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 5 Dec 2017 15:04:29 -0500 Subject: [PATCH 2/7] models.DateField corresponds to graphene Date Scalar --- graphene_django/converter.py | 9 +++++++-- graphene_django/filter/tests/test_fields.py | 10 ++++++---- graphene_django/rest_framework/serializer_converter.py | 6 +++++- .../rest_framework/tests/test_field_converter.py | 4 ++-- graphene_django/tests/models.py | 1 + graphene_django/tests/test_converter.py | 7 +++++-- graphene_django/tests/test_form_converter.py | 2 ++ graphene_django/tests/test_query.py | 7 +++++++ graphene_django/tests/test_types.py | 7 +++++-- 9 files changed, 40 insertions(+), 13 deletions(-) diff --git a/graphene_django/converter.py b/graphene_django/converter.py index dff77a8be..fa771e287 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -3,7 +3,7 @@ from graphene import (ID, Boolean, Dynamic, Enum, Field, Float, Int, List, 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.utils.str_converters import to_camel_case, to_const from graphql import assert_valid_name @@ -121,11 +121,16 @@ def convert_field_to_float(field, registry=None): return Float(description=field.help_text, required=not field.null) -@convert_django_field.register(models.DateField) +@convert_django_field.register(models.DateTimeField) def convert_date_to_string(field, registry=None): return DateTime(description=field.help_text, required=not field.null) +@convert_django_field.register(models.DateField) +def convert_date_to_string(field, registry=None): + return Date(description=field.help_text, required=not field.null) + + @convert_django_field.register(models.TimeField) def convert_time_to_string(field, registry=None): return Time(description=field.help_text, required=not field.null) diff --git a/graphene_django/filter/tests/test_fields.py b/graphene_django/filter/tests/test_fields.py index 258da3e61..c730ef391 100644 --- a/graphene_django/filter/tests/test_fields.py +++ b/graphene_django/filter/tests/test_fields.py @@ -157,8 +157,8 @@ class Query(ObjectType): 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') - Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1, editor=r1) - Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2, editor=r2) + 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(), pub_date_time=datetime.now(), reporter=r2, editor=r2) class context(object): reporter = r2 @@ -245,8 +245,8 @@ class Query(ObjectType): 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') - Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1) - Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2) + 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(), pub_date_time=datetime.now(), reporter=r2) query = ''' query { @@ -464,6 +464,7 @@ def resolve_all_reporters(self, info, **args): Article.objects.create( headline='Article Node 1', pub_date=datetime.now(), + pub_date_time=datetime.now(), reporter=r, editor=r, lang='es' @@ -471,6 +472,7 @@ def resolve_all_reporters(self, info, **args): Article.objects.create( headline='Article Node 2', pub_date=datetime.now(), + pub_date_time=datetime.now(), reporter=r, editor=r, lang='en' diff --git a/graphene_django/rest_framework/serializer_converter.py b/graphene_django/rest_framework/serializer_converter.py index 6a57f5f77..0c10a65e3 100644 --- a/graphene_django/rest_framework/serializer_converter.py +++ b/graphene_django/rest_framework/serializer_converter.py @@ -92,11 +92,15 @@ def convert_serializer_field_to_float(field): @get_graphene_type_from_serializer_field.register(serializers.DateTimeField) -@get_graphene_type_from_serializer_field.register(serializers.DateField) def convert_serializer_field_to_date_time(field): return graphene.types.datetime.DateTime +@get_graphene_type_from_serializer_field.register(serializers.DateField) +def convert_serializer_field_to_date_time(field): + return graphene.types.datetime.Date + + @get_graphene_type_from_serializer_field.register(serializers.TimeField) def convert_serializer_field_to_time(field): return graphene.types.datetime.Time diff --git a/graphene_django/rest_framework/tests/test_field_converter.py b/graphene_django/rest_framework/tests/test_field_converter.py index 623cf5885..ec851c23f 100644 --- a/graphene_django/rest_framework/tests/test_field_converter.py +++ b/graphene_django/rest_framework/tests/test_field_converter.py @@ -87,8 +87,8 @@ def test_should_date_time_convert_datetime(): assert_conversion(serializers.DateTimeField, graphene.types.datetime.DateTime) -def test_should_date_convert_datetime(): - assert_conversion(serializers.DateField, graphene.types.datetime.DateTime) +def test_should_date_convert_date(): + assert_conversion(serializers.DateField, graphene.types.datetime.Date) def test_should_time_convert_time(): diff --git a/graphene_django/tests/models.py b/graphene_django/tests/models.py index db1fca482..56fcecf79 100644 --- a/graphene_django/tests/models.py +++ b/graphene_django/tests/models.py @@ -37,6 +37,7 @@ def __str__(self): # __unicode__ on Python 2 class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() + pub_date_time = models.DateTimeField() reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='articles') editor = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='edited_articles_+') lang = models.CharField(max_length=2, help_text='Language', choices=[ diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index d61610694..3dd2963e5 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -5,7 +5,7 @@ import graphene 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 ..compat import JSONField, ArrayField, HStoreField, RangeField, MissingType @@ -38,9 +38,12 @@ def test_should_unknown_django_field_raise_exception(): convert_django_field(None) 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(): - assert_conversion(models.DateField, DateTime) + assert_conversion(models.DateField, Date) def test_should_time_convert_string(): diff --git a/graphene_django/tests/test_form_converter.py b/graphene_django/tests/test_form_converter.py index 5a13554b1..97932d8f7 100644 --- a/graphene_django/tests/test_form_converter.py +++ b/graphene_django/tests/test_form_converter.py @@ -30,6 +30,8 @@ def test_should_date_convert_string(): def test_should_time_convert_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(): assert_conversion(forms.DateTimeField, graphene.String) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 0dece3f61..96e0f3251 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -371,6 +371,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 1', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='es' @@ -378,6 +379,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 2', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='en' @@ -453,6 +455,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 1', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='es' @@ -460,6 +463,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 2', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='es' @@ -467,6 +471,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 3', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='en' @@ -692,6 +697,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 1', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='es' @@ -699,6 +705,7 @@ class Query(graphene.ObjectType): Article.objects.create( headline='Article Node 2', pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), reporter=r, editor=r, lang='en' diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 83d9b4070..0e0679be4 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -64,7 +64,7 @@ def test_django_objecttype_map_correct_fields(): def test_django_objecttype_with_node_have_correct_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_schema_representation(): @@ -76,7 +76,8 @@ def test_schema_representation(): type Article implements Node { id: ID! headline: String! - pubDate: DateTime! + pubDate: Date! + pubDateTime: DateTime! reporter: Reporter! editor: Reporter! lang: ArticleLang! @@ -104,6 +105,8 @@ def test_schema_representation(): EN } +scalar Date + scalar DateTime interface Node { From c952ef1a880e271303bdcc7887b293fb5130eac6 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 18 Dec 2017 12:21:49 -0500 Subject: [PATCH 3/7] Date Scalar only added in graphene 2.0.1 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index beee83c86..e31f87bf4 100644 --- a/setup.py +++ b/setup.py @@ -57,7 +57,7 @@ install_requires=[ 'six>=1.10.0', - 'graphene>=2.0,<3', + 'graphene>=2.0.1,<3', 'Django>=1.8.0', 'iso8601', 'singledispatch>=3.4.0.3', From fe35baa627cce4c8bca671df6e677d93bfefb96e Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 6 Dec 2017 15:10:50 -0500 Subject: [PATCH 4/7] Fix merge conflict --- setup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup.py b/setup.py index e31f87bf4..b4a16335d 100644 --- a/setup.py +++ b/setup.py @@ -24,6 +24,7 @@ 'pytest-django==2.9.1', ] + rest_framework_require +django_version = 'Django>=1.8.0,<2' if sys.version_info[0] < 3 else 'Django>=1.8.0' setup( name='graphene-django', version=version, @@ -59,6 +60,7 @@ 'six>=1.10.0', 'graphene>=2.0.1,<3', 'Django>=1.8.0', + django_version, 'iso8601', 'singledispatch>=3.4.0.3', 'promise>=2.1', From 1352d4e02b0fe21c65ddeadc454ded07fe9523c2 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 18 Dec 2017 12:33:42 -0500 Subject: [PATCH 5/7] Fix func names --- graphene_django/converter.py | 2 +- graphene_django/rest_framework/serializer_converter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/graphene_django/converter.py b/graphene_django/converter.py index fa771e287..dbcbbd51b 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -122,7 +122,7 @@ def convert_field_to_float(field, registry=None): @convert_django_field.register(models.DateTimeField) -def convert_date_to_string(field, registry=None): +def convert_datetime_to_string(field, registry=None): return DateTime(description=field.help_text, required=not field.null) diff --git a/graphene_django/rest_framework/serializer_converter.py b/graphene_django/rest_framework/serializer_converter.py index 0c10a65e3..44cb01d3a 100644 --- a/graphene_django/rest_framework/serializer_converter.py +++ b/graphene_django/rest_framework/serializer_converter.py @@ -92,7 +92,7 @@ def convert_serializer_field_to_float(field): @get_graphene_type_from_serializer_field.register(serializers.DateTimeField) -def convert_serializer_field_to_date_time(field): +def convert_serializer_field_to_datetime_time(field): return graphene.types.datetime.DateTime From 1bf5da2a8da5c68196437e558aef3ff0bdabb5a4 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 3 Feb 2018 18:32:18 -0500 Subject: [PATCH 6/7] Remove commits related to django 2.0 support from pull request --- examples/starwars/models.py | 6 +++--- graphene_django/tests/models.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/starwars/models.py b/examples/starwars/models.py index 45741da8c..2f80e2712 100644 --- a/examples/starwars/models.py +++ b/examples/starwars/models.py @@ -5,7 +5,7 @@ class Character(models.Model): name = models.CharField(max_length=50) - ship = models.ForeignKey('Ship', on_delete=models.CASCADE, blank=True, null=True, related_name='characters') + ship = models.ForeignKey('Ship', blank=True, null=True, related_name='characters') def __str__(self): return self.name @@ -13,7 +13,7 @@ def __str__(self): class Faction(models.Model): name = models.CharField(max_length=50) - hero = models.ForeignKey(Character, on_delete=models.CASCADE) + hero = models.ForeignKey(Character) def __str__(self): return self.name @@ -21,7 +21,7 @@ def __str__(self): class Ship(models.Model): name = models.CharField(max_length=50) - faction = models.ForeignKey(Faction, on_delete=models.CASCADE, related_name='ships') + faction = models.ForeignKey(Faction, related_name='ships') def __str__(self): return self.name diff --git a/graphene_django/tests/models.py b/graphene_django/tests/models.py index 56fcecf79..375dcc73d 100644 --- a/graphene_django/tests/models.py +++ b/graphene_django/tests/models.py @@ -15,7 +15,7 @@ class Pet(models.Model): class FilmDetails(models.Model): location = models.CharField(max_length=30) - film = models.OneToOneField('Film', on_delete=models.CASCADE, related_name='details') + film = models.OneToOneField('Film', related_name='details') class Film(models.Model): @@ -38,8 +38,8 @@ class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() pub_date_time = models.DateTimeField() - reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='articles') - editor = models.ForeignKey(Reporter, on_delete=models.CASCADE, related_name='edited_articles_+') + reporter = models.ForeignKey(Reporter, related_name='articles') + editor = models.ForeignKey(Reporter, related_name='edited_articles_+') lang = models.CharField(max_length=2, help_text='Language', choices=[ ('es', 'Spanish'), ('en', 'English') From da3bb5eea8987f58eb466d27095cbca048167f8d Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 3 Feb 2018 18:35:38 -0500 Subject: [PATCH 7/7] Bump graphene-django version --- graphene_django/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphene_django/__init__.py b/graphene_django/__init__.py index 5ba360f36..bb328a7e3 100644 --- a/graphene_django/__init__.py +++ b/graphene_django/__init__.py @@ -5,7 +5,7 @@ DjangoConnectionField, ) -__version__ = '2.0.0' +__version__ = '2.0.1' __all__ = [ '__version__',