Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow_population_by_field_name = True should be added to more generated types for better tooling (e.g. mypy) support #1505

Open
asaba-hashi opened this issue Feb 1, 2024 · 9 comments

Comments

@asaba-hashi
Copy link

asaba-hashi commented Feb 1, 2024

Describe the bug

The following python file is reported as an error when using additional python static checking such as mypy. This also prevents IDE autocomplete from working for some combination of Python support:

# test.py
from uuid import uuid4
from trestle.oscal.common import InventoryItem

item = InventoryItem(
        uuid=str(uuid4()),
        description="an item",
        props=[],
        links=[],
        responsible_parties=[],
        implemented_components=[],
    )
❯❯❯ mypy test.py
test.py:4: error: Unexpected keyword argument "responsible_parties" for "InventoryItem"; did you mean "responsible-parties"?  [call-arg]
test.py:4: error: Unexpected keyword argument "implemented_components" for "InventoryItem"; did you mean "implemented-components"?  [call-arg]
Found 2 errors in 1 file (checked 1 source file)

This is likely because allow_population_by_field_name = True is not set in the config of all generated types that have aliases that include -.

To Reproduce

  1. Install compliance-trestle
  2. Install mypy
  3. Run mypy on a file with the above contents.

Expected behavior

Mypy should not report an error.

Screenshots / Logs.

If applicable, add screenshots to help explain your problem.

Workaround

The error can be ignored in configuration or with line comments: # type: ignore[call-arg]

Environment

  • OS: [e.g. iOS]
  • Python version:
  • Installed packages: mypy 1.7.1 (compiled: yes)
@degenaro
Copy link
Collaborator

degenaro commented May 6, 2024

This seems to work for me?

=====

(venv.develop) degenaro:trestle.develop$ mypy /home/degenaro/git/A/python/test.py
Success: no issues found in 1 source file
(venv.develop) degenaro:trestle.develop$ mypy -V
mypy 1.9.0 (compiled: yes)
(venv.develop) degenaro:trestle.develop$ trestle version
Trestle version v2.6.1 based on OSCAL version 1.0.4
(venv.develop) degenaro:trestle.develop$ cat /home/degenaro/git/A/python/test.py
# test.py
from uuid import uuid4
from trestle.oscal.common import InventoryItem

item = InventoryItem(
        uuid=str(uuid4()),
        description="an item",
        props=[],
        links=[],
        responsible_parties=[],
        implemented_components=[],
    )

@asaba-hashi
Copy link
Author

@degenaro Are you perhaps running this from a location where this mypy config block would get picked up that appears to just ignore this error?

@degenaro
Copy link
Collaborator

degenaro commented May 6, 2024

Not familiar with mypy. I tried --verbose for more information. Everything seems nominal. Result is success.

(venv.develop) degenaro:trestle.develop$ mypy /home/degenaro/git/A/python/test.py --verbose

