summaryrefslogtreecommitdiff
path: root/mongoengine/fields.py
diff options
context:
space:
mode:
Diffstat (limited to 'mongoengine/fields.py')
-rw-r--r--mongoengine/fields.py32
1 files changed, 18 insertions, 14 deletions
diff --git a/mongoengine/fields.py b/mongoengine/fields.py
index 40469bf..a5ebba2 100644
--- a/mongoengine/fields.py
+++ b/mongoengine/fields.py
@@ -6,6 +6,7 @@ import re
import socket
import time
import uuid
+from inspect import isclass
from io import BytesIO
from operator import itemgetter
@@ -48,8 +49,12 @@ from mongoengine.queryset.transform import STRING_OPERATORS
try:
from PIL import Image, ImageOps
- LANCZOS = Image.LANCZOS if hasattr(Image, "LANCZOS") else Image.ANTIALIAS
+ if hasattr(Image, "Resampling"):
+ LANCZOS = Image.Resampling.LANCZOS
+ else:
+ LANCZOS = Image.LANCZOS
except ImportError:
+ # pillow is optional so may not be installed
Image = None
ImageOps = None
@@ -707,7 +712,6 @@ class EmbeddedDocumentField(BaseField):
"""
def __init__(self, document_type, **kwargs):
- # XXX ValidationError raised outside of the "validate" method.
if not (
isinstance(document_type, str)
or issubclass(document_type, EmbeddedDocument)
@@ -910,9 +914,9 @@ class ListField(ComplexBaseField):
Required means it cannot be empty - as the default for ListFields is []
"""
- def __init__(self, field=None, max_length=None, **kwargs):
+ def __init__(self, field=None, *, max_length=None, **kwargs):
self.max_length = max_length
- kwargs.setdefault("default", lambda: [])
+ kwargs.setdefault("default", list)
super().__init__(field=field, **kwargs)
def __get__(self, instance, owner):
@@ -951,11 +955,11 @@ class ListField(ComplexBaseField):
if self.field:
# If the value is iterable and it's not a string nor a
# BaseDocument, call prepare_query_value for each of its items.
+ is_iter = hasattr(value, "__iter__")
+ eligible_iter = is_iter and not isinstance(value, (str, BaseDocument))
if (
- op in ("set", "unset", None)
- and hasattr(value, "__iter__")
- and not isinstance(value, str)
- and not isinstance(value, BaseDocument)
+ op in ("set", "unset", "gt", "gte", "lt", "lte", "ne", None)
+ and eligible_iter
):
return [self.field.prepare_query_value(op, v) for v in value]
@@ -1035,10 +1039,9 @@ class DictField(ComplexBaseField):
"""
def __init__(self, field=None, *args, **kwargs):
- self._auto_dereference = False
-
- kwargs.setdefault("default", lambda: {})
+ kwargs.setdefault("default", dict)
super().__init__(*args, field=field, **kwargs)
+ self.set_auto_dereferencing(False)
def validate(self, value):
"""Make sure that a list of valid fields is being used."""
@@ -1151,8 +1154,9 @@ class ReferenceField(BaseField):
:class:`~pymongo.dbref.DBRef`, regardless of the value of `dbref`.
"""
# XXX ValidationError raised outside of the "validate" method.
- if not isinstance(document_type, str) and not issubclass(
- document_type, Document
+ if not (
+ isinstance(document_type, str)
+ or (isclass(document_type) and issubclass(document_type, Document))
):
self.error(
"Argument to ReferenceField constructor must be a "
@@ -2065,7 +2069,7 @@ class ImageField(FileField):
class SequenceField(BaseField):
"""Provides a sequential counter see:
- https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-SequenceNumbers
+ https://www.mongodb.com/docs/manual/reference/method/ObjectId/#ObjectIDs-SequenceNumbers
.. note::