Many pure python tools that have a special cases for dict should accept frozendict as well.
未關閉
還沒有人認領這個 Issue。
stdlib
type-feature
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- PR 合併指標
- PR 指標待擷取
描述
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
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
先檢視 collections/init.py 以及 pprint.py 和 xml/etree/ElementTree.py 中提到的位置,然後閱讀連結的 PR,以判斷哪些情況仍未解決。比較每個受影響模組中現有的 dict 檢查與相關測試;當約定剩餘的 pure-Python 工具都能一致地處理 frozendict,且不會造成 dict 行為回歸時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- tooling
- Issue 類型
- 功能
- 難度
- 5/5
- 預估耗時
- 一週以上
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 25/100