Skip to content

Complete type-hinting #49

@agateau-gg

Description

@agateau-gg

Description

pygitguardian has type-hints but they are not complete and the package does not announce itself as typed.

As per PEP-561, a Python package can announce itself as typed by shipping a py.typed marker file.

By not announcing itself as typed, pygitguardian forces its users such as ggshield to ignore its imports. To see what this implies, one can do the following with ggshield:

  • edit pyproject.toml, remove the ignore_missing_imports = true
  • run mypy:
ggshield/output/json/schemas.py:4: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/output/json/schemas.py:5: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/debug_logs.py:4: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/output/text/message.py:5: error: Skipping analyzing "pygitguardian.client": module is installed, but missing library stubs or py.typed marker
ggshield/output/text/message.py:6: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/output/text/message.py:7: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/core/filter.py:10: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/core/utils.py:12: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/core/cache.py:5: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/core/client.py:3: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/scan/scanner.py:9: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/scan/scanner.py:10: error: Skipping analyzing "pygitguardian.config": module is installed, but missing library stubs or py.typed marker
ggshield/scan/scanner.py:11: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/scan/scanner.py:12: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/status.py:5: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/status.py:6: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/quota.py:5: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/quota.py:6: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/scan/docker.py:12: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/output/text/text_output_handler.py:5: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/output/text/iac_text_output_handler.py:5: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/output/json/json_output_handler.py:3: error: Skipping analyzing "pygitguardian.client": module is installed, but missing library stubs or py.typed marker
ggshield/output/json/json_output_handler.py:4: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/output/json/iac_json_output_handler.py:3: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/output/gitlab_webui/gitlab_webui_output_handler.py:1: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/scan/repo.py:10: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/scan/repo.py:11: error: Skipping analyzing "pygitguardian.config": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/iac/scan.py:5: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/iac/scan.py:5: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
ggshield/cmd/iac/scan.py:6: error: Skipping analyzing "pygitguardian.iac_models": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/iac/scan.py:7: error: Skipping analyzing "pygitguardian.models": module is installed, but missing library stubs or py.typed marker
ggshield/cmd/secret/scan/repo.py:7: error: Skipping analyzing "pygitguardian": module is installed, but missing library stubs or py.typed marker
Found 31 errors in 19 files (checked 82 source files)

Even with the ignore_missing_imports flag, there are some places in ggshield code it has to use # type:ignore because mypy does not know the type returned by a py-gitguardian function.

Definition of Done

  • Type-hints are checked by the CI
  • Installing the package installs a py.typed mark

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:confirmedThis issue has been reviewed and confirmedtype:enhancementImproving an existing feature

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions