-
- Notifications
You must be signed in to change notification settings - Fork 307
Closed
Description
I have the error bellow when using dataclasses with replace and pylint.
I think it has something todo with the key access, when I'm using a normal (emtpy) dict
pylint doesn't throw an error.
Steps to reproduce
Use this example:
from dataclasses import dataclass, field, replace from typing import List def default_redirect(): return [] @dataclass class ProxyConfig: """ Configuration for the Proxy Setup """ keyfile: str certfile: str domainname: str contacts: List[str] address: str = "0.0.0.0" tls_port: int = 443 plain_port: int = 80 https_only: bool = True username: str = "www-data" groupname: str = "www-data" secrets: str = "/var/lib/oidc-proxy/secrets.yml" tls_redirect: str = "/TLSRedirect" auth: str = "/auth" redirect: List[str] = field(default_factory=default_redirect) plugin_dirs: List[str] = field(default_factory=list) a = ProxyConfig("", "", "", [""]) test_dict = {"proxy" : {}} a = replace(a, **test_dict['proxy']) Run with pylint
Current behavior
************* Module test /tmp/tmp.9j0R7c2kjs/test.py:1:0: C0114: Missing module docstring (missing-module-docstring) /tmp/tmp.9j0R7c2kjs/test.py:4:0: C0116: Missing function or method docstring (missing-function-docstring) /tmp/tmp.9j0R7c2kjs/test.py:7:0: R0902: Too many instance attributes (15/7) (too-many-instance-attributes) Traceback (most recent call last): File "/home/justkidding/git/astroid/astroid/protocols.py", line 337, in _arguments_infer_argname call_site = arguments.CallSite(context.callcontext, context.extra_context) File "/home/justkidding/git/astroid/astroid/arguments.py", line 43, in __init__ self._unpacked_kwargs = self._unpack_keywords(keywords, context=context) File "/home/justkidding/git/astroid/astroid/arguments.py", line 96, in _unpack_keywords inferred = next(value.infer(context=context)) StopIteration The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/justkidding/.local/share/virtualenvs/pylint-b0C_0gT4/bin/pylint", line 7, in <module> exec(compile(f.read(), __file__, 'exec')) File "/home/justkidding/git/pylint/bin/pylint", line 4, in <module> run_pylint() File "/home/justkidding/git/pylint/pylint/__init__.py", line 22, in run_pylint PylintRun(sys.argv[1:]) File "/home/justkidding/git/pylint/pylint/lint.py", line 1770, in __init__ linter.check(args) File "/home/justkidding/git/pylint/pylint/lint.py", line 980, in check self._check_files(self.get_ast, self._iterate_file_descrs(files_or_modules)) File "/home/justkidding/git/pylint/pylint/lint.py", line 1009, in _check_files self._check_file(get_ast, check_astroid_module, name, filepath, modname) File "/home/justkidding/git/pylint/pylint/lint.py", line 1035, in _check_file check_astroid_module(ast_node) File "/home/justkidding/git/pylint/pylint/lint.py", line 1168, in check_astroid_module ast_node, walker, rawcheckers, tokencheckers File "/home/justkidding/git/pylint/pylint/lint.py", line 1212, in _check_astroid_module walker.walk(ast_node) File "/home/justkidding/git/pylint/pylint/utils/ast_walker.py", line 77, in walk self.walk(child) File "/home/justkidding/git/pylint/pylint/utils/ast_walker.py", line 77, in walk self.walk(child) File "/home/justkidding/git/pylint/pylint/utils/ast_walker.py", line 74, in walk callback(astroid) File "/home/justkidding/git/pylint/pylint/checkers/base.py", line 1938, in visit_assignname if isinstance(utils.safe_infer(assign_type.value), astroid.ClassDef): File "/home/justkidding/git/pylint/pylint/checkers/utils.py", line 1105, in safe_infer for inferred in infer_gen: File "/home/justkidding/git/astroid/astroid/decorators.py", line 141, in raise_if_nothing_inferred yield from generator File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/inference.py", line 229, in infer_call yield from callee.infer_call_result(caller=self, context=callcontext) File "/home/justkidding/git/astroid/astroid/scoped_nodes.py", line 1706, in infer_call_result yield from returnnode.value.infer(context) File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 141, in raise_if_nothing_inferred yield from generator File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/inference.py", line 223, in infer_call for callee in self.func.infer(context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 141, in raise_if_nothing_inferred yield from generator File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/inference.py", line 289, in infer_attribute for owner in self.expr.infer(context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 141, in raise_if_nothing_inferred yield from generator File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/bases.py", line 132, in _infer_stmts for inferred in stmt.infer(context=context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 131, in raise_if_nothing_inferred yield next(generator) File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/bases.py", line 132, in _infer_stmts for inferred in stmt.infer(context=context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 131, in raise_if_nothing_inferred yield next(generator) File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/inference.py", line 223, in infer_call for callee in self.func.infer(context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 131, in raise_if_nothing_inferred yield next(generator) File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/inference.py", line 289, in infer_attribute for owner in self.expr.infer(context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 131, in raise_if_nothing_inferred yield next(generator) File "/home/justkidding/git/astroid/astroid/decorators.py", line 95, in wrapped res = next(generator) File "/home/justkidding/git/astroid/astroid/bases.py", line 132, in _infer_stmts for inferred in stmt.infer(context=context): File "/home/justkidding/git/astroid/astroid/util.py", line 160, in limit_inference yield from islice(iterator, size) File "/home/justkidding/git/astroid/astroid/context.py", line 113, in cache_generator for result in generator: File "/home/justkidding/git/astroid/astroid/decorators.py", line 131, in raise_if_nothing_inferred yield next(generator) RuntimeError: generator raised StopIteration Expected behavior
No stacktrace.
python -c "from astroid import __pkginfo__; print(__pkginfo__.version)" output
2.4.0 (git master), but also 2.3.X
Metadata
Metadata
Assignees
Labels
No labels