From fef4aa359cdd2efd7b7e1be008e706312f8967b7 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Mon, 6 Apr 2026 13:24:56 -0500 Subject: [PATCH 01/18] use sponsor logos --- warehouse/sponsors/models.py | 2 +- warehouse/sponsors/tasks.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/warehouse/sponsors/models.py b/warehouse/sponsors/models.py index ae0f5eeb25fe..bca0ebca82ee 100644 --- a/warehouse/sponsors/models.py +++ b/warehouse/sponsors/models.py @@ -38,7 +38,7 @@ class Sponsor(db.Model): @property def color_logo_img(self): - return f'' + return f'' @property def white_logo_img(self): diff --git a/warehouse/sponsors/tasks.py b/warehouse/sponsors/tasks.py index 60bdbb142fe2..0fd6e6684458 100644 --- a/warehouse/sponsors/tasks.py +++ b/warehouse/sponsors/tasks.py @@ -50,8 +50,11 @@ def update_pypi_sponsors(request): sponsor.service = sponsor_info["description"] sponsor.link_url = sponsor_info["sponsor_url"] sponsor.color_logo_url = sponsor_info["logo"] + if sponsor_info.get("white_logo"): + sponsor.white_logo_url = sponsor_info["white_logo"] sponsor.level_name = sponsor_info["level_name"] sponsor.level_order = sponsor_info["level_order"] sponsor.is_active = True sponsor.psf_sponsor = True + sponsor.footer = sponsor_info["level_name"] in {"Visionary", "Sustainability"} sponsor.origin = "remote" From 5c88fecf37b82b50b83f46c690ce41e2c67e6119 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Mon, 6 Apr 2026 13:25:23 -0500 Subject: [PATCH 02/18] feat: show PSF sponsors in footer ordered by level PSF sponsors (Visionary, Sustainability) now appear before infra sponsors, sorted by level then alphabetically. Falls back to color logo when white logo is unavailable. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/includes/sponsors-footer.html | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/warehouse/templates/includes/sponsors-footer.html b/warehouse/templates/includes/sponsors-footer.html index 9c033c991fda..9b7438cad609 100644 --- a/warehouse/templates/includes/sponsors-footer.html +++ b/warehouse/templates/includes/sponsors-footer.html @@ -14,28 +14,36 @@

Supported by

