diff --git a/django-compressor-py314-ast.diff b/django-compressor-py314-ast.diff deleted file mode 100644 index 75d8a43..0000000 --- a/django-compressor-py314-ast.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- a/setup.py -+++ b/setup.py -@@ -14,7 +14,7 @@ class VersionFinder(ast.NodeVisitor): - - def visit_Assign(self, node): - if node.targets[0].id == "__version__": -- self.version = node.value.s -+ self.version = node.value.value - - - def read(*parts): diff --git a/python-django-compressor.spec b/python-django-compressor.spec index 16fcfb1..fa81435 100644 --- a/python-django-compressor.spec +++ b/python-django-compressor.spec @@ -8,6 +8,13 @@ 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.6.0 Release: %autorelease @@ -16,6 +23,8 @@ Summary: Compresses linked and inline JavaScript or CSS into single cached files License: MIT URL: https://github.com/django-compressor/django-compressor Source0: %{pypi_source django_compressor} +# deleted in 4e543307 - migration to pyproject.toml +Source1: setup.py BuildArch: noarch @@ -34,6 +43,10 @@ Obsoletes: python-%{srcname} < 2.1-6 %prep %autosetup -p1 -n %{pypi_name}-%{version} +%if %{with old_setuptools} +rm pyproject.toml +cp -p %{SOURCE1} setup.py +%endif %generate_buildrequires %pyproject_buildrequires diff --git a/rdep-version.patch b/rdep-version.patch deleted file mode 100644 index 8a0e5b4..0000000 --- a/rdep-version.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/setup.py -+++ b/setup.py -@@ -164,7 +164,7 @@ setup( - install_requires=[ - "Django >= 4.2", - "django-appconf >= 1.0.3", -- "rcssmin == 1.1.2", -- "rjsmin == 1.2.2", -+ "rcssmin >= 1.1.2", -+ "rjsmin >= 1.2.2", - ], - ) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..be846ae --- /dev/null +++ b/setup.py @@ -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", + ], +)