Skip to content

Commit 3fc340d

Browse files
Support added for PointFieldType in agrs
Support added for max_distance filter in PointFieldType
1 parent 3b16cf9 commit 3fc340d

File tree

2 files changed

+31
-27
lines changed

2 files changed

+31
-27
lines changed

graphene_mongo/fields.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,13 @@ def filter_args(self):
149149
if self._type._meta.filter_fields:
150150
for field, filter_collection in self._type._meta.filter_fields.items():
151151
for each in filter_collection:
152-
filter_type = getattr(
153-
graphene,
154-
str(self._type._meta.fields[field].type).replace("!", ""),
155-
)
152+
if each == 'max_distance' and str(self._type._meta.fields[field].type) == 'PointFieldType':
153+
filter_type = graphene.Int
154+
else:
155+
filter_type = getattr(
156+
graphene,
157+
str(self._type._meta.fields[field].type).replace("!", ""),
158+
)
156159

157160
# handle special cases
158161
advanced_filter_types = {
@@ -175,10 +178,8 @@ def get_reference_field(r, kv):
175178
mongo_field = getattr(self.model, kv[0], None)
176179
if isinstance(
177180
mongo_field,
178-
(mongoengine.LazyReferenceField, mongoengine.ReferenceField),
181+
(mongoengine.LazyReferenceField, mongoengine.ReferenceField, mongoengine.GenericReferenceField),
179182
):
180-
field = convert_mongoengine_field(mongo_field, self.registry)
181-
if isinstance(mongo_field, mongoengine.GenericReferenceField):
182183
r.update({kv[0]: graphene.ID()})
183184
return r
184185
if callable(getattr(field, "get_type", None)):
@@ -216,6 +217,10 @@ def get_queryset(self, model, info, required_fields=list(), skip=None, limit=Non
216217
reference_obj = get_document(self.registry._registry_string_map[from_global_id(arg)[0]])(
217218
pk=from_global_id(arg)[1])
218219
hydrated_references[arg_name] = reference_obj
220+
elif '__near' in arg_name and isinstance(getattr(self.model, arg_name.split('__')[0]),
221+
mongoengine.fields.PointField):
222+
location = args.pop(arg_name, None)
223+
hydrated_references[arg_name] = location["coordinates"]
219224
elif arg_name == "id":
220225
hydrated_references["id"] = from_global_id(args.pop("id", None))[1]
221226
args.update(hydrated_references)

graphene_mongo/types.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ def construct_fields(model, registry, only_fields, exclude_fields):
4141
# Take care of list of self-reference.
4242
document_type_obj = field.field.__dict__.get("document_type_obj", None)
4343
if (
44-
document_type_obj == model._class_name
45-
or isinstance(document_type_obj, model)
46-
or document_type_obj == model
44+
document_type_obj == model._class_name
45+
or isinstance(document_type_obj, model)
46+
or document_type_obj == model
4747
):
4848
self_referenced[name] = field
4949
continue
@@ -67,7 +67,6 @@ def construct_self_referenced_fields(self_referenced, registry):
6767

6868

6969
class MongoengineObjectTypeOptions(ObjectTypeOptions):
70-
7170
model = None
7271
registry = None # type: Registry
7372
connection = None
@@ -78,22 +77,22 @@ class MongoengineObjectTypeOptions(ObjectTypeOptions):
7877
class MongoengineObjectType(ObjectType):
7978
@classmethod
8079
def __init_subclass_with_meta__(
81-
cls,
82-
model=None,
83-
registry=None,
84-
skip_registry=False,
85-
only_fields=(),
86-
required_fields=(),
87-
exclude_fields=(),
88-
filter_fields=None,
89-
connection=None,
90-
connection_class=None,
91-
use_connection=None,
92-
connection_field_class=None,
93-
interfaces=(),
94-
_meta=None,
95-
order_by=None,
96-
**options
80+
cls,
81+
model=None,
82+
registry=None,
83+
skip_registry=False,
84+
only_fields=(),
85+
required_fields=(),
86+
exclude_fields=(),
87+
filter_fields=None,
88+
connection=None,
89+
connection_class=None,
90+
use_connection=None,
91+
connection_field_class=None,
92+
interfaces=(),
93+
_meta=None,
94+
order_by=None,
95+
**options
9796
):
9897

9998
assert is_valid_mongoengine_model(model), (

0 commit comments

Comments
 (0)