Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-django-silk for 
openSUSE:Factory checked in at 2026-08-22 21:34:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-silk (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-silk.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-silk"

Sat Aug 22 21:34:54 2026 rev:19 rq:1372915 version:5.5.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-silk/python-django-silk.changes    
2026-03-29 20:01:20.771048437 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-silk.new.1258/python-django-silk.changes
  2026-08-22 21:36:58.140983097 +0200
@@ -1,0 +2,22 @@
+Fri Aug 21 19:31:39 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 5.5.2:
+  * This will be the final release to support Django 4.2 and
+    Django 5.1.
+  * Fix making a release build (#897) @albertyw
+  * Fix HTML in request_summary.html (#852) @JortRoelofs
+  * Fix filtering for JS content (#868) @albertyw
+  * Fix silk collector finalise raising TypeError when a "model"
+    key is present in query dict (#872) @albertyw
+  * Exclude NULL view_names from View filter dropdown (#882)
+    @albertyw
+  * Fix FiltersManager.get() raising AttributeError without
+    session support (#887) @agu2347
+  * Fix AttributeError generating curl command for non-string
+    query params (#885) @agu2347
+  * Add support for Python 3.15 (#892) @hugovk
+  * Fix test coverage flakiness (#850) @albertyw
+  * Fix test project (#871) @VaishnavGhenge
+  * Dependency updates
+
+-------------------------------------------------------------------

Old:
----
  django_silk-5.5.0.tar.gz

New:
----
  django_silk-5.5.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-django-silk.spec ++++++
--- /var/tmp/diff_new_pack.wymAlW/_old  2026-08-22 21:36:58.868010018 +0200
+++ /var/tmp/diff_new_pack.wymAlW/_new  2026-08-22 21:36:58.869010056 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-django-silk
-Version:        5.5.0
+Version:        5.5.2
 Release:        0
 Summary:        Profiling for the Django Framework
 License:        MIT

++++++ django_silk-5.5.0.tar.gz -> django_silk-5.5.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/.github/workflows/release.yml 
new/django_silk-5.5.2/.github/workflows/release.yml
--- old/django_silk-5.5.0/.github/workflows/release.yml 2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/.github/workflows/release.yml 2026-08-13 
06:11:58.660540800 +0200
@@ -11,24 +11,24 @@
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v7
         with:
           fetch-depth: 0
 
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@v7
         with:
           python-version: 3.14
 
       - name: Install dependencies
         run: |
           python -m pip install -U pip
-          python -m pip install -U setuptools twine wheel
+          python -m pip install -U build twine
 
       - name: Build package
         run: |
-          python setup.py --version
-          python setup.py sdist --format=gztar bdist_wheel
+          python -m build
+          ls -l dist/
           twine check dist/*
 
       - name: Upload packages to Jazzband
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/.github/workflows/test.yml 
new/django_silk-5.5.2/.github/workflows/test.yml
--- old/django_silk-5.5.0/.github/workflows/test.yml    2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/.github/workflows/test.yml    2026-08-13 
06:11:58.660578300 +0200
@@ -9,7 +9,7 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
+        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
         django-version: ['4.2', '5.1', '5.2', '6.0', 'main']
         postgres-version: ['14', '18']
         mariadb-version: ['10.6', '10.11', '11.4', '11.8']
@@ -19,10 +19,14 @@
             python-version: '3.13'
           - django-version: '4.2'
             python-version: '3.14'
+          - django-version: '4.2'
+            python-version: '3.15'
 
           # Django 5.1 doesn't support Python >= 3.14
           - django-version: '5.1'
             python-version: '3.14'
+          - django-version: '5.1'
+            python-version: '3.15'
 
           # Django 6.0 doesn't support Python <3.12 
(https://docs.djangoproject.com/en/dev/releases/6.0/#python-compatibility)
           - django-version: '6.0'
@@ -63,12 +67,13 @@
         - 3306:3306
 
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v7
 
     - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v5
+      uses: actions/setup-python@v7
       with:
         python-version: ${{ matrix.python-version }}
+        allow-prereleases: true
 
     - name: Get pip cache dir
       id: pip-cache
@@ -76,11 +81,11 @@
         echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT
 
     - name: Cache
-      uses: actions/cache@v4
+      uses: actions/cache@v6
       with:
         path: ${{ steps.pip-cache.outputs.dir }}
         key:
-          ${{ matrix.python-version }}-v1-${{ hashFiles('**/requirements.txt') 
}}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/tox.ini') }}
+          ${{ matrix.python-version }}-v1-${{ hashFiles('**/requirements.txt') 
}}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/pyproject.toml') }}-${{ 
hashFiles('**/tox.ini') }}
         restore-keys: |
           ${{ matrix.python-version }}-v1-
 
@@ -96,6 +101,6 @@
         DJANGO: ${{ matrix.django-version }}
 
     - name: Upload coverage
-      uses: codecov/codecov-action@v3
+      uses: codecov/codecov-action@v7
       with:
         name: Python ${{ matrix.python-version }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/.pre-commit-config.yaml 
new/django_silk-5.5.2/.pre-commit-config.yaml
--- old/django_silk-5.5.0/.pre-commit-config.yaml       2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/.pre-commit-config.yaml       2026-08-13 
06:11:58.660578300 +0200
@@ -13,7 +13,7 @@
   hooks:
   - id: yesqa
 - repo: https://github.com/pycqa/isort
-  rev: '8.0.1'
+  rev: '9.0.0b2'
   hooks:
   - id: isort
     args: ['--profile', 'black']
@@ -52,7 +52,7 @@
   - id: pyupgrade
     args: ['--keep-mock']
 - repo: https://github.com/adamchainz/django-upgrade
-  rev: '1.30.0'
+  rev: '1.31.1'
   hooks:
   - id: django-upgrade
     args: [--target-version, '4.2']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/CHANGELOG.md 
new/django_silk-5.5.2/CHANGELOG.md
--- old/django_silk-5.5.0/CHANGELOG.md  2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/CHANGELOG.md  2026-08-13 06:11:58.660648300 +0200
@@ -1,6 +1,43 @@
 # Change Log
 ## Unreleased
 
+## [5.5.2](https://github.com/jazzband/django-silk/tree/5.5.2) (2026-08-11)
+:release-by: Albert Wang (@albertyw)
+[Full Changelog](https://github.com/jazzband/django-silk/compare/5.5.0..5.5.2)
+
+This is a re-release of 5.5.1 due to build/release issues.
+
+This will be the final release to support Django 4.2 and Django 5.1.
+
+**Fixes:**
+
+ - Fix making a release build (#897) @albertyw
+
+## [5.5.1](https://github.com/jazzband/django-silk/tree/5.5.1) (2026-08-01)
+:release-by: Albert Wang (@albertyw)
+[Full Changelog](https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1)
+
+This will be the final release to support Django 4.2 and Django 5.1
+
+**Fixes:**
+
+ - Fix HTML in request_summary.html (#852) @JortRoelofs
+ - Fix filtering for JS content (#868) @albertyw
+ - Fix silk collector finalise raising TypeError when a "model" key is present 
in query dict (#872) @albertyw
+ - Exclude NULL view_names from View filter dropdown (#882) @albertyw
+ - Fix FiltersManager.get() raising AttributeError without session support 
(#887) @agu2347
+ - Fix AttributeError generating curl command for non-string query params 
(#885) @agu2347
+
+**Features/Enhancements:**
+
+ - Add support for Python 3.15 (#892) @hugovk
+
+**Maintenance and Cleanup:**
+
+ - Fix test coverage flakiness (#850) @albertyw
+ - Fix test project (#871) @VaishnavGhenge
+ - Dependency updates
+
 ## [5.5.0](https://github.com/jazzband/django-silk/tree/5.5.0) (2026-03-06)
 :release-by: Albert Wang (@albertyw)
 [Full Changelog](https://github.com/jazzband/django-silk/compare/5.4.3..5.5.0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/PKG-INFO 
new/django_silk-5.5.2/PKG-INFO
--- old/django_silk-5.5.0/PKG-INFO      2026-03-07 09:15:50.052632300 +0100
+++ new/django_silk-5.5.2/PKG-INFO      2026-08-13 06:12:08.207594900 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: django-silk
-Version: 5.5.0
+Version: 5.5.2
 Summary: Silky smooth profiling for the Django Framework
 Home-page: https://github.com/jazzband/django-silk
 Author: Michael Ford
@@ -21,6 +21,7 @@
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: 3.14
+Classifier: Programming Language :: Python :: 3.15
 Classifier: Topic :: Internet :: WWW/HTTP
 Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
 Requires-Python: >=3.10
@@ -77,7 +78,7 @@
 Silk has been tested with:
 
 * Django: 4.2, 5.1, 5.2, 6.0
-* Python: 3.10, 3.11, 3.12, 3.13, 3.14
+* Python: 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
 
 ## Installation
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/README.md 
new/django_silk-5.5.2/README.md
--- old/django_silk-5.5.0/README.md     2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/README.md     2026-08-13 06:11:58.660648300 +0200
@@ -31,7 +31,7 @@
 Silk has been tested with:
 
 * Django: 4.2, 5.1, 5.2, 6.0
-* Python: 3.10, 3.11, 3.12, 3.13, 3.14
+* Python: 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
 
 ## Installation
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/django_silk.egg-info/PKG-INFO 
new/django_silk-5.5.2/django_silk.egg-info/PKG-INFO
--- old/django_silk-5.5.0/django_silk.egg-info/PKG-INFO 2026-03-07 
09:15:49.000000000 +0100
+++ new/django_silk-5.5.2/django_silk.egg-info/PKG-INFO 2026-08-13 
06:12:08.145595600 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: django-silk
-Version: 5.5.0
+Version: 5.5.2
 Summary: Silky smooth profiling for the Django Framework
 Home-page: https://github.com/jazzband/django-silk
 Author: Michael Ford
@@ -21,6 +21,7 @@
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: 3.14
+Classifier: Programming Language :: Python :: 3.15
 Classifier: Topic :: Internet :: WWW/HTTP
 Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
 Requires-Python: >=3.10
@@ -77,7 +78,7 @@
 Silk has been tested with:
 
 * Django: 4.2, 5.1, 5.2, 6.0
-* Python: 3.10, 3.11, 3.12, 3.13, 3.14
+* Python: 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
 
 ## Installation
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/django_silk.egg-info/SOURCES.txt 
new/django_silk-5.5.2/django_silk.egg-info/SOURCES.txt
--- old/django_silk-5.5.0/django_silk.egg-info/SOURCES.txt      2026-03-07 
09:15:49.000000000 +0100
+++ new/django_silk-5.5.2/django_silk.egg-info/SOURCES.txt      2026-08-13 
06:12:08.168366200 +0200
@@ -22,6 +22,8 @@
 django_silk.egg-info/SOURCES.txt
 django_silk.egg-info/dependency_links.txt
 django_silk.egg-info/requires.txt
+django_silk.egg-info/scm_file_list.json
+django_silk.egg-info/scm_version.json
 django_silk.egg-info/top_level.txt
 docs/Makefile
 docs/conf.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/django_silk.egg-info/scm_file_list.json 
new/django_silk-5.5.2/django_silk.egg-info/scm_file_list.json
--- old/django_silk-5.5.0/django_silk.egg-info/scm_file_list.json       
1970-01-01 01:00:00.000000000 +0100
+++ new/django_silk-5.5.2/django_silk.egg-info/scm_file_list.json       
2026-08-13 06:12:08.144238200 +0200
@@ -0,0 +1,307 @@
+{
+  "files": [
+    ".coveragerc",
+    ".github/workflows/release.yml",
+    ".github/workflows/test.yml",
+    ".gitignore",
+    ".pre-commit-config.yaml",
+    "CHANGELOG.md",
+    "CODE_OF_CONDUCT.md",
+    "CONTRIBUTING.md",
+    "LICENSE",
+    "MANIFEST.in",
+    "README.md",
+    "docs/Makefile",
+    "docs/conf.py",
+    "docs/configuration.rst",
+    "docs/images/1.png",
+    "docs/images/2.png",
+    "docs/images/3.png",
+    "docs/images/4.png",
+    "docs/images/5.png",
+    "docs/images/6.png",
+    "docs/images/7.png",
+    "docs/images/8.png",
+    "docs/images/9.png",
+    "docs/images/meta.png",
+    "docs/index.rst",
+    "docs/profiling.rst",
+    "docs/quickstart.rst",
+    "docs/troubleshooting.rst",
+    "gulpfile.js",
+    "package.json",
+    "project/example_app/__init__.py",
+    "project/example_app/admin.py",
+    "project/example_app/migrations/0001_initial.py",
+    "project/example_app/migrations/0002_alter_blind_photo.py",
+    "project/example_app/migrations/0003_blind_unique_name_if_provided.py",
+    "project/example_app/migrations/__init__.py",
+    "project/example_app/models.py",
+    "project/example_app/templates/example_app/blind_form.html",
+    "project/example_app/templates/example_app/index.html",
+    "project/example_app/templates/example_app/login.html",
+    "project/example_app/tests.py",
+    "project/example_app/urls.py",
+    "project/example_app/views.py",
+    "project/manage.py",
+    "project/project/__init__.py",
+    "project/project/settings.py",
+    "project/project/urls.py",
+    "project/tests/__init__.py",
+    "project/tests/data/__init__.py",
+    "project/tests/data/dynamic.py",
+    "project/tests/factories.py",
+    "project/tests/test_app_config.py",
+    "project/tests/test_code.py",
+    "project/tests/test_code_gen_curl.py",
+    "project/tests/test_code_gen_django.py",
+    "project/tests/test_collector.py",
+    "project/tests/test_command_garbage_collect.py",
+    "project/tests/test_compat.py",
+    "project/tests/test_config_auth.py",
+    "project/tests/test_config_long_urls.py",
+    "project/tests/test_config_max_body_size.py",
+    "project/tests/test_config_meta.py",
+    "project/tests/test_db.py",
+    "project/tests/test_dynamic_profiling.py",
+    "project/tests/test_encoding.py",
+    "project/tests/test_end_points.py",
+    "project/tests/test_execute_sql.py",
+    "project/tests/test_filters.py",
+    "project/tests/test_lib/__init__.py",
+    "project/tests/test_lib/assertion.py",
+    "project/tests/test_lib/mock_suite.py",
+    "project/tests/test_models.py",
+    "project/tests/test_multipart_forms.py",
+    "project/tests/test_profile_dot.py",
+    "project/tests/test_profile_parser.py",
+    "project/tests/test_response_assumptions.py",
+    "project/tests/test_sensitive_data_in_request.py",
+    "project/tests/test_silky_middleware.py",
+    "project/tests/test_silky_profiler.py",
+    "project/tests/test_view_clear_db.py",
+    "project/tests/test_view_profiling.py",
+    "project/tests/test_view_requests.py",
+    "project/tests/test_view_sql_detail.py",
+    "project/tests/test_view_summary_view.py",
+    "project/tests/urlconf_without_silk.py",
+    "project/tests/util.py",
+    "project/wsgi.py",
+    "pyproject.toml",
+    "pytest.ini",
+    "requirements.txt",
+    "screenshots/1.png",
+    "screenshots/10.png",
+    "screenshots/2.png",
+    "screenshots/3.png",
+    "screenshots/4.png",
+    "screenshots/5.png",
+    "screenshots/6.png",
+    "screenshots/7.png",
+    "screenshots/8.png",
+    "screenshots/9.png",
+    "screenshots/meta.png",
+    "scss/components/cell.scss",
+    "scss/components/colors.scss",
+    "scss/components/fonts.scss",
+    "scss/components/heading.scss",
+    "scss/components/numeric.scss",
+    "scss/components/row.scss",
+    "scss/components/summary.scss",
+    "scss/pages/base.scss",
+    "scss/pages/clear_db.scss",
+    "scss/pages/cprofile.scss",
+    "scss/pages/detail_base.scss",
+    "scss/pages/profile_detail.scss",
+    "scss/pages/profiling.scss",
+    "scss/pages/raw.scss",
+    "scss/pages/request.scss",
+    "scss/pages/requests.scss",
+    "scss/pages/root_base.scss",
+    "scss/pages/sql.scss",
+    "scss/pages/sql_detail.scss",
+    "scss/pages/summary.scss",
+    "setup.py",
+    "silk.sublime-project",
+    "silk/__init__.py",
+    "silk/apps.py",
+    "silk/auth.py",
+    "silk/code_generation/__init__.py",
+    "silk/code_generation/curl.py",
+    "silk/code_generation/django_test_client.py",
+    "silk/collector.py",
+    "silk/config.py",
+    "silk/errors.py",
+    "silk/management/__init__.py",
+    "silk/management/commands/__init__.py",
+    "silk/management/commands/silk_clear_request_log.py",
+    "silk/management/commands/silk_request_garbage_collect.py",
+    "silk/middleware.py",
+    "silk/migrations/0001_initial.py",
+    "silk/migrations/0002_auto_update_uuid4_id_field.py",
+    "silk/migrations/0003_request_prof_file.py",
+    "silk/migrations/0004_request_prof_file_storage.py",
+    "silk/migrations/0005_increase_request_prof_file_length.py",
+    "silk/migrations/0006_fix_request_prof_file_blank.py",
+    "silk/migrations/0007_sqlquery_identifier.py",
+    "silk/migrations/0008_sqlquery_analysis.py",
+    "silk/migrations/__init__.py",
+    "silk/model_factory.py",
+    "silk/models.py",
+    "silk/profiling/__init__.py",
+    "silk/profiling/dynamic.py",
+    "silk/profiling/profiler.py",
+    "silk/request_filters.py",
+    "silk/singleton.py",
+    "silk/sql.py",
+    "silk/static/silk/css/components/cell.css",
+    "silk/static/silk/css/components/colors.css",
+    "silk/static/silk/css/components/fonts.css",
+    "silk/static/silk/css/components/heading.css",
+    "silk/static/silk/css/components/numeric.css",
+    "silk/static/silk/css/components/row.css",
+    "silk/static/silk/css/components/summary.css",
+    "silk/static/silk/css/pages/base.css",
+    "silk/static/silk/css/pages/clear_db.css",
+    "silk/static/silk/css/pages/cprofile.css",
+    "silk/static/silk/css/pages/detail_base.css",
+    "silk/static/silk/css/pages/profile_detail.css",
+    "silk/static/silk/css/pages/profiling.css",
+    "silk/static/silk/css/pages/raw.css",
+    "silk/static/silk/css/pages/request.css",
+    "silk/static/silk/css/pages/requests.css",
+    "silk/static/silk/css/pages/root_base.css",
+    "silk/static/silk/css/pages/sql.css",
+    "silk/static/silk/css/pages/sql_detail.css",
+    "silk/static/silk/css/pages/summary.css",
+    "silk/static/silk/favicon-16x16.png",
+    "silk/static/silk/favicon-32x32.png",
+    "silk/static/silk/filter.png",
+    "silk/static/silk/filter2.png",
+    "silk/static/silk/fonts/fantasque/FantasqueSansMono-Bold.woff",
+    "silk/static/silk/fonts/fantasque/FantasqueSansMono-BoldItalic.woff",
+    "silk/static/silk/fonts/fantasque/FantasqueSansMono-RegItalic.woff",
+    "silk/static/silk/fonts/fantasque/FantasqueSansMono-Regular.woff",
+    "silk/static/silk/fonts/fira/FiraSans-Bold.woff",
+    "silk/static/silk/fonts/fira/FiraSans-BoldItalic.woff",
+    "silk/static/silk/fonts/fira/FiraSans-Light.woff",
+    "silk/static/silk/fonts/fira/FiraSans-LightItalic.woff",
+    "silk/static/silk/fonts/fira/FiraSans-Medium.woff",
+    "silk/static/silk/fonts/fira/FiraSans-MediumItalic.woff",
+    "silk/static/silk/fonts/fira/FiraSans-Regular.woff",
+    "silk/static/silk/fonts/fira/FiraSans-RegularItalic.woff",
+    "silk/static/silk/fonts/glyphicons-halflings-regular.eot",
+    "silk/static/silk/fonts/glyphicons-halflings-regular.svg",
+    "silk/static/silk/fonts/glyphicons-halflings-regular.ttf",
+    "silk/static/silk/fonts/glyphicons-halflings-regular.woff",
+    "silk/static/silk/fonts/glyphicons-halflings-regular.woff2",
+    "silk/static/silk/js/components/cell.js",
+    "silk/static/silk/js/components/filters.js",
+    "silk/static/silk/js/pages/base.js",
+    "silk/static/silk/js/pages/clear_db.js",
+    "silk/static/silk/js/pages/detail_base.js",
+    "silk/static/silk/js/pages/profile_detail.js",
+    "silk/static/silk/js/pages/profiling.js",
+    "silk/static/silk/js/pages/raw.js",
+    "silk/static/silk/js/pages/request.js",
+    "silk/static/silk/js/pages/requests.js",
+    "silk/static/silk/js/pages/root_base.js",
+    "silk/static/silk/js/pages/sql.js",
+    "silk/static/silk/js/pages/sql_detail.js",
+    "silk/static/silk/js/pages/summary.js",
+    "silk/static/silk/lib/bootstrap-datetimepicker.min.css",
+    "silk/static/silk/lib/bootstrap-datetimepicker.min.js",
+    "silk/static/silk/lib/bootstrap-theme.min.css",
+    "silk/static/silk/lib/bootstrap.min.css",
+    "silk/static/silk/lib/bootstrap.min.js",
+    "silk/static/silk/lib/highlight/foundation.css",
+    "silk/static/silk/lib/highlight/highlight.pack.js",
+    "silk/static/silk/lib/images/animated-overlay.gif",
+    "silk/static/silk/lib/images/ui-bg_diagonals-thick_18_b81900_40x40.png",
+    "silk/static/silk/lib/images/ui-bg_diagonals-thick_20_666666_40x40.png",
+    "silk/static/silk/lib/images/ui-bg_flat_10_000000_40x100.png",
+    "silk/static/silk/lib/images/ui-bg_glass_100_f6f6f6_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_100_fdf5ce_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_55_fbf9ee_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_65_ffffff_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_75_dadada_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_75_e6e6e6_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_glass_95_fef1ec_1x400.png",
+    "silk/static/silk/lib/images/ui-bg_gloss-wave_35_f6a828_500x100.png",
+    "silk/static/silk/lib/images/ui-bg_highlight-soft_100_eeeeee_1x100.png",
+    "silk/static/silk/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png",
+    "silk/static/silk/lib/images/ui-bg_highlight-soft_75_ffe45c_1x100.png",
+    "silk/static/silk/lib/images/ui-icons_222222_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_228ef1_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_2e83ff_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_444444_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_454545_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_555555_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_777620_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_777777_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_888888_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_cc0000_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_cd0a0a_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_ef8c08_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_ffd27a_256x240.png",
+    "silk/static/silk/lib/images/ui-icons_ffffff_256x240.png",
+    "silk/static/silk/lib/jquery-3.6.0.min.js",
+    "silk/static/silk/lib/jquery-ui-1.13.1.min.css",
+    "silk/static/silk/lib/jquery-ui-1.13.1.min.js",
+    "silk/static/silk/lib/jquery-ui-1.13.2.min.css",
+    "silk/static/silk/lib/jquery-ui-1.13.2.min.js",
+    "silk/static/silk/lib/jquery.datetimepicker.css",
+    "silk/static/silk/lib/jquery.datetimepicker.js",
+    "silk/static/silk/lib/sortable.js",
+    "silk/static/silk/lib/svg-pan-zoom.min.js",
+    "silk/static/silk/lib/viz-lite.js",
+    "silk/storage.py",
+    "silk/templates/silk/base/base.html",
+    "silk/templates/silk/base/detail_base.html",
+    "silk/templates/silk/base/root_base.html",
+    "silk/templates/silk/clear_db.html",
+    "silk/templates/silk/cprofile.html",
+    "silk/templates/silk/inclusion/code.html",
+    "silk/templates/silk/inclusion/heading.html",
+    "silk/templates/silk/inclusion/profile_menu.html",
+    "silk/templates/silk/inclusion/profile_summary.html",
+    "silk/templates/silk/inclusion/request_menu.html",
+    "silk/templates/silk/inclusion/request_summary.html",
+    "silk/templates/silk/inclusion/request_summary_row.html",
+    "silk/templates/silk/inclusion/root_menu.html",
+    "silk/templates/silk/profile_detail.html",
+    "silk/templates/silk/profiling.html",
+    "silk/templates/silk/raw.html",
+    "silk/templates/silk/request.html",
+    "silk/templates/silk/requests.html",
+    "silk/templates/silk/sql.html",
+    "silk/templates/silk/sql_detail.html",
+    "silk/templates/silk/summary.html",
+    "silk/templatetags/__init__.py",
+    "silk/templatetags/silk_filters.py",
+    "silk/templatetags/silk_inclusion.py",
+    "silk/templatetags/silk_nav.py",
+    "silk/templatetags/silk_urls.py",
+    "silk/urls.py",
+    "silk/utils/__init__.py",
+    "silk/utils/data_deletion.py",
+    "silk/utils/pagination.py",
+    "silk/utils/profile_parser.py",
+    "silk/views/__init__.py",
+    "silk/views/clear_db.py",
+    "silk/views/code.py",
+    "silk/views/cprofile.py",
+    "silk/views/profile_detail.py",
+    "silk/views/profile_dot.py",
+    "silk/views/profile_download.py",
+    "silk/views/profiling.py",
+    "silk/views/raw.py",
+    "silk/views/request_detail.py",
+    "silk/views/requests.py",
+    "silk/views/sql.py",
+    "silk/views/sql_detail.py",
+    "silk/views/summary.py",
+    "tox.ini",
+    "web.psd"
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/django_silk.egg-info/scm_version.json 
new/django_silk-5.5.2/django_silk.egg-info/scm_version.json
--- old/django_silk-5.5.0/django_silk.egg-info/scm_version.json 1970-01-01 
01:00:00.000000000 +0100
+++ new/django_silk-5.5.2/django_silk.egg-info/scm_version.json 2026-08-13 
06:12:08.132381700 +0200
@@ -0,0 +1,8 @@
+{
+  "tag": "5.5.2",
+  "distance": 0,
+  "node": "ge04dc567b0a17bbd8630f3e0dbffaabf2bfb97c0",
+  "dirty": false,
+  "branch": "HEAD",
+  "node_date": "2026-08-13"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/docs/configuration.rst 
new/django_silk-5.5.2/docs/configuration.rst
--- old/django_silk-5.5.0/docs/configuration.rst        2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/docs/configuration.rst        2026-08-13 
06:11:58.661215300 +0200
@@ -68,3 +68,32 @@
 .. code-block:: python
 
     SILKY_MAX_RECORDED_REQUESTS_CHECK_PERCENT = 10
+
+
+Query Analysis
+--------------
+
+To enable query analysis when supported by the DBMS, set the following in 
``settings.py``:
+
+.. code-block:: python
+
+    SILKY_ANALYZE_QUERIES = True
+
+This causes Silk to run ``EXPLAIN ANALYZE`` on each intercepted query, which 
provides execution plan
+details including actual runtime statistics.
+
+.. warning::
+
+    When ``SILKY_ANALYZE_QUERIES`` is ``True``, the database may execute the 
same query twice.
+    For example, PostgreSQL's ``EXPLAIN ANALYZE`` [actually executes the 
query](https://www.postgresql.org/docs/current/sql-explain.html),
+    not just plans it. This means that ``UPDATE``, ``INSERT``, and ``DELETE`` 
statements will be
+    executed once by your application code and again by Silk's query analysis 
— potentially causing
+    unexpected side effects such as duplicate counter increments or duplicate 
log entries.
+
+    Use this setting with caution, especially in production environments.
+
+To pass additional parameters for profiling when supported by the DBMS (e.g. 
``VERBOSE``, ``FORMAT JSON``):
+
+.. code-block:: python
+
+    SILKY_EXPLAIN_FLAGS = {'format': 'JSON', 'costs': True}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/docs/index.rst 
new/django_silk-5.5.2/docs/index.rst
--- old/django_silk-5.5.0/docs/index.rst        2026-03-07 09:15:38.000000000 
+0100
+++ new/django_silk-5.5.2/docs/index.rst        2026-08-13 06:11:58.664648500 
+0200
@@ -58,4 +58,4 @@
 ------------
 
 * Django: 4.2, 5.1, 5.2, 6.0
-* Python: 3.10, 3.11, 3.12, 3.13, 3.14
+* Python: 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/package.json 
new/django_silk-5.5.2/package.json
--- old/django_silk-5.5.0/package.json  2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/package.json  2026-08-13 06:11:58.664648500 +0200
@@ -1,6 +1,6 @@
 {
   "name": "silk",
-  "version": "5.5.0",
+  "version": "5.5.2",
   "description": "https://github.com/jazzband/django-silk";,
   "main": "index.js",
   "directories": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/project/project/settings.py 
new/django_silk-5.5.2/project/project/settings.py
--- old/django_silk-5.5.0/project/project/settings.py   2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/project/settings.py   2026-08-13 
06:11:58.666056900 +0200
@@ -107,6 +107,8 @@
         'OPTIONS': {
             'context_processors': [
                 'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
             ],
         },
     },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/project/tests/test_code_gen_curl.py 
new/django_silk-5.5.2/project/tests/test_code_gen_curl.py
--- old/django_silk-5.5.0/project/tests/test_code_gen_curl.py   2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/tests/test_code_gen_curl.py   2026-08-13 
06:11:58.666165800 +0200
@@ -21,3 +21,21 @@
             '-d', '{"gamma": "delta"}',
             'https://example.org/alpha/beta'
         ])
+
+    def test_non_string_query_param_value(self):
+        """
+        Regression test for
+        https://github.com/jazzband/django-silk/issues/317
+
+        A non-string query param value (e.g. a float, as in the
+        issue's reproduction) must not raise AttributeError when
+        generating the curl command.
+        """
+        result = curl_cmd(
+            url="https://example.org/alpha/beta";,
+            method="GET",
+            query_params={"log_time": 1543406262.021423},
+            content_type="application/json",
+        )
+
+        self.assertIn("log_time=1543406262.021423", result)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/project/tests/test_collector.py 
new/django_silk-5.5.2/project/tests/test_collector.py
--- old/django_silk-5.5.0/project/tests/test_collector.py       2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/tests/test_collector.py       2026-08-13 
06:11:58.666165800 +0200
@@ -3,6 +3,7 @@
 import sys
 
 from django.test import TestCase
+from django.utils import timezone
 from tests.util import DictStorage
 
 from silk.collector import DataCollector
@@ -51,6 +52,21 @@
                 self.assertTrue(content)
                 self.assertGreater(len(content), 0)
 
+    def test_finalise_is_idempotent(self):
+        request = RequestMinFactory()
+        DataCollector().configure(request, should_profile=False)
+        DataCollector().register_query({
+            'query': 'SELECT 1',
+            'start_time': timezone.now(),
+            'end_time': timezone.now(),
+            'traceback': '',
+            'analysis': None,
+            'request': request,
+        })
+        DataCollector().finalise()
+        # Second call must not raise TypeError from stale 'model' key in query 
dict
+        DataCollector().finalise()
+
     def test_configure_exception(self):
         other_profiler = cProfile.Profile()
         other_profiler.enable()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/project/tests/test_encoding.py 
new/django_silk-5.5.2/project/tests/test_encoding.py
--- old/django_silk-5.5.0/project/tests/test_encoding.py        2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/tests/test_encoding.py        2026-08-13 
06:11:58.666165800 +0200
@@ -1,4 +1,5 @@
 import json
+import logging
 from unittest.mock import Mock
 
 from django.test import TestCase
@@ -6,6 +7,7 @@
 from silk.model_factory import RequestModelFactory, ResponseModelFactory
 
 HTTP_CONTENT_TYPE = 'content-type'
+JS_CONTENT = b'var x = 1;'
 
 
 class TestEncodingForRequests(TestCase):
@@ -148,3 +150,87 @@
         body, content = factory.body()
         self.assertDictEqual(json.loads(body), d)
         self.assertEqual(mock.content, content)
+
+
+class TestJavaScriptContentTypeResponse(TestCase):
+    """Responses with JavaScript content types should not log warnings when
+    the content cannot be parsed as JSON (issue #374)."""
+
+    def _make_response(self, content_type, content):
+        mock = Mock()
+        mock.headers = {HTTP_CONTENT_TYPE: content_type}
+        mock.content = content
+        mock.get = mock.headers.get
+        return mock
+
+    def test_application_javascript_no_warning(self):
+        mock = self._make_response('application/javascript', JS_CONTENT)
+        factory = ResponseModelFactory(mock)
+        with self.assertNoLogs('silk.model_factory', level=logging.WARNING):
+            body, content = factory.body()
+        self.assertFalse(body)
+
+    def test_text_javascript_no_warning(self):
+        mock = self._make_response('text/javascript', JS_CONTENT)
+        factory = ResponseModelFactory(mock)
+        with self.assertNoLogs('silk.model_factory', level=logging.WARNING):
+            body, content = factory.body()
+        self.assertFalse(body)
+
+    def test_application_x_javascript_no_warning(self):
+        mock = self._make_response('application/x-javascript', JS_CONTENT)
+        factory = ResponseModelFactory(mock)
+        with self.assertNoLogs('silk.model_factory', level=logging.WARNING):
+            body, content = factory.body()
+        self.assertFalse(body)
+
+    def test_text_x_javascript_no_warning(self):
+        mock = self._make_response('text/x-javascript', JS_CONTENT)
+        factory = ResponseModelFactory(mock)
+        with self.assertNoLogs('silk.model_factory', level=logging.WARNING):
+            body, content = factory.body()
+        self.assertFalse(body)
+
+    def test_json_content_type_warns_on_invalid_json(self):
+        mock = self._make_response('application/json', JS_CONTENT)
+        factory = ResponseModelFactory(mock)
+        with self.assertLogs('silk.model_factory', level=logging.WARNING):
+            body, content = factory.body()
+        self.assertFalse(body)
+
+    def test_javascript_with_valid_json_parses(self):
+        d = {'asdf': 'qwer'}
+        mock = self._make_response('application/javascript', 
json.dumps(d).encode())
+        factory = ResponseModelFactory(mock)
+        body, content = factory.body()
+        self.assertDictEqual(json.loads(body), d)
+
+
+class TestJavaScriptContentTypeRequest(TestCase):
+    """Requests with JavaScript content types should silently fall back
+    when the body cannot be parsed as JSON."""
+
+    def _make_request(self, content_type, body):
+        mock = Mock()
+        mock.headers = {HTTP_CONTENT_TYPE: content_type}
+        mock.body = body
+        mock.GET = {}
+        mock.path = '/test/'
+        mock.path_info = '/test/'
+        mock.method = 'POST'
+        mock.get = mock.headers.get
+        return mock
+
+    def test_application_javascript_no_warning(self):
+        mock = self._make_request('application/javascript', JS_CONTENT)
+        factory = RequestModelFactory(mock)
+        with self.assertNoLogs('silk.model_factory', level=logging.WARNING):
+            body, raw_body = factory.body()
+        self.assertEqual(body, JS_CONTENT.decode('UTF-8'))
+
+    def test_javascript_with_valid_json_parses(self):
+        d = {'asdf': 'qwer'}
+        mock = self._make_request('application/javascript', 
json.dumps(d).encode())
+        factory = RequestModelFactory(mock)
+        body, raw_body = factory.body()
+        self.assertDictEqual(json.loads(body), d)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/project/tests/test_filters.py 
new/django_silk-5.5.2/project/tests/test_filters.py
--- old/django_silk-5.5.0/project/tests/test_filters.py 2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/tests/test_filters.py 2026-08-13 
06:11:58.666165800 +0200
@@ -4,13 +4,14 @@
 from itertools import groupby
 from math import floor
 
-from django.test import TestCase
+from django.test import RequestFactory, TestCase
 from django.utils import timezone as django_timezone
 
 from silk import models
 from silk.request_filters import (
     AfterDateFilter,
     BeforeDateFilter,
+    FiltersManager,
     FunctionNameFilter,
     MethodFilter,
     NameFilter,
@@ -21,6 +22,7 @@
     StatusCodeFilter,
     TimeSpentOnQueriesFilter,
     ViewNameFilter,
+    filters_from_request,
 )
 
 from .test_lib.mock_suite import MockSuite
@@ -29,6 +31,20 @@
 mock_suite = MockSuite()
 
 
+class TestFiltersFromRequest(TestCase):
+    def test_clear_filters_ignores_submitted_values(self):
+        request = RequestFactory().post(
+            '/',
+            {
+                'clear_filters': '1',
+                'filter-viewname-typ': 'ViewNameFilter',
+                'filter-viewname-value': 'view1',
+            },
+        )
+
+        self.assertEqual(filters_from_request(request), {})
+
+
 class TestRequestFilters(TestCase):
     @classmethod
     def setUpClass(cls):
@@ -150,6 +166,14 @@
         new_dt = django_timezone.make_aware(new_dt, timezone.utc)
         self.assertFilter(new_dt, f)
 
+    def test_str_today(self):
+        dt = django_timezone.now().replace(hour=13, minute=45, second=30, 
microsecond=123456)
+        self.assertEqual(str(AfterDateFilter(dt)), '>13:45:30.123')
+
+    def test_str_other_day(self):
+        f = AfterDateFilter('2020/01/02 13:45')
+        self.assertEqual(str(f), '>2020.01.02 13:45.000')
+
 
 class TestRequestBeforeDateFilter(TestCase):
     def assertFilter(self, dt, f):
@@ -179,6 +203,14 @@
         new_dt = django_timezone.make_aware(new_dt, timezone.utc)
         self.assertFilter(new_dt, f)
 
+    def test_str_today(self):
+        dt = django_timezone.now().replace(hour=13, minute=45, second=30, 
microsecond=123456)
+        self.assertEqual(str(BeforeDateFilter(dt)), '<13:45:30.123')
+
+    def test_str_other_day(self):
+        f = BeforeDateFilter('2020/01/02 13:45')
+        self.assertEqual(str(f), '<2020.01.02 13:45.000')
+
 
 class TestProfileFilters(TestCase):
     def setUp(self):
@@ -232,3 +264,30 @@
         filtered = query_set.filter(time_taken_filter)
         for f in filtered:
             self.assertGreaterEqual(f.time_taken, c)
+
+
+class TestFiltersManager(TestCase):
+    """
+    Regression tests for
+    https://github.com/jazzband/django-silk/issues/361
+    """
+    class BareRequest:
+        pass
+
+    def test_get_without_session_or_prior_save_returns_empty_dict(self):
+        """
+        get() must never raise, even for a request that has neither a
+        .session attribute nor a previously-set .silk_filters
+        attribute (i.e. save() was never called for this request) --
+        matching the safe default already used by the session-based
+        branch.
+        """
+        manager = FiltersManager("summary_filters")
+        result = manager.get(TestFiltersManager.BareRequest())
+        self.assertEqual(result, {})
+
+    def test_save_then_get_without_session_round_trips(self):
+        manager = FiltersManager("summary_filters")
+        request = TestFiltersManager.BareRequest()
+        manager.save(request, {"show": "all"})
+        self.assertEqual(manager.get(request), {"show": "all"})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/project/tests/test_view_requests.py 
new/django_silk-5.5.2/project/tests/test_view_requests.py
--- old/django_silk-5.5.0/project/tests/test_view_requests.py   2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/project/tests/test_view_requests.py   2026-08-13 
06:11:58.666710600 +0200
@@ -7,6 +7,7 @@
 from silk.middleware import silky_reverse
 from silk.views.requests import RequestsView
 
+from .factories import RequestMinFactory
 from .test_lib.assertion import dict_contains
 from .test_lib.mock_suite import MockSuite
 
@@ -24,6 +25,15 @@
     def test_order_by(self):
         self.assertIn(RequestsView.default_order_by, RequestsView.order_by)
 
+    def test_get_views_excludes_blank_and_null_view_names(self):
+        RequestMinFactory(view_name=None)
+        RequestMinFactory(view_name='')
+        RequestMinFactory(view_name='myapp.views.index')
+        view_names = list(RequestsView()._get_views())
+        self.assertNotIn(None, view_names)
+        self.assertNotIn('', view_names)
+        self.assertIn('myapp.views.index', view_names)
+
 
 class TestContext(TestCase):
     def test_default(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/pyproject.toml 
new/django_silk-5.5.2/pyproject.toml
--- old/django_silk-5.5.0/pyproject.toml        2026-03-07 09:15:38.000000000 
+0100
+++ new/django_silk-5.5.2/pyproject.toml        2026-08-13 06:11:58.666710600 
+0200
@@ -1,3 +1,9 @@
+[build-system]
+requires = ["setuptools>=64", "setuptools_scm>=8"]
+build-backend = "setuptools.build_meta"
+
+[tool.setuptools_scm]
+
 [tool.autopep8]
 ignore = "E501,E203,W503"
 in-place = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/requirements.txt 
new/django_silk-5.5.2/requirements.txt
--- old/django_silk-5.5.0/requirements.txt      2026-03-07 09:15:38.000000000 
+0100
+++ new/django_silk-5.5.2/requirements.txt      2026-08-13 06:11:58.666710600 
+0200
@@ -2,8 +2,8 @@
 factory-boy==3.3.3
 freezegun==1.5.5
 networkx==3.4.2
-pillow==12.1.1
+pillow==12.3.0
 pydot==3.0.4
-pygments==2.19.2
+pygments==2.20.0
 pytest-cov==7.0.0
 pytest-django==4.11.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/setup.py 
new/django_silk-5.5.2/setup.py
--- old/django_silk-5.5.0/setup.py      2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/setup.py      2026-08-13 06:11:58.672315800 +0200
@@ -33,6 +33,7 @@
         'Programming Language :: Python :: 3.12',
         'Programming Language :: Python :: 3.13',
         'Programming Language :: Python :: 3.14',
+        'Programming Language :: Python :: 3.15',
         'Topic :: Internet :: WWW/HTTP',
         'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
     ],
@@ -45,5 +46,4 @@
         'formatting': ['autopep8'],
     },
     python_requires='>=3.10',
-    setup_requires=['setuptools_scm'],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/silk/code_generation/curl.py 
new/django_silk-5.5.2/silk/code_generation/curl.py
--- old/django_silk-5.5.0/silk/code_generation/curl.py  2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/code_generation/curl.py  2026-08-13 
06:11:58.672683200 +0200
@@ -17,7 +17,7 @@
     if query_params:
         try:
             query_params = urlencode(
-                [(k, v.encode('utf8')) for k, v in query_params.items()]
+                [(k, str(v).encode('utf8')) for k, v in query_params.items()]
             )
         except TypeError:
             pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/silk/collector.py 
new/django_silk-5.5.2/silk/collector.py
--- old/django_silk-5.5.0/silk/collector.py     2026-03-07 09:15:38.000000000 
+0100
+++ new/django_silk-5.5.2/silk/collector.py     2026-08-13 06:11:58.672683200 
+0200
@@ -95,7 +95,7 @@
             self.local.pythonprofiler = cProfile.Profile()
             try:
                 self.local.pythonprofiler.enable()
-            except ValueError as e:
+            except ValueError as e:  # pragma: no cover
                 # Deal with cProfile not being allowed to run concurrently
                 # https://github.com/jazzband/django-silk/issues/682
                 Logger.error('Could not enable python profiler, %s' % str(e), 
exc_info=True)
@@ -161,7 +161,7 @@
         sql_queries = []
         for identifier, query in self.queries.items():
             query['identifier'] = identifier
-            sql_query = models.SQLQuery(**query)
+            sql_query = models.SQLQuery(**{k: v for k, v in query.items() if k 
!= 'model'})
             sql_queries += [sql_query]
 
         models.SQLQuery.objects.bulk_create(sql_queries)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/silk/model_factory.py 
new/django_silk-5.5.2/silk/model_factory.py
--- old/django_silk-5.5.0/silk/model_factory.py 2026-03-07 09:15:38.000000000 
+0100
+++ new/django_silk-5.5.2/silk/model_factory.py 2026-08-13 06:11:58.673049400 
+0200
@@ -16,10 +16,12 @@
 Logger = logging.getLogger('silk.model_factory')
 
 content_types_json = ['application/json',
-                      'application/x-javascript',
-                      'text/javascript',
-                      'text/x-javascript',
                       'text/x-json']
+content_types_js = ['application/javascript',
+                    'application/x-javascript',
+                    'text/javascript',
+                    'text/x-javascript']
+content_types_parseable = content_types_json + content_types_js
 multipart_form = 'multipart/form-data'
 content_type_form = [multipart_form,
                      'application/x-www-form-urlencoded']
@@ -127,7 +129,7 @@
             body = self.request.POST
             body = json.dumps(dict(body), sort_keys=True, indent=4
                               , 
ensure_ascii=SilkyConfig().SILKY_JSON_ENSURE_ASCII)
-        elif content_type in content_types_json:
+        elif content_type in content_types_parseable:
             try:
                 body = json.dumps(json.loads(raw_body), sort_keys=True, 
indent=4
                                   , 
ensure_ascii=SilkyConfig().SILKY_JSON_ENSURE_ASCII)
@@ -277,16 +279,17 @@
                             'Size of %d for %s is less than %d so saving 
response body'
                             % (size, self.request.path, max_body_size)
                         )
-            if content and content_type in content_types_json:
+            if content and content_type in content_types_parseable:
                 # TODO: Perhaps theres a way to format the JSON without 
parsing it?
                 try:
                     body = json.dumps(json.loads(content), sort_keys=True, 
indent=4
                                       , 
ensure_ascii=SilkyConfig().SILKY_JSON_ENSURE_ASCII)
                 except (TypeError, ValueError):
-                    Logger.warning(
-                        'Response to request with pk %s has content type %s 
but was unable to parse it'
-                        % (self.request.pk, content_type)
-                    )
+                    if content_type in content_types_json:
+                        Logger.warning(
+                            'Response to request with pk %s has content type 
%s but was unable to parse it'
+                            % (self.request.pk, content_type)
+                        )
         return body, content
 
     def construct_response_model(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/silk/request_filters.py 
new/django_silk-5.5.2/silk/request_filters.py
--- old/django_silk-5.5.0/silk/request_filters.py       2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/request_filters.py       2026-08-13 
06:11:58.673361300 +0200
@@ -208,6 +208,9 @@
 
 
 def filters_from_request(request):
+    if 'clear_filters' in request.POST:
+        return {}
+
     raw_filters = {}
     for key in request.POST:
         splt = key.split('-')
@@ -244,4 +247,9 @@
     def get(self, request):
         if hasattr(request, 'session'):
             return request.session.get(self.key, {})
-        return request.silk_filters
+        # Mirror the session branch's safe default: get() should never
+        # raise, even when this is the first time save() has been
+        # called for this request (or session support isn't available
+        # at all), in which case silk_filters was never set. See
+        # GH #361.
+        return getattr(request, 'silk_filters', {})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/silk/static/silk/css/pages/root_base.css 
new/django_silk-5.5.2/silk/static/silk/css/pages/root_base.css
--- old/django_silk-5.5.0/silk/static/silk/css/pages/root_base.css      
2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/static/silk/css/pages/root_base.css      
2026-08-13 06:11:58.673744000 +0200
@@ -150,6 +150,8 @@
   display: inline-block;
   background-color: white;
   color: black;
+  border: 0;
+  font: inherit;
   margin: 10px;
   padding: 10px;
   border-radius: 5px;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/silk/static/silk/js/pages/root_base.js 
new/django_silk-5.5.2/silk/static/silk/js/pages/root_base.js
--- old/django_silk-5.5.0/silk/static/silk/js/pages/root_base.js        
2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/static/silk/js/pages/root_base.js        
2026-08-13 06:11:58.679473000 +0200
@@ -6,10 +6,3 @@
         initFilters();
     });
 }
-function submitFilters() {
-    $('#filter-form2').submit();
-}
-function submitEmptyFilters() {
-    $('#cbp-spmenu-s2 :input:not([type=hidden])').val('');
-    submitFilters();
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/silk/templates/silk/base/root_base.html 
new/django_silk-5.5.2/silk/templates/silk/base/root_base.html
--- old/django_silk-5.5.0/silk/templates/silk/base/root_base.html       
2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/templates/silk/base/root_base.html       
2026-08-13 06:11:58.692186000 +0200
@@ -40,10 +40,10 @@
         </form>
 
         <div class="button-div">
-            <div class="apply-div" onclick="submitEmptyFilters()">Clear all 
filters</div>
+            <button class="apply-div" type="submit" form="filter-form2" 
name="clear_filters" value="1">Clear all filters</button>
         </div>
         <div class="button-div">
-            <div class="apply-div" onclick="submitFilters()">Apply</div>
+            <button class="apply-div" type="submit" 
form="filter-form2">Apply</button>
         </div>
 
     </nav>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_silk-5.5.0/silk/templates/silk/inclusion/request_summary.html 
new/django_silk-5.5.2/silk/templates/silk/inclusion/request_summary.html
--- old/django_silk-5.5.0/silk/templates/silk/inclusion/request_summary.html    
2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/templates/silk/inclusion/request_summary.html    
2026-08-13 06:11:58.692346800 +0200
@@ -9,9 +9,10 @@
     </div>
     <div class="time-taken-queries-div">
         <span class="numeric">{{ 
silk_request.time_spent_on_sql_queries|floatformat:"0" }}<span 
class="unit">ms</span></span>
-        <span class="appenage">on queries<span class="meta">{% if 
silk_request.meta_time_spent_queries %} +{{ 
silk_request.meta_time_spent_queries | floatformat:"0" }}<span 
class="unit">ms</span>{% endif %}</span></div>
+        <span class="appenage">on queries<span class="meta">{% if 
silk_request.meta_time_spent_queries %} +{{ 
silk_request.meta_time_spent_queries | floatformat:"0" }}<span 
class="unit">ms</span>{% endif %}</span></span>
+    </div>
     <div class="num-queries-div">
         <span class="numeric">{{ silk_request.num_sql_queries }}</span>
-        <span class="appendage">queries<span class="meta">{% if 
silk_request.meta_num_queries %} +{{ silk_request.meta_num_queries  }}{% endif 
%}</span>
+        <span class="appendage">queries<span class="meta">{% if 
silk_request.meta_num_queries %} +{{ silk_request.meta_num_queries  }}{% endif 
%}</span></span>
     </div>
 </div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/silk/views/requests.py 
new/django_silk-5.5.2/silk/views/requests.py
--- old/django_silk-5.5.0/silk/views/requests.py        2026-03-07 
09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/silk/views/requests.py        2026-08-13 
06:11:58.692936200 +0200
@@ -1,4 +1,4 @@
-from django.db.models import Sum
+from django.db.models import Q, Sum
 from django.shortcuts import render
 from django.template.context_processors import csrf
 from django.utils.decorators import method_decorator
@@ -86,7 +86,7 @@
             'view_name',
             flat=True
         ).exclude(
-            view_name=''
+            Q(view_name='') | Q(view_name__isnull=True)
         ).order_by(
             'view_name'
         ).distinct()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_silk-5.5.0/tox.ini 
new/django_silk-5.5.2/tox.ini
--- old/django_silk-5.5.0/tox.ini       2026-03-07 09:15:38.000000000 +0100
+++ new/django_silk-5.5.2/tox.ini       2026-08-13 06:11:58.692936200 +0200
@@ -5,6 +5,7 @@
     3.12: py312
     3.13: py313
     3.14: py314
+    3.15: py315
 
 [gh-actions:env]
 DJANGO =
@@ -16,8 +17,8 @@
 
 [tox]
 envlist =
-    py{310,311,312,313,314}-dj{42,50,51,52}-{sqlite3,mysql,postgresql}
-    py{312,313,314}-dj{60,main}-{sqlite3,mysql,postgresql}
+    py{310-315}-dj{42,50,51,52}-{sqlite3,mysql,postgresql}
+    py{312-315}-dj{60,main}-{sqlite3,mysql,postgresql}
 
 [testenv]
 usedevelop = True
@@ -33,9 +34,6 @@
     dj52: django>=5.2,<5.3
     dj60: django>=6.0,<6.1
     djmain: https://github.com/django/django/archive/main.tar.gz
-    py312: setuptools
-    py313: setuptools
-    py314: setuptools
 extras = formatting
 setenv =
     PYTHONPATH={toxinidir}:{toxinidir}

Reply via email to