Fix resource leaks
Rewrite places where files (or other resources) are opened but not closed to "with" blocks, which automatically call close() at the end of the scope. Also simplify some tests where images need to be saved to a model field: an opened file can be passed directly to FileField.save().
This commit is contained in:
parent
e7ae0fdf93
commit
ffee29d8e2
19 changed files with 135 additions and 149 deletions
|
@ -1,5 +1,4 @@
|
|||
""" test for app action functionality """
|
||||
import os
|
||||
import json
|
||||
from unittest.mock import patch
|
||||
|
||||
|
@ -179,7 +178,6 @@ class FederationViews(TestCase):
|
|||
self.assertEqual(server.application_type, "coolsoft")
|
||||
self.assertEqual(server.status, "blocked")
|
||||
|
||||
# pylint: disable=consider-using-with
|
||||
def test_import_blocklist(self):
|
||||
"""load a json file with a list of servers to block"""
|
||||
server = models.FederatedServer.objects.create(server_name="hi.there.com")
|
||||
|
@ -191,14 +189,13 @@ class FederationViews(TestCase):
|
|||
{"instance": "hi.there.com", "url": "https://explanation.url"}, # existing
|
||||
{"a": "b"}, # invalid
|
||||
]
|
||||
json.dump(data, open("file.json", "w")) # pylint: disable=unspecified-encoding
|
||||
|
||||
view = views.ImportServerBlocklist.as_view()
|
||||
request = self.factory.post(
|
||||
"",
|
||||
{
|
||||
"json_file": SimpleUploadedFile(
|
||||
"file.json", open("file.json", "rb").read()
|
||||
"file.json", json.dumps(data).encode("utf-8")
|
||||
)
|
||||
},
|
||||
)
|
||||
|
@ -214,6 +211,3 @@ class FederationViews(TestCase):
|
|||
created = models.FederatedServer.objects.get(server_name="server.name")
|
||||
self.assertEqual(created.status, "blocked")
|
||||
self.assertEqual(created.notes, "https://explanation.url")
|
||||
|
||||
# remove file.json after test
|
||||
os.remove("file.json")
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
""" test for app action functionality """
|
||||
from io import BytesIO
|
||||
import pathlib
|
||||
from unittest.mock import patch
|
||||
from PIL import Image
|
||||
|
||||
import responses
|
||||
|
||||
|
@ -161,15 +159,15 @@ class BookViews(TestCase):
|
|||
def test_upload_cover_file(self):
|
||||
"""add a cover via file upload"""
|
||||
self.assertFalse(self.book.cover)
|
||||
image_file = pathlib.Path(__file__).parent.joinpath(
|
||||
image_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../../static/images/default_avi.jpg"
|
||||
)
|
||||
|
||||
form = forms.CoverForm(instance=self.book)
|
||||
# pylint: disable=consider-using-with
|
||||
form.data["cover"] = SimpleUploadedFile(
|
||||
image_file, open(image_file, "rb").read(), content_type="image/jpeg"
|
||||
)
|
||||
with open(image_path, "rb") as image_file:
|
||||
form.data["cover"] = SimpleUploadedFile(
|
||||
image_path, image_file.read(), content_type="image/jpeg"
|
||||
)
|
||||
|
||||
request = self.factory.post("", form.data)
|
||||
request.user = self.local_user
|
||||
|
@ -296,16 +294,14 @@ class BookViews(TestCase):
|
|||
def _setup_cover_url():
|
||||
"""creates cover url mock"""
|
||||
cover_url = "http://example.com"
|
||||
image_file = pathlib.Path(__file__).parent.joinpath(
|
||||
image_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../../static/images/default_avi.jpg"
|
||||
)
|
||||
image = Image.open(image_file)
|
||||
output = BytesIO()
|
||||
image.save(output, format=image.format)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
cover_url,
|
||||
body=output.getvalue(),
|
||||
status=200,
|
||||
)
|
||||
with open(image_path, "rb") as image_file:
|
||||
responses.add(
|
||||
responses.GET,
|
||||
cover_url,
|
||||
body=image_file.read(),
|
||||
status=200,
|
||||
)
|
||||
return cover_url
|
||||
|
|
|
@ -81,13 +81,13 @@ class ImportViews(TestCase):
|
|||
form.data["source"] = "Goodreads"
|
||||
form.data["privacy"] = "public"
|
||||
form.data["include_reviews"] = False
|
||||
csv_file = pathlib.Path(__file__).parent.joinpath("../../data/goodreads.csv")
|
||||
form.data["csv_file"] = SimpleUploadedFile(
|
||||
# pylint: disable=consider-using-with
|
||||
csv_file,
|
||||
open(csv_file, "rb").read(),
|
||||
content_type="text/csv",
|
||||
)
|
||||
csv_path = pathlib.Path(__file__).parent.joinpath("../../data/goodreads.csv")
|
||||
with open(csv_path, "rb") as csv_file:
|
||||
form.data["csv_file"] = SimpleUploadedFile(
|
||||
csv_path,
|
||||
csv_file.read(),
|
||||
content_type="text/csv",
|
||||
)
|
||||
|
||||
request = self.factory.post("", form.data)
|
||||
request.user = self.local_user
|
||||
|
|
|
@ -47,16 +47,16 @@ class ImportUserViews(TestCase):
|
|||
|
||||
view = views.UserImport.as_view()
|
||||
form = forms.ImportUserForm()
|
||||
archive_file = pathlib.Path(__file__).parent.joinpath(
|
||||
archive_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../data/bookwyrm_account_export.tar.gz"
|
||||
)
|
||||
|
||||
form.data["archive_file"] = SimpleUploadedFile(
|
||||
# pylint: disable=consider-using-with
|
||||
archive_file,
|
||||
open(archive_file, "rb").read(),
|
||||
content_type="application/gzip",
|
||||
)
|
||||
with open(archive_path, "rb") as archive_file:
|
||||
form.data["archive_file"] = SimpleUploadedFile(
|
||||
archive_path,
|
||||
archive_file.read(),
|
||||
content_type="application/gzip",
|
||||
)
|
||||
|
||||
form.data["include_user_settings"] = ""
|
||||
form.data["include_goals"] = "on"
|
||||
|
|
|
@ -96,13 +96,13 @@ class EditUserViews(TestCase):
|
|||
form.data["email"] = "wow@email.com"
|
||||
form.data["default_post_privacy"] = "public"
|
||||
form.data["preferred_timezone"] = "UTC"
|
||||
image_file = pathlib.Path(__file__).parent.joinpath(
|
||||
image_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../../static/images/no_cover.jpg"
|
||||
)
|
||||
# pylint: disable=consider-using-with
|
||||
form.data["avatar"] = SimpleUploadedFile(
|
||||
image_file, open(image_file, "rb").read(), content_type="image/jpeg"
|
||||
)
|
||||
with open(image_path, "rb") as image_file:
|
||||
form.data["avatar"] = SimpleUploadedFile(
|
||||
image_path, image_file.read(), content_type="image/jpeg"
|
||||
)
|
||||
request = self.factory.post("", form.data)
|
||||
request.user = self.local_user
|
||||
|
||||
|
@ -119,12 +119,12 @@ class EditUserViews(TestCase):
|
|||
|
||||
def test_crop_avatar(self, _):
|
||||
"""reduce that image size"""
|
||||
image_file = pathlib.Path(__file__).parent.joinpath(
|
||||
image_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../../static/images/no_cover.jpg"
|
||||
)
|
||||
image = Image.open(image_file)
|
||||
|
||||
result = views.preferences.edit_user.crop_avatar(image)
|
||||
with Image.open(image_path) as image:
|
||||
result = views.preferences.edit_user.crop_avatar(image)
|
||||
self.assertIsInstance(result, ContentFile)
|
||||
image_result = Image.open(result)
|
||||
self.assertEqual(image_result.size, (120, 120))
|
||||
with Image.open(result) as image_result:
|
||||
self.assertEqual(image_result.size, (120, 120))
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
""" test for app action functionality """
|
||||
from io import BytesIO
|
||||
from unittest.mock import patch
|
||||
import pathlib
|
||||
|
||||
from PIL import Image
|
||||
from django.core.files.base import ContentFile
|
||||
from django.http import Http404
|
||||
from django.template.response import TemplateResponse
|
||||
from django.test import TestCase
|
||||
|
@ -142,12 +139,9 @@ class FeedViews(TestCase):
|
|||
"""there are so many views, this just makes sure it LOADS"""
|
||||
view = views.Status.as_view()
|
||||
|
||||
image_file = pathlib.Path(__file__).parent.joinpath(
|
||||
image_path = pathlib.Path(__file__).parent.joinpath(
|
||||
"../../static/images/default_avi.jpg"
|
||||
)
|
||||
image = Image.open(image_file)
|
||||
output = BytesIO()
|
||||
image.save(output, format=image.format)
|
||||
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
|
||||
status = models.Review.objects.create(
|
||||
content="hi",
|
||||
|
@ -157,7 +151,8 @@ class FeedViews(TestCase):
|
|||
attachment = models.Image.objects.create(
|
||||
status=status, caption="alt text here"
|
||||
)
|
||||
attachment.image.save("test.jpg", ContentFile(output.getvalue()))
|
||||
with open(image_path, "rb") as image_file:
|
||||
attachment.image.save("test.jpg", image_file)
|
||||
|
||||
request = self.factory.get("")
|
||||
request.user = self.local_user
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue