Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v4.4.beta.1 #19

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion graphene_mongo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from .types import MongoengineInputType, MongoengineInterfaceType, MongoengineObjectType
from .types_async import AsyncMongoengineObjectType

__version__ = "0.4.2"
__version__ = "0.4.4"

__all__ = [
"__version__",
Expand Down
60 changes: 38 additions & 22 deletions graphene_mongo/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from .utils import (
get_field_description,
get_query_fields,
get_field_is_required,
ExecutorEnum,
sync_to_async,
)
Expand All @@ -34,71 +35,86 @@ def convert_mongoengine_field(field, registry=None, executor: ExecutorEnum = Exe
@convert_mongoengine_field.register(mongoengine.URLField)
def convert_field_to_string(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.String(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.UUIDField)
@convert_mongoengine_field.register(mongoengine.ObjectIdField)
def convert_field_to_id(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.ID(description=get_field_description(field, registry), required=field.required)
return graphene.ID(
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.IntField)
@convert_mongoengine_field.register(mongoengine.LongField)
@convert_mongoengine_field.register(mongoengine.SequenceField)
def convert_field_to_int(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Int(description=get_field_description(field, registry), required=field.required)
return graphene.Int(
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.BooleanField)
def convert_field_to_boolean(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Boolean(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.FloatField)
def convert_field_to_float(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Float(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.Decimal128Field)
@convert_mongoengine_field.register(mongoengine.DecimalField)
def convert_field_to_decimal(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Decimal(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.DateTimeField)
def convert_field_to_datetime(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.DateTime(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.DateField)
def convert_field_to_date(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Date(
description=get_field_description(field, registry), required=field.required
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.DictField)
@convert_mongoengine_field.register(mongoengine.MapField)
def convert_field_to_jsonstring(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return JSONString(description=get_field_description(field, registry), required=field.required)
return JSONString(
description=get_field_description(field, registry),
required=get_field_is_required(field, registry),
)


@convert_mongoengine_field.register(mongoengine.PointField)
def convert_point_to_field(field, registry=None, executor: ExecutorEnum = ExecutorEnum.SYNC):
return graphene.Field(
advanced_types.PointFieldType,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)


Expand All @@ -107,7 +123,7 @@ def convert_polygon_to_field(field, registry=None, executor: ExecutorEnum = Exec
return graphene.Field(
advanced_types.PolygonFieldType,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)


Expand All @@ -116,7 +132,7 @@ def convert_multipolygon_to_field(field, registry=None, executor: ExecutorEnum =
return graphene.Field(
advanced_types.MultiPolygonFieldType,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)


Expand All @@ -125,7 +141,7 @@ def convert_file_to_field(field, registry=None, executor: ExecutorEnum = Executo
return graphene.Field(
advanced_types.FileFieldType,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)


Expand Down Expand Up @@ -298,15 +314,15 @@ async def reference_resolver_async(root, *args, **kwargs):
return graphene.List(
base_type._type,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
resolver=reference_resolver
if executor == ExecutorEnum.SYNC
else reference_resolver_async,
)
return graphene.List(
base_type._type,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)
if isinstance(base_type, (graphene.Dynamic)):
base_type = base_type.get_type()
Expand All @@ -327,7 +343,7 @@ async def reference_resolver_async(root, *args, **kwargs):
return graphene.List(
base_type,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)


Expand Down Expand Up @@ -491,7 +507,7 @@ async def lazy_reference_resolver_async(root, *args, **kwargs):
field_resolver = None
required = False
if field.db_field is not None:
required = field.required
required = get_field_is_required(field, registry)
resolver_function = getattr(
registry.get_type_for_model(field.owner_document, executor=executor),
"resolve_" + field.db_field,
Expand All @@ -516,7 +532,7 @@ async def lazy_reference_resolver_async(root, *args, **kwargs):
field_resolver = None
required = False
if field.db_field is not None:
required = field.required
required = get_field_is_required(field, registry)
resolver_function = getattr(
registry.get_type_for_model(field.owner_document, executor=executor),
"resolve_" + field.db_field,
Expand Down Expand Up @@ -658,12 +674,12 @@ def dynamic_type():
return graphene.Field(
_type,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)
field_resolver = None
required = False
if field.db_field is not None:
required = field.required
required = get_field_is_required(field, registry)
resolver_function = getattr(
registry.get_type_for_model(field.owner_document, executor=executor),
"resolve_" + field.db_field,
Expand Down Expand Up @@ -760,7 +776,7 @@ def dynamic_type():
field_resolver = None
required = False
if field.db_field is not None:
required = field.required
required = get_field_is_required(field, registry)
resolver_function = getattr(
registry.get_type_for_model(field.owner_document, executor=executor),
"resolve_" + field.db_field,
Expand Down Expand Up @@ -790,5 +806,5 @@ def convert_field_to_enum(field, registry=None, executor: ExecutorEnum = Executo
return graphene.Field(
_type,
description=get_field_description(field, registry),
required=field.required,
required=get_field_is_required(field, registry),
)
10 changes: 10 additions & 0 deletions graphene_mongo/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,23 @@ def get_field_description(field, registry=None):
parts.append(field.verbose_name.title())
if hasattr(field, "help_text"):
parts.append(field.help_text)
if hasattr(field, "description"):
parts.append(field.description)
if field.db_field != field.name:
name_format = "(%s)" if parts else "%s"
parts.append(name_format % field.db_field)

return "\n".join(parts)


def get_field_is_required(field, registry=None):
"""
A field is said to be required in gql only if
field.required = True and field.null = False
"""
return field.required and not field.null


def get_node_from_global_id(node, info, global_id):
try:
for interface in node._meta.interfaces:
Expand Down
Loading
Loading