Format codes

This commit is contained in:
NateScarlet 2019-06-12 23:32:42 +08:00
parent 0deb67a5be
commit ef82e7945a
No known key found for this signature in database
GPG Key ID: 5C242793B070309C
13 changed files with 240 additions and 111 deletions

View File

@ -10,24 +10,46 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = []
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Category', name="Category",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('name', models.CharField(max_length=100)), "id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='Ingredient', name="Ingredient",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('name', models.CharField(max_length=100)), "id",
('notes', models.TextField()), models.AutoField(
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ingredients', to='ingredients.Category')), auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("notes", models.TextField()),
(
"category",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="ingredients",
to="ingredients.Category",
),
),
], ],
), ),
] ]

View File

@ -7,14 +7,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("ingredients", "0001_initial")]
('ingredients', '0001_initial'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='ingredient', model_name="ingredient",
name='notes', name="notes",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), )
] ]

View File

@ -5,13 +5,10 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("ingredients", "0002_auto_20161104_0050")]
('ingredients', '0002_auto_20161104_0050'),
]
operations = [ operations = [
migrations.AlterModelOptions( migrations.AlterModelOptions(
name='category', name="category", options={"verbose_name_plural": "Categories"}
options={'verbose_name_plural': 'Categories'}, )
),
] ]

View File

@ -10,27 +10,61 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [("ingredients", "0001_initial")]
('ingredients', '0001_initial'),
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Recipe', name="Recipe",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=100)), "id",
('instructions', models.TextField()), models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=100)),
("instructions", models.TextField()),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='RecipeIngredient', name="RecipeIngredient",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('amount', models.FloatField()), "id",
('unit', models.CharField(choices=[('kg', 'Kilograms'), ('l', 'Litres'), ('', 'Units')], max_length=20)), models.AutoField(
('ingredient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='used_by', to='ingredients.Ingredient')), auto_created=True,
('recipes', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='amounts', to='recipes.Recipe')), primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("amount", models.FloatField()),
(
"unit",
models.CharField(
choices=[("kg", "Kilograms"), ("l", "Litres"), ("", "Units")],
max_length=20,
),
),
(
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="used_by",
to="ingredients.Ingredient",
),
),
(
"recipes",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="amounts",
to="recipes.Recipe",
),
),
], ],
), ),
] ]

View File

@ -7,19 +7,23 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("recipes", "0001_initial")]
('recipes', '0001_initial'),
]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name='recipeingredient', model_name="recipeingredient", old_name="recipes", new_name="recipe"
old_name='recipes',
new_name='recipe',
), ),
migrations.AlterField( migrations.AlterField(
model_name='recipeingredient', model_name="recipeingredient",
name='unit', name="unit",
field=models.CharField(choices=[(b'unit', b'Units'), (b'kg', b'Kilograms'), (b'l', b'Litres'), (b'st', b'Shots')], max_length=20), field=models.CharField(
choices=[
(b"unit", b"Units"),
(b"kg", b"Kilograms"),
(b"l", b"Litres"),
(b"st", b"Shots"),
],
max_length=20,
),
), ),
] ]

View File

@ -5,14 +5,20 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("recipes", "0002_auto_20161104_0106")]
('recipes', '0002_auto_20161104_0106'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='recipeingredient', model_name="recipeingredient",
name='unit', name="unit",
field=models.CharField(choices=[('unit', 'Units'), ('kg', 'Kilograms'), ('l', 'Litres'), ('st', 'Shots')], max_length=20), field=models.CharField(
), choices=[
("unit", "Units"),
("kg", "Kilograms"),
("l", "Litres"),
("st", "Shots"),
],
max_length=20,
),
)
] ]

View File

@ -10,24 +10,46 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = []
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Category', name="Category",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('name', models.CharField(max_length=100)), "id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='Ingredient', name="Ingredient",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('name', models.CharField(max_length=100)), "id",
('notes', models.TextField()), models.AutoField(
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ingredients', to='ingredients.Category')), auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("notes", models.TextField()),
(
"category",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="ingredients",
to="ingredients.Category",
),
),
], ],
), ),
] ]

View File

@ -7,14 +7,12 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("ingredients", "0001_initial")]
('ingredients', '0001_initial'),
]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='ingredient', model_name="ingredient",
name='notes', name="notes",
field=models.TextField(blank=True, null=True), field=models.TextField(blank=True, null=True),
), )
] ]

View File

@ -10,27 +10,61 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [("ingredients", "0001_initial")]
('ingredients', '0001_initial'),
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Recipe', name="Recipe",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=100)), "id",
('instructions', models.TextField()), models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=100)),
("instructions", models.TextField()),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='RecipeIngredient', name="RecipeIngredient",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('amount', models.FloatField()), "id",
('unit', models.CharField(choices=[('kg', 'Kilograms'), ('l', 'Litres'), ('', 'Units')], max_length=20)), models.AutoField(
('ingredient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='used_by', to='ingredients.Ingredient')), auto_created=True,
('recipes', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='amounts', to='recipes.Recipe')), primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("amount", models.FloatField()),
(
"unit",
models.CharField(
choices=[("kg", "Kilograms"), ("l", "Litres"), ("", "Units")],
max_length=20,
),
),
(
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="used_by",
to="ingredients.Ingredient",
),
),
(
"recipes",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="amounts",
to="recipes.Recipe",
),
),
], ],
), ),
] ]

View File