LOG:  Mypy Version:           1.9.0
LOG:  Config File:            setup.cfg
LOG:  Configured Executable:  /home/degenaro/venv.develop/bin/python
LOG:  Current Executable:     /home/degenaro/venv.develop/bin/python
LOG:  Cache Dir:              .mypy_cache
LOG:  Compiled:               True
LOG:  Exclude:                []
LOG:  Found source:           BuildSource(path='/home/degenaro/git/A/python/test.py', module='test', has_text=False, base_dir='/home/degenaro/git/A/python', followed=False)
LOG:  Metadata fresh for test: file /home/degenaro/git/A/python/test.py
LOG:  Metadata fresh for trestle.oscal.common: file /home/degenaro/git/trestle.develop/trestle/oscal/common.py
LOG:  Metadata fresh for uuid: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/uuid.pyi
LOG:  Metadata fresh for builtins: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/builtins.pyi
LOG:  Metadata fresh for trestle.oscal: file /home/degenaro/git/trestle.develop/trestle/oscal/__init__.py
LOG:  Metadata fresh for trestle: file /home/degenaro/git/trestle.develop/trestle/__init__.py
LOG:  Metadata fresh for trestle.core.base_model: file /home/degenaro/git/trestle.develop/trestle/core/base_model.py
LOG:  Metadata fresh for __future__: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/__future__.pyi
LOG:  Metadata fresh for re: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/re.pyi
LOG:  Metadata fresh for datetime: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/datetime.pyi
LOG:  Metadata fresh for enum: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/enum.pyi
LOG:  Metadata fresh for typing: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/typing.pyi
LOG:  Metadata fresh for pydantic: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/__init__.py
LOG:  Metadata fresh for sys: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/sys/__init__.pyi
LOG:  Metadata fresh for _typeshed: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_typeshed/__init__.pyi
LOG:  Metadata fresh for typing_extensions: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/typing_extensions.pyi
LOG:  Metadata fresh for collections.abc: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/collections/abc.pyi
LOG:  Metadata fresh for _ast: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_ast.pyi
LOG:  Metadata fresh for types: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/types.pyi
LOG:  Metadata fresh for _collections_abc: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_collections_abc.pyi
LOG:  Metadata fresh for io: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/io.pyi
LOG:  Metadata fresh for trestle.core: file /home/degenaro/git/trestle.develop/trestle/core/__init__.py
LOG:  Metadata fresh for trestle.core.models.file_content_type: file /home/degenaro/git/trestle.develop/trestle/core/models/file_content_type.py
LOG:  Metadata fresh for trestle.common.const: file /home/degenaro/git/trestle.develop/trestle/common/const.py
LOG:  Metadata fresh for trestle.common.err: file /home/degenaro/git/trestle.develop/trestle/common/err.py
LOG:  Metadata fresh for trestle.common.str_utils: file /home/degenaro/git/trestle.develop/trestle/common/str_utils.py
LOG:  Metadata fresh for trestle.common.type_utils: file /home/degenaro/git/trestle.develop/trestle/common/type_utils.py
LOG:  Metadata fresh for trestle.core.trestle_base_model: file /home/degenaro/git/trestle.develop/trestle/core/trestle_base_model.py
LOG:  Metadata fresh for pydantic.fields: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/fields.py
LOG:  Metadata fresh for pydantic.parse: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/parse.py
LOG:  Metadata fresh for ruamel.yaml: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/__init__.py
LOG:  Metadata fresh for trestle.common: file /home/degenaro/git/trestle.develop/trestle/common/__init__.py
LOG:  Metadata fresh for logging: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/logging/__init__.pyi
LOG:  Metadata fresh for pathlib: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/pathlib.pyi
LOG:  Metadata fresh for orjson: file /home/degenaro/venv.develop/lib/python3.10/site-packages/orjson/__init__.pyi
LOG:  Metadata fresh for sre_compile: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/sre_compile.pyi
LOG:  Metadata fresh for sre_constants: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/sre_constants.pyi
LOG:  Metadata fresh for abc: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/abc.pyi
LOG:  Metadata fresh for time: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/time.pyi
LOG:  Metadata fresh for collections: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/collections/__init__.pyi
LOG:  Metadata fresh for contextlib: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/contextlib.pyi
LOG:  Metadata fresh for pydantic.dataclasses: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/dataclasses.py
LOG:  Metadata fresh for pydantic.annotated_types: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/annotated_types.py
LOG:  Metadata fresh for pydantic.class_validators: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/class_validators.py
LOG:  Metadata fresh for pydantic.config: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/config.py
LOG:  Metadata fresh for pydantic.decorator: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/decorator.py
LOG:  Metadata fresh for pydantic.env_settings: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/env_settings.py
LOG:  Metadata fresh for pydantic.error_wrappers: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/error_wrappers.py
LOG:  Metadata fresh for pydantic.errors: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/errors.py
LOG:  Metadata fresh for pydantic.main: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/main.py
LOG:  Metadata fresh for pydantic.networks: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/networks.py
LOG:  Metadata fresh for pydantic.tools: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/tools.py
LOG:  Metadata fresh for pydantic.types: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/types.py
LOG:  Metadata fresh for pydantic.version: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/version.py
LOG:  Metadata fresh for importlib.abc: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/abc.pyi
LOG:  Metadata fresh for importlib.machinery: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/machinery.pyi
LOG:  Metadata fresh for dataclasses: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/dataclasses.pyi
LOG:  Metadata fresh for os: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/os/__init__.pyi
LOG:  Metadata fresh for codecs: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/codecs.pyi
LOG:  Metadata fresh for trestle.core.models: file /home/degenaro/git/trestle.develop/trestle/core/models/__init__.py
LOG:  Metadata fresh for string: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/string.pyi
LOG:  Metadata fresh for trestle.core.commands.common.return_codes: file /home/degenaro/git/trestle.develop/trestle/core/commands/common/return_codes.py
LOG:  Metadata fresh for trestle.common.log: file /home/degenaro/git/trestle.develop/trestle/common/log.py
LOG:  Metadata fresh for pydantic.typing: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/typing.py
LOG:  Metadata fresh for pydantic.utils: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/utils.py
LOG:  Metadata fresh for pydantic.validators: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/validators.py
LOG:  Metadata fresh for pydantic.schema: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/schema.py
LOG:  Metadata fresh for copy: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/copy.pyi
LOG:  Metadata fresh for json: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/json/__init__.pyi
LOG:  Metadata fresh for pickle: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/pickle.pyi
LOG:  Metadata fresh for ruamel: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel
LOG:  Metadata fresh for ruamel.yaml.cyaml: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/cyaml.py
LOG:  Metadata fresh for ruamel.yaml.main: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/main.py
LOG:  Metadata fresh for threading: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/threading.pyi
LOG:  Metadata fresh for sre_parse: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/sre_parse.pyi
LOG:  Metadata fresh for functools: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/functools.pyi
LOG:  Metadata fresh for warnings: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/warnings.pyi
LOG:  Metadata fresh for itertools: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/itertools.pyi
LOG:  Metadata fresh for inspect: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/inspect.pyi
LOG:  Metadata fresh for pydantic.json: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/json.py
LOG:  Metadata fresh for decimal: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/decimal.pyi
LOG:  Metadata fresh for ipaddress: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/ipaddress.pyi
LOG:  Metadata fresh for email_validator: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/__init__.py
LOG:  Metadata fresh for pydantic.datetime_parse: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/datetime_parse.py
LOG:  Metadata fresh for math: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/math.pyi
LOG:  Metadata fresh for weakref: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/weakref.pyi
LOG:  Metadata fresh for importlib: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/__init__.pyi
LOG:  Metadata fresh for importlib._abc: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/_abc.pyi
LOG:  Metadata fresh for importlib.metadata: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi
LOG:  Metadata fresh for os.path: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/os/path.pyi
LOG:  Metadata fresh for subprocess: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/subprocess.pyi
LOG:  Metadata fresh for resource: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/resource.pyi
LOG:  Metadata fresh for _codecs: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_codecs.pyi
LOG:  Metadata fresh for trestle.core.commands.common: file /home/degenaro/git/trestle.develop/trestle/core/commands/common/__init__.py
LOG:  Metadata fresh for trestle.core.commands: file /home/degenaro/git/trestle.develop/trestle/core/commands/__init__.py
LOG:  Metadata fresh for argparse: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/argparse.pyi
LOG:  Metadata fresh for keyword: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/keyword.pyi
LOG:  Metadata fresh for json.decoder: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/json/decoder.pyi
LOG:  Metadata fresh for json.encoder: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/json/encoder.pyi
LOG:  Metadata fresh for ruamel.yaml.constructor: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/constructor.py
LOG:  Metadata fresh for ruamel.yaml.representer: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/representer.py
LOG:  Metadata fresh for ruamel.yaml.resolver: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/resolver.py
LOG:  Metadata fresh for ruamel.yaml.compat: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/compat.py
LOG:  Metadata fresh for ruamel.yaml.error: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/error.py
LOG:  Metadata fresh for ruamel.yaml.tokens: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/tokens.py
LOG:  Metadata fresh for ruamel.yaml.events: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/events.py
LOG:  Metadata fresh for ruamel.yaml.nodes: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/nodes.py
LOG:  Metadata fresh for ruamel.yaml.loader: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/loader.py
LOG:  Metadata fresh for ruamel.yaml.dumper: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/dumper.py
LOG:  Metadata fresh for ruamel.yaml.comments: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/comments.py
LOG:  Metadata fresh for ruamel.yaml.docinfo: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/docinfo.py
LOG:  Metadata fresh for glob: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/glob.pyi
LOG:  Metadata fresh for _thread: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_thread.pyi
LOG:  Metadata fresh for _warnings: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_warnings.pyi
LOG:  Metadata fresh for dis: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/dis.pyi
LOG:  Metadata fresh for pydantic.color: file /home/degenaro/venv.develop/lib/python3.10/site-packages/pydantic/color.py
LOG:  Metadata fresh for _decimal: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_decimal.pyi
LOG:  Metadata fresh for email_validator.exceptions_types: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/exceptions_types.py
LOG:  Metadata fresh for email_validator.validate_email: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/validate_email.py
LOG:  Metadata fresh for email_validator.version: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/version.py
LOG:  Metadata fresh for _weakref: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_weakref.pyi
LOG:  Metadata fresh for _weakrefset: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_weakrefset.pyi
LOG:  Metadata fresh for importlib.metadata._meta: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi
LOG:  Metadata fresh for email.message: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/message.pyi
LOG:  Metadata fresh for posixpath: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/posixpath.pyi
LOG:  Metadata fresh for ruamel.yaml.tag: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/tag.py
LOG:  Metadata fresh for ruamel.yaml.scalarstring: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/scalarstring.py
LOG:  Metadata fresh for ruamel.yaml.scalarint: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/scalarint.py
LOG:  Metadata fresh for ruamel.yaml.scalarfloat: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/scalarfloat.py
LOG:  Metadata fresh for ruamel.yaml.scalarbool: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/scalarbool.py
LOG:  Metadata fresh for ruamel.yaml.timestamp: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/timestamp.py
LOG:  Metadata fresh for ruamel.yaml.util: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/util.py
LOG:  Metadata fresh for ruamel.yaml.serializer: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/serializer.py
LOG:  Metadata fresh for ruamel.yaml.anchor: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/anchor.py
LOG:  Metadata fresh for binascii: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/binascii.pyi
LOG:  Metadata fresh for base64: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/base64.pyi
LOG:  Metadata fresh for copyreg: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/copyreg.pyi
LOG:  Metadata fresh for traceback: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/traceback.pyi
LOG:  Metadata fresh for textwrap: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/textwrap.pyi
LOG:  Metadata fresh for ruamel.yaml.reader: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/reader.py
LOG:  Metadata fresh for ruamel.yaml.scanner: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/scanner.py
LOG:  Metadata fresh for ruamel.yaml.parser: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/parser.py
LOG:  Metadata fresh for ruamel.yaml.composer: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/composer.py
LOG:  Metadata fresh for ruamel.yaml.emitter: file /home/degenaro/venv.develop/lib/python3.10/site-packages/ruamel/yaml/emitter.py
LOG:  Metadata fresh for opcode: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/opcode.pyi
LOG:  Metadata fresh for colorsys: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/colorsys.pyi
LOG:  Metadata fresh for numbers: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/numbers.pyi
LOG:  Metadata fresh for email_validator.syntax: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/syntax.py
LOG:  Metadata fresh for email_validator.rfc_constants: file /home/degenaro/venv.develop/lib/python3.10/site-packages/email_validator/rfc_constants.py
LOG:  Metadata fresh for email: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/__init__.pyi
LOG:  Metadata fresh for email.charset: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/charset.pyi
LOG:  Metadata fresh for email.contentmanager: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/contentmanager.pyi
LOG:  Metadata fresh for email.errors: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/errors.pyi
LOG:  Metadata fresh for email.header: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/header.pyi
LOG:  Metadata fresh for email.policy: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/policy.pyi
LOG:  Metadata fresh for genericpath: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/genericpath.pyi
LOG:  Metadata fresh for unicodedata: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/unicodedata.pyi
LOG:  Metadata fresh for idna: file /home/degenaro/venv.develop/lib/python3.10/site-packages/idna/__init__.py
LOG:  Metadata fresh for email._policybase: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/email/_policybase.pyi
LOG:  Metadata fresh for idna.package_data: file /home/degenaro/venv.develop/lib/python3.10/site-packages/idna/package_data.py
LOG:  Metadata fresh for idna.core: file /home/degenaro/venv.develop/lib/python3.10/site-packages/idna/core.py
LOG:  Metadata fresh for idna.intranges: file /home/degenaro/venv.develop/lib/python3.10/site-packages/idna/intranges.py
LOG:  Metadata fresh for idna.idnadata: file /home/degenaro/venv.develop/lib/python3.10/site-packages/idna/idnadata.py
LOG:  Metadata fresh for bisect: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/bisect.pyi
LOG:  Metadata fresh for _bisect: file /home/degenaro/venv.develop/lib/python3.10/site-packages/mypy/typeshed/stdlib/_bisect.pyi
LOG:  Loaded graph with 165 nodes (0.050 sec)
LOG:  Found 100 SCCs; largest has 42 nodes
LOG:  100 fresh SCCs (165 nodes) left in queue (and will remain unprocessed)
LOG:  Build finished in 0.054 seconds with 0 modules, and 0 errors
Success: no issues found in 1 source file

