Skip to content

Commit 5c9e4ab

Browse files
committed
🏷️(backend) accept string as saved document
Saved documents has to be a string now. Before it has to be a json object.
1 parent 7aeea18 commit 5c9e4ab

File tree

7 files changed

+21
-24
lines changed

7 files changed

+21
-24
lines changed

src/backend/core/api/serializers.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from core import models
99

10-
from .fields import JSONField
11-
1210

1311
class UserSerializer(serializers.ModelSerializer):
1412
"""Serialize users."""
@@ -136,7 +134,7 @@ def get_abilities(self, document) -> dict:
136134
class DocumentSerializer(BaseResourceSerializer):
137135
"""Serialize documents."""
138136

139-
content = JSONField(required=False)
137+
content = serializers.CharField(required=False)
140138

141139
class Meta:
142140
model = models.Document

src/backend/core/api/viewsets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ def versions_detail(self, request, pk, version_id, *args, **kwargs):
344344

345345
return drf_response.Response(
346346
{
347-
"content": json.loads(response["Body"].read()),
347+
"content": response["Body"].read().decode("utf-8"),
348348
"last_modified": response["LastModified"],
349349
}
350350
)

src/backend/core/factories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Meta:
3535

3636
title = factory.Sequence(lambda n: f"document{n}")
3737
is_public = factory.Faker("boolean")
38-
content = factory.LazyFunction(lambda: {"foo": fake.word()})
38+
content = factory.Sequence(lambda n: f"content{n}")
3939

4040
@factory.post_generation
4141
def users(self, create, extracted, **kwargs):

src/backend/core/models.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,16 +325,15 @@ def content(self):
325325
except (FileNotFoundError, ClientError):
326326
pass
327327
else:
328-
self._content = json.loads(response["Body"].read())
328+
self._content = response["Body"].read().decode('utf-8')
329329
return self._content
330330

331331
@content.setter
332332
def content(self, content):
333333
"""Cache the content, don't write to object storage yet"""
334-
if isinstance(content, str):
335-
content = json.loads(content)
336-
if not isinstance(content, dict):
337-
raise ValueError("content should be a json object.")
334+
if not isinstance(content, str):
335+
raise ValueError("content should be a string.")
336+
338337
self._content = content
339338

340339
def get_content_response(self, version_id=""):
@@ -349,7 +348,7 @@ def save(self, *args, **kwargs):
349348

350349
if self._content:
351350
file_key = self.file_key
352-
bytes_content = json.dumps(self._content).encode("utf-8")
351+
bytes_content = self._content.encode("utf-8")
353352

354353
if default_storage.exists(file_key):
355354
response = default_storage.connection.meta.client.head_object(

src/backend/core/tests/documents/test_api_documents_retrieve.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_api_documents_retrieve_anonymous_public():
3131
"accesses": [],
3232
"title": document.title,
3333
"is_public": True,
34-
"content": {"foo": document.content["foo"]},
34+
"content": document.content,
3535
}
3636

3737

@@ -76,7 +76,7 @@ def test_api_documents_retrieve_authenticated_unrelated_public():
7676
"accesses": [],
7777
"title": document.title,
7878
"is_public": True,
79-
"content": {"foo": document.content["foo"]},
79+
"content": document.content,
8080
}
8181

8282

@@ -140,7 +140,7 @@ def test_api_documents_retrieve_authenticated_related_direct():
140140
assert response.json() == {
141141
"id": str(document.id),
142142
"title": document.title,
143-
"content": {"foo": document.content["foo"]},
143+
"content": document.content,
144144
"abilities": document.get_abilities(user),
145145
"is_public": document.is_public,
146146
}
@@ -255,7 +255,7 @@ def test_api_documents_retrieve_authenticated_related_team_members(
255255
assert response.json() == {
256256
"id": str(document.id),
257257
"title": document.title,
258-
"content": {"foo": document.content["foo"]},
258+
"content": document.content,
259259
"abilities": document.get_abilities(user),
260260
"is_public": False,
261261
}
@@ -353,7 +353,7 @@ def test_api_documents_retrieve_authenticated_related_team_administrators(
353353
assert response.json() == {
354354
"id": str(document.id),
355355
"title": document.title,
356-
"content": {"foo": document.content["foo"]},
356+
"content": document.content,
357357
"abilities": document.get_abilities(user),
358358
"is_public": False,
359359
}
@@ -455,7 +455,7 @@ def test_api_documents_retrieve_authenticated_related_team_owners(
455455
assert response.json() == {
456456
"id": str(document.id),
457457
"title": document.title,
458-
"content": {"foo": document.content["foo"]},
458+
"content": document.content,
459459
"abilities": document.get_abilities(user),
460460
"is_public": False,
461461
}

src/backend/core/tests/test_api_document_versions.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def test_api_document_versions_list_authenticated_related(via, mock_user_get_tea
128128
assert len(content["versions"]) == 0
129129

130130
# Add a new version to the document
131-
document.content = {"foo": "bar"}
131+
document.content = "new content"
132132
document.save()
133133

134134
response = client.get(
@@ -243,7 +243,7 @@ def test_api_document_versions_retrieve_authenticated_related(via, mock_user_get
243243

244244
# Create a new version should make it available to the user
245245
time.sleep(1) # minio stores datetimes with the precision of a second
246-
document.content = {"foo": "bar"}
246+
document.content = "new content"
247247
document.save()
248248

249249
version_id = document.get_versions_slice()["versions"][0]["version_id"]
@@ -253,7 +253,7 @@ def test_api_document_versions_retrieve_authenticated_related(via, mock_user_get
253253
)
254254

255255
assert response.status_code == 200
256-
assert response.json()["content"] == {"foo": "bar"}
256+
assert response.json()["content"] == "new content"
257257

258258

259259
def test_api_document_versions_create_anonymous():
@@ -459,7 +459,7 @@ def test_api_document_versions_delete_member(via, mock_user_get_teams):
459459

460460
# Create a new version should make it available to the user
461461
time.sleep(1) # minio stores datetimes with the precision of a second
462-
document.content = {"foo": "bar"}
462+
document.content = "new content"
463463
document.save()
464464

465465
versions = document.get_versions_slice()["versions"]
@@ -503,7 +503,7 @@ def test_api_document_versions_delete_administrator_or_owner(via, mock_user_get_
503503

504504
# Create a new version should make it available to the user
505505
time.sleep(1) # minio stores datetimes with the precision of a second
506-
document.content = {"foo": "bar"}
506+
document.content = "new content"
507507
document.save()
508508

509509
versions = document.get_versions_slice()["versions"]

src/backend/core/tests/test_models_documents.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def test_models_documents_get_versions_slice(settings):
196196
# Create a document with 7 versions
197197
document = factories.DocumentFactory()
198198
for i in range(6):
199-
document.content = {"foo": f"bar{i:d}"}
199+
document.content = f"bar{i:d}"
200200
document.save()
201201

202202
# Add a version not related to the first document
@@ -246,7 +246,7 @@ def test_models_documents_version_duplicate():
246246
assert len(response["Versions"]) == 1
247247

248248
# Save modified content
249-
document.content = {"foo": "spam"}
249+
document.content = "new content"
250250
document.save()
251251

252252
response = default_storage.connection.meta.client.list_object_versions(

0 commit comments

Comments
 (0)