Compare commits

..

21 commits

Author SHA1 Message Date
Michel Lind
4088983b63
Revert pyproject.toml conversion when building with older setuptools
- Drop patches

Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2025-12-11 17:14:51 +00:00
Michel Lind
c47467d43f
Remove unneeded patches
Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2025-12-10 22:45:58 +00:00
Michel Lind
fcfc8dd484
Update to 4.6.0 upstream release
- Resolves: rhbz#2413786

Commit authored by Packit automation (https://packit.dev/)
2025-12-10 22:02:17 +00:00
Michel Lind
1a5548185b
Enable Packit
[skip changelog]

Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2025-12-10 22:00:43 +00:00
Python Maint
a3b82fdbcf Rebuilt for Python 3.14.0rc3 bytecode 2025-09-19 13:09:36 +02:00
Python Maint
2c69538071 Rebuilt for Python 3.14.0rc2 bytecode 2025-08-15 13:36:42 +02:00
Fedora Release Engineering
e8cf3aab29 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 07:34:48 +00:00
Python Maint
20499935df Rebuilt for Python 3.14 2025-06-03 12:20:58 +02:00
Tim Landscheidt
a60ba9a21f Fix Obsoletes fields for python3-django-compressor 2025-03-23 18:18:02 +00:00
Fedora Release Engineering
d38151b86e Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 13:39:33 +00:00
Michel Lind
8da4cb4fea
Fix building with Python 3.14; resolves: rhbz#2322719
Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2024-12-20 16:52:55 -06:00
Michel Lind
66ec10d2b9
Update to 4.5.1 (resolves: rhbz#2292613)
Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2024-12-20 16:28:25 -06:00
karolinku
35c449bbe3 Replace git source with pypi one
There has been discovered that github source differs from pypi one
which is causing errors for 4.4 version, i.e. dicovering previous
version 4.3 with setupy.py --version.
2024-08-06 15:51:12 +02:00
Fedora Release Engineering
78da4b3718 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-19 11:02:24 +00:00
Python Maint
c63dc811bd Rebuilt for Python 3.13 2024-06-08 01:28:29 +02:00
Fedora Release Engineering
f73b71e9e9 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-26 03:27:20 +00:00
Fedora Release Engineering
4ec455047a Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-22 00:46:41 +00:00
Michel Lind
a07f14cb1c
Update to 4.4 (rhbz#1715669)
- cleanup unused patches

Signed-off-by: Michel Lind <salimma@fedoraproject.org>
2024-01-16 11:22:01 -06:00
Fedora Release Engineering
ef93f09bb9 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-21 09:00:20 +00:00
Python Maint
bd6cd6ca5c Rebuilt for Python 3.12 2023-06-29 13:33:54 +02:00
Fedora Release Engineering
9a0eeafc7c Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-20 12:40:48 +00:00
10 changed files with 215 additions and 269 deletions

3
.gitignore vendored
View file

@ -1,2 +1,5 @@
/python-django-compressor-*.tar.gz
/django-compressor-*.tar.gz
/django_compressor-4.4.tar.gz
/django_compressor-4.5.1.tar.gz
/django_compressor-4.6.0.tar.gz

3
README.packit Normal file
View file

@ -0,0 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 1.12.0.

View file

@ -1,37 +0,0 @@
From ac70fbfb7f8349e5c1150f40bf1d21ba635d0cb8 Mon Sep 17 00:00:00 2001
From: Chirag Jadwani <cbjadwani@elance-odesk.com>
Date: Fri, 29 Aug 2014 13:15:35 +0530
Subject: [PATCH] Fix AttributeError in offline compression
---
compressor/offline/django.py | 2 ++
.../test_block_super_base_compressed/test_compressor_offline.html | 5 +++++
2 files changed, 7 insertions(+)
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
index 3986562..b326093 100644
--- a/compressor/offline/django.py
+++ b/compressor/offline/django.py
@@ -54,6 +54,8 @@ def remove_block_nodes(nodelist, block_stack, block_context):
if not block_stack:
continue
node = block_context.get_block(block_stack[-1].name)
+ if not node:
+ continue
if isinstance(node, BlockNode):
expanded_block = expand_blocknode(node, block_stack, block_context)
new_nodelist.extend(expanded_block)
diff --git a/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html b/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
index 01382ec..10097c1 100644
--- a/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
+++ b/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
@@ -5,4 +5,9 @@
<script type="text/javascript">
alert("this alert shouldn't be alone!");
</script>
+ {% block orphan %}
+ {{ block.super }}
+ An 'orphan' block that refers to a non-existent super block.
+ Contents of this block are ignored.
+ {% endblock %}
{% endspaceless %}{% endblock %}

View file

@ -1,162 +0,0 @@
From 72b33ddbcdc41eb5af42b86329d81d96894a9d10 Mon Sep 17 00:00:00 2001
From: Carlton Gibson <carlton.gibson@noumenal.co.uk>
Date: Tue, 10 Mar 2015 20:04:07 +0100
Subject: [PATCH] Make `compress` command (at least) run through on 1.8
FAILED (failures=15, errors=15, skipped=1)
AssertionError: 2 != 12
OfflineGenerationError: ... key "XYZ" missing ...
---
compressor/management/commands/compress.py | 41 +++++++++++++++++-------------
compressor/offline/django.py | 27 ++++++++++++++------
2 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/compressor/management/commands/compress.py b/compressor/management/commands/compress.py
index 6be215e..0bc436a 100644
--- a/compressor/management/commands/compress.py
+++ b/compressor/management/commands/compress.py
@@ -5,6 +5,7 @@
from fnmatch import fnmatch
from optparse import make_option
+import django
from django.core.management.base import NoArgsCommand, CommandError
import django.template
from django.template import Context
@@ -53,24 +54,30 @@ class Command(NoArgsCommand):
requires_model_validation = False
def get_loaders(self):
- from django.template.loader import template_source_loaders
- if template_source_loaders is None:
- try:
- from django.template.loader import (
- find_template as finder_func)
- except ImportError:
- from django.template.loader import (
- find_template_source as finder_func) # noqa
- try:
- # Force django to calculate template_source_loaders from
- # TEMPLATE_LOADERS settings, by asking to find a dummy template
- source, name = finder_func('test')
- except django.template.TemplateDoesNotExist:
- pass
- # Reload template_source_loaders now that it has been calculated ;
- # it should contain the list of valid, instanciated template loaders
- # to use.
+ if django.VERSION < (1, 8):
from django.template.loader import template_source_loaders
+ if template_source_loaders is None:
+ try:
+ from django.template.loader import (
+ find_template as finder_func)
+ except ImportError:
+ from django.template.loader import (
+ find_template_source as finder_func) # noqa
+ try:
+ # Force django to calculate template_source_loaders from
+ # TEMPLATE_LOADERS settings, by asking to find a dummy template
+ source, name = finder_func('test')
+ except django.template.TemplateDoesNotExist:
+ pass
+ # Reload template_source_loaders now that it has been calculated ;
+ # it should contain the list of valid, instanciated template loaders
+ # to use.
+ from django.template.loader import template_source_loaders
+ else:
+ from django.template import engines
+ template_source_loaders = []
+ for e in engines.all():
+ template_source_loaders.extend(e.engine.get_template_loaders(e.engine.loaders))
loaders = []
# If template loader is CachedTemplateLoader, return the loaders
# that it wraps around. So if we have
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
index b326093..107c6e4 100644
--- a/compressor/offline/django.py
+++ b/compressor/offline/django.py
@@ -1,6 +1,7 @@
from __future__ import absolute_import
from copy import copy
+import django
from django import template
from django.conf import settings
from django.template import Context
@@ -14,7 +15,7 @@
from compressor.templatetags.compress import CompressorNode
-def handle_extendsnode(extendsnode, block_context=None):
+def handle_extendsnode(extendsnode, block_context=None, original=None):
"""Create a copy of Node tree of a derived template replacing
all blocks tags with the nodes of appropriate blocks.
Also handles {{ block.super }} tags.
@@ -26,6 +27,9 @@ def handle_extendsnode(extendsnode, block_context=None):
block_context.add_blocks(blocks)
context = Context(settings.COMPRESS_OFFLINE_CONTEXT)
+ if original is not None:
+ context.template = original
+
compiled_parent = extendsnode.get_parent(context)
parent_nodelist = compiled_parent.nodelist
# If the parent template has an ExtendsNode it is not the root.
@@ -33,7 +37,7 @@ def handle_extendsnode(extendsnode, block_context=None):
# The ExtendsNode has to be the first non-text node.
if not isinstance(node, TextNode):
if isinstance(node, ExtendsNode):
- return handle_extendsnode(node, block_context)
+ return handle_extendsnode(node, block_context, original)
break
# Add blocks of the root template to block context.
blocks = dict((n.name, n) for n in
@@ -95,7 +99,10 @@ def __init__(self, charset):
def parse(self, template_name):
try:
- return get_template(template_name)
+ if django.VERSION < (1, 8):
+ return get_template(template_name)
+ else:
+ return get_template(template_name).template
except template.TemplateSyntaxError as e:
raise TemplateSyntaxError(str(e))
except template.TemplateDoesNotExist as e:
@@ -111,15 +118,17 @@ def process_node(self, template, context, node):
pass
def render_nodelist(self, template, context, node):
+ if django.VERSION >= (1, 8):
+ context.template = template
return node.nodelist.render(context)
def render_node(self, template, context, node):
return node.render(context, forced=True)
- def get_nodelist(self, node):
+ def get_nodelist(self, node, original=None):
if isinstance(node, ExtendsNode):
try:
- return handle_extendsnode(node)
+ return handle_extendsnode(node, block_context=None, original=original)
except template.TemplateSyntaxError as e:
raise TemplateSyntaxError(str(e))
except template.TemplateDoesNotExist as e:
@@ -134,10 +143,12 @@ def get_nodelist(self, node):
nodelist = getattr(node, 'nodelist', [])
return nodelist
- def walk_nodes(self, node):
- for node in self.get_nodelist(node):
+ def walk_nodes(self, node, original=None):
+ if django.VERSION >= (1, 8) and original is None:
+ original = node
+ for node in self.get_nodelist(node, original):
if isinstance(node, CompressorNode) and node.is_offline_compression_enabled(forced=True):
yield node
else:
- for node in self.walk_nodes(node):
+ for node in self.walk_nodes(node, original):
yield node

View file

@ -1,48 +0,0 @@
From c8495264b503a595fbc89e6c8a83a402eff445c6 Mon Sep 17 00:00:00 2001
From: Mathieu Pillard <m@virgule.net>
Date: Sun, 25 May 2014 14:09:33 +0200
Subject: [PATCH] Use get_template() when dealing with django templates
---
compressor/offline/django.py | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
index 6541471..3986562 100644
--- a/compressor/offline/django.py
+++ b/compressor/offline/django.py
@@ -1,13 +1,12 @@
from __future__ import absolute_import
-import io
from copy import copy
from django import template
from django.conf import settings
-from django.template import Template
from django.template import Context
from django.template.base import Node, VariableNode, TextNode, NodeList
from django.template.defaulttags import IfNode
+from django.template.loader import get_template
from django.template.loader_tags import ExtendsNode, BlockNode, BlockContext
@@ -93,13 +92,12 @@ def __init__(self, charset):
self.charset = charset
def parse(self, template_name):
- with io.open(template_name, mode='rb') as file:
- try:
- return Template(file.read().decode(self.charset))
- except template.TemplateSyntaxError as e:
- raise TemplateSyntaxError(str(e))
- except template.TemplateDoesNotExist as e:
- raise TemplateDoesNotExist(str(e))
+ try:
+ return get_template(template_name)
+ except template.TemplateSyntaxError as e:
+ raise TemplateSyntaxError(str(e))
+ except template.TemplateDoesNotExist as e:
+ raise TemplateDoesNotExist(str(e))
def process_template(self, template, context):
return True

16
packit.yaml Normal file
View file

@ -0,0 +1,16 @@
# See the documentation for more information:
# https://packit.dev/docs/configuration/
copy_upstream_release_description: false
jobs:
- job: pull_from_upstream
trigger: release
dist_git_branches:
- fedora-rawhide
- job: koji_build
trigger: commit
allowed_committers: ['packit']
dist_git_branches:
- fedora-rawhide

View file

@ -1,4 +1,5 @@
%global srcname django-compressor
%global pypi_name django_compressor
%global _desc\
Django Compressor combines and compresses linked and inline Javascript\
or CSS in a Django templates into cacheable static files by using the\
@ -7,16 +8,23 @@ or CSS in a Django templates into cacheable static files by using the\
parsed and searched for CSS or JS. These styles and scripts are subsequently\
processed with optional, configurable compilers and filters.
# setuptools < 77.0.3
%if (%{defined fedora} && 0%{?fedora} <= 42) || (%{defined rhel} && 0%{?rhel} <= 10)
%bcond old_setuptools 1
%else
%bcond old_setuptools 0
%endif
Name: python-django-compressor
Version: 4.1
Version: 4.6.0
Release: %autorelease
Summary: Compresses linked and inline JavaScript or CSS into single cached files
License: MIT
URL: https://github.com/django-compressor/django-compressor
Source0: %{url}/archive/%{version}/%{srcname}-%{version}.tar.gz
Patch0: rdep-version.patch
Source0: %{pypi_source django_compressor}
# deleted in 4e543307 - migration to pyproject.toml
Source1: setup.py
BuildArch: noarch
@ -27,16 +35,19 @@ BuildRequires: python3-devel
%package -n python3-%{srcname}
Summary: %{summary}
%description -n python3-%{srcname}
%_desc
# Added in f28 cycle.
Obsoletes: python2-%{srcname} < 2.1-6
Obsoletes: python-%{srcname} < 2.1-6
%description -n python3-%{srcname} %_desc
%prep
%autosetup -p1 -n %{srcname}-%{version}
%autosetup -p1 -n %{pypi_name}-%{version}
%if %{with old_setuptools}
rm pyproject.toml
cp -p %{SOURCE1} setup.py
%endif
%generate_buildrequires
%pyproject_buildrequires

View file

@ -1,12 +0,0 @@
--- a/setup.py 2022-08-17 14:46:30.186903576 +0300
+++ b/setup.py 2022-08-17 14:46:42.507861281 +0300
@@ -149,7 +149,7 @@
zip_safe=False,
install_requires=[
'django-appconf >= 1.0.3',
- 'rcssmin == 1.1.0',
- 'rjsmin == 1.2.0',
+ 'rcssmin >= 1.1.0',
+ 'rjsmin >= 1.2.0',
],
)

172
setup.py Normal file
View file

@ -0,0 +1,172 @@
import ast
import codecs
import os
import sys
from fnmatch import fnmatchcase
from pathlib import Path
from setuptools import find_packages, setup
class VersionFinder(ast.NodeVisitor):
def __init__(self):
self.version = None
def visit_Assign(self, node):
if node.targets[0].id == "__version__":
self.version = node.value.value
def read(*parts):
filename = os.path.join(os.path.dirname(__file__), *parts)
with codecs.open(filename, encoding="utf-8") as fp:
return fp.read()
def find_version(*parts):
finder = VersionFinder()
finder.visit(ast.parse(read(*parts)))
return finder.version
# Provided as an attribute, so you can append to these instead
# of replicating them:
standard_exclude = ("*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak")
standard_exclude_directories = (
".*",
"CVS",
"_darcs",
"./build",
"./dist",
"EGG-INFO",
"*.egg-info",
)
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
# Note: you may want to copy this into your setup.py file verbatim, as
# you can't import this from another package, when you don't know if
# that package is installed yet.
def find_package_data(
where=".",
package="",
exclude=standard_exclude,
exclude_directories=standard_exclude_directories,
only_in_packages=True,
show_ignored=False,
):
"""
Return a dictionary suitable for use in ``package_data``
in a distutils ``setup.py`` file.
The dictionary looks like::
{'package': [files]}
Where ``files`` is a list of all the files in that package that
don't match anything in ``exclude``.
If ``only_in_packages`` is true, then top-level directories that
are not packages won't be included (but directories under packages
will).
Directories matching any pattern in ``exclude_directories`` will
be ignored; by default directories with leading ``.``, ``CVS``,
and ``_darcs`` will be ignored.
If ``show_ignored`` is true, then all the files that aren't
included in package data are shown on stderr (for debugging
purposes).
Note patterns use wildcards, or can be exact paths (including
leading ``./``), and all searching is case-insensitive.
"""
out = {}
stack = [(str(Path(where)), "", package, only_in_packages)]
while stack:
where, prefix, package, only_in_packages = stack.pop(0)
for name in os.listdir(where):
fn = os.path.join(where, name)
if os.path.isdir(fn):
bad_name = False
for pattern in exclude_directories:
if fnmatchcase(name, pattern) or fn.lower() == pattern.lower():
bad_name = True
if show_ignored:
print(
"Directory %s ignored by pattern %s" % (fn, pattern),
file=sys.stderr,
)
break
if bad_name:
continue
if os.path.isfile(os.path.join(fn, "__init__.py")) and not prefix:
if not package:
new_package = name
else:
new_package = package + "." + name
stack.append((fn, "", new_package, False))
else:
stack.append((fn, prefix + name + "/", package, only_in_packages))
elif package or not only_in_packages:
# is a file
bad_name = False
for pattern in exclude:
if fnmatchcase(name, pattern) or fn.lower() == pattern.lower():
bad_name = True
if show_ignored:
print(
"File %s ignored by pattern %s" % (fn, pattern),
file=sys.stderr,
)
break
if bad_name:
continue
out.setdefault(package, []).append(prefix + name)
return out
setup(
name="django_compressor",
version=find_version("compressor", "__init__.py"),
url="https://django-compressor.readthedocs.io/en/latest/",
project_urls={
"Source": "https://github.com/django-compressor/django-compressor",
},
license="MIT",
description=(
"Compresses linked and inline JavaScript or CSS into single cached files.",
),
long_description=read("README.rst"),
maintainer="Mathieu Pillard",
packages=find_packages(),
package_data=find_package_data(),
classifiers=[
"Development Status :: 5 - Production/Stable",
"Framework :: Django",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"Framework :: Django :: 5.1",
"Framework :: Django :: 5.2",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Internet :: WWW/HTTP",
],
zip_safe=False,
python_requires=">=3.10",
install_requires=[
"Django >= 4.2",
"django-appconf >= 1.0.3",
"rcssmin >= 1.2.1",
"rjsmin >= 1.2.4",
],
)

View file

@ -1 +1 @@
SHA512 (django-compressor-4.1.tar.gz) = eb1e4fc5d9ada8fb32a1059c87b447735cf0e1c40853b2313b5f7f5d1c9cf3c66d96ebf40a721175db5fe721c44b077bc026270d59e90890e1807125a38a33a1
SHA512 (django_compressor-4.6.0.tar.gz) = 5bb5fc01b3beb022623b6409f710640eb51196349c0268c1d85239ce2c6a8889761c3efb16e9cc4e7b1d6bdd7f3a16ea8abf4ba9083a03500bcd10344457e0a2