@degenaro
Copy link
Collaborator

degenaro commented May 6, 2024

I'm happy to have a virtual meeting to discuss, if you like. Perhaps you can help me to reproduce?

@asaba-hashi
Copy link
Author

LOG: Config File: setup.cfg

This output confirms that mypy is reading configuration from the setup.cfg. This method of configuration is not specific to mypy, for example, flake8 settings are also configured there.

To reproduce the error in this issue:

  1. Run the test in a different different directory so that mypy does not read configuration from a setup.cfg or
  2. Comment out the [mypy] configuration sections in the setup.cfg file.

@degenaro
Copy link
Collaborator

degenaro commented May 6, 2024

The good news is that I'm able to recreate now:

/home/degenaro/git/A/python/test.py:7: error: Unexpected keyword argument "responsible_parties" for "InventoryItem"; did you mean "responsible-parties"?  [call-arg]
/home/degenaro/git/A/python/test.py:7: error: Unexpected keyword argument "implemented_components" for "InventoryItem"; did you mean "implemented-components"?  [call-arg]

The bad news is that adding allow_population_by_field_name = True does not seem to help. I must be doing something wrong...


class InventoryItem(OscalBaseModel):
    """
    A single managed inventory item within the system.
    """

    class Config:
        extra = Extra.forbid
        allow_population_by_field_name = True
        

    uuid: constr(
        regex=r'^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[45][0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$'
    ) = Field(
        ...,
        description=
        'A machine-oriented, globally unique identifier with cross-instance scope that can be used to reference this inventory item elsewhere in this or other OSCAL instances. The locally defined UUID of the inventory item can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned per-subject, which means it should be consistently used to identify the same subject across revisions of the document.',
        title='Inventory Item Universally Unique Identifier',
    )
    description: str = Field(
        ...,
        description='A summary of the inventory item stating its purpose within the system.',
        title='Inventory Item Description'
    )
    props: Optional[List[Property]] = Field(None)
    links: Optional[List[Link]] = Field(None)
    responsible_parties: Optional[List[ResponsibleParty]] = Field(None, alias='responsible-parties')
    implemented_components: Optional[List[ImplementedComponent]] = Field(None, alias='implemented-components')
    remarks: Optional[str] = None

