Skip to content

Commit 458ae5a

Browse files
authored
Merge pull request #8926 from readthedocs/humitos/hotfix/json-field
2 parents bb3333d + 903dda8 commit 458ae5a

File tree

7 files changed

+26
-81
lines changed

7 files changed

+26
-81
lines changed

readthedocs/builds/migrations/0038_add_new_jsonfields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ class Migration(migrations.Migration):
1313
migrations.AddField(
1414
model_name='build',
1515
name='_config_json',
16-
field=models.JSONField(default=dict, verbose_name='Configuration used in the build'),
16+
field=models.JSONField(null=True, blank=True, verbose_name='Configuration used in the build'),
1717
),
1818
]

readthedocs/builds/migrations/0040_remove_old_jsonfields.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

readthedocs/builds/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
ModificationDateTimeField,
2020
)
2121
from django_extensions.db.models import TimeStampedModel
22+
from jsonfield import JSONField
2223
from polymorphic.models import PolymorphicModel
2324

2425
import readthedocs.builds.automation_actions as actions
@@ -661,7 +662,12 @@ class Build(models.Model):
661662
null=True,
662663
blank=True,
663664
)
664-
_config = models.JSONField(_('Configuration used in the build'), default=dict)
665+
_config = JSONField(_('Configuration used in the build'), default=dict)
666+
_config_json = models.JSONField(
667+
_('Configuration used in the build'),
668+
null=True,
669+
blank=True,
670+
)
665671

666672
length = models.IntegerField(_('Build Length'), null=True, blank=True)
667673

readthedocs/integrations/migrations/0008_add_new_jsonfields.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ class Migration(migrations.Migration):
1313
migrations.AddField(
1414
model_name='httpexchange',
1515
name='request_headers_json',
16-
field=models.JSONField(default=None, null=True, verbose_name='Request headers'),
16+
field=models.JSONField(null=True, blank=True, verbose_name='Request headers'),
1717
),
1818
migrations.AddField(
1919
model_name='httpexchange',
2020
name='response_headers_json',
21-
field=models.JSONField(default=None, null=True, verbose_name='Request headers'),
21+
field=models.JSONField(null=True, blank=True, verbose_name='Request headers'),
2222
),
2323
migrations.AddField(
2424
model_name='integration',
2525
name='provider_data_json',
26-
field=models.JSONField(default=dict, verbose_name='Provider data'),
26+
field=models.JSONField(null=True, blank=True, verbose_name='Provider data'),
2727
),
2828
]

readthedocs/integrations/migrations/0010_remove_old_jsonfields.py

Lines changed: 0 additions & 40 deletions
This file was deleted.

readthedocs/integrations/models.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from django.db import models, transaction
1313
from django.utils.safestring import mark_safe
1414
from django.utils.translation import gettext_lazy as _
15+
from jsonfield import JSONField
1516
from pygments import highlight
1617
from pygments.formatters import HtmlFormatter
1718
from pygments.lexers import JsonLexer
@@ -101,15 +102,12 @@ def from_requests_exchange(self, response, related_object):
101102
:param related_object: Object to use for generic relationship.
102103
"""
103104
request = response.request
104-
# NOTE: we need to cast ``request.headers`` and ``response.headers``
105-
# because it's a ``requests.structures.CaseInsensitiveDict`` which is
106-
# not JSON serializable.
107105
obj = self.create(
108106
related_object=related_object,
109-
request_headers=dict(request.headers) or {},
107+
request_headers=request.headers or {},
110108
request_body=request.body or '',
111109
status_code=response.status_code,
112-
response_headers=dict(response.headers),
110+
response_headers=response.headers,
113111
response_body=response.text,
114112
)
115113
self.delete_limit(related_object)
@@ -146,19 +144,21 @@ class HttpExchange(models.Model):
146144

147145
date = models.DateTimeField(_('Date'), auto_now_add=True)
148146

149-
request_headers = models.JSONField(
147+
request_headers = JSONField(_('Request headers'))
148+
request_headers_json = models.JSONField(
150149
_('Request headers'),
151150
# Delete after deploy
152151
null=True,
153-
default=None,
152+
blank=True,
154153
)
155154
request_body = models.TextField(_('Request body'))
156155

157-
response_headers = models.JSONField(
156+
response_headers = JSONField(_('Request headers'))
157+
response_headers_json = models.JSONField(
158158
_('Request headers'),
159159
# Delete after deploy
160160
null=True,
161-
default=None,
161+
blank=True,
162162
)
163163
response_body = models.TextField(_('Response body'))
164164

@@ -298,7 +298,12 @@ class Integration(models.Model):
298298
max_length=32,
299299
choices=INTEGRATIONS,
300300
)
301-
provider_data = models.JSONField(_('Provider data'), default=dict)
301+
provider_data = JSONField(_('Provider data'), default=dict)
302+
provider_data_json = models.JSONField(
303+
_('Provider data'),
304+
null=True,
305+
blank=True,
306+
)
302307
exchanges = GenericRelation(
303308
'HttpExchange',
304309
related_query_name='integrations',

requirements/pip.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ drf-flex-fields==0.9.7
2121
drf-extensions==0.7.1
2222

2323
django-vanilla-views==3.0.0
24-
25-
# This module is only used on migrations. We are now using Django's official
26-
# JSONField. We should probably squash these migrations and remove this
27-
# dependency as well.
2824
jsonfield==3.1.0
2925

3026
requests==2.27.1

0 commit comments

Comments
 (0)