- {% for sponsor in request.sponsors | sort(attribute='name') %} - {# Short-circuit if we don't have an image for them #} - {% if sponsor.white_logo_url %} - {# Check if they belong in the footer #} - {% if sponsor.infra_sponsor or sponsor.footer %} - + {% for sponsor in request.sponsors | selectattr('footer') | rejectattr('infra_sponsor') | sort(attribute='name') | sort(attribute='level_order') %} + {% if sponsor.white_logo_url or sponsor.color_logo_url %} + + {% if sponsor.white_logo_url %} {{ sponsor.white_logo_img|camoify|safe }} - {{ sponsor.name }} - - {# If they're an infra sponsor, we should have a service for them, - otherwise they're a PSF sponsor #} - {% if sponsor.infra_sponsor %} - {{ sponsor.service }} - {% elif sponsor.footer %} - PSF Sponsor - {% endif %} - - - {% endif %} + {% else %} + {{ sponsor.color_logo_img|camoify|safe }} + {% endif %} + {{ sponsor.name }} + PSF Sponsor + + {% endif %} + {% endfor %} + {% for sponsor in request.sponsors | selectattr('infra_sponsor') | sort(attribute='name') %} + {% if sponsor.white_logo_url or sponsor.color_logo_url %} + + {% if sponsor.white_logo_url %} + {{ sponsor.white_logo_img|camoify|safe }} + {% else %} + {{ sponsor.color_logo_img|camoify|safe }} + {% endif %} + {{ sponsor.name }} + {{ sponsor.service }} + {% endif %} {% endfor %}
From 764dac9b2c3af13bdff26575e106e76e49147ce2 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Mon, 6 Apr 2026 13:25:27 -0500 Subject: [PATCH 03/18] test: verify footer flag set based on sponsor level Co-Authored-By: Claude Opus 4.6 (1M context) --- tests/unit/sponsors/test_tasks.py | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/unit/sponsors/test_tasks.py b/tests/unit/sponsors/test_tasks.py index 155ccb54231a..e62d4910a266 100644 --- a/tests/unit/sponsors/test_tasks.py +++ b/tests/unit/sponsors/test_tasks.py @@ -197,6 +197,38 @@ def test_update_remote_sponsor_with_same_slug_with_new_logo( assert "Sponsor description" == db_sponsor.service +@pytest.mark.parametrize( + "level_name, expected_footer", + [ + ("Visionary", True), + ("Sustainability", True), + ("Partner", False), + ], +) +def test_footer_set_based_on_level( + monkeypatch, + db_request, + fake_task_request, + sponsor_api_data, + level_name, + expected_footer, +): + sponsor_api_data[0]["level_name"] = level_name + response = pretend.stub( + raise_for_status=lambda: None, json=lambda: sponsor_api_data + ) + requests = pretend.stub( + get=pretend.call_recorder(lambda url, headers, timeout: response) + ) + monkeypatch.setattr(tasks, "requests", requests) + + fake_task_request.db = db_request.db + tasks.update_pypi_sponsors(fake_task_request) + + db_sponsor = db_request.db.query(Sponsor).one() + assert db_sponsor.footer is expected_footer + + def test_flag_existing_psf_sponsor_to_false_if_not_present_in_api_response( monkeypatch, db_request, fake_task_request, sponsor_api_data ): From d0f1d1dfe09beaaf1298bd7359f6c39848b6b424 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Mon, 6 Apr 2026 15:08:01 -0500 Subject: [PATCH 04/18] fmt --- tests/unit/sponsors/test_tasks.py | 2 +- warehouse/sponsors/models.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unit/sponsors/test_tasks.py b/tests/unit/sponsors/test_tasks.py index e62d4910a266..3eb135e14503 100644 --- a/tests/unit/sponsors/test_tasks.py +++ b/tests/unit/sponsors/test_tasks.py @@ -198,7 +198,7 @@ def test_update_remote_sponsor_with_same_slug_with_new_logo( @pytest.mark.parametrize( - "level_name, expected_footer", + ("level_name", "expected_footer"), [ ("Visionary", True), ("Sustainability", True), diff --git a/warehouse/sponsors/models.py b/warehouse/sponsors/models.py index bca0ebca82ee..5548c5ab824d 100644 --- a/warehouse/sponsors/models.py +++ b/warehouse/sponsors/models.py @@ -38,7 +38,10 @@ class Sponsor(db.Model): @property def color_logo_img(self): - return f'' + return ( + '' + ) @property def white_logo_img(self): From 75b322650e427875dae94314503de07d0f45ae6e Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 13:10:46 -0500 Subject: [PATCH 05/18] fix test --- tests/unit/sponsors/test_models.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/unit/sponsors/test_models.py b/tests/unit/sponsors/test_models.py index defc2c81917e..a53372b1f299 100644 --- a/tests/unit/sponsors/test_models.py +++ b/tests/unit/sponsors/test_models.py @@ -5,7 +5,10 @@ def test_sponsor_color_logo_img_tag(db_request): sponsor = SponsorFactory.create() - expected = f'' + expected = ( + '' + ) assert sponsor.color_logo_img == expected From 1b21773ed3884bf44c8fb0a6e33063b36d6e8e39 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 18:39:17 -0500 Subject: [PATCH 06/18] Update warehouse/sponsors/tasks.py Co-authored-by: Mike Fiedler --- warehouse/sponsors/tasks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/warehouse/sponsors/tasks.py b/warehouse/sponsors/tasks.py index 0fd6e6684458..87aa4927ce3e 100644 --- a/warehouse/sponsors/tasks.py +++ b/warehouse/sponsors/tasks.py @@ -50,8 +50,7 @@ def update_pypi_sponsors(request): sponsor.service = sponsor_info["description"] sponsor.link_url = sponsor_info["sponsor_url"] sponsor.color_logo_url = sponsor_info["logo"] - if sponsor_info.get("white_logo"): - sponsor.white_logo_url = sponsor_info["white_logo"] + sponsor.white_logo_url = sponsor_info.get("white_logo") sponsor.level_name = sponsor_info["level_name"] sponsor.level_order = sponsor_info["level_order"] sponsor.is_active = True From 1df95c4b5a02ae3e04f995a127ab32b6fcd4463b Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 18:44:52 -0500 Subject: [PATCH 07/18] do sponsor stuff in python for the speeds --- warehouse/sponsors/__init__.py | 15 +++++++++++ .../templates/includes/sponsors-footer.html | 26 ++++++------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/warehouse/sponsors/__init__.py b/warehouse/sponsors/__init__.py index 1fe5f8e62d33..f1cd67d7175b 100644 --- a/warehouse/sponsors/__init__.py +++ b/warehouse/sponsors/__init__.py @@ -11,9 +11,24 @@ def _sponsors(request): return request.db.query(Sponsor).filter(Sponsor.is_active == true()).all() +def _footer_sponsors(request): + """Return sponsors for the site footer, ordered: PSF by level then name, then infra by name.""" + all_sponsors = request.sponsors + psf = sorted( + (s for s in all_sponsors if s.footer and not s.infra_sponsor), + key=lambda s: (s.level_order or 0, s.name), + ) + infra = sorted( + (s for s in all_sponsors if s.infra_sponsor), + key=lambda s: s.name, + ) + return psf + infra + + def includeme(config): # Add a request method which will allow to list sponsors config.add_request_method(_sponsors, name="sponsors", reify=True) + config.add_request_method(_footer_sponsors, name="footer_sponsors", reify=True) # Add a periodic task to update sponsors table if config.registry.settings.get("pythondotorg.api_token"): diff --git a/warehouse/templates/includes/sponsors-footer.html b/warehouse/templates/includes/sponsors-footer.html index 9b7438cad609..ab4e105b028f 100644 --- a/warehouse/templates/includes/sponsors-footer.html +++ b/warehouse/templates/includes/sponsors-footer.html @@ -14,7 +14,7 @@

Supported by

- {% for sponsor in request.sponsors | selectattr('footer') | rejectattr('infra_sponsor') | sort(attribute='name') | sort(attribute='level_order') %} + {% for sponsor in request.footer_sponsors %} {% if sponsor.white_logo_url or sponsor.color_logo_url %} {{ sponsor.name }} - PSF Sponsor - - {% endif %} - {% endfor %} - {% for sponsor in request.sponsors | selectattr('infra_sponsor') | sort(attribute='name') %} - {% if sponsor.white_logo_url or sponsor.color_logo_url %} - - {% if sponsor.white_logo_url %} - {{ sponsor.white_logo_img|camoify|safe }} - {% else %} - {{ sponsor.color_logo_img|camoify|safe }} - {% endif %} - {{ sponsor.name }} - {{ sponsor.service }} + + {% if sponsor.infra_sponsor %} + {{ sponsor.service }} + {% else %} + PSF Sponsor + {% endif %} + {% endif %} {% endfor %} From d2641c2df21db59399b8bd2e79fd42266e846083 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 18:45:17 -0500 Subject: [PATCH 08/18] test: add footer sponsor ordering and white logo sync coverage Co-Authored-By: Claude Opus 4.6 (1M context) --- tests/unit/sponsors/test_init.py | 36 ++++++++++++++++++++++++++++++- tests/unit/sponsors/test_tasks.py | 19 ++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/tests/unit/sponsors/test_init.py b/tests/unit/sponsors/test_init.py index 582a25ea890c..3b82650de732 100644 --- a/tests/unit/sponsors/test_init.py +++ b/tests/unit/sponsors/test_init.py @@ -24,6 +24,9 @@ def test_includeme(): assert config.add_request_method.calls == [ pretend.call(sponsors._sponsors, name="sponsors", reify=True), + pretend.call( + sponsors._footer_sponsors, name="footer_sponsors", reify=True + ), ] assert config.add_periodic_task.calls == [ pretend.call(crontab(minute=10), update_pypi_sponsors), @@ -42,6 +45,9 @@ def test_do_not_schedule_sponsor_api_integration_if_no_token(): assert config.add_request_method.calls == [ pretend.call(sponsors._sponsors, name="sponsors", reify=True), + pretend.call( + sponsors._footer_sponsors, name="footer_sponsors", reify=True + ), ] assert not config.add_periodic_task.calls @@ -51,7 +57,35 @@ def test_list_sponsors(db_request): SponsorFactory.create_batch(3, is_active=False) result = sponsors._sponsors(db_request) - expected = db_request.db.query(Sponsor).filter(Sponsor.is_active == true()).all() + expected = ( + db_request.db.query(Sponsor) + .filter(Sponsor.is_active == true()) + .all() + ) assert result == expected assert len(result) == 5 + + +def test_footer_sponsors_ordering(db_request): + infra = SponsorFactory.create( + name="AWS", infra_sponsor=True, footer=False, level_order=0 + ) + vis_b = SponsorFactory.create( + name="Bravo", footer=True, infra_sponsor=False, level_order=1 + ) + vis_a = SponsorFactory.create( + name="Alpha", footer=True, infra_sponsor=False, level_order=1 + ) + sus = SponsorFactory.create( + name="Charlie", footer=True, infra_sponsor=False, level_order=2 + ) + # not in footer at all + SponsorFactory.create( + name="Nobody", footer=False, infra_sponsor=False, level_order=5 + ) + + db_request.sponsors = sponsors._sponsors(db_request) + result = sponsors._footer_sponsors(db_request) + + assert result == [vis_a, vis_b, sus, infra] diff --git a/tests/unit/sponsors/test_tasks.py b/tests/unit/sponsors/test_tasks.py index 3eb135e14503..ce2a47a79e4d 100644 --- a/tests/unit/sponsors/test_tasks.py +++ b/tests/unit/sponsors/test_tasks.py @@ -229,6 +229,25 @@ def test_footer_set_based_on_level( assert db_sponsor.footer is expected_footer +def test_white_logo_synced_when_provided( + monkeypatch, db_request, fake_task_request, sponsor_api_data +): + sponsor_api_data[0]["white_logo"] = "https://white-logo.com/logo.png" + response = pretend.stub( + raise_for_status=lambda: None, json=lambda: sponsor_api_data + ) + requests = pretend.stub( + get=pretend.call_recorder(lambda url, headers, timeout: response) + ) + monkeypatch.setattr(tasks, "requests", requests) + + fake_task_request.db = db_request.db + tasks.update_pypi_sponsors(fake_task_request) + + db_sponsor = db_request.db.query(Sponsor).one() + assert db_sponsor.white_logo_url == "https://white-logo.com/logo.png" + + def test_flag_existing_psf_sponsor_to_false_if_not_present_in_api_response( monkeypatch, db_request, fake_task_request, sponsor_api_data ): From 43e619598ad29f4d24b00f7d49e9a43c98d3cbbb Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 18:50:09 -0500 Subject: [PATCH 09/18] try to clean up test a lil --- tests/unit/sponsors/test_init.py | 26 +++++++------------------- tests/unit/sponsors/test_tasks.py | 14 ++++++-------- 2 files changed, 13 insertions(+), 27 deletions(-) diff --git a/tests/unit/sponsors/test_init.py b/tests/unit/sponsors/test_init.py index 3b82650de732..b6a2f0f95a1f 100644 --- a/tests/unit/sponsors/test_init.py +++ b/tests/unit/sponsors/test_init.py @@ -68,24 +68,12 @@ def test_list_sponsors(db_request): def test_footer_sponsors_ordering(db_request): - infra = SponsorFactory.create( - name="AWS", infra_sponsor=True, footer=False, level_order=0 - ) - vis_b = SponsorFactory.create( - name="Bravo", footer=True, infra_sponsor=False, level_order=1 - ) - vis_a = SponsorFactory.create( - name="Alpha", footer=True, infra_sponsor=False, level_order=1 - ) - sus = SponsorFactory.create( - name="Charlie", footer=True, infra_sponsor=False, level_order=2 - ) - # not in footer at all - SponsorFactory.create( - name="Nobody", footer=False, infra_sponsor=False, level_order=5 - ) + c = SponsorFactory.create + infra = c(name="AWS", infra_sponsor=True, footer=False, level_order=0) + vis_b = c(name="Bravo", footer=True, infra_sponsor=False, level_order=1) + vis_a = c(name="Alpha", footer=True, infra_sponsor=False, level_order=1) + sus = c(name="Charlie", footer=True, infra_sponsor=False, level_order=2) + c(name="Nobody", footer=False, infra_sponsor=False, level_order=5) db_request.sponsors = sponsors._sponsors(db_request) - result = sponsors._footer_sponsors(db_request) - - assert result == [vis_a, vis_b, sus, infra] + assert sponsors._footer_sponsors(db_request) == [vis_a, vis_b, sus, infra] diff --git a/tests/unit/sponsors/test_tasks.py b/tests/unit/sponsors/test_tasks.py index ce2a47a79e4d..31cdd111f064 100644 --- a/tests/unit/sponsors/test_tasks.py +++ b/tests/unit/sponsors/test_tasks.py @@ -232,20 +232,18 @@ def test_footer_set_based_on_level( def test_white_logo_synced_when_provided( monkeypatch, db_request, fake_task_request, sponsor_api_data ): - sponsor_api_data[0]["white_logo"] = "https://white-logo.com/logo.png" + sponsor_api_data[0]["white_logo"] = "https://logourl.com/white.png" response = pretend.stub( raise_for_status=lambda: None, json=lambda: sponsor_api_data ) - requests = pretend.stub( - get=pretend.call_recorder(lambda url, headers, timeout: response) + monkeypatch.setattr( + tasks, "requests", pretend.stub( + get=pretend.call_recorder(lambda *a, **kw: response) + ), ) - monkeypatch.setattr(tasks, "requests", requests) - fake_task_request.db = db_request.db tasks.update_pypi_sponsors(fake_task_request) - - db_sponsor = db_request.db.query(Sponsor).one() - assert db_sponsor.white_logo_url == "https://white-logo.com/logo.png" + assert db_request.db.query(Sponsor).one().white_logo_url == "https://logourl.com/white.png" def test_flag_existing_psf_sponsor_to_false_if_not_present_in_api_response( From 9b3457335a7e1f51a1da9a7889db8981802954f6 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 18:57:09 -0500 Subject: [PATCH 10/18] fmt --- tests/unit/sponsors/test_init.py | 14 +++----------- tests/unit/sponsors/test_tasks.py | 11 +++++++---- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/tests/unit/sponsors/test_init.py b/tests/unit/sponsors/test_init.py index b6a2f0f95a1f..026eac5104fb 100644 --- a/tests/unit/sponsors/test_init.py +++ b/tests/unit/sponsors/test_init.py @@ -24,9 +24,7 @@ def test_includeme(): assert config.add_request_method.calls == [ pretend.call(sponsors._sponsors, name="sponsors", reify=True), - pretend.call( - sponsors._footer_sponsors, name="footer_sponsors", reify=True - ), + pretend.call(sponsors._footer_sponsors, name="footer_sponsors", reify=True), ] assert config.add_periodic_task.calls == [ pretend.call(crontab(minute=10), update_pypi_sponsors), @@ -45,9 +43,7 @@ def test_do_not_schedule_sponsor_api_integration_if_no_token(): assert config.add_request_method.calls == [ pretend.call(sponsors._sponsors, name="sponsors", reify=True), - pretend.call( - sponsors._footer_sponsors, name="footer_sponsors", reify=True - ), + pretend.call(sponsors._footer_sponsors, name="footer_sponsors", reify=True), ] assert not config.add_periodic_task.calls @@ -57,11 +53,7 @@ def test_list_sponsors(db_request): SponsorFactory.create_batch(3, is_active=False) result = sponsors._sponsors(db_request) - expected = ( - db_request.db.query(Sponsor) - .filter(Sponsor.is_active == true()) - .all() - ) + expected = db_request.db.query(Sponsor).filter(Sponsor.is_active == true()).all() assert result == expected assert len(result) == 5 diff --git a/tests/unit/sponsors/test_tasks.py b/tests/unit/sponsors/test_tasks.py index 31cdd111f064..aaf6cb49eef6 100644 --- a/tests/unit/sponsors/test_tasks.py +++ b/tests/unit/sponsors/test_tasks.py @@ -237,13 +237,16 @@ def test_white_logo_synced_when_provided( raise_for_status=lambda: None, json=lambda: sponsor_api_data ) monkeypatch.setattr( - tasks, "requests", pretend.stub( - get=pretend.call_recorder(lambda *a, **kw: response) - ), + tasks, + "requests", + pretend.stub(get=pretend.call_recorder(lambda *a, **kw: response)), ) fake_task_request.db = db_request.db tasks.update_pypi_sponsors(fake_task_request) - assert db_request.db.query(Sponsor).one().white_logo_url == "https://logourl.com/white.png" + assert ( + db_request.db.query(Sponsor).one().white_logo_url + == "https://logourl.com/white.png" + ) def test_flag_existing_psf_sponsor_to_false_if_not_present_in_api_response( From 094f0fb2def4ccb818c9386e436ae125f0e4e726 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Tue, 7 Apr 2026 19:11:25 -0500 Subject: [PATCH 11/18] fmt --- warehouse/sponsors/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/warehouse/sponsors/__init__.py b/warehouse/sponsors/__init__.py index f1cd67d7175b..98bfc555c1fb 100644 --- a/warehouse/sponsors/__init__.py +++ b/warehouse/sponsors/__init__.py @@ -12,7 +12,7 @@ def _sponsors(request): def _footer_sponsors(request): - """Return sponsors for the site footer, ordered: PSF by level then name, then infra by name.""" + """Return footer sponsors: PSF by level then name, infra by name.""" all_sponsors = request.sponsors psf = sorted( (s for s in all_sponsors if s.footer and not s.infra_sponsor), From 97d75c7fd0c436fa746bda6e67b71ce5281e42ca Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Thu, 9 Apr 2026 10:53:22 -0500 Subject: [PATCH 12/18] dont sort in html it is slow --- warehouse/templates/pages/sponsors.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/warehouse/templates/pages/sponsors.html b/warehouse/templates/pages/sponsors.html index 90821deaa3ce..8510593ee7b3 100644 --- a/warehouse/templates/pages/sponsors.html +++ b/warehouse/templates/pages/sponsors.html @@ -164,7 +164,7 @@

Infrastructure sponsors


+

Infrastructure partners

+
+ {% endif %} +
From 99aea7038bc0bfa89948ab5f04b8ff27b83242b5 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Thu, 9 Apr 2026 12:59:42 -0500 Subject: [PATCH 18/18] fmt --- warehouse/templates/includes/sponsors-footer.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/warehouse/templates/includes/sponsors-footer.html b/warehouse/templates/includes/sponsors-footer.html index aa698ca1d66a..c23534cf97d5 100644 --- a/warehouse/templates/includes/sponsors-footer.html +++ b/warehouse/templates/includes/sponsors-footer.html @@ -24,9 +24,7 @@ target="_blank" rel="noopener" href="{{ sponsor.link_url }}"> - {% if sponsor.white_logo_url %} - {{ sponsor.white_logo_img|camoify|safe }} - {% endif %} + {% if sponsor.white_logo_url %}{{ sponsor.white_logo_img|camoify|safe }}{% endif %} {{ sponsor.name }} {% if sponsor.infra_sponsor %}