@degenaro
Copy link
Collaborator

degenaro commented May 6, 2024

Here is a hacked version of the test.py.

# test.py
from uuid import uuid4
from trestle.oscal.common import InventoryItem, ResponsibleParty

try:
    
    role_id = 'x'
    party_uuids = [str(uuid4())]
    
    rp = ResponsibleParty(
            role_id = role_id,
            party_uuids = party_uuids,
        )

    
    list_rp = [rp]
    
    item = InventoryItem(
            uuid=str(uuid4()),
            description="an item",
            props=[],
            links=[],
            responsible_parties=list_rp,
            implemented_components=[],
        )
    
    print(f'{item}')
    
except Exception as e:
    print(e)

And here is running directly via python invocation, which runs fine it seems:

python  /home/degenaro/git/A/python/test.py
uuid='9ae72e56-97f6-44f6-b7f1-a0c9e4178413' description='an item' props=[] links=[] responsible_parties=[ResponsibleParty(role_id='x', party_uuids=['9507f340-c0d4-4061-a97d-04c73611c34a'], props=None, links=None, remarks=None)] implemented_components=[] remarks=None


@asaba-hashi
Copy link
Author

asaba-hashi commented May 6, 2024

This is likely because allow_population_by_field_name = True is not set in the config of all generated types that have aliases that include -.

The bad news is that adding allow_population_by_field_name = True does not seem to help. I must be doing something wrong...

I think that was the only difference between InventoryItem and a model that mypy didn't complain about with hyphens, but it's been 3 months so I don't remember what the other one I was looking at was.

There is a workardound # type: ignore[call-arg], so this might not be worth looking at more until after pydantic v2 #1417 is implemented, WDYT?

@degenaro
Copy link
Collaborator

degenaro commented May 7, 2024

OK. I'm hopeful that #1533 will be merged into develop and a release created in the very near future. Can look at #1417 after that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants