Skip to content
Snippets Groups Projects
Unverified Commit 2ddee6b2 authored by nesdis's avatar nesdis Committed by GitHub
Browse files

Merge pull request #455 from nesdis/docs

fix for embedded Queries
parents 0e7222d3 f035285e
No related branches found
No related tags found
No related merge requests found
...@@ -138,6 +138,19 @@ class ModelField(MongoField): ...@@ -138,6 +138,19 @@ class ModelField(MongoField):
value: dict, value: dict,
*other_args): *other_args):
processed_value = {} processed_value = {}
for field in self.model_container._meta.get_fields():
try:
field_value = value[field.attname]
except KeyError:
continue
processed_value[field.attname] = getattr(field, func_name)(field_value, *other_args)
return processed_value
def _save_value_thru_fields(self,
func_name: str,
value: dict,
*other_args):
processed_value = {}
errors = {} errors = {}
for field in self.model_container._meta.get_fields(): for field in self.model_container._meta.get_fields():
try: try:
...@@ -212,7 +225,11 @@ class ModelField(MongoField): ...@@ -212,7 +225,11 @@ class ModelField(MongoField):
if not isinstance(value, self.base_type): if not isinstance(value, self.base_type):
raise ValueError( raise ValueError(
f'Value: {value} must be an instance of {self.base_type}') f'Value: {value} must be an instance of {self.base_type}')
return self.get_prep_value(value)
processed_value = self._save_value_thru_fields('get_db_prep_save',
value,
connection)
return processed_value
def get_prep_value(self, value): def get_prep_value(self, value):
if (value is None or if (value is None or
...@@ -318,6 +335,18 @@ class ArrayField(FormedField): ...@@ -318,6 +335,18 @@ class ArrayField(FormedField):
processed_value.append(post_dict) processed_value.append(post_dict)
return processed_value return processed_value
def _save_value_thru_fields(self,
func_name: str,
value: typing.Union[list, dict],
*other_args):
processed_value = []
for pre_dict in value:
post_dict = super()._save_value_thru_fields(func_name,
pre_dict,
*other_args)
processed_value.append(post_dict)
return processed_value
def value_to_string(self, obj): def value_to_string(self, obj):
value = self.value_from_object(obj) value = self.value_from_object(obj)
processed_value = [] processed_value = []
......
from django.test import TransactionTestCase from django.db.models import QuerySet
from threading import Thread
from . import TestCase
from xtest_app.models.canvas_models_id import ForeignKey1, ForeignKey2, DummyObject from djongo import models
def make_request(): class Team(models.Model):
objects = DummyObject.objects.all() id = models.TextField()
extra = models.JSONField(null=True)
print(objects)
class Meta:
class MetaScanConcurrencyTest(TransactionTestCase): abstract = True
def setUp(self):
foreign_key_1 = ForeignKey1.create(**{ class DocumentQuerySet(QuerySet):
"name": "foreign_key_1" def from_team(self, team_id: str):
}) return self.filter(team={'id': team_id})
foreign_key_2 = ForeignKey2.create(**{ class Document(models.Model):
"name": "foreign_key_2" team = models.EmbeddedField(model_container=Team)
}) objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
foreign_key_1.save() class Document2(models.Model):
foreign_key_2.save() team = models.CharField(max_length=10)
objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
for i in range(0, 1):
dummy = DummyObject.create(**{ class TestCanvas(TestCase):
"foreign_key_1": foreign_key_1,
"foreign_key_2": foreign_key_2 def test_canvas(self):
}) entry = Document.objects.create(
team={'id': 'an id', 'extra': {'a': 1}}
dummy.save() )
b_entry = Document.objects.from_team('an id')
def test_concurrency_test(self): print(b_entry)
threads = []
for i in range(0, 100):
t = Thread(target=make_request)
threads.append(t)
t.start()
# Thread(target=make_request).start()
for thread in threads:
thread.join()
# objects = DummyObject.objects.all()
#
# print(objects)
\ No newline at end of file
from unittest import skip from unittest import skip
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
import xtest_app.models.basic_field
from djongo.exceptions import NotSupportedError from djongo.exceptions import NotSupportedError
from xtest_app.models.basic_field import BasicBlog, BasicRelatedEntry, BasicAuthor from xtest_app.models.basic_field import BasicBlog, BasicRelatedEntry, BasicAuthor
from . import TestCase from . import TestCase
...@@ -20,8 +17,8 @@ class FieldTests(TestCase): ...@@ -20,8 +17,8 @@ class FieldTests(TestCase):
headline_query: dict headline_query: dict
blog_query: dict blog_query: dict
mut: U[Type[models.Model], type] mut: U[Type[models.Model], type]
entry: xtest_app.models.basic_field.EmbeddedFieldEntry entry: basic_field.EmbeddedFieldEntry
db_entry: xtest_app.models.basic_field.EmbeddedFieldEntry db_entry: basic_field.EmbeddedFieldEntry
def get_model(self, def get_model(self,
**embedded_field_kwargs) -> U[Type[models.Model], type]: **embedded_field_kwargs) -> U[Type[models.Model], type]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment