Skip to content

Commit 0578eba

Browse files
committed
[models] Replace thirdparty JSONField with Django built-in JSONField #1061
Replaced jsonfield package's JSONField with Django's built-in JSONField across all models to use the modern, maintained Django implementation. Changes: - Updated imports from 'jsonfield import JSONField' to 'django.db.models import JSONField' - Removed jsonfield-specific parameters (load_kwargs, dump_kwargs) which are not needed - Created migrations to alter field types while preserving data - Removed unnecessary collections imports where no longer needed Django's JSONField preserves the same data format and is backward compatible, so no data migration is required. The built-in JSONField provides better performance and is actively maintained as part of Django core. Fixes #1061
1 parent 109f28e commit 0578eba

24 files changed

+338
-142
lines changed

openwisp_controller/config/base/base.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import collections
21
import hashlib
32
import json
43
import logging
@@ -7,10 +6,10 @@
76
from cache_memoize import cache_memoize
87
from django.core.exceptions import ValidationError
98
from django.db import models
9+
from django.db.models import JSONField
1010
from django.utils.functional import cached_property
1111
from django.utils.module_loading import import_string
1212
from django.utils.translation import gettext_lazy as _
13-
from jsonfield import JSONField
1413
from netjsonconfig.exceptions import ValidationError as SchemaError
1514

1615
from openwisp_utils.base import TimeStampedEditableModel
@@ -126,8 +125,6 @@ class BaseConfig(BaseModel):
126125
_("configuration"),
127126
default=dict,
128127
help_text=_("configuration in NetJSON DeviceConfiguration format"),
129-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
130-
dump_kwargs={"indent": 4},
131128
)
132129

133130
__template__ = False

openwisp_controller/config/base/config.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
from django.core.cache import cache
88
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ValidationError
99
from django.db import models, transaction
10+
from django.db.models import JSONField
1011
from django.utils.translation import gettext_lazy as _
11-
from jsonfield import JSONField
1212
from model_utils import Choices
1313
from model_utils.fields import StatusField
1414
from netjsonconfig import OpenWrt
@@ -90,8 +90,6 @@ class AbstractConfig(ChecksumCacheMixin, BaseConfig):
9090
'en/stable/general/basics.html#context" target="_blank">'
9191
"context (configuration variables)</a> in JSON format"
9292
),
93-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
94-
dump_kwargs={"indent": 4},
9593
)
9694
checksum_db = models.CharField(
9795
_("configuration checksum"),

openwisp_controller/config/base/device_group.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import collections
21
from copy import deepcopy
32

43
import jsonschema
54
from django.core.exceptions import ValidationError
65
from django.db import models
6+
from django.db.models import JSONField
77
from django.utils.translation import gettext_lazy as _
8-
from jsonfield import JSONField
98
from jsonschema.exceptions import ValidationError as SchemaError
109
from swapper import get_model_name, load_model
1110

@@ -39,8 +38,6 @@ class AbstractDeviceGroup(OrgMixin, TimeStampedEditableModel):
3938
meta_data = JSONField(
4039
blank=True,
4140
default=dict,
42-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
43-
dump_kwargs={"indent": 4},
4441
help_text=_(
4542
"Group meta data, use this field to store data which is related"
4643
" to this group and can be retrieved via the REST API."
@@ -50,8 +47,6 @@ class AbstractDeviceGroup(OrgMixin, TimeStampedEditableModel):
5047
context = JSONField(
5148
blank=True,
5249
default=dict,
53-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
54-
dump_kwargs={"indent": 4},
5550
help_text=_(
5651
"This field can be used to add meta data for the group"
5752
' or to add "Configuration Variables" to the devices.'

openwisp_controller/config/base/multitenancy.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import collections
21
from copy import deepcopy
32

43
import swapper
54
from django.db import models
5+
from django.db.models import JSONField
66
from django.utils.translation import gettext_lazy as _
7-
from jsonfield import JSONField
87

98
from openwisp_utils.base import KeyField, UUIDModel
109

@@ -34,8 +33,6 @@ class AbstractOrganizationConfigSettings(UUIDModel):
3433
context = JSONField(
3534
blank=True,
3635
default=dict,
37-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
38-
dump_kwargs={"indent": 4},
3936
help_text=_(
4037
'This field can be used to add "Configuration Variables"' " to the devices."
4138
),

openwisp_controller/config/base/template.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
from django.core.exceptions import ObjectDoesNotExist, ValidationError
77
from django.db import models, transaction
8+
from django.db.models import JSONField
89
from django.utils.translation import gettext_lazy as _
9-
from jsonfield import JSONField
1010
from netjsonconfig.exceptions import ValidationError as NetjsonconfigValidationError
1111
from swapper import get_model_name, load_model
1212
from taggit.managers import TaggableManager
@@ -102,8 +102,6 @@ class AbstractTemplate(ShareableOrgMixinUniqueName, BaseConfig):
102102
"template; these default variables will "
103103
"be used during schema validation."
104104
),
105-
load_kwargs={"object_pairs_hook": OrderedDict},
106-
dump_kwargs={"indent": 4},
107105
)
108106
__template__ = True
109107

openwisp_controller/config/migrations/0001_squashed_0002_config_settings_uuid.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
# -*- coding: utf-8 -*-
22
# Generated by Django 1.10.5 on 2017-05-03 17:54
33

4-
import collections
54
import re
65
import uuid
76

87
import django.core.validators
98
import django.utils.timezone
10-
import jsonfield.fields
119
import model_utils.fields
1210
from django.conf import settings
1311
from django.db import migrations, models
@@ -58,12 +56,10 @@ class Migration(migrations.Migration):
5856
),
5957
(
6058
"config",
61-
jsonfield.fields.JSONField(
59+
models.JSONField(
6260
blank=True,
6361
default=dict,
64-
dump_kwargs={"ensure_ascii": False, "indent": 4},
6562
help_text="configuration in NetJSON DeviceConfiguration format",
66-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
6763
verbose_name="configuration",
6864
),
6965
),
@@ -250,12 +246,10 @@ class Migration(migrations.Migration):
250246
),
251247
(
252248
"config",
253-
jsonfield.fields.JSONField(
249+
models.JSONField(
254250
blank=True,
255251
default=dict,
256-
dump_kwargs={"ensure_ascii": False, "indent": 4},
257252
help_text="configuration in NetJSON DeviceConfiguration format",
258-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
259253
verbose_name="configuration",
260254
),
261255
),
@@ -347,11 +341,9 @@ class Migration(migrations.Migration):
347341
("name", models.CharField(max_length=64, unique=True)),
348342
(
349343
"config",
350-
jsonfield.fields.JSONField(
344+
models.JSONField(
351345
default=dict,
352-
dump_kwargs={"ensure_ascii": False, "indent": 4},
353346
help_text="configuration in NetJSON DeviceConfiguration format",
354-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
355347
verbose_name="configuration",
356348
),
357349
),

openwisp_controller/config/migrations/0018_config_context.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Generated by Django 2.1.4 on 2019-01-09 01:52
22

3-
import collections
43

5-
import jsonfield.fields
6-
from django.db import migrations
4+
from django.db import migrations, models
75

86

97
class Migration(migrations.Migration):
@@ -13,15 +11,13 @@ class Migration(migrations.Migration):
1311
migrations.AddField(
1412
model_name="config",
1513
name="context",
16-
field=jsonfield.fields.JSONField(
14+
field=models.JSONField(
1715
blank=True,
18-
dump_kwargs={"indent": 4},
1916
help_text=(
2017
'Additional <a href="http://netjsonconfig.openwisp.org'
2118
'/en/stable/general/basics.html#context" target="_blank">context '
2219
"(configuration variables)</a> in JSON format"
2320
),
24-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
2521
null=True,
2622
),
2723
)
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Generated by Django 3.0.3 on 2020-02-26 19:58
22

3-
import collections
43

5-
import jsonfield.fields
6-
from django.db import migrations
4+
from django.db import migrations, models
75

86

97
class Migration(migrations.Migration):
@@ -13,16 +11,14 @@ class Migration(migrations.Migration):
1311
migrations.AlterField(
1412
model_name="config",
1513
name="context",
16-
field=jsonfield.fields.JSONField(
14+
field=models.JSONField(
1715
blank=True,
1816
default=dict,
19-
dump_kwargs={"ensure_ascii": False, "indent": 4},
2017
help_text=(
2118
'Additional <a href="http://netjsonconfig.openwisp.org'
2219
'/en/stable/general/basics.html#context" target="_blank">'
2320
"context (configuration variables)</a> in JSON format"
2421
),
25-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
2622
),
2723
)
2824
]

openwisp_controller/config/migrations/0028_template_default_values.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Generated by Django 3.0.3 on 2020-06-29 23:54
22

3-
import collections
43

5-
import jsonfield.fields
6-
from django.db import migrations
4+
from django.db import migrations, models
75

86

97
class Migration(migrations.Migration):
@@ -13,16 +11,14 @@ class Migration(migrations.Migration):
1311
migrations.AddField(
1412
model_name="template",
1513
name="default_values",
16-
field=jsonfield.fields.JSONField(
14+
field=models.JSONField(
1715
blank=True,
1816
default=dict,
19-
dump_kwargs={"ensure_ascii": False, "indent": 4},
2017
help_text=(
2118
"A dictionary containing the default values for "
2219
"the variables used by this template; these default "
2320
"variables will be used during schema validation."
2421
),
25-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
2622
verbose_name="Default Values",
2723
),
2824
)

openwisp_controller/config/migrations/0036_device_group.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# Generated by Django 3.1.12 on 2021-06-14 17:51
22

3-
import collections
43
import uuid
54

65
import django.db.models.deletion
76
import django.utils.timezone
8-
import jsonfield.fields
97
import model_utils.fields
108
import swapper
119
from django.db import migrations, models
@@ -56,11 +54,9 @@ class Migration(migrations.Migration):
5654
),
5755
(
5856
"meta_data",
59-
jsonfield.fields.JSONField(
57+
models.JSONField(
6058
blank=True,
6159
default=dict,
62-
dump_kwargs={"ensure_ascii": False, "indent": 4},
63-
load_kwargs={"object_pairs_hook": collections.OrderedDict},
6460
help_text=(
6561
"Group meta data, use this field to store data which is"
6662
" related to this group and can be retrieved via the"

0 commit comments

Comments
 (0)