Skip to content
Snippets Groups Projects
Commit 2a21ae87 authored by nesdis's avatar nesdis
Browse files

Changes for handling queries within embedded fields.

parent 905f437c
Branches
No related tags found
No related merge requests found
......@@ -138,6 +138,19 @@ class ModelField(MongoField):
value: dict,
*other_args):
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 = {}
for field in self.model_container._meta.get_fields():
try:
......@@ -212,7 +225,11 @@ class ModelField(MongoField):
if not isinstance(value, self.base_type):
raise ValueError(
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):
if (value is None or
......
from django.test import TransactionTestCase
from threading import Thread
from xtest_app.models.canvas_models_id import ForeignKey1, ForeignKey2, DummyObject
def make_request():
objects = DummyObject.objects.all()
print(objects)
class MetaScanConcurrencyTest(TransactionTestCase):
def setUp(self):
foreign_key_1 = ForeignKey1.create(**{
"name": "foreign_key_1"
})
foreign_key_2 = ForeignKey2.create(**{
"name": "foreign_key_2"
})
foreign_key_1.save()
foreign_key_2.save()
for i in range(0, 1):
dummy = DummyObject.create(**{
"foreign_key_1": foreign_key_1,
"foreign_key_2": foreign_key_2
})
dummy.save()
def test_concurrency_test(self):
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 django.db.models import QuerySet
from . import TestCase
from djongo import models
class Team(models.Model):
id = models.TextField()
extra = models.JSONField(null=True)
class Meta:
abstract = True
class DocumentQuerySet(QuerySet):
def from_team(self, team_id: str):
return self.filter(team={'id': team_id})
class Document(models.Model):
team = models.EmbeddedField(model_container=Team)
objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
class Document2(models.Model):
team = models.CharField(max_length=10)
objects = models.DjongoManager.from_queryset(DocumentQuerySet)()
class TestCanvas(TestCase):
def test_canvas(self):
entry = Document.objects.create(
team={'id': 'an id', 'extra': {'a': 1}}
)
b_entry = Document.objects.from_team('an id')
print(b_entry)
from unittest import skip
from django.core.exceptions import ValidationError
import xtest_app.models.basic_field
from djongo.exceptions import NotSupportedError
from xtest_app.models.basic_field import BasicBlog, BasicRelatedEntry, BasicAuthor
from . import TestCase
......@@ -20,8 +17,8 @@ class FieldTests(TestCase):
headline_query: dict
blog_query: dict
mut: U[Type[models.Model], type]
entry: xtest_app.models.basic_field.EmbeddedFieldEntry
db_entry: xtest_app.models.basic_field.EmbeddedFieldEntry
entry: basic_field.EmbeddedFieldEntry
db_entry: basic_field.EmbeddedFieldEntry
def get_model(self,
**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