@ -7,19 +7,23 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [("recipes", "0001_initial")]
('recipes', '0001_initial'),
]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name='recipeingredient', model_name="recipeingredient", old_name="recipes", new_name="recipe"
old_name='recipes',
new_name='recipe',
), ),
migrations.AlterField( migrations.AlterField(
model_name='recipeingredient', model_name="recipeingredient",
name='unit', name="unit",
field=models.CharField(choices=[(b'unit', b'Units'), (b'kg', b'Kilograms'), (b'l', b'Litres'), (b'st', b'Shots')], max_length=20), field=models.CharField(
choices=[
(b"unit", b"Units"),
(b"kg", b"Kilograms"),
(b"l", b"Litres"),
(b"st", b"Shots"),
],
max_length=20,
),
), ),
] ]

View File

@ -122,15 +122,16 @@ class DjangoConnectionField(ConnectionField):
@classmethod @classmethod
def connection_resolver( def connection_resolver(
cls, cls,
resolver, resolver,
connection, connection,
default_manager, default_manager,
max_limit, max_limit,
enforce_first_or_last, enforce_first_or_last,
root, root,
info, info,
**kwargs): **kwargs
):
# By current `connection_from_list_slice` implementation, # By current `connection_from_list_slice` implementation,
# `last` means last N items in the selection, # `last` means last N items in the selection,
@ -140,26 +141,34 @@ class DjangoConnectionField(ConnectionField):
last = kwargs.get("last") last = kwargs.get("last")
if first is not None and first <= 0: if first is not None and first <= 0:
raise ValueError( raise ValueError(
"`first` argument must be positive, got `{first}`".format(first=first)) "`first` argument must be positive, got `{first}`".format(first=first)
)
if last is not None and last <= 0: if last is not None and last <= 0:
raise ValueError( raise ValueError(
"`last` argument must be positive, got `{last}`".format(last=last)) "`last` argument must be positive, got `{last}`".format(last=last)
)
if enforce_first_or_last and not (first or last): if enforce_first_or_last and not (first or last):
raise ValueError( raise ValueError(
"You must provide a `first` or `last` value " "You must provide a `first` or `last` value "
"to properly paginate the `{info.field_name}` connection.".format(info=info)) "to properly paginate the `{info.field_name}` connection.".format(
info=info
)
)
if not max_limit: if not max_limit:
pass pass
elif first is None and last is None: elif first is None and last is None:
kwargs['first'] = max_limit kwargs["first"] = max_limit
else: else:
count = min(i for i in (first, last) if i) count = min(i for i in (first, last) if i)
if count > max_limit: if count > max_limit:
raise ValueError(("Requesting {count} records " raise ValueError(
"on the `{info.field_name}` connection " (
"exceeds the limit of {max_limit} records.").format( "Requesting {count} records "
count=count, info=info, max_limit=max_limit)) "on the `{info.field_name}` connection "
"exceeds the limit of {max_limit} records."
).format(count=count, info=info, max_limit=max_limit)
)
iterable = resolver(root, info, **kwargs) iterable = resolver(root, info, **kwargs)
queryset = cls.resolve_queryset(connection, default_manager, info, kwargs) queryset = cls.resolve_queryset(connection, default_manager, info, kwargs)

View File

@ -2,13 +2,11 @@ from datetime import datetime
import pytest import pytest
from graphene import (Argument, Boolean, Field, Float, ObjectType, Schema, from graphene import Argument, Boolean, Field, Float, ObjectType, Schema, String
String)
from graphene.relay import Node from graphene.relay import Node
from graphene_django import DjangoObjectType from graphene_django import DjangoObjectType
from graphene_django.forms import (GlobalIDFormField, from graphene_django.forms import GlobalIDFormField, GlobalIDMultipleChoiceField
GlobalIDMultipleChoiceField)
from graphene_django.tests.models import Article, Pet, Reporter from graphene_django.tests.models import Article, Pet, Reporter
from graphene_django.utils import DJANGO_FILTER_INSTALLED from graphene_django.utils import DJANGO_FILTER_INSTALLED
@ -769,6 +767,7 @@ def test_annotation_is_perserved():
assert not result.errors assert not result.errors
assert result.data == expected assert result.data == expected
def test_filter_with_union(): def test_filter_with_union():
class ReporterType(DjangoObjectType): class ReporterType(DjangoObjectType):
class Meta: class Meta:
@ -783,7 +782,6 @@ def test_filter_with_union():
def resolve_all_reporters(cls, root, info, **kwargs): def resolve_all_reporters(cls, root, info, **kwargs):
ret = Reporter.objects.none() | Reporter.objects.filter(first_name="John") ret = Reporter.objects.none() | Reporter.objects.filter(first_name="John")
Reporter.objects.create(first_name="John", last_name="Doe") Reporter.objects.create(first_name="John", last_name="Doe")
schema = Schema(query=Query) schema = Schema(query=Query)

View File

@ -805,6 +805,7 @@ def test_should_error_if_negative_last():
assert str(result.errors[0]) == "`last` argument must be positive, got `-100`" assert str(result.errors[0]) == "`last` argument must be positive, got `-100`"
assert result.data == expected assert result.data == expected
def test_max_limit_is_zero(): def test_max_limit_is_zero():
graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 0 graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 0
@ -841,6 +842,7 @@ def test_max_limit_is_zero():
graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100 graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100
def test_max_limit_is_none(): def test_max_limit_is_none():
graphene_settings.RELAY_CONNECTION_MAX_LIMIT = None graphene_settings.RELAY_CONNECTION_MAX_LIMIT = None
@ -877,6 +879,7 @@ def test_max_limit_is_none():
graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100 graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100
def test_should_query_promise_connectionfields(): def test_should_query_promise_connectionfields():
from promise import Promise from promise import Promise