python313Packages.django-compressor: fix bs4 4.13 compat

Changed files
+45
pkgs
development
python-modules
+39
pkgs/development/python-modules/django-compressor/bs4-4.13-compat.patch
···
+
From 53f50bc0cee1cdfaf023ba65e1524b820cb7c18e Mon Sep 17 00:00:00 2001
+
From: Matthias Kestenholz <mk@feinheit.ch>
+
Date: Thu, 22 May 2025 10:37:20 +0200
+
Subject: [PATCH] Disable bs4's multi valued attributes
+
+
---
+
compressor/parser/beautifulsoup.py | 12 ++++--------
+
1 file changed, 4 insertions(+), 8 deletions(-)
+
+
diff --git a/compressor/parser/beautifulsoup.py b/compressor/parser/beautifulsoup.py
+
index 91897485..f673410e 100644
+
--- a/compressor/parser/beautifulsoup.py
+
+++ b/compressor/parser/beautifulsoup.py
+
@@ -10,7 +10,9 @@ def __init__(self, content):
+
try:
+
from bs4 import BeautifulSoup
+
+
- self.soup = BeautifulSoup(self.content, "html.parser")
+
+ # Disable multi_valued_attributes
+
+ # http://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes
+
+ self.soup = BeautifulSoup(self.content, "html.parser", multi_valued_attributes={})
+
except ImportError as err:
+
raise ImproperlyConfigured("Error while importing BeautifulSoup: %s" % err)
+
+
@@ -21,13 +23,7 @@ def js_elems(self):
+
return self.soup.find_all("script")
+
+
def elem_attribs(self, elem):
+
- attrs = dict(elem.attrs)
+
- # hack around changed behaviour in bs4, it returns lists now instead of one string, see
+
- # http://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes
+
- for key, value in attrs.items():
+
- if type(value) is list:
+
- attrs[key] = " ".join(value)
+
- return attrs
+
+ return elem.attrs
+
+
def elem_content(self, elem):
+
return elem.string
+6
pkgs/development/python-modules/django-compressor/default.nix
···
hash = "sha256-wdikii7k2LfyPEEeucl+LYjbGKGLocnoF41fW4NmqCI=";
};
+
patches = [
+
# https://github.com/django-compressor/django-compressor/issues/1279
+
# https://github.com/django-compressor/django-compressor/pull/1296
+
./bs4-4.13-compat.patch
+
];
+
build-system = [
setuptools
];