Skip to content

Commit 042d7f2

Browse files
authored
Merge pull request #2736 from bagerard/minor_improvements
Minor improvements
2 parents 365c8b3 + 0773c99 commit 042d7f2

File tree

5 files changed

+24
-40
lines changed

5 files changed

+24
-40
lines changed

mongoengine/base/datastructures.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def mark_key_as_changed_wrapper(parent_method):
3131

3232
def wrapper(self, key, *args, **kwargs):
3333
# Can't use super() in the decorator.
34-
if not args or not key or key not in self or self[key] != args[0]:
34+
if not args or key not in self or self[key] != args[0]:
3535
self._mark_as_changed(key)
3636
return parent_method(self, key, *args, **kwargs)
3737

mongoengine/base/document.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -516,9 +516,6 @@ def __expand_dynamic_values(self, name, value):
516516

517517
def _mark_as_changed(self, key):
518518
"""Mark a key as explicitly changed by the user."""
519-
if not key:
520-
return
521-
522519
if not hasattr(self, "_changed_fields"):
523520
return
524521

mongoengine/fields.py

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -356,46 +356,12 @@ def prepare_query_value(self, op, value):
356356
return super().prepare_query_value(op, int(value))
357357

358358

359-
class LongField(BaseField):
359+
class LongField(IntField):
360360
"""64-bit integer field. (Equivalent to IntField since the support to Python2 was dropped)"""
361361

362-
def __init__(self, min_value=None, max_value=None, **kwargs):
363-
"""
364-
:param min_value: (optional) A min value that will be applied during validation
365-
:param max_value: (optional) A max value that will be applied during validation
366-
:param kwargs: Keyword arguments passed into the parent :class:`~mongoengine.BaseField`
367-
"""
368-
self.min_value, self.max_value = min_value, max_value
369-
super().__init__(**kwargs)
370-
371-
def to_python(self, value):
372-
try:
373-
value = int(value)
374-
except (TypeError, ValueError):
375-
pass
376-
return value
377-
378362
def to_mongo(self, value):
379363
return Int64(value)
380364

381-
def validate(self, value):
382-
try:
383-
value = int(value)
384-
except (TypeError, ValueError):
385-
self.error("%s could not be converted to long" % value)
386-
387-
if self.min_value is not None and value < self.min_value:
388-
self.error("Long value is too small")
389-
390-
if self.max_value is not None and value > self.max_value:
391-
self.error("Long value is too large")
392-
393-
def prepare_query_value(self, op, value):
394-
if value is None:
395-
return value
396-
397-
return super().prepare_query_value(op, int(value))
398-
399365

400366
class FloatField(BaseField):
401367
"""Floating point number field."""

tests/fields/test_datetime_field.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from mongoengine import *
1111
from mongoengine import connection
12-
from tests.utils import MongoDBTestCase
12+
from tests.utils import MongoDBTestCase, get_as_pymongo
1313

1414

1515
class TestDateTimeField(MongoDBTestCase):
@@ -55,6 +55,21 @@ class Person(Document):
5555
assert person_created_t0 == person.created # make sure it does not change
5656
assert person._data["created"] == person.created
5757

58+
def test_set_using_callable(self):
59+
# Weird feature but it's there for a while so let's make sure we don't break it
60+
class Person(Document):
61+
created = DateTimeField()
62+
63+
Person.drop_collection()
64+
65+
person = Person()
66+
frozen_dt = dt.datetime(2020, 7, 25, 9, 56, 1)
67+
person.created = lambda: frozen_dt
68+
person.save()
69+
70+
assert callable(person.created)
71+
assert get_as_pymongo(person) == {"_id": person.id, "created": frozen_dt}
72+
5873
def test_handling_microseconds(self):
5974
"""Tests showing pymongo datetime fields handling of microseconds.
6075
Microseconds are rounded to the nearest millisecond and pre UTC

tests/queryset/test_queryset.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2580,6 +2580,12 @@ def test_order_by(self):
25802580
ages = [p.age for p in self.Person.objects.order_by("-name")]
25812581
assert ages == [30, 40, 20]
25822582

2583+
ages = [p.age for p in self.Person.objects.order_by()]
2584+
assert ages == [40, 20, 30]
2585+
2586+
ages = [p.age for p in self.Person.objects.order_by("")]
2587+
assert ages == [40, 20, 30]
2588+
25832589
def test_order_by_optional(self):
25842590
class BlogPost(Document):
25852591
title = StringField()

0 commit comments

Comments
 (0)