Skip to content

Commit 9bfa86d

Browse files
committed
Add EncryptedArrayField + test
1 parent 8a3ccf5 commit 9bfa86d

File tree

6 files changed

+34
-2
lines changed

6 files changed

+34
-2
lines changed

.github/workflows/mongodb_settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@
3434

3535

3636
class EncryptedRouter:
37+
# def db_for_read(self, model, **hints):
38+
# if model_has_encrypted_fields(model):
39+
# return "encrypted"
40+
# return "default"
41+
# db_for_write = db_for_read
42+
3743
def allow_migrate(self, db, app_label, model_name=None, **hints):
3844
# The encryption_ app's models are only created in the encrypted
3945
# database.

django_mongodb_backend/features.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ def _supports_transactions(self):
639639
@cached_property
640640
def supports_queryable_encryption(self):
641641
"""
642-
Queryable Encryption requires a MongoDB 7.0 or later replica set or sharded
642+
Queryable Encryption requires a MongoDB 8.0 or later replica set or sharded
643643
cluster, as well as MongoDB Atlas or Enterprise.
644644
"""
645645
self.connection.ensure_connection()

django_mongodb_backend/fields/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from .embedded_model import EmbeddedModelField
55
from .embedded_model_array import EmbeddedModelArrayField
66
from .encryption import (
7+
EncryptedArrayField,
78
EncryptedBigIntegerField,
89
EncryptedBinaryField,
910
EncryptedBooleanField,
@@ -36,6 +37,7 @@
3637
"ArrayField",
3738
"EmbeddedModelArrayField",
3839
"EmbeddedModelField",
40+
"EncryptedArrayField",
3941
"EncryptedBigIntegerField",
4042
"EncryptedBinaryField",
4143
"EncryptedBooleanField",

django_mongodb_backend/fields/encryption.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from django.db import models
22

3-
from django_mongodb_backend.fields import EmbeddedModelArrayField, EmbeddedModelField
3+
from django_mongodb_backend.fields import ArrayField, EmbeddedModelArrayField, EmbeddedModelField
4+
5+
6+
class EncryptedArrayField(ArrayField):
7+
encrypted = True
48

59

610
class EncryptedEmbeddedModelArrayField(EmbeddedModelArrayField):

tests/encryption_/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django_mongodb_backend.fields import (
44
EmbeddedModelField,
5+
EncryptedArrayField,
56
EncryptedBigIntegerField,
67
EncryptedBinaryField,
78
EncryptedBooleanField,
@@ -33,6 +34,14 @@ class Meta:
3334
required_db_features = {"supports_queryable_encryption"}
3435

3536

37+
# Array models
38+
class ArrayModel(EncryptedTestModel):
39+
values = EncryptedArrayField(
40+
models.IntegerField(),
41+
size=5,
42+
)
43+
44+
3645
# Embedded models
3746
class Patient(EncryptedTestModel):
3847
patient_name = models.CharField(max_length=255)

tests/encryption_/test_fields.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from .models import (
77
Actor,
8+
ArrayModel,
89
BigIntegerModel,
910
Billing,
1011
BinaryModel,
@@ -32,6 +33,16 @@
3233
from .test_base import EncryptionTestCase
3334

3435

36+
class ArrayModelTests(EncryptionTestCase):
37+
def setUp(self):
38+
self.array_model = ArrayModel.objects.create(values=[1, 2, 3, 4, 5])
39+
40+
def test_array(self):
41+
array_model = ArrayModel.objects.get(id=self.array_model.id)
42+
self.assertEqual(array_model.values, [1, 2, 3, 4, 5])
43+
# self.assertEncrypted(self.array_model, "values")
44+
45+
3546
class EmbeddedModelTests(EncryptionTestCase):
3647
def setUp(self):
3748
self.billing = Billing(cc_type="Visa", cc_number="4111111111111111")

0 commit comments

Comments
 (0)