Skip to content

Commit 56d2c85

Browse files
authored
Fix for SVG upload in sponsorship application (#2352)
* changing imagefield to file field on sponsorupdateform and sponsorshipapplicationform. adding django file validator to these two and the sponsor model * allow png upload * adding test to assert that svg can be uploaded * fix migration
1 parent cbc6c14 commit 56d2c85

File tree

4 files changed

+44
-2
lines changed

4 files changed

+44
-2
lines changed

sponsors/forms.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from django import forms
44
from django.conf import settings
55
from django.contrib.admin.widgets import AdminDateWidget
6+
from django.core.validators import FileExtensionValidator
67
from django.db.models import Q
78
from django.utils import timezone
89
from django.utils.functional import cached_property
@@ -225,10 +226,11 @@ class SponsorshipApplicationForm(forms.Form):
225226
help_text="For display on our sponsor webpage. High resolution PNG or JPG, smallest dimension no less than 256px",
226227
required=False,
227228
)
228-
print_logo = forms.ImageField(
229+
print_logo = forms.FileField(
229230
label="Sponsor print logo",
230231
help_text="For printed materials, signage, and projection. SVG or EPS",
231232
required=False,
233+
validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])],
232234
)
233235

234236
primary_phone = forms.CharField(
@@ -557,10 +559,11 @@ class SponsorUpdateForm(forms.ModelForm):
557559
help_text="For display on our sponsor webpage. High resolution PNG or JPG, smallest dimension no less than 256px",
558560
required=False,
559561
)
560-
print_logo = forms.ImageField(
562+
print_logo = forms.FileField(
561563
widget=forms.widgets.FileInput,
562564
help_text="For printed materials, signage, and projection. SVG or EPS",
563565
required=False,
566+
validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])],
564567
)
565568

566569
def __init__(self, *args, **kwargs):
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2.24 on 2023-12-24 18:54
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('sponsors', '0098_auto_20231219_1910'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='sponsor',
16+
name='print_logo',
17+
field=models.FileField(blank=True, help_text='For printed materials, signage, and projection. SVG or EPS', null=True, upload_to='sponsor_print_logos', validators=[django.core.validators.FileExtensionValidator(['eps', 'epsfepsi', 'svg', 'png'])], verbose_name='Print logo'),
18+
),
19+
]

sponsors/models/sponsors.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44
from allauth.account.models import EmailAddress
55
from django.conf import settings
6+
from django.core.validators import FileExtensionValidator
67
from django.db import models
78
from django.core.exceptions import ObjectDoesNotExist
89
from django.template.defaultfilters import slugify
@@ -51,6 +52,7 @@ class Sponsor(ContentManageable):
5152
)
5253
print_logo = models.FileField(
5354
upload_to="sponsor_print_logos",
55+
validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])],
5456
blank=True,
5557
null=True,
5658
verbose_name="Print logo",

sponsors/tests/test_forms.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from pathlib import Path
2+
3+
from django.core.files.uploadedfile import SimpleUploadedFile
14
from model_bakery import baker
25

36
from django.conf import settings
@@ -438,6 +441,21 @@ def test_create_sponsor_with_valid_data_for_non_required_inputs(
438441
self.assertEqual(sponsor.landing_page_url, "https://companyx.com")
439442
self.assertEqual(sponsor.twitter_handle, "@companyx")
440443

444+
def test_create_sponsor_with_svg_for_print_logo(
445+
self,
446+
):
447+
tick_svg = Path(settings.STATICFILES_DIRS[0]) / "img"/"sponsors"/"tick.svg"
448+
with tick_svg.open("rb") as fd:
449+
uploaded_svg = SimpleUploadedFile("tick.svg", fd.read())
450+
self.files["print_logo"] = uploaded_svg
451+
452+
form = SponsorshipApplicationForm(self.data, self.files)
453+
self.assertTrue(form.is_valid(), form.errors)
454+
455+
sponsor = form.save()
456+
457+
self.assertTrue(sponsor.print_logo)
458+
441459
def test_use_previous_user_sponsor(self):
442460
contact = baker.make(SponsorContact, user__email="[email protected]")
443461
self.data = {"sponsor": contact.sponsor.id}

0 commit comments

Comments
 (0)