Many pure python tools that have a special cases for dict should accept frozendict as well.
Open
Nobody has claimed this yet.
stdlib
type-feature
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
I'll fix the ones in collections. Some other priorities are pprint and ElementTree
Here's a rg dict | rg isinstance scan of the Lib directory:
unittest/mock.py: if isinstance(self.in_dict, str):
trace.py: if isinstance(d, dict)]
rlcompleter.py: if namespace and not isinstance(namespace, dict):
rlcompleter.py: isinstance(thisobject.__dict__.get(word),
tomllib/_parser.py: if not isinstance(cont, dict):
tomllib/_parser.py: if isinstance(value, (dict, list)):
tomllib/_parser.py: if isinstance(value, (dict, list)):
tomllib/_parser.py: if isinstance(float_value, (dict, list)):
multiprocessing/managers.py: if not isinstance(method_to_typeid, dict):
functools.py: (kwds is not None and not isinstance(kwds, dict)) or
functools.py: (namespace is not None and not isinstance(namespace, dict))):
pprint.py: if isinstance(object, self._dict_items_view):
turtle.py: if isinstance(pen, dict):
optparse.py: not isinstance(self.callback_kwargs, dict)):
optparse.py: elif isinstance(other, dict):
linecache.py: if module_globals is not None and not isinstance(module_globals, dict):
xml/etree/ElementTree.py: if not isinstance(attrib, dict):
_pyrepl/input.py: if isinstance(d, dict):
tkinter/__init__.py: if isinstance(cnfs, dict):
tkinter/__init__.py: if isinstance(cnf, (dict, tuple)):
_pyrepl/base_eventqueue.py: if isinstance(k, dict):
test/_test_multiprocessing.py: def test_dict_isinstance(self):
_pyrepl/readline.py: if not isinstance(namespace, dict):
logging/config.py: if not isinstance(value, ConvertingDict) and isinstance(value, dict):
logging/config.py: elif isinstance(qspec, dict):
logging/config.py: elif isinstance(lspec, dict):
logging/config.py: assert isinstance(d, dict)
test/test_pyrepl/test_terminfo.py: isinstance(ncurses_data[key], dict)
test/test_pyrepl/test_terminfo.py: isinstance(ncurses_data[key], dict)
test/test_launcher.py: if isinstance(value, dict):
test/test_launcher.py: tags = [t for t in company_data if isinstance(company_data[t], dict)]
test/test_launcher.py: tags = [t for t in company_data if isinstance(company_data[t], dict)]
test/test_isinstance.py: self.assertFalse(issubclass(dict, float|str))
test/test_marshal.py: elif isinstance(obj, dict):
test/test_format.py: if isinstance(args, dict):
test/test_build_details.py: self.assertFalse(isinstance(sys.implementation.version, dict))
_pydecimal.py: elif not isinstance(traps, dict):
_pydecimal.py: elif not isinstance(flags, dict):
_pydecimal.py: if not isinstance(d, dict):
collections/__init__.py: if not isinstance(other, dict):
collections/__init__.py: if not isinstance(other, dict):
collections/__init__.py: if isinstance(other, dict):
collections/__init__.py: if isinstance(other, dict):
test/test_module/__init__.py: self.assertTrue(isinstance(foo.__dict__, dict))
profiling/sampling/heatmap_collector.py: if isinstance(data, dict):
test/test_code.py: if isinstance(globalvars, dict):
test/test_urllib2_localnet.py: assert isinstance(users, dict)
annotationlib.py: or isinstance(self.__cell__, dict)
annotationlib.py: if isinstance(self.__cell__, dict):
annotationlib.py: if isinstance(self.__cell__, dict) and isinstance(other.__cell__, dict)
annotationlib.py: if isinstance(self.__cell__, dict) else id(self.__cell__),
annotationlib.py: if not isinstance(ann, dict):
annotationlib.py: if not isinstance(ann, dict):
test/test_io/test_general.py: if isinstance(v, dict):
test/test_compiler_assemble.py: elif isinstance(value, dict):
json/encoder.py: elif isinstance(value, dict):
json/encoder.py: elif isinstance(value, dict):
json/encoder.py: elif isinstance(o, dict):
plistlib.py: if not isinstance(self.stack[-1], dict):
plistlib.py: if self.current_key or not isinstance(self.stack[-1], dict):
plistlib.py: elif isinstance(value, dict):
plistlib.py: if isinstance(value, dict):
plistlib.py: elif isinstance(value, dict):
test/test_tomllib/burntsushi.py: elif isinstance(obj, dict):
test/test_tomllib/burntsushi.py: if isinstance(obj, dict):
inspect.py: if isinstance(dict_obj, (staticmethod, types.BuiltinMethodType)):
inspect.py: elif isinstance(dict_obj, (classmethod, types.ClassMethodDescriptorType)):
inspect.py: elif isinstance(dict_obj, property):
inspect.py: if isinstance(slots, dict) and name in slots:
inspect.py: (kwdefaults is None or isinstance(kwdefaults, dict)))
xmlrpc/client.py: if isinstance(item, dict):
test/test_importlib/resources/zip.py: if isinstance(contents, dict):
importlib/_bootstrap_external.py: if not isinstance(module_globals, dict):
test/test_descrtut.py: >>> isinstance([], dict)
enum.py: if isinstance(obj, dict):
test/test_import/test_lazy_imports.py: assert isinstance(sys.lazy_modules, dict), "sys.lazy_modules is not a dict"
test/test_type_annotations.py: if not isinstance(self.my_annotations, dict):
test/test_type_annotations.py: if not isinstance(value, dict):
dataclasses.py: elif isinstance(obj, dict):
test/string_tests.py: elif isinstance(obj, dict):
test/test_pyclbr.py: if (not isinstance(classdict[name], ClassMethodType) or
compression/zstd/_zstdfile.py: if options is not None and not isinstance(options, dict):
compression/zstd/__init__.py: if not isinstance(dict_size, int):
compression/zstd/__init__.py: if not isinstance(zstd_dict, ZstdDict):
compression/zstd/__init__.py: if not isinstance(dict_size, int):
Linked PRs
- gh-145060
- gh-145125
- gh-145508
- gh-146295
- gh-146465
- gh-146466
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing collections/init.py and the mentioned pprint.py and xml/etree/ElementTree.py locations, then read the linked PRs to determine which cases remain open. Compare the existing dict checks and related tests in each affected module; done means the agreed remaining pure-Python tools consistently handle frozendict without regressing dict behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100