mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-31 16:07:38 +03:00 
			
		
		
		
	* Install and configure flake8-bugbear to spot mutable default arguments
* Fix mutable default arguments in OrderingFilter methods
- Fixed get_default_valid_fields() and get_valid_fields() methods in filters.py
- Changed context={} default parameter to context=None to prevent mutable default anti-pattern
- Added proper None checking with context = {} assignment inside methods
Why this fix is important:
- Mutable default arguments (context={}) create shared state across function calls
- Same dict object gets reused, potentially causing unexpected side effects
- This is a well-known Python anti-pattern that can lead to bugs
What was changed:
- Line 249: get_default_valid_fields(self, queryset, view, context=None)
- Line 285: get_valid_fields(self, queryset, view, context=None)
- Added 'if context is None: context = {}' in both methods
Testing results:
- All existing filter tests pass (pytest tests/test_filters.py)
- Custom verification script confirms fix works correctly
- Maintains backward compatibility
- No breaking changes to API
Addresses GitHub issue #9741
---------
Co-authored-by: Bruno Alla <alla.brunoo@gmail.com>
		
	
			
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| repos:
 | |
| - repo: https://github.com/pre-commit/pre-commit-hooks
 | |
|   rev: v6.0.0
 | |
|   hooks:
 | |
|   - id: check-added-large-files
 | |
|   - id: check-case-conflict
 | |
|   - id: check-json
 | |
|   - id: check-merge-conflict
 | |
|   - id: check-symlinks
 | |
|   - id: check-toml
 | |
| - repo: https://github.com/PyCQA/isort
 | |
|   rev: 7.0.0
 | |
|   hooks:
 | |
|   - id: isort
 | |
| - repo: https://github.com/PyCQA/flake8
 | |
|   rev: 7.3.0
 | |
|   hooks:
 | |
|   - id: flake8
 | |
|     additional_dependencies:
 | |
|     - flake8-tidy-imports
 | |
|     - flake8-bugbear
 | |
| - repo: https://github.com/adamchainz/blacken-docs
 | |
|   rev: 1.20.0
 | |
|   hooks:
 | |
|   - id: blacken-docs
 | |
|     additional_dependencies:
 | |
|     - black==25.9.0
 | |
| - repo: https://github.com/codespell-project/codespell
 | |
|   # Configuration for codespell is in .codespellrc
 | |
|   rev: v2.4.1
 | |
|   hooks:
 | |
|   - id: codespell
 | |
|     args: [
 | |
|             "--builtin", "clear,rare,code,names,en-GB_to_en-US",
 | |
|             "--ignore-words", "codespell-ignore-words.txt",
 | |
|             "--skip", "*.css",
 | |
|           ]
 | |
|     exclude: locale|kickstarter-announcement.md|coreapi-0.1.1.js
 | |
|     additional_dependencies:
 | |
|       # python doesn't come with a toml parser prior to 3.11
 | |
|       - "tomli; python_version < '3.11'"
 | |
| - repo: https://github.com/asottile/pyupgrade
 | |
|   rev: v3.21.0
 | |
|   hooks:
 | |
|   - id: pyupgrade
 | |
|     args: ["--py310-plus", "--keep-percent-format"]
 | |
| - repo: https://github.com/tox-dev/pyproject-fmt
 | |
|   rev: v2.11.0
 | |
|   hooks:
 | |
|   - id: pyproject-fmt
 |