python / python/cpython

Many pure python tools that have a special cases for dict should accept frozendict as well.

Open
#145,056 6 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.