diff --git a/.mypy-baseline.txt b/.mypy-baseline.txt index da962cfc2..a017ae859 100644 --- a/.mypy-baseline.txt +++ b/.mypy-baseline.txt @@ -264,6 +264,7 @@ src/documents/management/commands/document_exporter.py:0: error: Function is mis src/documents/management/commands/document_exporter.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "Path") [assignment] src/documents/management/commands/document_exporter.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] src/documents/management/commands/document_exporter.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_exporter.py:0: error: Library stubs not installed for "tqdm" [import-untyped] src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "dict" [type-arg] @@ -282,23 +283,18 @@ src/documents/management/commands/document_importer.py:0: error: Function is mis src/documents/management/commands/document_importer.py:0: error: Incompatible types in assignment (expression has type "str | None", base class "CryptMixin" defined the type as "str") [assignment] src/documents/management/commands/document_importer.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] src/documents/management/commands/document_importer.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_importer.py:0: error: Library stubs not installed for "tqdm" [import-untyped] src/documents/management/commands/document_importer.py:0: error: Missing type parameters for generic type "Generator" [type-arg] src/documents/management/commands/document_importer.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/documents/management/commands/document_importer.py:0: error: Need type annotation for "manifest_paths" (hint: "manifest_paths: list[] = ...") [var-annotated] src/documents/management/commands/document_importer.py:0: error: Skipping analyzing "auditlog.registry": module is installed, but missing library stubs or py.typed marker [import-untyped] src/documents/management/commands/document_index.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/document_index.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_llmindex.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_llmindex.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/document_renamer.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_renamer.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/management/commands/document_sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/management/commands/loaddata_stdin.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/loaddata_stdin.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/loaddata_stdin.py:0: error: Incompatible types in assignment (expression has type "tuple[Callable[[Any, Any], TextIO | Any], None]", target has type "tuple[Callable[[str, Literal['r', 'rb']], BufferedReader[_BufferedReaderStream]]]") [assignment] @@ -308,11 +304,8 @@ src/documents/management/commands/mixins.py:0: error: Attribute "kdf_algorithm" src/documents/management/commands/mixins.py:0: error: Attribute "key_iterations" already defined on line 0 [no-redef] src/documents/management/commands/mixins.py:0: error: Attribute "key_size" already defined on line 0 [no-redef] src/documents/management/commands/mixins.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/management/commands/mixins.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/management/commands/mixins.py:0: error: Incompatible types in assignment (expression has type "list[dict[str, Sequence[str]]]", variable has type "CryptFields") [assignment] src/documents/management/commands/mixins.py:0: error: Missing type parameters for generic type "dict" [type-arg] -src/documents/management/commands/mixins.py:0: error: Unsupported operand types for // ("None" and "int") [operator] -src/documents/management/commands/prune_audit_logs.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/prune_audit_logs.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/management/commands/prune_audit_logs.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] src/documents/matching.py:0: error: Argument 1 to "existing_document_matches_workflow" has incompatible type "ConsumableDocument | Document"; expected "Document" [arg-type] @@ -448,18 +441,7 @@ src/documents/plugins/helpers.py:0: error: Function is missing a type annotation src/documents/plugins/helpers.py:0: error: Skipping analyzing "channels_redis.pubsub": module is installed, but missing library stubs or py.typed marker [import-untyped] src/documents/regex.py:0: error: Function is missing a return type annotation [no-untyped-def] src/documents/regex.py:0: error: Library stubs not installed for "regex" [import-untyped] -src/documents/sanity_checker.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] -src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] -src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] -src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/sanity_checker.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] -src/documents/sanity_checker.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] @@ -550,6 +532,8 @@ src/documents/serialisers.py:0: error: Function is missing a type annotation [n src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] @@ -640,6 +624,7 @@ src/documents/serialisers.py:0: error: Missing type parameters for generic type src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] src/documents/serialisers.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/documents/serialisers.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/documents/serialisers.py:0: error: Need type annotation for "document" [var-annotated] @@ -664,9 +649,6 @@ src/documents/signals/handlers.py:0: error: Argument 2 to "match_storage_paths" src/documents/signals/handlers.py:0: error: Argument 2 to "match_tags" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] src/documents/signals/handlers.py:0: error: Argument 2 to "validate_move" has incompatible type "Path | Any | None"; expected "Path" [arg-type] src/documents/signals/handlers.py:0: error: Argument 3 to "validate_move" has incompatible type "Path | Any | None"; expected "Path" [arg-type] -src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] -src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] -src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] src/documents/signals/handlers.py:0: error: Function is missing a return type annotation [no-untyped-def] src/documents/signals/handlers.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/signals/handlers.py:0: error: Function is missing a type annotation [no-untyped-def] @@ -686,12 +668,6 @@ src/documents/signals/handlers.py:0: error: Function is missing a type annotatio src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/signals/handlers.py:0: error: Incompatible types in assignment (expression has type "list[Tag]", variable has type "set[Tag]") [assignment] src/documents/signals/handlers.py:0: error: Incompatible types in assignment (expression has type "tuple[Any, Any, Any]", variable has type "tuple[Any, Any]") [assignment] src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "save" [union-attr] src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "source_path" [union-attr] @@ -719,7 +695,6 @@ src/documents/tasks.py:0: error: Function is missing a type annotation for one o src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tasks.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] src/documents/tasks.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] src/documents/tasks.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "str") [assignment] @@ -746,8 +721,80 @@ src/documents/templating/utils.py:0: error: Function is missing a type annotatio src/documents/templating/workflows.py:0: error: Incompatible return value type (got "None", expected "str") [return-value] src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/conftest.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/conftest.py:0: error: Incompatible return value type (got "DocumentFactory", expected "Document") [return-value] src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Incompatible types in assignment (expression has type "StringIO", variable has type "OutputWrapper") [assignment] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/tests/management/test_management_base_cmd.py:0: error: Need type annotation for "result" [var-annotated] +src/documents/tests/management/test_management_base_cmd.py:0: error: Need type annotation for "result" (hint: "result: list[] = ...") [var-annotated] +src/documents/tests/management/test_management_base_cmd.py:0: error: Need type annotation for "results" [var-annotated] +src/documents/tests/management/test_management_sanity_checker.py:0: error: "DocumentFactory" has no attribute "source_path"; maybe "storage_path"? [attr-defined] +src/documents/tests/management/test_management_sanity_checker.py:0: error: "DocumentFactory" has no attribute "thumbnail_path" [attr-defined] src/documents/tests/test_admin.py:0: error: "PaperlessUserForm" has no attribute "request" [attr-defined] src/documents/tests/test_admin.py:0: error: "PaperlessUserForm" has no attribute "request" [attr-defined] src/documents/tests/test_admin.py:0: error: Function is missing a type annotation [no-untyped-def] @@ -775,6 +822,7 @@ src/documents/tests/test_api_app_config.py:0: error: Item "None" of "Application src/documents/tests/test_api_bulk_download.py:0: error: Value of type variable "_StrPathT" of "copy" cannot be "Path | None" [type-var] src/documents/tests/test_api_bulk_edit.py:0: error: "type[MatchingModel]" has no attribute "objects" [attr-defined] src/documents/tests/test_api_bulk_edit.py:0: error: "type[MatchingModel]" has no attribute "objects" [attr-defined] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a return type annotation [no-untyped-def] src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] @@ -827,8 +875,10 @@ src/documents/tests/test_api_custom_fields.py:0: error: Value of type "Any | Non src/documents/tests/test_api_documents.py:0: error: "None" object is not iterable [misc] src/documents/tests/test_api_documents.py:0: error: "object" has no attribute "get" [attr-defined] src/documents/tests/test_api_documents.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_api_documents.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] src/documents/tests/test_api_documents.py:0: error: Argument 1 to "assertCountEqual" of "TestCase" has incompatible type "list[int] | None"; expected "Iterable[Any]" [arg-type] src/documents/tests/test_api_documents.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Function is missing a return type annotation [no-untyped-def] src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] @@ -1173,7 +1223,20 @@ src/documents/tests/test_management_exporter.py:0: error: Function is missing a src/documents/tests/test_management_exporter.py:0: error: Item "None" of "MailAccount | None" has no attribute "password" [union-attr] src/documents/tests/test_management_exporter.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] src/documents/tests/test_management_fuzzy.py:0: error: Function is missing a type annotation [no-untyped-def] -src/documents/tests/test_management_retagger.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: "DocumentFactory" has no attribute "refresh_from_db" [attr-defined] +src/documents/tests/test_management_retagger.py:0: error: "DocumentFactory" has no attribute "refresh_from_db" [attr-defined] +src/documents/tests/test_management_retagger.py:0: error: "DocumentFactory" has no attribute "refresh_from_db" [attr-defined] +src/documents/tests/test_management_retagger.py:0: error: "DocumentFactory" has no attribute "tags" [attr-defined] +src/documents/tests/test_management_retagger.py:0: error: "DocumentFactory" has no attribute "tags" [attr-defined] +src/documents/tests/test_management_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: Incompatible return value type (got "tuple[CorrespondentFactory, CorrespondentFactory]", expected "tuple[Correspondent, Correspondent]") [return-value] +src/documents/tests/test_management_retagger.py:0: error: Incompatible return value type (got "tuple[DocumentFactory, DocumentFactory, DocumentFactory, DocumentFactory]", expected "tuple[Document, Document, Document, Document]") [return-value] +src/documents/tests/test_management_retagger.py:0: error: Incompatible return value type (got "tuple[DocumentTypeFactory, DocumentTypeFactory]", expected "tuple[DocumentType, DocumentType]") [return-value] +src/documents/tests/test_management_retagger.py:0: error: Incompatible return value type (got "tuple[StoragePathFactory, StoragePathFactory, StoragePathFactory]", expected "tuple[StoragePath, StoragePath, StoragePath]") [return-value] +src/documents/tests/test_management_retagger.py:0: error: Incompatible return value type (got "tuple[TagFactory, TagFactory, TagFactory, TagFactory, TagFactory]", expected "tuple[Tag, Tag, Tag, Tag, Tag]") [return-value] src/documents/tests/test_management_superuser.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/tests/test_migration_share_link_bundle.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_migration_share_link_bundle.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] @@ -1190,9 +1253,10 @@ src/documents/tests/test_parsers.py:0: error: Function is missing a type annotat src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_sanity_check.py:0: error: Function is missing a return type annotation [no-untyped-def] -src/documents/tests/test_sanity_check.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_sanity_check.py:0: error: Invalid index type "None" for "dict[int, list[dict[Any, Any]]]"; expected type "int" [index] +src/documents/tests/test_sanity_check.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_sanity_check.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_sanity_check.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_sanity_check.py:0: error: Unsupported right operand type for in ("str | None") [operator] src/documents/tests/test_share_link_bundles.py:0: error: "_MonkeyPatchedResponse" has no attribute "streaming_content" [attr-defined] src/documents/tests/test_share_link_bundles.py:0: error: Argument 1 to "ZipFile" has incompatible type "Path | None"; expected "str | PathLike[str] | IO[bytes]" [arg-type] src/documents/tests/test_share_link_bundles.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] @@ -1223,10 +1287,6 @@ src/documents/tests/test_tasks.py:0: error: Function is missing a type annotatio src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "render" [attr-defined] src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "render" [attr-defined] src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] @@ -1534,7 +1594,6 @@ src/documents/views.py:0: error: "get_serializer_context" undefined in superclas src/documents/views.py:0: error: "object" not callable [operator] src/documents/views.py:0: error: "type[Model]" has no attribute "objects" [attr-defined] src/documents/views.py:0: error: Argument "path" to "EmailAttachment" has incompatible type "Path | None"; expected "Path" [arg-type] -src/documents/views.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] src/documents/views.py:0: error: Argument 2 to "match_correspondents" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] src/documents/views.py:0: error: Argument 2 to "match_document_types" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] src/documents/views.py:0: error: Argument 2 to "match_storage_paths" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] @@ -1609,6 +1668,8 @@ src/documents/views.py:0: error: Function is missing a type annotation [no-unty src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/documents/views.py:0: error: Incompatible type for lookup 'owner': (got "User | AnonymousUser", expected "User | int | None") [misc] src/documents/views.py:0: error: Incompatible types in assignment (expression has type "Any | None", variable has type "dict[Any, Any]") [assignment] src/documents/views.py:0: error: Incompatible types in assignment (expression has type "QuerySet[Any, Any]", variable has type "list[Any]") [assignment] @@ -1864,39 +1925,54 @@ src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.adapter": src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.totp.internal.auth": module is installed, but missing library stubs or py.typed marker [import-untyped] src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] -src/paperless/settings.py:0: error: "Sequence[str]" has no attribute "append" [attr-defined] -src/paperless/settings.py:0: error: "Sequence[str]" has no attribute "insert" [attr-defined] -src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] -src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] -src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] -src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] -src/paperless/settings.py:0: error: Argument 1 to "_parse_ignore_dates" has incompatible type "str | None"; expected "str" [arg-type] -src/paperless/settings.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | None"; expected "str" [arg-type] -src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] -src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] -src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] -src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] -src/paperless/settings.py:0: error: Argument 2 to "__get_path" has incompatible type "str | None"; expected "PathLike[Any] | str" [arg-type] -src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] -src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] -src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] -src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] -src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] -src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] -src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] -src/paperless/settings.py:0: error: Function is missing a type annotation [no-untyped-def] -src/paperless/settings.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] -src/paperless/settings.py:0: error: Incompatible return value type (got "set[date]", expected "set[datetime]") [return-value] -src/paperless/settings.py:0: error: Incompatible return value type (got "tuple[str | None, str, str, str, str]", expected "tuple[str, str, str, str, str]") [return-value] -src/paperless/settings.py:0: error: Incompatible types in assignment (expression has type "bool", variable has type "str") [assignment] -src/paperless/settings.py:0: error: Incompatible types in assignment (expression has type "set[datetime]", variable has type "set[date]") [assignment] -src/paperless/settings.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] -src/paperless/settings.py:0: error: Missing type parameters for generic type "dict" [type-arg] -src/paperless/settings.py:0: error: Missing type parameters for generic type "dict" [type-arg] -src/paperless/settings.py:0: error: No overload variant of "getenv" matches argument types "Collection[str]", "Collection[str]" [call-overload] -src/paperless/settings.py:0: error: Skipping analyzing "compression_middleware.middleware": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/settings/__init__.py:0: error: "Sequence[str]" has no attribute "append" [attr-defined] +src/paperless/settings/__init__.py:0: error: "Sequence[str]" has no attribute "insert" [attr-defined] +src/paperless/settings/__init__.py:0: error: Argument 1 to "_parse_ignore_dates" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless/settings/__init__.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless/settings/__init__.py:0: error: Argument 2 to "__get_path" has incompatible type "str | None"; expected "PathLike[Any] | str" [arg-type] +src/paperless/settings/__init__.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/settings/__init__.py:0: error: Incompatible return value type (got "set[date]", expected "set[datetime]") [return-value] +src/paperless/settings/__init__.py:0: error: Incompatible return value type (got "tuple[str | None, str, str, str, str]", expected "tuple[str, str, str, str, str]") [return-value] +src/paperless/settings/__init__.py:0: error: Incompatible types in assignment (expression has type "bool", variable has type "str") [assignment] +src/paperless/settings/__init__.py:0: error: Incompatible types in assignment (expression has type "set[datetime]", variable has type "set[date]") [assignment] +src/paperless/settings/__init__.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/paperless/settings/__init__.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/settings/__init__.py:0: error: No overload variant of "getenv" matches argument types "Collection[str]", "Collection[str]" [call-overload] +src/paperless/settings/__init__.py:0: error: Skipping analyzing "compression_middleware.middleware": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/settings/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "bool") [assignment] +src/paperless/settings/parsers.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/settings/parsers.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/settings/parsers.py:0: error: Missing type parameters for generic type "dict" [type-arg] src/paperless/signals.py:0: error: Function is missing a type annotation [no-untyped-def] src/paperless/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/settings/test_custom_parsers.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/settings/test_environment_parsers.py:0: error: Function is missing a type annotation [no-untyped-def] src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] @@ -1904,6 +1980,12 @@ src/paperless/tests/test_adapter.py:0: error: Function is missing a type annotat src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.account.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.core": module is installed, but missing library stubs or py.typed marker [import-untyped] src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.socialaccount.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/tests/test_checks.py:0: error: Generator has incompatible item type "str | None"; expected "str" [misc] +src/paperless/tests/test_checks.py:0: error: Unsupported right operand type for in ("str | None") [operator] +src/paperless/tests/test_checks.py:0: error: Unsupported right operand type for in ("str | None") [operator] +src/paperless/tests/test_checks.py:0: error: Unsupported right operand type for in ("str | None") [operator] +src/paperless/tests/test_checks.py:0: error: Unsupported right operand type for in ("str | None") [operator] +src/paperless/tests/test_checks.py:0: error: Unsupported right operand type for in ("str | None") [operator] src/paperless/tests/test_db_cache.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] src/paperless/tests/test_db_cache.py:0: error: Skipping analyzing "cachalot.settings": module is installed, but missing library stubs or py.typed marker [import-untyped] src/paperless/tests/test_settings.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] diff --git a/.pyrefly-baseline.json b/.pyrefly-baseline.json index da084db22..6202faaca 100644 --- a/.pyrefly-baseline.json +++ b/.pyrefly-baseline.json @@ -37,21 +37,21 @@ "severity": "error" }, { - "line": 239, + "line": 251, "column": 16, - "stop_line": 239, + "stop_line": 251, "stop_column": 24, "path": "src/documents/barcodes.py", "code": -2, "name": "missing-import", - "description": "Cannot find module `zxingcpp`\n Looked in these locations (from config in `/home/trenton/projects/paperless-ngx/pyproject.toml`):\n Search path (from config file): [\"/home/trenton/projects/paperless-ngx/src\"]\n Import root (inferred from project layout): \"/home/trenton/projects/paperless-ngx/src\"\n Site package path queried from interpreter: [\"/home/trenton/.local/share/uv/python/cpython-3.13.4-linux-x86_64-gnu/lib/python3.13\", \"/home/trenton/.local/share/uv/python/cpython-3.13.4-linux-x86_64-gnu/lib/python3.13/lib-dynload\", \"/home/trenton/projects/paperless-ngx/.venv/lib/python3.13/site-packages\"]", + "description": "Cannot find module `zxingcpp`\n Looked in these locations (from config in `/tank/users/trenton/projects/paperless/paperless-ngx/pyproject.toml`):\n Search path (from config file): [\"/tank/users/trenton/projects/paperless/paperless-ngx/src\"]\n Import root (inferred from project layout): \"/tank/users/trenton/projects/paperless/paperless-ngx/src\"\n Site package path queried from interpreter: [\"/tank/users/trenton/projects/paperless/paperless-ngx/.venv/lib/python3.13/site-packages\"]", "concise_description": "Cannot find module `zxingcpp`", "severity": "error" }, { - "line": 323, + "line": 307, "column": 38, - "stop_line": 323, + "stop_line": 307, "stop_column": 51, "path": "src/documents/barcodes.py", "code": -2, @@ -68,7 +68,7 @@ "path": "src/documents/bulk_download.py", "code": -2, "name": "bad-override", - "description": "Class member `OriginalsOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `OriginalsOnlyStrategy.add_document` has type `BoundMethod[OriginalsOnlyStrategy, (self: OriginalsOnlyStrategy, doc: Document) -> None]`, which is not assignable to `BoundMethod[OriginalsOnlyStrategy, (self: OriginalsOnlyStrategy, doc: Document) -> NoReturn]`, the type of `BulkArchiveStrategy.add_document`", + "description": "Class member `OriginalsOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `OriginalsOnlyStrategy.add_document` has type `(self: OriginalsOnlyStrategy, doc: Document) -> None`, which is not assignable to `(self: OriginalsOnlyStrategy, doc: Document) -> NoReturn`, the type of `BulkArchiveStrategy.add_document`\n Signature mismatch:\n expected: def add_document(self: OriginalsOnlyStrategy, doc: Document) -> NoReturn: ...\n ^^^^^^ return type\n found: def add_document(self: OriginalsOnlyStrategy, doc: Document) -> None: ...\n ^^ return type", "concise_description": "Class member `OriginalsOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner", "severity": "error" }, @@ -80,7 +80,7 @@ "path": "src/documents/bulk_download.py", "code": -2, "name": "bad-override", - "description": "Class member `ArchiveOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `ArchiveOnlyStrategy.add_document` has type `BoundMethod[ArchiveOnlyStrategy, (self: ArchiveOnlyStrategy, doc: Document) -> None]`, which is not assignable to `BoundMethod[ArchiveOnlyStrategy, (self: ArchiveOnlyStrategy, doc: Document) -> NoReturn]`, the type of `BulkArchiveStrategy.add_document`", + "description": "Class member `ArchiveOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `ArchiveOnlyStrategy.add_document` has type `(self: ArchiveOnlyStrategy, doc: Document) -> None`, which is not assignable to `(self: ArchiveOnlyStrategy, doc: Document) -> NoReturn`, the type of `BulkArchiveStrategy.add_document`\n Signature mismatch:\n expected: def add_document(self: ArchiveOnlyStrategy, doc: Document) -> NoReturn: ...\n ^^^^^^ return type\n found: def add_document(self: ArchiveOnlyStrategy, doc: Document) -> None: ...\n ^^ return type", "concise_description": "Class member `ArchiveOnlyStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner", "severity": "error" }, @@ -92,14 +92,14 @@ "path": "src/documents/bulk_download.py", "code": -2, "name": "bad-override", - "description": "Class member `OriginalAndArchiveStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `OriginalAndArchiveStrategy.add_document` has type `BoundMethod[OriginalAndArchiveStrategy, (self: OriginalAndArchiveStrategy, doc: Document) -> None]`, which is not assignable to `BoundMethod[OriginalAndArchiveStrategy, (self: OriginalAndArchiveStrategy, doc: Document) -> NoReturn]`, the type of `BulkArchiveStrategy.add_document`", + "description": "Class member `OriginalAndArchiveStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner\n `OriginalAndArchiveStrategy.add_document` has type `(self: OriginalAndArchiveStrategy, doc: Document) -> None`, which is not assignable to `(self: OriginalAndArchiveStrategy, doc: Document) -> NoReturn`, the type of `BulkArchiveStrategy.add_document`\n Signature mismatch:\n expected: def add_document(self: OriginalAndArchiveStrategy, doc: Document) -> NoReturn: ...\n ^^^^^^ return type\n found: def add_document(self: OriginalAndArchiveStrategy, doc: Document) -> None: ...\n ^^ return type", "concise_description": "Class member `OriginalAndArchiveStrategy.add_document` overrides parent class `BulkArchiveStrategy` in an inconsistent manner", "severity": "error" }, { - "line": 200, + "line": 276, "column": 16, - "stop_line": 200, + "stop_line": 276, "stop_column": 23, "path": "src/documents/bulk_edit.py", "code": -2, @@ -109,9 +109,9 @@ "severity": "error" }, { - "line": 214, + "line": 290, "column": 9, - "stop_line": 216, + "stop_line": 292, "stop_column": 60, "path": "src/documents/bulk_edit.py", "code": -2, @@ -121,9 +121,9 @@ "severity": "error" }, { - "line": 220, + "line": 296, "column": 32, - "stop_line": 220, + "stop_line": 296, "stop_column": 40, "path": "src/documents/bulk_edit.py", "code": -2, @@ -133,9 +133,9 @@ "severity": "error" }, { - "line": 222, + "line": 298, "column": 9, - "stop_line": 222, + "stop_line": 298, "stop_column": 24, "path": "src/documents/bulk_edit.py", "code": -2, @@ -145,9 +145,9 @@ "severity": "error" }, { - "line": 228, + "line": 304, "column": 21, - "stop_line": 228, + "stop_line": 304, "stop_column": 43, "path": "src/documents/bulk_edit.py", "code": -2, @@ -157,9 +157,9 @@ "severity": "error" }, { - "line": 264, + "line": 340, "column": 5, - "stop_line": 267, + "stop_line": 343, "stop_column": 18, "path": "src/documents/bulk_edit.py", "code": -2, @@ -169,9 +169,9 @@ "severity": "error" }, { - "line": 536, + "line": 693, "column": 33, - "stop_line": 536, + "stop_line": 693, "stop_column": 63, "path": "src/documents/bulk_edit.py", "code": -2, @@ -181,9 +181,9 @@ "severity": "error" }, { - "line": 772, + "line": 1006, "column": 13, - "stop_line": 772, + "stop_line": 1006, "stop_column": 64, "path": "src/documents/bulk_edit.py", "code": -2, @@ -337,57 +337,9 @@ "severity": "error" }, { - "line": 79, - "column": 5, - "stop_line": 79, - "stop_column": 16, - "path": "src/documents/conditionals.py", - "code": -2, - "name": "unreachable", - "description": "This `return` statement is unreachable", - "concise_description": "This `return` statement is unreachable", - "severity": "error" - }, - { - "line": 93, - "column": 5, - "stop_line": 93, - "stop_column": 16, - "path": "src/documents/conditionals.py", - "code": -2, - "name": "unreachable", - "description": "This `return` statement is unreachable", - "concise_description": "This `return` statement is unreachable", - "severity": "error" - }, - { - "line": 109, - "column": 5, - "stop_line": 109, - "stop_column": 16, - "path": "src/documents/conditionals.py", - "code": -2, - "name": "unreachable", - "description": "This `return` statement is unreachable", - "concise_description": "This `return` statement is unreachable", - "severity": "error" - }, - { - "line": 122, - "column": 5, - "stop_line": 122, - "stop_column": 16, - "path": "src/documents/conditionals.py", - "code": -2, - "name": "unreachable", - "description": "This `return` statement is unreachable", - "concise_description": "This `return` statement is unreachable", - "severity": "error" - }, - { - "line": 68, + "line": 69, "column": 9, - "stop_line": 68, + "stop_line": 69, "stop_column": 23, "path": "src/documents/consumer.py", "code": -2, @@ -397,9 +349,9 @@ "severity": "error" }, { - "line": 113, + "line": 120, "column": 26, - "stop_line": 113, + "stop_line": 120, "stop_column": 35, "path": "src/documents/consumer.py", "code": -2, @@ -409,9 +361,9 @@ "severity": "error" }, { - "line": 115, + "line": 122, "column": 9, - "stop_line": 115, + "stop_line": 122, "stop_column": 33, "path": "src/documents/consumer.py", "code": -2, @@ -421,9 +373,9 @@ "severity": "error" }, { - "line": 117, + "line": 124, "column": 25, - "stop_line": 117, + "stop_line": 124, "stop_column": 38, "path": "src/documents/consumer.py", "code": -2, @@ -433,9 +385,9 @@ "severity": "error" }, { - "line": 117, + "line": 124, "column": 51, - "stop_line": 117, + "stop_line": 124, "stop_column": 65, "path": "src/documents/consumer.py", "code": -2, @@ -445,9 +397,9 @@ "severity": "error" }, { - "line": 127, + "line": 150, "column": 9, - "stop_line": 127, + "stop_line": 150, "stop_column": 24, "path": "src/documents/consumer.py", "code": -2, @@ -457,9 +409,9 @@ "severity": "error" }, { - "line": 134, + "line": 157, "column": 29, - "stop_line": 134, + "stop_line": 157, "stop_column": 42, "path": "src/documents/consumer.py", "code": -2, @@ -469,9 +421,9 @@ "severity": "error" }, { - "line": 134, + "line": 157, "column": 55, - "stop_line": 134, + "stop_line": 157, "stop_column": 68, "path": "src/documents/consumer.py", "code": -2, @@ -481,9 +433,9 @@ "severity": "error" }, { - "line": 135, + "line": 158, "column": 36, - "stop_line": 135, + "stop_line": 158, "stop_column": 49, "path": "src/documents/consumer.py", "code": -2, @@ -493,9 +445,9 @@ "severity": "error" }, { - "line": 136, + "line": 159, "column": 20, - "stop_line": 136, + "stop_line": 159, "stop_column": 33, "path": "src/documents/consumer.py", "code": -2, @@ -505,9 +457,9 @@ "severity": "error" }, { - "line": 137, + "line": 160, "column": 37, - "stop_line": 137, + "stop_line": 160, "stop_column": 50, "path": "src/documents/consumer.py", "code": -2, @@ -517,9 +469,9 @@ "severity": "error" }, { - "line": 138, + "line": 161, "column": 20, - "stop_line": 138, + "stop_line": 161, "stop_column": 33, "path": "src/documents/consumer.py", "code": -2, @@ -529,21 +481,9 @@ "severity": "error" }, { - "line": 150, - "column": 9, - "stop_line": 150, - "stop_column": 17, - "path": "src/documents/consumer.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `ConsumerPluginMixin` has no attribute `log`", - "concise_description": "Object of class `ConsumerPluginMixin` has no attribute `log`", - "severity": "error" - }, - { - "line": 196, + "line": 254, "column": 17, - "stop_line": 196, + "stop_line": 254, "stop_column": 25, "path": "src/documents/consumer.py", "code": -2, @@ -553,9 +493,9 @@ "severity": "error" }, { - "line": 273, + "line": 331, "column": 17, - "stop_line": 273, + "stop_line": 331, "stop_column": 25, "path": "src/documents/consumer.py", "code": -2, @@ -565,9 +505,9 @@ "severity": "error" }, { - "line": 321, + "line": 379, "column": 25, - "stop_line": 325, + "stop_line": 383, "stop_column": 26, "path": "src/documents/consumer.py", "code": -2, @@ -577,9 +517,9 @@ "severity": "error" }, { - "line": 326, + "line": 384, "column": 32, - "stop_line": 326, + "stop_line": 384, "stop_column": 40, "path": "src/documents/consumer.py", "code": -2, @@ -589,9 +529,9 @@ "severity": "error" }, { - "line": 436, + "line": 494, "column": 66, - "stop_line": 436, + "stop_line": 494, "stop_column": 70, "path": "src/documents/consumer.py", "code": -2, @@ -601,10 +541,22 @@ "severity": "error" }, { - "line": 481, - "column": 26, - "stop_line": 481, - "stop_column": 30, + "line": 577, + "column": 25, + "stop_line": 577, + "stop_column": 52, + "path": "src/documents/consumer.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Manager` has no attribute `log_create`", + "concise_description": "Object of class `Manager` has no attribute `log_create`", + "severity": "error" + }, + { + "line": 592, + "column": 30, + "stop_line": 592, + "stop_column": 34, "path": "src/documents/consumer.py", "code": -2, "name": "bad-argument-type", @@ -613,9 +565,9 @@ "severity": "error" }, { - "line": 523, + "line": 634, "column": 54, - "stop_line": 523, + "stop_line": 634, "stop_column": 75, "path": "src/documents/consumer.py", "code": -2, @@ -625,9 +577,9 @@ "severity": "error" }, { - "line": 610, + "line": 727, "column": 13, - "stop_line": 610, + "stop_line": 727, "stop_column": 31, "path": "src/documents/consumer.py", "code": -2, @@ -637,9 +589,9 @@ "severity": "error" }, { - "line": 611, + "line": 728, "column": 13, - "stop_line": 611, + "stop_line": 728, "stop_column": 26, "path": "src/documents/consumer.py", "code": -2, @@ -649,9 +601,9 @@ "severity": "error" }, { - "line": 612, + "line": 729, "column": 13, - "stop_line": 612, + "stop_line": 729, "stop_column": 27, "path": "src/documents/consumer.py", "code": -2, @@ -661,9 +613,9 @@ "severity": "error" }, { - "line": 731, + "line": 851, "column": 31, - "stop_line": 731, + "stop_line": 851, "stop_column": 46, "path": "src/documents/consumer.py", "code": -2, @@ -673,9 +625,9 @@ "severity": "error" }, { - "line": 804, + "line": 924, "column": 21, - "stop_line": 804, + "stop_line": 924, "stop_column": 36, "path": "src/documents/consumer.py", "code": -2, @@ -685,9 +637,9 @@ "severity": "error" }, { - "line": 805, + "line": 925, "column": 24, - "stop_line": 805, + "stop_line": 925, "stop_column": 51, "path": "src/documents/consumer.py", "code": -2, @@ -697,9 +649,9 @@ "severity": "error" }, { - "line": 806, + "line": 926, "column": 30, - "stop_line": 806, + "stop_line": 926, "stop_column": 48, "path": "src/documents/consumer.py", "code": -2, @@ -709,9 +661,9 @@ "severity": "error" }, { - "line": 806, + "line": 926, "column": 58, - "stop_line": 806, + "stop_line": 926, "stop_column": 76, "path": "src/documents/consumer.py", "code": -2, @@ -721,9 +673,9 @@ "severity": "error" }, { - "line": 807, + "line": 927, "column": 28, - "stop_line": 807, + "stop_line": 927, "stop_column": 40, "path": "src/documents/consumer.py", "code": -2, @@ -733,9 +685,9 @@ "severity": "error" }, { - "line": 814, + "line": 934, "column": 65, - "stop_line": 814, + "stop_line": 934, "stop_column": 77, "path": "src/documents/consumer.py", "code": -2, @@ -745,9 +697,9 @@ "severity": "error" }, { - "line": 891, + "line": 1011, "column": 16, - "stop_line": 891, + "stop_line": 1011, "stop_column": 51, "path": "src/documents/consumer.py", "code": -2, @@ -780,18 +732,6 @@ "concise_description": "Argument `bytes | None` is not assignable to parameter `buffer` with type `Buffer` in function `_io.BufferedWriter.write`", "severity": "error" }, - { - "line": 109, - "column": 13, - "stop_line": 112, - "stop_column": 26, - "path": "src/documents/data_models.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `list` has no attribute `values_list`", - "concise_description": "Object of class `list` has no attribute `values_list`", - "severity": "error" - }, { "line": 115, "column": 13, @@ -805,9 +745,21 @@ "severity": "error" }, { - "line": 131, + "line": 121, + "column": 13, + "stop_line": 124, + "stop_column": 26, + "path": "src/documents/data_models.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `list` has no attribute `values_list`", + "concise_description": "Object of class `list` has no attribute `values_list`", + "severity": "error" + }, + { + "line": 137, "column": 26, - "stop_line": 131, + "stop_line": 137, "stop_column": 43, "path": "src/documents/data_models.py", "code": -2, @@ -817,9 +769,9 @@ "severity": "error" }, { - "line": 132, + "line": 138, "column": 35, - "stop_line": 132, + "stop_line": 138, "stop_column": 59, "path": "src/documents/data_models.py", "code": -2, @@ -829,9 +781,9 @@ "severity": "error" }, { - "line": 136, + "line": 142, "column": 26, - "stop_line": 136, + "stop_line": 142, "stop_column": 43, "path": "src/documents/data_models.py", "code": -2, @@ -841,9 +793,9 @@ "severity": "error" }, { - "line": 137, + "line": 143, "column": 37, - "stop_line": 137, + "stop_line": 143, "stop_column": 61, "path": "src/documents/data_models.py", "code": -2, @@ -853,9 +805,9 @@ "severity": "error" }, { - "line": 165, + "line": 172, "column": 22, - "stop_line": 165, + "stop_line": 172, "stop_column": 65, "path": "src/documents/data_models.py", "code": -2, @@ -865,9 +817,9 @@ "severity": "error" }, { - "line": 174, + "line": 199, "column": 51, - "stop_line": 174, + "stop_line": 199, "stop_column": 61, "path": "src/documents/filters.py", "code": -2, @@ -877,9 +829,9 @@ "severity": "error" }, { - "line": 227, + "line": 252, "column": 31, - "stop_line": 227, + "stop_line": 252, "stop_column": 51, "path": "src/documents/filters.py", "code": -2, @@ -889,9 +841,9 @@ "severity": "error" }, { - "line": 259, + "line": 284, "column": 25, - "stop_line": 259, + "stop_line": 284, "stop_column": 66, "path": "src/documents/filters.py", "code": -2, @@ -901,21 +853,21 @@ "severity": "error" }, { - "line": 286, + "line": 311, "column": 47, - "stop_line": 286, + "stop_line": 311, "stop_column": 76, "path": "src/documents/filters.py", "code": -2, "name": "bad-argument-type", - "description": "Argument `dict[Unknown | None, Unknown]` is not assignable to parameter `detail` with type `ErrorDetail | Mapping[str, Unknown] | Sequence[Unknown] | _StrPromise | dict[str, Unknown] | list[Unknown] | str | None` in function `rest_framework.exceptions.APIException.__init__`", - "concise_description": "Argument `dict[Unknown | None, Unknown]` is not assignable to parameter `detail` with type `ErrorDetail | Mapping[str, Unknown] | Sequence[Unknown] | _StrPromise | dict[str, Unknown] | list[Unknown] | str | None` in function `rest_framework.exceptions.APIException.__init__`", + "description": "Argument `dict[Unknown | None, _APIExceptionInput]` is not assignable to parameter `detail` with type `ErrorDetail | Mapping[str, _APIExceptionInput] | Sequence[_APIExceptionInput] | _StrPromise | dict[str, _Detail] | list[_Detail] | str | None` in function `rest_framework.exceptions.APIException.__init__`", + "concise_description": "Argument `dict[Unknown | None, _APIExceptionInput]` is not assignable to parameter `detail` with type `ErrorDetail | Mapping[str, _APIExceptionInput] | Sequence[_APIExceptionInput] | _StrPromise | dict[str, _Detail] | list[_Detail] | str | None` in function `rest_framework.exceptions.APIException.__init__`", "severity": "error" }, { - "line": 295, + "line": 320, "column": 5, - "stop_line": 295, + "stop_line": 320, "stop_column": 26, "path": "src/documents/filters.py", "code": -2, @@ -925,9 +877,9 @@ "severity": "error" }, { - "line": 600, + "line": 625, "column": 26, - "stop_line": 600, + "stop_line": 625, "stop_column": 49, "path": "src/documents/filters.py", "code": -2, @@ -937,9 +889,9 @@ "severity": "error" }, { - "line": 603, + "line": 628, "column": 17, - "stop_line": 603, + "stop_line": 628, "stop_column": 28, "path": "src/documents/filters.py", "code": -2, @@ -949,9 +901,9 @@ "severity": "error" }, { - "line": 660, + "line": 685, "column": 17, - "stop_line": 660, + "stop_line": 685, "stop_column": 42, "path": "src/documents/filters.py", "code": -2, @@ -961,33 +913,33 @@ "severity": "error" }, { - "line": 845, + "line": 874, "column": 9, - "stop_line": 845, + "stop_line": 874, "stop_column": 24, "path": "src/documents/filters.py", "code": -2, "name": "bad-override", - "description": "Class member `ObjectOwnedOrGrantedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner\n `ObjectOwnedOrGrantedPermissionsFilter.filter_queryset` has type `BoundMethod[ObjectOwnedOrGrantedPermissionsFilter, (self: ObjectOwnedOrGrantedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> type[Any]]`, which is not assignable to `BoundMethod[ObjectOwnedOrGrantedPermissionsFilter, (self: ObjectOwnedOrGrantedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]]`, the type of `ObjectPermissionsFilter.filter_queryset`", + "description": "Class member `ObjectOwnedOrGrantedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner\n `ObjectOwnedOrGrantedPermissionsFilter.filter_queryset` has type `(self: ObjectOwnedOrGrantedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> type[Any]`, which is not assignable to `(self: ObjectOwnedOrGrantedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]`, the type of `ObjectPermissionsFilter.filter_queryset`\n Signature mismatch:\n ...Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n ...Unknown, queryset: Unknown, view: Unknown) -> type[Any]: ...\n ^^^^^^^^ return type", "concise_description": "Class member `ObjectOwnedOrGrantedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner", "severity": "error" }, { - "line": 858, + "line": 887, "column": 9, - "stop_line": 858, + "stop_line": 887, "stop_column": 24, "path": "src/documents/filters.py", "code": -2, "name": "bad-override", - "description": "Class member `ObjectOwnedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner\n `ObjectOwnedPermissionsFilter.filter_queryset` has type `BoundMethod[ObjectOwnedPermissionsFilter, (self: ObjectOwnedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> type[Any] | Unknown]`, which is not assignable to `BoundMethod[ObjectOwnedPermissionsFilter, (self: ObjectOwnedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]]`, the type of `ObjectPermissionsFilter.filter_queryset`", + "description": "Class member `ObjectOwnedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner\n `ObjectOwnedPermissionsFilter.filter_queryset` has type `(self: ObjectOwnedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> type[Any] | Unknown`, which is not assignable to `(self: ObjectOwnedPermissionsFilter, request: Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]`, the type of `ObjectPermissionsFilter.filter_queryset`\n Signature mismatch:\n ...Unknown, queryset: Unknown, view: Unknown) -> QuerySet[Unknown, Unknown]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n ...Unknown, queryset: Unknown, view: Unknown) -> type[Any] | Unknown: ...\n ^^^^^^^^^^^^^^^^^^^ return type", "concise_description": "Class member `ObjectOwnedPermissionsFilter.filter_queryset` overrides parent class `ObjectPermissionsFilter` in an inconsistent manner", "severity": "error" }, { - "line": 928, + "line": 957, "column": 25, - "stop_line": 928, + "stop_line": 957, "stop_column": 45, "path": "src/documents/filters.py", "code": -2, @@ -1045,9 +997,9 @@ "severity": "error" }, { - "line": 187, + "line": 191, "column": 37, - "stop_line": 187, + "stop_line": 191, "stop_column": 41, "path": "src/documents/index.py", "code": -2, @@ -1057,9 +1009,9 @@ "severity": "error" }, { - "line": 211, + "line": 215, "column": 32, - "stop_line": 211, + "stop_line": 215, "stop_column": 49, "path": "src/documents/index.py", "code": -2, @@ -1069,9 +1021,9 @@ "severity": "error" }, { - "line": 257, + "line": 264, "column": 9, - "stop_line": 257, + "stop_line": 264, "stop_column": 21, "path": "src/documents/index.py", "code": -2, @@ -1081,9 +1033,9 @@ "severity": "error" }, { - "line": 258, + "line": 265, "column": 50, - "stop_line": 258, + "stop_line": 265, "stop_column": 58, "path": "src/documents/index.py", "code": -2, @@ -1093,9 +1045,9 @@ "severity": "error" }, { - "line": 344, + "line": 351, "column": 36, - "stop_line": 344, + "stop_line": 351, "stop_column": 52, "path": "src/documents/index.py", "code": -2, @@ -1105,9 +1057,9 @@ "severity": "error" }, { - "line": 380, + "line": 387, "column": 20, - "stop_line": 380, + "stop_line": 387, "stop_column": 43, "path": "src/documents/index.py", "code": -2, @@ -1117,33 +1069,33 @@ "severity": "error" }, { - "line": 447, + "line": 454, "column": 9, - "stop_line": 447, + "stop_line": 454, "stop_column": 19, "path": "src/documents/index.py", "code": -2, "name": "bad-override", - "description": "Class member `DelayedFullTextQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner\n `DelayedFullTextQuery._get_query` has type `BoundMethod[DelayedFullTextQuery, (self: DelayedFullTextQuery) -> tuple[Unknown, ...]]`, which is not assignable to `BoundMethod[DelayedFullTextQuery, (self: DelayedFullTextQuery) -> Never]`, the type of `DelayedQuery._get_query`", + "description": "Class member `DelayedFullTextQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner\n `DelayedFullTextQuery._get_query` has type `(self: DelayedFullTextQuery) -> tuple[Unknown, ...]`, which is not assignable to `(self: DelayedFullTextQuery) -> Never`, the type of `DelayedQuery._get_query`\n Signature mismatch:\n expected: def _get_query(self: DelayedFullTextQuery) -> Never: ...\n ^^^^^ return type\n found: def _get_query(self: DelayedFullTextQuery) -> tuple[Unknown, ...]: ...\n ^^^^^^^^^^^^^^^^^^^ return type", "concise_description": "Class member `DelayedFullTextQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner", "severity": "error" }, { - "line": 485, + "line": 492, "column": 9, - "stop_line": 485, + "stop_line": 492, "stop_column": 19, "path": "src/documents/index.py", "code": -2, "name": "bad-override", - "description": "Class member `DelayedMoreLikeThisQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner\n `DelayedMoreLikeThisQuery._get_query` has type `BoundMethod[DelayedMoreLikeThisQuery, (self: DelayedMoreLikeThisQuery) -> tuple[Unknown, ...]]`, which is not assignable to `BoundMethod[DelayedMoreLikeThisQuery, (self: DelayedMoreLikeThisQuery) -> Never]`, the type of `DelayedQuery._get_query`", + "description": "Class member `DelayedMoreLikeThisQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner\n `DelayedMoreLikeThisQuery._get_query` has type `(self: DelayedMoreLikeThisQuery) -> tuple[Unknown, ...]`, which is not assignable to `(self: DelayedMoreLikeThisQuery) -> Never`, the type of `DelayedQuery._get_query`\n Signature mismatch:\n expected: def _get_query(self: DelayedMoreLikeThisQuery) -> Never: ...\n ^^^^^ return type\n found: def _get_query(self: DelayedMoreLikeThisQuery) -> tuple[Unknown, ...]: ...\n ^^^^^^^^^^^^^^^^^^^ return type", "concise_description": "Class member `DelayedMoreLikeThisQuery._get_query` overrides parent class `DelayedQuery` in an inconsistent manner", "severity": "error" }, { - "line": 637, + "line": 644, "column": 21, - "stop_line": 637, + "stop_line": 644, "stop_column": 26, "path": "src/documents/index.py", "code": -2, @@ -1153,9 +1105,9 @@ "severity": "error" }, { - "line": 638, + "line": 645, "column": 19, - "stop_line": 638, + "stop_line": 645, "stop_column": 22, "path": "src/documents/index.py", "code": -2, @@ -1184,7 +1136,7 @@ "path": "src/documents/management/commands/convert_mariadb_uuid.py", "code": -2, "name": "bad-override", - "description": "Class member `Command.handle` overrides parent class `BaseCommand` in an inconsistent manner\n `Command.handle` has type `BoundMethod[Command, (self: Command, **options: Unknown) -> None]`, which is not assignable to `BoundMethod[Command, (self: Command, *args: Any, **options: Any) -> str | None]`, the type of `BaseCommand.handle`", + "description": "Class member `Command.handle` overrides parent class `BaseCommand` in an inconsistent manner\n `Command.handle` has type `(self: Command, **options: Unknown) -> None`, which is not assignable to `(self: Command, *args: Any, **options: Any) -> str | None`, the type of `BaseCommand.handle`\n Signature mismatch:\n expected: def handle(self: Command, *args: Any, **options: Any) -> str | None: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ return type\n |\n parameters\n found: def handle(self: Command, **options: Unknown) -> None: ...\n ^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters", "concise_description": "Class member `Command.handle` overrides parent class `BaseCommand` in an inconsistent manner", "severity": "error" }, @@ -1225,9 +1177,9 @@ "severity": "error" }, { - "line": 104, + "line": 90, "column": 38, - "stop_line": 104, + "stop_line": 90, "stop_column": 70, "path": "src/documents/management/commands/document_fuzzy_match.py", "code": -2, @@ -1304,7 +1256,7 @@ "path": "src/documents/management/commands/loaddata_stdin.py", "code": -2, "name": "bad-override", - "description": "Class member `Command.parse_name` overrides parent class `Command` in an inconsistent manner\n `Command.parse_name` has type `BoundMethod[Command, (self: Command, fixture_name: Unknown) -> tuple[Literal['-'], Literal['json'], Literal['stdin']] | None]`, which is not assignable to `BoundMethod[Command, (self: Command, fixture_name: str) -> tuple[str, str | None, str | None]]`, the type of `Command.parse_name`", + "description": "Class member `Command.parse_name` overrides parent class `Command` in an inconsistent manner\n `Command.parse_name` has type `(self: Command, fixture_name: Unknown) -> tuple[Literal['-'], Literal['json'], Literal['stdin']] | None`, which is not assignable to `(self: Command, fixture_name: str) -> tuple[str, str | None, str | None]`, the type of `Command.parse_name`\n Signature mismatch:\n expected: def parse_name(self: Command, fixture_name: str) -> tuple[str, str | None, str | None]: ...\n ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters\n found: def parse_name(self: Command, fixture_name: Unknown) -> tuple[Literal['-'], Literal['json'], Literal['stdin']] | None: ...\n ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `Command.parse_name` overrides parent class `Command` in an inconsistent manner", "severity": "error" }, @@ -1328,26 +1280,14 @@ "path": "src/documents/management/commands/loaddata_stdin.py", "code": -2, "name": "bad-override", - "description": "Class member `Command.find_fixtures` overrides parent class `Command` in an inconsistent manner\n `Command.find_fixtures` has type `BoundMethod[Command, (self: Command, fixture_label: Unknown) -> list[tuple[str, str | None, str | None]] | list[tuple[str, None, str]]]`, which is not assignable to `BoundMethod[Command, (self: Command, fixture_label: str) -> list[tuple[str, str | None, str | None]]]`, the type of `Command.find_fixtures`", + "description": "Class member `Command.find_fixtures` overrides parent class `Command` in an inconsistent manner\n `Command.find_fixtures` has type `(self: Command, fixture_label: Unknown) -> list[tuple[str, str | None, str | None]] | list[tuple[str, None, str]]`, which is not assignable to `(self: Command, fixture_label: str) -> list[tuple[str, str | None, str | None]]`, the type of `Command.find_fixtures`\n Signature mismatch:\n ...d, fixture_label: str) -> list[tuple[str, str | None, str | None]]: ...\n ^^^ parameters ^ return type\n ...d, fixture_label: Unknown) -> list[tuple[str, str | None, str | None]] | list[tuple[str, None, str]]: ...\n ^^^^^^^ parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return type", "concise_description": "Class member `Command.find_fixtures` overrides parent class `Command` in an inconsistent manner", "severity": "error" }, { - "line": 33, - "column": 28, - "stop_line": 33, - "stop_column": 47, - "path": "src/documents/management/commands/mixins.py", - "code": -2, - "name": "unsupported-operation", - "description": "`//` is not supported between `None` and `Literal[4]`\n Argument `None` is not assignable to parameter `value` with type `int` in function `int.__rfloordiv__`", - "concise_description": "`//` is not supported between `None` and `Literal[4]`", - "severity": "error" - }, - { - "line": 94, + "line": 74, "column": 33, - "stop_line": 111, + "stop_line": 91, "stop_column": 6, "path": "src/documents/management/commands/mixins.py", "code": -2, @@ -1356,18 +1296,6 @@ "concise_description": "`list[dict[str, list[str] | str]]` is not assignable to `CryptFields`", "severity": "error" }, - { - "line": 19, - "column": 9, - "stop_line": 19, - "stop_column": 15, - "path": "src/documents/management/commands/prune_audit_logs.py", - "code": -2, - "name": "bad-override", - "description": "Class member `Command.handle` overrides parent class `BaseCommand` in an inconsistent manner\n `Command.handle` has type `BoundMethod[Command, (self: Command, **options: Unknown) -> None]`, which is not assignable to `BoundMethod[Command, (self: Command, *args: Any, **options: Any) -> str | None]`, the type of `BaseCommand.handle`", - "concise_description": "Class member `Command.handle` overrides parent class `BaseCommand` in an inconsistent manner", - "severity": "error" - }, { "line": 345, "column": 24, @@ -1489,9 +1417,9 @@ "severity": "error" }, { - "line": 372, + "line": 389, "column": 21, - "stop_line": 372, + "stop_line": 389, "stop_column": 38, "path": "src/documents/models.py", "code": -2, @@ -1501,21 +1429,21 @@ "severity": "error" }, { - "line": 872, + "line": 902, "column": 9, - "stop_line": 872, + "stop_line": 902, "stop_column": 15, "path": "src/documents/models.py", "code": -2, "name": "bad-override", - "description": "Class member `ShareLinkBundle.delete` overrides parent class `Model` in an inconsistent manner\n `ShareLinkBundle.delete` has type `BoundMethod[ShareLinkBundle, (self: ShareLinkBundle, using: Unknown | None = None, *, keep_parents: bool | Unknown = False) -> tuple[int, dict[str, int]]]`, which is not assignable to `BoundMethod[ShareLinkBundle, (self: ShareLinkBundle, using: Any | None = None, keep_parents: bool = False) -> tuple[int, dict[str, int]]]`, the type of `Model.delete`", + "description": "Class member `ShareLinkBundle.delete` overrides parent class `Model` in an inconsistent manner\n `ShareLinkBundle.delete` has type `(self: ShareLinkBundle, using: Unknown | None = None, *, keep_parents: bool | Unknown = False) -> tuple[int, dict[str, int]]`, which is not assignable to `(self: ShareLinkBundle, using: Any | None = None, keep_parents: bool = False) -> tuple[int, dict[str, int]]`, the type of `Model.delete`\n Signature mismatch:\n expected: def delete(self: ShareLinkBundle, using: Any | None = None, keep_parents: bool = False) -> tuple[int, dict[str, int]]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters\n found: def delete(self: ShareLinkBundle, using: Unknown | None = None, *, keep_parents: bool | Unknown = False) -> tuple[int, dict...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters", "concise_description": "Class member `ShareLinkBundle.delete` overrides parent class `Model` in an inconsistent manner", "severity": "error" }, { - "line": 1035, + "line": 1065, "column": 31, - "stop_line": 1035, + "stop_line": 1065, "stop_column": 70, "path": "src/documents/models.py", "code": -2, @@ -1525,9 +1453,9 @@ "severity": "error" }, { - "line": 1059, + "line": 1089, "column": 54, - "stop_line": 1059, + "stop_line": 1089, "stop_column": 74, "path": "src/documents/models.py", "code": -2, @@ -1537,9 +1465,9 @@ "severity": "error" }, { - "line": 1064, + "line": 1094, "column": 5, - "stop_line": 1064, + "stop_line": 1094, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1549,9 +1477,9 @@ "severity": "error" }, { - "line": 1069, + "line": 1099, "column": 5, - "stop_line": 1069, + "stop_line": 1099, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1561,9 +1489,9 @@ "severity": "error" }, { - "line": 1070, + "line": 1100, "column": 5, - "stop_line": 1070, + "stop_line": 1100, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1573,9 +1501,9 @@ "severity": "error" }, { - "line": 1071, + "line": 1101, "column": 5, - "stop_line": 1071, + "stop_line": 1101, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1585,9 +1513,9 @@ "severity": "error" }, { - "line": 1072, + "line": 1102, "column": 5, - "stop_line": 1072, + "stop_line": 1102, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1597,9 +1525,9 @@ "severity": "error" }, { - "line": 1073, + "line": 1103, "column": 5, - "stop_line": 1073, + "stop_line": 1103, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1609,9 +1537,9 @@ "severity": "error" }, { - "line": 1074, + "line": 1104, "column": 5, - "stop_line": 1074, + "stop_line": 1104, "stop_column": 13, "path": "src/documents/models.py", "code": -2, @@ -1693,9 +1621,9 @@ "severity": "error" }, { - "line": 202, + "line": 210, "column": 28, - "stop_line": 202, + "stop_line": 210, "stop_column": 31, "path": "src/documents/parsers.py", "code": -2, @@ -1705,9 +1633,9 @@ "severity": "error" }, { - "line": 94, + "line": 103, "column": 42, - "stop_line": 94, + "stop_line": 103, "stop_column": 64, "path": "src/documents/permissions.py", "code": -2, @@ -1717,9 +1645,9 @@ "severity": "error" }, { - "line": 95, + "line": 104, "column": 35, - "stop_line": 95, + "stop_line": 104, "stop_column": 58, "path": "src/documents/permissions.py", "code": -2, @@ -1729,9 +1657,9 @@ "severity": "error" }, { - "line": 96, + "line": 105, "column": 16, - "stop_line": 96, + "stop_line": 105, "stop_column": 38, "path": "src/documents/permissions.py", "code": -2, @@ -1741,9 +1669,9 @@ "severity": "error" }, { - "line": 181, + "line": 263, "column": 12, - "stop_line": 181, + "stop_line": 263, "stop_column": 64, "path": "src/documents/permissions.py", "code": -2, @@ -1772,8 +1700,8 @@ "path": "src/documents/plugins/helpers.py", "code": -2, "name": "bad-argument-type", - "description": "Argument `dict[str, str | dict[str, ProgressStatusOptions | int | str | None]]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", - "concise_description": "Argument `dict[str, str | dict[str, ProgressStatusOptions | int | str | None]]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", + "description": "Argument `dict[str, dict[str, ProgressStatusOptions | int | str | None] | str]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", + "concise_description": "Argument `dict[str, dict[str, ProgressStatusOptions | int | str | None] | str]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", "severity": "error" }, { @@ -1784,8 +1712,8 @@ "path": "src/documents/plugins/helpers.py", "code": -2, "name": "bad-argument-type", - "description": "Argument `dict[str, str | dict[str, list[int]]]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", - "concise_description": "Argument `dict[str, str | dict[str, list[int]]]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", + "description": "Argument `dict[str, dict[str, list[int]] | str]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", + "concise_description": "Argument `dict[str, dict[str, list[int]] | str]` is not assignable to parameter `payload` with type `dict[str, int | str | None]` in function `BaseStatusManager.send`", "severity": "error" }, { @@ -1801,9 +1729,9 @@ "severity": "error" }, { - "line": 127, + "line": 132, "column": 9, - "stop_line": 127, + "stop_line": 132, "stop_column": 17, "path": "src/documents/serialisers.py", "code": -2, @@ -1813,9 +1741,9 @@ "severity": "error" }, { - "line": 201, + "line": 206, "column": 62, - "stop_line": 203, + "stop_line": 208, "stop_column": 26, "path": "src/documents/serialisers.py", "code": -2, @@ -1825,9 +1753,9 @@ "severity": "error" }, { - "line": 290, + "line": 295, "column": 17, - "stop_line": 294, + "stop_line": 299, "stop_column": 30, "path": "src/documents/serialisers.py", "code": -2, @@ -1837,9 +1765,9 @@ "severity": "error" }, { - "line": 356, + "line": 361, "column": 21, - "stop_line": 356, + "stop_line": 361, "stop_column": 37, "path": "src/documents/serialisers.py", "code": -2, @@ -1849,9 +1777,9 @@ "severity": "error" }, { - "line": 468, + "line": 473, "column": 9, - "stop_line": 468, + "stop_line": 473, "stop_column": 26, "path": "src/documents/serialisers.py", "code": -2, @@ -1861,9 +1789,9 @@ "severity": "error" }, { - "line": 469, + "line": 474, "column": 9, - "stop_line": 469, + "stop_line": 474, "stop_column": 27, "path": "src/documents/serialisers.py", "code": -2, @@ -1873,9 +1801,9 @@ "severity": "error" }, { - "line": 469, + "line": 474, "column": 51, - "stop_line": 469, + "stop_line": 474, "stop_column": 83, "path": "src/documents/serialisers.py", "code": -2, @@ -1885,9 +1813,9 @@ "severity": "error" }, { - "line": 478, + "line": 483, "column": 11, - "stop_line": 478, + "stop_line": 483, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1897,9 +1825,9 @@ "severity": "error" }, { - "line": 478, + "line": 483, "column": 11, - "stop_line": 478, + "stop_line": 483, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1909,9 +1837,9 @@ "severity": "error" }, { - "line": 497, + "line": 502, "column": 11, - "stop_line": 497, + "stop_line": 502, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1921,9 +1849,9 @@ "severity": "error" }, { - "line": 497, + "line": 502, "column": 11, - "stop_line": 497, + "stop_line": 502, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1933,33 +1861,9 @@ "severity": "error" }, { - "line": 554, - "column": 11, - "stop_line": 554, - "stop_column": 15, - "path": "src/documents/serialisers.py", - "code": -2, - "name": "bad-override", - "description": "Class member `TagSerializerVersion1.Meta` overrides parent class `MatchingModelSerializer` in an inconsistent manner\n `TagSerializerVersion1.Meta` has type `type[TagSerializerVersion1.Meta]`, which is not assignable to `type[ModelSerializer.Meta]`, the type of `MatchingModelSerializer.Meta`", - "concise_description": "Class member `TagSerializerVersion1.Meta` overrides parent class `MatchingModelSerializer` in an inconsistent manner", - "severity": "error" - }, - { - "line": 554, - "column": 11, - "stop_line": 554, - "stop_column": 15, - "path": "src/documents/serialisers.py", - "code": -2, - "name": "bad-override", - "description": "Class member `TagSerializerVersion1.Meta` overrides parent class `OwnedObjectSerializer` in an inconsistent manner\n `TagSerializerVersion1.Meta` has type `type[TagSerializerVersion1.Meta]`, which is not assignable to `type[ModelSerializer.Meta]`, the type of `OwnedObjectSerializer.Meta`", - "concise_description": "Class member `TagSerializerVersion1.Meta` overrides parent class `OwnedObjectSerializer` in an inconsistent manner", - "severity": "error" - }, - { - "line": 590, + "line": 573, "column": 14, - "stop_line": 595, + "stop_line": 578, "stop_column": 6, "path": "src/documents/serialisers.py", "code": -2, @@ -1969,9 +1873,9 @@ "severity": "error" }, { - "line": 644, + "line": 627, "column": 11, - "stop_line": 644, + "stop_line": 627, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1981,9 +1885,9 @@ "severity": "error" }, { - "line": 644, + "line": 627, "column": 11, - "stop_line": 644, + "stop_line": 627, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -1993,9 +1897,9 @@ "severity": "error" }, { - "line": 671, + "line": 654, "column": 9, - "stop_line": 671, + "stop_line": 654, "stop_column": 17, "path": "src/documents/serialisers.py", "code": -2, @@ -2005,9 +1909,9 @@ "severity": "error" }, { - "line": 733, + "line": 716, "column": 17, - "stop_line": 733, + "stop_line": 716, "stop_column": 42, "path": "src/documents/serialisers.py", "code": -2, @@ -2017,9 +1921,9 @@ "severity": "error" }, { - "line": 739, + "line": 722, "column": 11, - "stop_line": 739, + "stop_line": 722, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2029,9 +1933,9 @@ "severity": "error" }, { - "line": 850, + "line": 833, "column": 28, - "stop_line": 850, + "stop_line": 833, "stop_column": 39, "path": "src/documents/serialisers.py", "code": -2, @@ -2041,9 +1945,9 @@ "severity": "error" }, { - "line": 869, + "line": 852, "column": 13, - "stop_line": 869, + "stop_line": 852, "stop_column": 35, "path": "src/documents/serialisers.py", "code": -2, @@ -2053,9 +1957,9 @@ "severity": "error" }, { - "line": 885, + "line": 868, "column": 9, - "stop_line": 885, + "stop_line": 868, "stop_column": 18, "path": "src/documents/serialisers.py", "code": -2, @@ -2065,9 +1969,9 @@ "severity": "error" }, { - "line": 888, + "line": 871, "column": 9, - "stop_line": 888, + "stop_line": 871, "stop_column": 17, "path": "src/documents/serialisers.py", "code": -2, @@ -2077,9 +1981,9 @@ "severity": "error" }, { - "line": 931, + "line": 914, "column": 34, - "stop_line": 931, + "stop_line": 914, "stop_column": 68, "path": "src/documents/serialisers.py", "code": -2, @@ -2089,9 +1993,9 @@ "severity": "error" }, { - "line": 949, + "line": 932, "column": 21, - "stop_line": 949, + "stop_line": 932, "stop_column": 34, "path": "src/documents/serialisers.py", "code": -2, @@ -2101,9 +2005,9 @@ "severity": "error" }, { - "line": 1001, + "line": 984, "column": 11, - "stop_line": 1001, + "stop_line": 984, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2113,9 +2017,9 @@ "severity": "error" }, { - "line": 1011, + "line": 994, "column": 11, - "stop_line": 1011, + "stop_line": 994, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2125,9 +2029,9 @@ "severity": "error" }, { - "line": 1019, + "line": 1002, "column": 11, - "stop_line": 1019, + "stop_line": 1002, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2137,9 +2041,9 @@ "severity": "error" }, { - "line": 1130, + "line": 1174, "column": 30, - "stop_line": 1130, + "stop_line": 1174, "stop_column": 55, "path": "src/documents/serialisers.py", "code": -2, @@ -2149,9 +2053,9 @@ "severity": "error" }, { - "line": 1190, + "line": 1234, "column": 12, - "stop_line": 1190, + "stop_line": 1234, "stop_column": 34, "path": "src/documents/serialisers.py", "code": -2, @@ -2161,9 +2065,9 @@ "severity": "error" }, { - "line": 1194, + "line": 1238, "column": 42, - "stop_line": 1194, + "stop_line": 1238, "stop_column": 64, "path": "src/documents/serialisers.py", "code": -2, @@ -2173,9 +2077,9 @@ "severity": "error" }, { - "line": 1224, + "line": 1268, "column": 35, - "stop_line": 1224, + "stop_line": 1268, "stop_column": 50, "path": "src/documents/serialisers.py", "code": -2, @@ -2185,9 +2089,9 @@ "severity": "error" }, { - "line": 1277, + "line": 1321, "column": 11, - "stop_line": 1277, + "stop_line": 1321, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2197,9 +2101,9 @@ "severity": "error" }, { - "line": 1277, + "line": 1321, "column": 11, - "stop_line": 1277, + "stop_line": 1321, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2209,9 +2113,9 @@ "severity": "error" }, { - "line": 1277, + "line": 1321, "column": 11, - "stop_line": 1277, + "stop_line": 1321, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2221,9 +2125,9 @@ "severity": "error" }, { - "line": 1311, + "line": 1357, "column": 9, - "stop_line": 1311, + "stop_line": 1357, "stop_column": 26, "path": "src/documents/serialisers.py", "code": -2, @@ -2233,9 +2137,9 @@ "severity": "error" }, { - "line": 1314, + "line": 1360, "column": 21, - "stop_line": 1314, + "stop_line": 1360, "stop_column": 47, "path": "src/documents/serialisers.py", "code": -2, @@ -2245,9 +2149,9 @@ "severity": "error" }, { - "line": 1315, + "line": 1361, "column": 9, - "stop_line": 1315, + "stop_line": 1361, "stop_column": 27, "path": "src/documents/serialisers.py", "code": -2, @@ -2257,9 +2161,9 @@ "severity": "error" }, { - "line": 1317, + "line": 1363, "column": 9, - "stop_line": 1317, + "stop_line": 1363, "stop_column": 27, "path": "src/documents/serialisers.py", "code": -2, @@ -2269,9 +2173,9 @@ "severity": "error" }, { - "line": 1317, + "line": 1363, "column": 51, - "stop_line": 1317, + "stop_line": 1363, "stop_column": 83, "path": "src/documents/serialisers.py", "code": -2, @@ -2281,9 +2185,9 @@ "severity": "error" }, { - "line": 1342, + "line": 1388, "column": 9, - "stop_line": 1342, + "stop_line": 1388, "stop_column": 26, "path": "src/documents/serialisers.py", "code": -2, @@ -2293,9 +2197,9 @@ "severity": "error" }, { - "line": 1353, + "line": 1399, "column": 35, - "stop_line": 1353, + "stop_line": 1399, "stop_column": 49, "path": "src/documents/serialisers.py", "code": -2, @@ -2305,9 +2209,9 @@ "severity": "error" }, { - "line": 1368, + "line": 1414, "column": 9, - "stop_line": 1368, + "stop_line": 1414, "stop_column": 30, "path": "src/documents/serialisers.py", "code": -2, @@ -2317,9 +2221,9 @@ "severity": "error" }, { - "line": 1372, + "line": 1418, "column": 11, - "stop_line": 1372, + "stop_line": 1418, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2329,9 +2233,9 @@ "severity": "error" }, { - "line": 1380, + "line": 1426, "column": 11, - "stop_line": 1380, + "stop_line": 1426, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2341,9 +2245,9 @@ "severity": "error" }, { - "line": 1403, + "line": 1449, "column": 21, - "stop_line": 1403, + "stop_line": 1449, "stop_column": 62, "path": "src/documents/serialisers.py", "code": -2, @@ -2353,9 +2257,9 @@ "severity": "error" }, { - "line": 1405, + "line": 1451, "column": 36, - "stop_line": 1405, + "stop_line": 1451, "stop_column": 63, "path": "src/documents/serialisers.py", "code": -2, @@ -2365,9 +2269,9 @@ "severity": "error" }, { - "line": 2059, + "line": 2137, "column": 73, - "stop_line": 2059, + "stop_line": 2137, "stop_column": 80, "path": "src/documents/serialisers.py", "code": -2, @@ -2377,9 +2281,9 @@ "severity": "error" }, { - "line": 2072, + "line": 2150, "column": 11, - "stop_line": 2072, + "stop_line": 2150, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2389,9 +2293,9 @@ "severity": "error" }, { - "line": 2072, + "line": 2150, "column": 11, - "stop_line": 2072, + "stop_line": 2150, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2401,9 +2305,9 @@ "severity": "error" }, { - "line": 2117, + "line": 2195, "column": 11, - "stop_line": 2117, + "stop_line": 2195, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2413,9 +2317,9 @@ "severity": "error" }, { - "line": 2143, + "line": 2221, "column": 11, - "stop_line": 2143, + "stop_line": 2221, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2425,9 +2329,9 @@ "severity": "error" }, { - "line": 2181, + "line": 2259, "column": 30, - "stop_line": 2181, + "stop_line": 2259, "stop_column": 57, "path": "src/documents/serialisers.py", "code": -2, @@ -2437,9 +2341,9 @@ "severity": "error" }, { - "line": 2232, + "line": 2310, "column": 11, - "stop_line": 2232, + "stop_line": 2310, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2449,9 +2353,9 @@ "severity": "error" }, { - "line": 2266, + "line": 2355, "column": 11, - "stop_line": 2266, + "stop_line": 2355, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2461,9 +2365,9 @@ "severity": "error" }, { - "line": 2413, + "line": 2502, "column": 17, - "stop_line": 2413, + "stop_line": 2502, "stop_column": 37, "path": "src/documents/serialisers.py", "code": -2, @@ -2473,9 +2377,9 @@ "severity": "error" }, { - "line": 2457, + "line": 2546, "column": 11, - "stop_line": 2457, + "stop_line": 2546, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2485,9 +2389,9 @@ "severity": "error" }, { - "line": 2553, + "line": 2642, "column": 11, - "stop_line": 2553, + "stop_line": 2642, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2497,9 +2401,9 @@ "severity": "error" }, { - "line": 2571, + "line": 2660, "column": 11, - "stop_line": 2571, + "stop_line": 2660, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2509,9 +2413,9 @@ "severity": "error" }, { - "line": 2594, + "line": 2683, "column": 11, - "stop_line": 2594, + "stop_line": 2683, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2521,9 +2425,9 @@ "severity": "error" }, { - "line": 2713, + "line": 2802, "column": 11, - "stop_line": 2713, + "stop_line": 2802, "stop_column": 15, "path": "src/documents/serialisers.py", "code": -2, @@ -2533,9 +2437,9 @@ "severity": "error" }, { - "line": 2895, + "line": 2984, "column": 16, - "stop_line": 2895, + "stop_line": 2984, "stop_column": 33, "path": "src/documents/serialisers.py", "code": -2, @@ -2545,9 +2449,9 @@ "severity": "error" }, { - "line": 2899, + "line": 2988, "column": 16, - "stop_line": 2899, + "stop_line": 2988, "stop_column": 32, "path": "src/documents/serialisers.py", "code": -2, @@ -2557,9 +2461,9 @@ "severity": "error" }, { - "line": 2914, + "line": 3003, "column": 52, - "stop_line": 2914, + "stop_line": 3003, "stop_column": 60, "path": "src/documents/serialisers.py", "code": -2, @@ -2569,9 +2473,9 @@ "severity": "error" }, { - "line": 2914, + "line": 3003, "column": 62, - "stop_line": 2914, + "stop_line": 3003, "stop_column": 69, "path": "src/documents/serialisers.py", "code": -2, @@ -2593,22 +2497,10 @@ "severity": "error" }, { - "line": 144, - "column": 17, - "stop_line": 144, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "severity": "error" - }, - { - "line": 174, - "column": 71, - "stop_line": 174, - "stop_column": 81, + "line": 179, + "column": 72, + "stop_line": 179, + "stop_column": 82, "path": "src/documents/signals/handlers.py", "code": -2, "name": "bad-argument-type", @@ -2617,21 +2509,9 @@ "severity": "error" }, { - "line": 201, - "column": 17, - "stop_line": 201, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "severity": "error" - }, - { - "line": 236, + "line": 261, "column": 50, - "stop_line": 236, + "stop_line": 261, "stop_column": 60, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2641,94 +2521,10 @@ "severity": "error" }, { - "line": 247, - "column": 19, - "stop_line": 247, - "stop_column": 37, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `SUCCESS`", - "concise_description": "Object of class `NoneType` has no attribute `SUCCESS`", - "severity": "error" - }, - { - "line": 249, - "column": 13, - "stop_line": 249, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `write`", - "concise_description": "Object of class `NoneType` has no attribute `write`", - "severity": "error" - }, - { - "line": 250, - "column": 13, - "stop_line": 250, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `write`", - "concise_description": "Object of class `NoneType` has no attribute `write`", - "severity": "error" - }, - { - "line": 252, - "column": 13, - "stop_line": 252, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `write`", - "concise_description": "Object of class `NoneType` has no attribute `write`", - "severity": "error" - }, - { - "line": 252, - "column": 36, - "stop_line": 252, - "stop_column": 54, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `SUCCESS`", - "concise_description": "Object of class `NoneType` has no attribute `SUCCESS`", - "severity": "error" - }, - { - "line": 254, - "column": 13, - "stop_line": 254, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `write`", - "concise_description": "Object of class `NoneType` has no attribute `write`", - "severity": "error" - }, - { - "line": 256, - "column": 13, - "stop_line": 256, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `write`", - "concise_description": "Object of class `NoneType` has no attribute `write`", - "severity": "error" - }, - { - "line": 289, - "column": 9, - "stop_line": 289, - "stop_column": 19, + "line": 305, + "column": 70, + "stop_line": 305, + "stop_column": 80, "path": "src/documents/signals/handlers.py", "code": -2, "name": "bad-argument-type", @@ -2737,21 +2533,9 @@ "severity": "error" }, { - "line": 317, - "column": 17, - "stop_line": 317, - "stop_column": 25, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `selected` with type `MatchingModel` in function `_suggestion_printer`", - "severity": "error" - }, - { - "line": 365, + "line": 370, "column": 16, - "stop_line": 365, + "stop_line": 370, "stop_column": 24, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2761,9 +2545,9 @@ "severity": "error" }, { - "line": 384, + "line": 389, "column": 18, - "stop_line": 384, + "stop_line": 389, "stop_column": 26, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2773,9 +2557,9 @@ "severity": "error" }, { - "line": 390, + "line": 395, "column": 22, - "stop_line": 390, + "stop_line": 395, "stop_column": 30, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2785,9 +2569,9 @@ "severity": "error" }, { - "line": 495, + "line": 500, "column": 46, - "stop_line": 495, + "stop_line": 500, "stop_column": 66, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2797,9 +2581,9 @@ "severity": "error" }, { - "line": 496, + "line": 501, "column": 49, - "stop_line": 496, + "stop_line": 501, "stop_column": 69, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2809,9 +2593,9 @@ "severity": "error" }, { - "line": 534, + "line": 539, "column": 21, - "stop_line": 534, + "stop_line": 539, "stop_column": 37, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2821,9 +2605,9 @@ "severity": "error" }, { - "line": 535, + "line": 540, "column": 21, - "stop_line": 535, + "stop_line": 540, "stop_column": 42, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2833,9 +2617,9 @@ "severity": "error" }, { - "line": 538, + "line": 543, "column": 46, - "stop_line": 538, + "stop_line": 543, "stop_column": 67, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2845,9 +2629,9 @@ "severity": "error" }, { - "line": 539, + "line": 544, "column": 28, - "stop_line": 539, + "stop_line": 544, "stop_column": 69, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2857,9 +2641,9 @@ "severity": "error" }, { - "line": 539, + "line": 544, "column": 29, - "stop_line": 539, + "stop_line": 544, "stop_column": 45, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2869,9 +2653,9 @@ "severity": "error" }, { - "line": 559, + "line": 564, "column": 20, - "stop_line": 559, + "stop_line": 564, "stop_column": 33, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2881,9 +2665,9 @@ "severity": "error" }, { - "line": 561, + "line": 566, "column": 55, - "stop_line": 561, + "stop_line": 566, "stop_column": 70, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2893,9 +2677,9 @@ "severity": "error" }, { - "line": 563, + "line": 568, "column": 20, - "stop_line": 563, + "stop_line": 568, "stop_column": 32, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2905,9 +2689,9 @@ "severity": "error" }, { - "line": 563, + "line": 568, "column": 37, - "stop_line": 563, + "stop_line": 568, "stop_column": 66, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2917,9 +2701,9 @@ "severity": "error" }, { - "line": 565, + "line": 570, "column": 32, - "stop_line": 565, + "stop_line": 570, "stop_column": 73, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2929,9 +2713,9 @@ "severity": "error" }, { - "line": 565, + "line": 570, "column": 33, - "stop_line": 565, + "stop_line": 570, "stop_column": 54, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2941,9 +2725,9 @@ "severity": "error" }, { - "line": 565, + "line": 570, "column": 56, - "stop_line": 565, + "stop_line": 570, "stop_column": 72, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2953,9 +2737,9 @@ "severity": "error" }, { - "line": 579, + "line": 584, "column": 33, - "stop_line": 579, + "stop_line": 584, "stop_column": 45, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2965,9 +2749,9 @@ "severity": "error" }, { - "line": 580, + "line": 585, "column": 41, - "stop_line": 580, + "stop_line": 585, "stop_column": 61, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2977,9 +2761,9 @@ "severity": "error" }, { - "line": 590, + "line": 595, "column": 49, - "stop_line": 590, + "stop_line": 595, "stop_column": 73, "path": "src/documents/signals/handlers.py", "code": -2, @@ -2989,9 +2773,9 @@ "severity": "error" }, { - "line": 592, + "line": 597, "column": 22, - "stop_line": 592, + "stop_line": 597, "stop_column": 38, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3001,9 +2785,9 @@ "severity": "error" }, { - "line": 609, + "line": 614, "column": 23, - "stop_line": 609, + "stop_line": 614, "stop_column": 50, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3013,9 +2797,9 @@ "severity": "error" }, { - "line": 613, + "line": 618, "column": 5, - "stop_line": 613, + "stop_line": 618, "stop_column": 24, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3025,9 +2809,9 @@ "severity": "error" }, { - "line": 617, + "line": 622, "column": 24, - "stop_line": 617, + "stop_line": 622, "stop_column": 43, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3037,9 +2821,9 @@ "severity": "error" }, { - "line": 634, + "line": 639, "column": 13, - "stop_line": 634, + "stop_line": 639, "stop_column": 28, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3049,9 +2833,9 @@ "severity": "error" }, { - "line": 648, + "line": 653, "column": 12, - "stop_line": 648, + "stop_line": 653, "stop_column": 51, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3061,9 +2845,9 @@ "severity": "error" }, { - "line": 652, + "line": 657, "column": 13, - "stop_line": 652, + "stop_line": 657, "stop_column": 39, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3073,9 +2857,9 @@ "severity": "error" }, { - "line": 691, + "line": 696, "column": 27, - "stop_line": 691, + "stop_line": 696, "stop_column": 51, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3085,9 +2869,9 @@ "severity": "error" }, { - "line": 711, + "line": 716, "column": 17, - "stop_line": 711, + "stop_line": 716, "stop_column": 52, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3097,9 +2881,9 @@ "severity": "error" }, { - "line": 778, + "line": 797, "column": 13, - "stop_line": 778, + "stop_line": 797, "stop_column": 33, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3109,9 +2893,9 @@ "severity": "error" }, { - "line": 778, + "line": 797, "column": 60, - "stop_line": 778, + "stop_line": 797, "stop_column": 82, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3121,33 +2905,9 @@ "severity": "error" }, { - "line": 789, - "column": 13, - "stop_line": 789, - "stop_column": 37, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `ConsumableDocument` has no attribute `refresh_from_db`", - "concise_description": "Object of class `ConsumableDocument` has no attribute `refresh_from_db`", - "severity": "error" - }, - { - "line": 790, - "column": 32, - "stop_line": 790, - "stop_column": 45, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `ConsumableDocument` has no attribute `tags`", - "concise_description": "Object of class `ConsumableDocument` has no attribute `tags`", - "severity": "error" - }, - { - "line": 807, + "line": 845, "column": 29, - "stop_line": 807, + "stop_line": 845, "stop_column": 37, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3157,9 +2917,9 @@ "severity": "error" }, { - "line": 808, + "line": 846, "column": 29, - "stop_line": 808, + "stop_line": 846, "stop_column": 40, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3169,9 +2929,9 @@ "severity": "error" }, { - "line": 815, + "line": 853, "column": 59, - "stop_line": 815, + "stop_line": 853, "stop_column": 67, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3181,9 +2941,9 @@ "severity": "error" }, { - "line": 815, + "line": 853, "column": 69, - "stop_line": 815, + "stop_line": 853, "stop_column": 80, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3193,9 +2953,9 @@ "severity": "error" }, { - "line": 840, + "line": 880, "column": 17, - "stop_line": 840, + "stop_line": 880, "stop_column": 31, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3205,9 +2965,9 @@ "severity": "error" }, { - "line": 840, + "line": 880, "column": 34, - "stop_line": 840, + "stop_line": 880, "stop_column": 48, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3217,9 +2977,9 @@ "severity": "error" }, { - "line": 842, + "line": 882, "column": 17, - "stop_line": 842, + "stop_line": 882, "stop_column": 30, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3229,9 +2989,9 @@ "severity": "error" }, { - "line": 843, + "line": 883, "column": 17, - "stop_line": 843, + "stop_line": 883, "stop_column": 30, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3241,9 +3001,9 @@ "severity": "error" }, { - "line": 843, + "line": 883, "column": 35, - "stop_line": 843, + "stop_line": 883, "stop_column": 46, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3253,9 +3013,9 @@ "severity": "error" }, { - "line": 866, + "line": 911, "column": 8, - "stop_line": 866, + "stop_line": 911, "stop_column": 29, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3265,9 +3025,9 @@ "severity": "error" }, { - "line": 866, + "line": 911, "column": 33, - "stop_line": 866, + "stop_line": 911, "stop_column": 48, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3277,9 +3037,9 @@ "severity": "error" }, { - "line": 873, + "line": 918, "column": 21, - "stop_line": 873, + "stop_line": 918, "stop_column": 28, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3289,9 +3049,9 @@ "severity": "error" }, { - "line": 881, + "line": 926, "column": 21, - "stop_line": 881, + "stop_line": 926, "stop_column": 34, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3301,21 +3061,9 @@ "severity": "error" }, { - "line": 939, - "column": 36, - "stop_line": 939, - "stop_column": 41, - "path": "src/documents/signals/handlers.py", - "code": -2, - "name": "bad-assignment", - "description": "`Unknown | None` is not assignable to attribute `status` with type `str`", - "concise_description": "`Unknown | None` is not assignable to attribute `status` with type `str`", - "severity": "error" - }, - { - "line": 988, + "line": 1033, "column": 13, - "stop_line": 988, + "stop_line": 1033, "stop_column": 28, "path": "src/documents/signals/handlers.py", "code": -2, @@ -3325,9 +3073,9 @@ "severity": "error" }, { - "line": 185, + "line": 202, "column": 17, - "stop_line": 185, + "stop_line": 202, "stop_column": 32, "path": "src/documents/tasks.py", "code": -2, @@ -3337,9 +3085,9 @@ "severity": "error" }, { - "line": 217, + "line": 234, "column": 12, - "stop_line": 217, + "stop_line": 234, "stop_column": 15, "path": "src/documents/tasks.py", "code": -2, @@ -3349,9 +3097,9 @@ "severity": "error" }, { - "line": 276, + "line": 302, "column": 42, - "stop_line": 276, + "stop_line": 302, "stop_column": 83, "path": "src/documents/tasks.py", "code": -2, @@ -3361,9 +3109,9 @@ "severity": "error" }, { - "line": 299, + "line": 325, "column": 27, - "stop_line": 299, + "stop_line": 325, "stop_column": 52, "path": "src/documents/tasks.py", "code": -2, @@ -3373,9 +3121,9 @@ "severity": "error" }, { - "line": 316, + "line": 342, "column": 21, - "stop_line": 316, + "stop_line": 342, "stop_column": 48, "path": "src/documents/tasks.py", "code": -2, @@ -3385,9 +3133,9 @@ "severity": "error" }, { - "line": 340, + "line": 366, "column": 21, - "stop_line": 340, + "stop_line": 366, "stop_column": 48, "path": "src/documents/tasks.py", "code": -2, @@ -3397,9 +3145,9 @@ "severity": "error" }, { - "line": 353, + "line": 379, "column": 50, - "stop_line": 353, + "stop_line": 379, "stop_column": 71, "path": "src/documents/tasks.py", "code": -2, @@ -3409,9 +3157,9 @@ "severity": "error" }, { - "line": 354, + "line": 380, "column": 32, - "stop_line": 354, + "stop_line": 380, "stop_column": 82, "path": "src/documents/tasks.py", "code": -2, @@ -3421,9 +3169,9 @@ "severity": "error" }, { - "line": 354, + "line": 380, "column": 33, - "stop_line": 354, + "stop_line": 380, "stop_column": 58, "path": "src/documents/tasks.py", "code": -2, @@ -3433,9 +3181,9 @@ "severity": "error" }, { - "line": 520, + "line": 558, "column": 33, - "stop_line": 520, + "stop_line": 558, "stop_column": 61, "path": "src/documents/tasks.py", "code": -2, @@ -3481,9 +3229,9 @@ "severity": "error" }, { - "line": 239, + "line": 285, "column": 17, - "stop_line": 239, + "stop_line": 285, "stop_column": 66, "path": "src/documents/templating/filepath.py", "code": -2, @@ -3493,21 +3241,9 @@ "severity": "error" }, { - "line": 241, - "column": 23, - "stop_line": 241, - "stop_column": 72, - "path": "src/documents/templating/filepath.py", - "code": -2, - "name": "unsupported-operation", - "description": "`None` is not subscriptable", - "concise_description": "`None` is not subscriptable", - "severity": "error" - }, - { - "line": 261, + "line": 307, "column": 12, - "stop_line": 261, + "stop_line": 307, "stop_column": 22, "path": "src/documents/templating/filepath.py", "code": -2, @@ -3589,9 +3325,9 @@ "severity": "error" }, { - "line": 28, + "line": 114, "column": 12, - "stop_line": 28, + "stop_line": 114, "stop_column": 41, "path": "src/documents/tests/conftest.py", "code": -2, @@ -3601,9 +3337,9 @@ "severity": "error" }, { - "line": 9, + "line": 19, "column": 11, - "stop_line": 9, + "stop_line": 19, "stop_column": 15, "path": "src/documents/tests/factories.py", "code": -2, @@ -3613,9 +3349,45 @@ "severity": "error" }, { - "line": 16, + "line": 28, "column": 11, - "stop_line": 16, + "stop_line": 28, + "stop_column": 15, + "path": "src/documents/tests/factories.py", + "code": -2, + "name": "bad-override", + "description": "Class member `DocumentTypeFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner\n `DocumentTypeFactory.Meta` has type `type[DocumentTypeFactory.Meta]`, which is not assignable to `type[DjangoModelFactory.Meta]`, the type of `DjangoModelFactory.Meta`", + "concise_description": "Class member `DocumentTypeFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner", + "severity": "error" + }, + { + "line": 37, + "column": 11, + "stop_line": 37, + "stop_column": 15, + "path": "src/documents/tests/factories.py", + "code": -2, + "name": "bad-override", + "description": "Class member `TagFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner\n `TagFactory.Meta` has type `type[TagFactory.Meta]`, which is not assignable to `type[DjangoModelFactory.Meta]`, the type of `DjangoModelFactory.Meta`", + "concise_description": "Class member `TagFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner", + "severity": "error" + }, + { + "line": 47, + "column": 11, + "stop_line": 47, + "stop_column": 15, + "path": "src/documents/tests/factories.py", + "code": -2, + "name": "bad-override", + "description": "Class member `StoragePathFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner\n `StoragePathFactory.Meta` has type `type[StoragePathFactory.Meta]`, which is not assignable to `type[DjangoModelFactory.Meta]`, the type of `DjangoModelFactory.Meta`", + "concise_description": "Class member `StoragePathFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner", + "severity": "error" + }, + { + "line": 59, + "column": 11, + "stop_line": 59, "stop_column": 15, "path": "src/documents/tests/factories.py", "code": -2, @@ -3624,6 +3396,174 @@ "concise_description": "Class member `DocumentFactory.Meta` overrides parent class `DjangoModelFactory` in an inconsistent manner", "severity": "error" }, + { + "line": 97, + "column": 22, + "stop_line": 97, + "stop_column": 35, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 98, + "column": 22, + "stop_line": 98, + "stop_column": 35, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 109, + "column": 22, + "stop_line": 109, + "stop_column": 35, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 110, + "column": 22, + "stop_line": 110, + "stop_column": 35, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 236, + "column": 26, + "stop_line": 236, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 237, + "column": 26, + "stop_line": 237, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 246, + "column": 26, + "stop_line": 246, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 247, + "column": 26, + "stop_line": 247, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 267, + "column": 26, + "stop_line": 267, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 268, + "column": 26, + "stop_line": 268, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 288, + "column": 26, + "stop_line": 288, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 289, + "column": 26, + "stop_line": 289, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 298, + "column": 26, + "stop_line": 298, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stdout` with type `OutputWrapper`", + "severity": "error" + }, + { + "line": 299, + "column": 26, + "stop_line": 299, + "stop_column": 39, + "path": "src/documents/tests/management/test_management_base_cmd.py", + "code": -2, + "name": "bad-assignment", + "description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "concise_description": "`StringIO` is not assignable to attribute `stderr` with type `OutputWrapper`", + "severity": "error" + }, { "line": 36, "column": 26, @@ -4285,9 +4225,21 @@ "severity": "error" }, { - "line": 1192, + "line": 463, + "column": 19, + "stop_line": 463, + "stop_column": 35, + "path": "src/documents/tests/test_api_documents.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", + "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", + "severity": "error" + }, + { + "line": 1256, "column": 47, - "stop_line": 1192, + "stop_line": 1256, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4297,9 +4249,9 @@ "severity": "error" }, { - "line": 1235, + "line": 1331, "column": 47, - "stop_line": 1235, + "stop_line": 1331, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4309,9 +4261,9 @@ "severity": "error" }, { - "line": 1266, + "line": 1362, "column": 47, - "stop_line": 1266, + "stop_line": 1362, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4321,9 +4273,9 @@ "severity": "error" }, { - "line": 1279, + "line": 1375, "column": 47, - "stop_line": 1279, + "stop_line": 1375, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4333,9 +4285,9 @@ "severity": "error" }, { - "line": 1292, + "line": 1388, "column": 47, - "stop_line": 1292, + "stop_line": 1388, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4345,9 +4297,9 @@ "severity": "error" }, { - "line": 1313, + "line": 1409, "column": 47, - "stop_line": 1313, + "stop_line": 1409, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4357,9 +4309,9 @@ "severity": "error" }, { - "line": 1335, + "line": 1431, "column": 47, - "stop_line": 1335, + "stop_line": 1431, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4369,9 +4321,9 @@ "severity": "error" }, { - "line": 1349, + "line": 1445, "column": 47, - "stop_line": 1349, + "stop_line": 1445, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4381,9 +4333,9 @@ "severity": "error" }, { - "line": 1371, + "line": 1467, "column": 47, - "stop_line": 1371, + "stop_line": 1467, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4393,9 +4345,9 @@ "severity": "error" }, { - "line": 1385, + "line": 1481, "column": 47, - "stop_line": 1385, + "stop_line": 1481, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4405,9 +4357,9 @@ "severity": "error" }, { - "line": 1407, + "line": 1503, "column": 47, - "stop_line": 1407, + "stop_line": 1503, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4417,9 +4369,9 @@ "severity": "error" }, { - "line": 1421, + "line": 1517, "column": 47, - "stop_line": 1421, + "stop_line": 1517, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4429,9 +4381,9 @@ "severity": "error" }, { - "line": 1438, + "line": 1534, "column": 31, - "stop_line": 1438, + "stop_line": 1534, "stop_column": 48, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4441,9 +4393,9 @@ "severity": "error" }, { - "line": 1444, + "line": 1540, "column": 47, - "stop_line": 1444, + "stop_line": 1540, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4453,9 +4405,9 @@ "severity": "error" }, { - "line": 1460, + "line": 1556, "column": 47, - "stop_line": 1460, + "stop_line": 1556, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4465,9 +4417,9 @@ "severity": "error" }, { - "line": 1488, + "line": 1584, "column": 47, - "stop_line": 1488, + "stop_line": 1584, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4476,42 +4428,6 @@ "concise_description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", "severity": "error" }, - { - "line": 1512, - "column": 47, - "stop_line": 1512, - "stop_column": 60, - "path": "src/documents/tests/test_api_documents.py", - "code": -2, - "name": "implicit-import", - "description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", - "concise_description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", - "severity": "error" - }, - { - "line": 1546, - "column": 47, - "stop_line": 1546, - "stop_column": 60, - "path": "src/documents/tests/test_api_documents.py", - "code": -2, - "name": "implicit-import", - "description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", - "concise_description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", - "severity": "error" - }, - { - "line": 1593, - "column": 9, - "stop_line": 1593, - "stop_column": 25, - "path": "src/documents/tests/test_api_documents.py", - "code": -2, - "name": "not-iterable", - "description": "Type `None` is not iterable", - "concise_description": "Type `None` is not iterable", - "severity": "error" - }, { "line": 1608, "column": 47, @@ -4525,9 +4441,9 @@ "severity": "error" }, { - "line": 1654, + "line": 1642, "column": 47, - "stop_line": 1654, + "stop_line": 1642, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4537,9 +4453,21 @@ "severity": "error" }, { - "line": 1726, + "line": 1689, + "column": 9, + "stop_line": 1689, + "stop_column": 25, + "path": "src/documents/tests/test_api_documents.py", + "code": -2, + "name": "not-iterable", + "description": "Type `None` is not iterable", + "concise_description": "Type `None` is not iterable", + "severity": "error" + }, + { + "line": 1704, "column": 47, - "stop_line": 1726, + "stop_line": 1704, "stop_column": 60, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4561,9 +4489,33 @@ "severity": "error" }, { - "line": 1781, + "line": 1822, + "column": 47, + "stop_line": 1822, + "stop_column": 60, + "path": "src/documents/tests/test_api_documents.py", + "code": -2, + "name": "implicit-import", + "description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", + "concise_description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", + "severity": "error" + }, + { + "line": 1846, + "column": 47, + "stop_line": 1846, + "stop_column": 60, + "path": "src/documents/tests/test_api_documents.py", + "code": -2, + "name": "implicit-import", + "description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", + "concise_description": "Module `celery.result` exists, but was not imported explicitly. You are relying on other modules to load it.", + "severity": "error" + }, + { + "line": 1877, "column": 20, - "stop_line": 1781, + "stop_line": 1877, "stop_column": 52, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4573,9 +4525,9 @@ "severity": "error" }, { - "line": 2089, + "line": 2185, "column": 26, - "stop_line": 2089, + "stop_line": 2185, "stop_column": 41, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4585,9 +4537,9 @@ "severity": "error" }, { - "line": 2101, + "line": 2197, "column": 26, - "stop_line": 2101, + "stop_line": 2197, "stop_column": 41, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4597,9 +4549,9 @@ "severity": "error" }, { - "line": 2109, + "line": 2205, "column": 26, - "stop_line": 2109, + "stop_line": 2205, "stop_column": 41, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4609,9 +4561,9 @@ "severity": "error" }, { - "line": 2110, + "line": 2206, "column": 26, - "stop_line": 2110, + "stop_line": 2206, "stop_column": 41, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4621,9 +4573,9 @@ "severity": "error" }, { - "line": 2118, + "line": 2214, "column": 26, - "stop_line": 2118, + "stop_line": 2214, "stop_column": 41, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4633,9 +4585,9 @@ "severity": "error" }, { - "line": 2527, + "line": 2572, "column": 27, - "stop_line": 2527, + "stop_line": 2572, "stop_column": 39, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4645,9 +4597,9 @@ "severity": "error" }, { - "line": 2528, + "line": 2573, "column": 33, - "stop_line": 2528, + "stop_line": 2573, "stop_column": 51, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4657,9 +4609,9 @@ "severity": "error" }, { - "line": 2529, + "line": 2574, "column": 35, - "stop_line": 2529, + "stop_line": 2574, "stop_column": 55, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4669,9 +4621,9 @@ "severity": "error" }, { - "line": 2530, + "line": 2575, "column": 34, - "stop_line": 2530, + "stop_line": 2575, "stop_column": 53, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4681,9 +4633,9 @@ "severity": "error" }, { - "line": 3129, + "line": 3222, "column": 20, - "stop_line": 3129, + "stop_line": 3222, "stop_column": 52, "path": "src/documents/tests/test_api_documents.py", "code": -2, @@ -4693,15 +4645,27 @@ "severity": "error" }, { - "line": 3466, + "line": 3559, "column": 39, - "stop_line": 3466, + "stop_line": 3559, "stop_column": 53, "path": "src/documents/tests/test_api_documents.py", "code": -2, "name": "bad-argument-type", - "description": "Argument `list[bool] | list[date] | list[float] | list[int] | list[str]` is not assignable to parameter `iterable` with type `Iterable[bool]` in function `enumerate.__new__`", - "concise_description": "Argument `list[bool] | list[date] | list[float] | list[int] | list[str]` is not assignable to parameter `iterable` with type `Iterable[bool]` in function `enumerate.__new__`", + "description": "Argument `dict[str, list[dict[str, str]]] | list[bool] | list[date] | list[float] | list[int] | list[str] | str` is not assignable to parameter `iterable` with type `Iterable[str]` in function `enumerate.__new__`", + "concise_description": "Argument `dict[str, list[dict[str, str]]] | list[bool] | list[date] | list[float] | list[int] | list[str] | str` is not assignable to parameter `iterable` with type `Iterable[str]` in function `enumerate.__new__`", + "severity": "error" + }, + { + "line": 3563, + "column": 23, + "stop_line": 3563, + "stop_column": 50, + "path": "src/documents/tests/test_api_documents.py", + "code": -2, + "name": "bad-unpacking", + "description": "Expected argument after ** to have `str` keys, got: dict[str, list[dict[str, str]]] | list[bool] | list[date] | list[float] | list[int] | list[str] | str in function `django.db.models.manager.Manager.create`", + "concise_description": "Expected argument after ** to have `str` keys, got: dict[str, list[dict[str, str]]] | list[bool] | list[date] | list[float] | list[int] | list[str] | str in function `django.db.models.manager.Manager.create`", "severity": "error" }, { @@ -4981,9 +4945,9 @@ "severity": "error" }, { - "line": 73, + "line": 83, "column": 23, - "stop_line": 73, + "stop_line": 83, "stop_column": 49, "path": "src/documents/tests/test_api_uisettings.py", "code": -2, @@ -5281,21 +5245,9 @@ "severity": "error" }, { - "line": 29, - "column": 12, - "stop_line": 29, - "stop_column": 20, - "path": "src/documents/tests/test_barcodes.py", - "code": -2, - "name": "missing-import", - "description": "Cannot find module `zxingcpp`\n Looked in these locations (from config in `/home/trenton/projects/paperless-ngx/pyproject.toml`):\n Search path (from config file): [\"/home/trenton/projects/paperless-ngx/src\"]\n Import root (inferred from project layout): \"/home/trenton/projects/paperless-ngx/src\"\n Site package path queried from interpreter: [\"/home/trenton/.local/share/uv/python/cpython-3.13.4-linux-x86_64-gnu/lib/python3.13\", \"/home/trenton/.local/share/uv/python/cpython-3.13.4-linux-x86_64-gnu/lib/python3.13/lib-dynload\", \"/home/trenton/projects/paperless-ngx/.venv/lib/python3.13/site-packages\"]", - "concise_description": "Cannot find module `zxingcpp`", - "severity": "error" - }, - { - "line": 42, + "line": 34, "column": 13, - "stop_line": 42, + "stop_line": 34, "stop_column": 54, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5305,9 +5257,9 @@ "severity": "error" }, { - "line": 43, + "line": 35, "column": 13, - "stop_line": 43, + "stop_line": 35, "stop_column": 22, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5317,9 +5269,9 @@ "severity": "error" }, { - "line": 597, + "line": 588, "column": 9, - "stop_line": 597, + "stop_line": 588, "stop_column": 36, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5329,9 +5281,9 @@ "severity": "error" }, { - "line": 598, + "line": 589, "column": 9, - "stop_line": 598, + "stop_line": 589, "stop_column": 34, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5341,9 +5293,9 @@ "severity": "error" }, { - "line": 599, + "line": 590, "column": 9, - "stop_line": 599, + "stop_line": 590, "stop_column": 24, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5353,9 +5305,9 @@ "severity": "error" }, { - "line": 631, + "line": 621, "column": 21, - "stop_line": 631, + "stop_line": 621, "stop_column": 42, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5365,9 +5317,9 @@ "severity": "error" }, { - "line": 667, + "line": 657, "column": 5, - "stop_line": 667, + "stop_line": 657, "stop_column": 20, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5377,9 +5329,9 @@ "severity": "error" }, { - "line": 668, + "line": 658, "column": 45, - "stop_line": 668, + "stop_line": 658, "stop_column": 58, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5389,9 +5341,9 @@ "severity": "error" }, { - "line": 672, + "line": 662, "column": 13, - "stop_line": 672, + "stop_line": 662, "stop_column": 54, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5401,9 +5353,9 @@ "severity": "error" }, { - "line": 673, + "line": 663, "column": 13, - "stop_line": 673, + "stop_line": 663, "stop_column": 34, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5413,9 +5365,9 @@ "severity": "error" }, { - "line": 785, + "line": 775, "column": 30, - "stop_line": 785, + "stop_line": 775, "stop_column": 60, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5425,9 +5377,9 @@ "severity": "error" }, { - "line": 848, + "line": 815, "column": 5, - "stop_line": 848, + "stop_line": 815, "stop_column": 20, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5437,9 +5389,9 @@ "severity": "error" }, { - "line": 849, + "line": 816, "column": 45, - "stop_line": 849, + "stop_line": 816, "stop_column": 58, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5449,9 +5401,9 @@ "severity": "error" }, { - "line": 853, + "line": 820, "column": 13, - "stop_line": 853, + "stop_line": 820, "stop_column": 54, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5461,9 +5413,9 @@ "severity": "error" }, { - "line": 854, + "line": 821, "column": 13, - "stop_line": 854, + "stop_line": 821, "stop_column": 34, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5473,9 +5425,9 @@ "severity": "error" }, { - "line": 1094, + "line": 1062, "column": 30, - "stop_line": 1094, + "stop_line": 1062, "stop_column": 52, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5485,9 +5437,9 @@ "severity": "error" }, { - "line": 1098, + "line": 1066, "column": 30, - "stop_line": 1098, + "stop_line": 1066, "stop_column": 52, "path": "src/documents/tests/test_barcodes.py", "code": -2, @@ -5497,9 +5449,9 @@ "severity": "error" }, { - "line": 74, + "line": 73, "column": 13, - "stop_line": 74, + "stop_line": 73, "stop_column": 23, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5509,9 +5461,9 @@ "severity": "error" }, { - "line": 83, + "line": 82, "column": 81, - "stop_line": 83, + "stop_line": 82, "stop_column": 85, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5521,9 +5473,9 @@ "severity": "error" }, { - "line": 93, + "line": 92, "column": 13, - "stop_line": 93, + "stop_line": 92, "stop_column": 24, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5533,9 +5485,9 @@ "severity": "error" }, { - "line": 102, + "line": 101, "column": 81, - "stop_line": 102, + "stop_line": 101, "stop_column": 85, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5545,9 +5497,9 @@ "severity": "error" }, { - "line": 121, + "line": 120, "column": 13, - "stop_line": 121, + "stop_line": 120, "stop_column": 24, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5557,9 +5509,9 @@ "severity": "error" }, { - "line": 145, + "line": 144, "column": 13, - "stop_line": 145, + "stop_line": 144, "stop_column": 24, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5569,9 +5521,9 @@ "severity": "error" }, { - "line": 152, + "line": 151, "column": 13, - "stop_line": 152, + "stop_line": 151, "stop_column": 17, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5581,9 +5533,9 @@ "severity": "error" }, { - "line": 243, + "line": 242, "column": 13, - "stop_line": 243, + "stop_line": 242, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5593,9 +5545,9 @@ "severity": "error" }, { - "line": 247, + "line": 246, "column": 13, - "stop_line": 247, + "stop_line": 246, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5605,9 +5557,9 @@ "severity": "error" }, { - "line": 303, + "line": 302, "column": 13, - "stop_line": 303, + "stop_line": 302, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5617,9 +5569,9 @@ "severity": "error" }, { - "line": 307, + "line": 306, "column": 13, - "stop_line": 307, + "stop_line": 306, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5629,9 +5581,9 @@ "severity": "error" }, { - "line": 311, + "line": 310, "column": 13, - "stop_line": 311, + "stop_line": 310, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5641,9 +5593,9 @@ "severity": "error" }, { - "line": 315, + "line": 314, "column": 13, - "stop_line": 315, + "stop_line": 314, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5653,9 +5605,9 @@ "severity": "error" }, { - "line": 319, + "line": 318, "column": 13, - "stop_line": 319, + "stop_line": 318, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5665,9 +5617,9 @@ "severity": "error" }, { - "line": 324, + "line": 323, "column": 13, - "stop_line": 324, + "stop_line": 323, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5677,9 +5629,9 @@ "severity": "error" }, { - "line": 340, + "line": 339, "column": 13, - "stop_line": 340, + "stop_line": 339, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5689,9 +5641,9 @@ "severity": "error" }, { - "line": 344, + "line": 343, "column": 13, - "stop_line": 344, + "stop_line": 343, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5701,9 +5653,9 @@ "severity": "error" }, { - "line": 368, + "line": 367, "column": 13, - "stop_line": 368, + "stop_line": 367, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5713,9 +5665,9 @@ "severity": "error" }, { - "line": 372, + "line": 371, "column": 13, - "stop_line": 372, + "stop_line": 371, "stop_column": 36, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5725,9 +5677,9 @@ "severity": "error" }, { - "line": 416, + "line": 464, "column": 48, - "stop_line": 416, + "stop_line": 464, "stop_column": 50, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5737,9 +5689,9 @@ "severity": "error" }, { - "line": 422, + "line": 470, "column": 26, - "stop_line": 422, + "stop_line": 470, "stop_column": 49, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5748,82 +5700,34 @@ "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", "severity": "error" }, - { - "line": 460, - "column": 48, - "stop_line": 460, - "stop_column": 50, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 466, - "column": 26, - "stop_line": 466, - "stop_column": 49, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 481, - "column": 19, - "stop_line": 481, - "stop_column": 40, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 490, - "column": 27, - "stop_line": 490, - "stop_column": 48, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `archive_dir`", - "concise_description": "Class `dirs` has no class attribute `archive_dir`", - "severity": "error" - }, - { - "line": 499, - "column": 19, - "stop_line": 499, - "stop_column": 40, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, { "line": 508, - "column": 27, + "column": 48, "stop_line": 508, - "stop_column": 48, + "stop_column": 50, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `archive_dir`", - "concise_description": "Class `dirs` has no class attribute `archive_dir`", + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", "severity": "error" }, { - "line": 517, + "line": 514, + "column": 26, + "stop_line": 514, + "stop_column": 49, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 529, "column": 19, - "stop_line": 517, + "stop_line": 529, "stop_column": 40, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5833,21 +5737,9 @@ "severity": "error" }, { - "line": 550, - "column": 19, - "stop_line": 550, - "stop_column": 40, - "path": "src/documents/tests/test_bulk_edit.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 555, + "line": 538, "column": 27, - "stop_line": 555, + "stop_line": 538, "stop_column": 48, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5857,21 +5749,69 @@ "severity": "error" }, { - "line": 895, - "column": 31, - "stop_line": 895, - "stop_column": 62, + "line": 547, + "column": 19, + "stop_line": 547, + "stop_column": 40, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, - "name": "unsupported-operation", - "description": "`-` is not supported between `None` and `int`\n Argument `None` is not assignable to parameter `value` with type `int` in function `int.__rsub__`", - "concise_description": "`-` is not supported between `None` and `int`", + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", "severity": "error" }, { - "line": 1125, + "line": 556, + "column": 27, + "stop_line": 556, + "stop_column": 48, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `archive_dir`", + "concise_description": "Class `dirs` has no class attribute `archive_dir`", + "severity": "error" + }, + { + "line": 565, + "column": 19, + "stop_line": 565, + "stop_column": 40, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 598, + "column": 19, + "stop_line": 598, + "stop_column": 40, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 603, + "column": 27, + "stop_line": 603, + "stop_column": 48, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `archive_dir`", + "concise_description": "Class `dirs` has no class attribute `archive_dir`", + "severity": "error" + }, + { + "line": 1302, "column": 20, - "stop_line": 1125, + "stop_line": 1302, "stop_column": 41, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5881,9 +5821,21 @@ "severity": "error" }, { - "line": 1183, + "line": 1350, "column": 20, - "stop_line": 1183, + "stop_line": 1350, + "stop_column": 41, + "path": "src/documents/tests/test_bulk_edit.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 1408, + "column": 20, + "stop_line": 1408, "stop_column": 41, "path": "src/documents/tests/test_bulk_edit.py", "code": -2, @@ -5965,93 +5917,93 @@ "severity": "error" }, { - "line": 38, + "line": 43, "column": 9, - "stop_line": 38, + "stop_line": 43, "stop_column": 21, "path": "src/documents/tests/test_consumer.py", "code": -2, "name": "bad-override", - "description": "Class member `_BaseTestParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `_BaseTestParser.get_settings` has type `BoundMethod[_BaseTestParser, (self: _BaseTestParser) -> None]`, which is not assignable to `BoundMethod[_BaseTestParser, (self: _BaseTestParser) -> Never]`, the type of `DocumentParser.get_settings`", + "description": "Class member `_BaseTestParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `_BaseTestParser.get_settings` has type `(self: _BaseTestParser) -> None`, which is not assignable to `(self: _BaseTestParser) -> Never`, the type of `DocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: _BaseTestParser) -> Never: ...\n ^^^^ return type\n found: def get_settings(self: _BaseTestParser) -> None: ...\n ^^^ return type", "concise_description": "Class member `_BaseTestParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, { - "line": 51, + "line": 56, "column": 9, - "stop_line": 51, + "stop_line": 56, "stop_column": 22, "path": "src/documents/tests/test_consumer.py", "code": -2, "name": "bad-override", - "description": "Class member `DummyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `DummyParser.get_thumbnail` has type `BoundMethod[DummyParser, (self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str]`, which is not assignable to `BoundMethod[DummyParser, (self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.get_thumbnail`", + "description": "Class member `DummyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `DummyParser.get_thumbnail` has type `(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str`, which is not assignable to `(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.get_thumbnail`\n Signature mismatch:\n ...mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n ...mime_type: Unknown, file_name: Unknown | None = None) -> str: ...\n ^^ return type", "concise_description": "Class member `DummyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner", "severity": "error" }, - { - "line": 54, - "column": 9, - "stop_line": 54, - "stop_column": 14, - "path": "src/documents/tests/test_consumer.py", - "code": -2, - "name": "bad-override", - "description": "Class member `DummyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner\n `DummyParser.parse` has type `BoundMethod[DummyParser, (self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None]`, which is not assignable to `BoundMethod[DummyParser, (self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.parse`", - "concise_description": "Class member `DummyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner", - "severity": "error" - }, { "line": 59, "column": 9, "stop_line": 59, - "stop_column": 22, - "path": "src/documents/tests/test_consumer.py", - "code": -2, - "name": "bad-override", - "description": "Class member `CopyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `CopyParser.get_thumbnail` has type `BoundMethod[CopyParser, (self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str]`, which is not assignable to `BoundMethod[CopyParser, (self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.get_thumbnail`", - "concise_description": "Class member `CopyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner", - "severity": "error" - }, - { - "line": 66, - "column": 9, - "stop_line": 66, "stop_column": 14, "path": "src/documents/tests/test_consumer.py", "code": -2, "name": "bad-override", - "description": "Class member `CopyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner\n `CopyParser.parse` has type `BoundMethod[CopyParser, (self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None]`, which is not assignable to `BoundMethod[CopyParser, (self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.parse`", + "description": "Class member `DummyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner\n `DummyParser.parse` has type `(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None`, which is not assignable to `(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.parse`\n Signature mismatch:\n expected: def parse(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n found: def parse(self: DummyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None: ...\n ^^^ return type", + "concise_description": "Class member `DummyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner", + "severity": "error" + }, + { + "line": 64, + "column": 9, + "stop_line": 64, + "stop_column": 22, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "bad-override", + "description": "Class member `CopyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `CopyParser.get_thumbnail` has type `(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str`, which is not assignable to `(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.get_thumbnail`\n Signature mismatch:\n ...mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n ...mime_type: Unknown, file_name: Unknown | None = None) -> str: ...\n ^^ return type", + "concise_description": "Class member `CopyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner", + "severity": "error" + }, + { + "line": 71, + "column": 9, + "stop_line": 71, + "stop_column": 14, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "bad-override", + "description": "Class member `CopyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner\n `CopyParser.parse` has type `(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None`, which is not assignable to `(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.parse`\n Signature mismatch:\n expected: def parse(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n found: def parse(self: CopyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None: ...\n ^^^ return type", "concise_description": "Class member `CopyParser.parse` overrides parent class `_BaseTestParser` in an inconsistent manner", "severity": "error" }, { - "line": 77, + "line": 82, "column": 9, - "stop_line": 77, + "stop_line": 82, "stop_column": 22, "path": "src/documents/tests/test_consumer.py", "code": -2, "name": "bad-override", - "description": "Class member `FaultyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `FaultyParser.get_thumbnail` has type `BoundMethod[FaultyParser, (self: FaultyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str]`, which is not assignable to `BoundMethod[FaultyParser, (self: FaultyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.get_thumbnail`", + "description": "Class member `FaultyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `FaultyParser.get_thumbnail` has type `(self: FaultyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str`, which is not assignable to `(self: FaultyParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.get_thumbnail`\n Signature mismatch:\n ...mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n ...mime_type: Unknown, file_name: Unknown | None = None) -> str: ...\n ^^ return type", "concise_description": "Class member `FaultyParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner", "severity": "error" }, { - "line": 89, + "line": 94, "column": 9, - "stop_line": 89, + "stop_line": 94, "stop_column": 22, "path": "src/documents/tests/test_consumer.py", "code": -2, "name": "bad-override", - "description": "Class member `FaultyGenericExceptionParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `FaultyGenericExceptionParser.get_thumbnail` has type `BoundMethod[FaultyGenericExceptionParser, (self: FaultyGenericExceptionParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str]`, which is not assignable to `BoundMethod[FaultyGenericExceptionParser, (self: FaultyGenericExceptionParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `_BaseTestParser.get_thumbnail`", + "description": "Class member `FaultyGenericExceptionParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner\n `FaultyGenericExceptionParser.get_thumbnail` has type `(self: FaultyGenericExceptionParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> str`, which is not assignable to `(self: FaultyGenericExceptionParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `_BaseTestParser.get_thumbnail`\n Signature mismatch:\n ...mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n ...mime_type: Unknown, file_name: Unknown | None = None) -> str: ...\n ^^ return type", "concise_description": "Class member `FaultyGenericExceptionParser.get_thumbnail` overrides parent class `_BaseTestParser` in an inconsistent manner", "severity": "error" }, { - "line": 147, + "line": 154, "column": 13, - "stop_line": 147, + "stop_line": 154, "stop_column": 34, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6061,9 +6013,9 @@ "severity": "error" }, { - "line": 152, + "line": 159, "column": 44, - "stop_line": 152, + "stop_line": 159, "stop_column": 65, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6073,9 +6025,9 @@ "severity": "error" }, { - "line": 159, + "line": 166, "column": 60, - "stop_line": 159, + "stop_line": 166, "stop_column": 81, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6085,9 +6037,9 @@ "severity": "error" }, { - "line": 186, + "line": 193, "column": 15, - "stop_line": 186, + "stop_line": 193, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6097,9 +6049,9 @@ "severity": "error" }, { - "line": 198, + "line": 205, "column": 15, - "stop_line": 198, + "stop_line": 205, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6109,9 +6061,9 @@ "severity": "error" }, { - "line": 206, + "line": 213, "column": 15, - "stop_line": 206, + "stop_line": 213, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6121,9 +6073,9 @@ "severity": "error" }, { - "line": 239, + "line": 246, "column": 27, - "stop_line": 239, + "stop_line": 246, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6133,9 +6085,9 @@ "severity": "error" }, { - "line": 257, + "line": 264, "column": 28, - "stop_line": 257, + "stop_line": 264, "stop_column": 49, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6145,9 +6097,9 @@ "severity": "error" }, { - "line": 320, + "line": 327, "column": 26, - "stop_line": 320, + "stop_line": 327, "stop_column": 51, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6157,9 +6109,9 @@ "severity": "error" }, { - "line": 334, + "line": 341, "column": 26, - "stop_line": 334, + "stop_line": 341, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6169,9 +6121,9 @@ "severity": "error" }, { - "line": 348, + "line": 355, "column": 26, - "stop_line": 348, + "stop_line": 355, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6181,9 +6133,9 @@ "severity": "error" }, { - "line": 364, + "line": 371, "column": 27, - "stop_line": 364, + "stop_line": 371, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6193,9 +6145,9 @@ "severity": "error" }, { - "line": 365, + "line": 372, "column": 30, - "stop_line": 365, + "stop_line": 372, "stop_column": 43, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6205,9 +6157,9 @@ "severity": "error" }, { - "line": 366, + "line": 373, "column": 27, - "stop_line": 366, + "stop_line": 373, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6217,9 +6169,9 @@ "severity": "error" }, { - "line": 391, + "line": 398, "column": 56, - "stop_line": 391, + "stop_line": 398, "stop_column": 78, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6229,9 +6181,9 @@ "severity": "error" }, { - "line": 396, + "line": 403, "column": 26, - "stop_line": 396, + "stop_line": 403, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6241,9 +6193,9 @@ "severity": "error" }, { - "line": 398, + "line": 405, "column": 13, - "stop_line": 398, + "stop_line": 405, "stop_column": 35, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6253,9 +6205,9 @@ "severity": "error" }, { - "line": 412, + "line": 419, "column": 26, - "stop_line": 412, + "stop_line": 419, "stop_column": 56, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6265,9 +6217,9 @@ "severity": "error" }, { - "line": 440, + "line": 439, "column": 26, - "stop_line": 440, + "stop_line": 439, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6277,9 +6229,9 @@ "severity": "error" }, { - "line": 454, + "line": 453, "column": 26, - "stop_line": 454, + "stop_line": 453, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6289,9 +6241,9 @@ "severity": "error" }, { - "line": 473, + "line": 472, "column": 64, - "stop_line": 473, + "stop_line": 472, "stop_column": 72, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6301,9 +6253,9 @@ "severity": "error" }, { - "line": 475, + "line": 474, "column": 65, - "stop_line": 475, + "stop_line": 474, "stop_column": 73, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6313,9 +6265,9 @@ "severity": "error" }, { - "line": 543, + "line": 542, "column": 13, - "stop_line": 543, + "stop_line": 542, "stop_column": 28, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6325,9 +6277,9 @@ "severity": "error" }, { - "line": 639, + "line": 638, "column": 26, - "stop_line": 639, + "stop_line": 638, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6337,9 +6289,9 @@ "severity": "error" }, { - "line": 640, + "line": 639, "column": 26, - "stop_line": 640, + "stop_line": 639, "stop_column": 43, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6349,9 +6301,9 @@ "severity": "error" }, { - "line": 641, + "line": 640, "column": 26, - "stop_line": 641, + "stop_line": 640, "stop_column": 51, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6361,9 +6313,9 @@ "severity": "error" }, { - "line": 667, + "line": 666, "column": 26, - "stop_line": 667, + "stop_line": 666, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6373,9 +6325,9 @@ "severity": "error" }, { - "line": 669, + "line": 668, "column": 27, - "stop_line": 669, + "stop_line": 668, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6385,9 +6337,9 @@ "severity": "error" }, { - "line": 670, + "line": 669, "column": 27, - "stop_line": 670, + "stop_line": 669, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6397,9 +6349,57 @@ "severity": "error" }, { - "line": 697, + "line": 723, + "column": 13, + "stop_line": 723, + "stop_column": 34, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 733, + "column": 13, + "stop_line": 733, + "stop_column": 34, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 783, + "column": 13, + "stop_line": 783, + "stop_column": 34, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 793, + "column": 13, + "stop_line": 793, + "stop_column": 34, + "path": "src/documents/tests/test_consumer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 834, "column": 26, - "stop_line": 697, + "stop_line": 834, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6409,9 +6409,9 @@ "severity": "error" }, { - "line": 698, + "line": 835, "column": 26, - "stop_line": 698, + "stop_line": 835, "stop_column": 48, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6421,9 +6421,9 @@ "severity": "error" }, { - "line": 699, + "line": 836, "column": 27, - "stop_line": 699, + "stop_line": 836, "stop_column": 40, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6433,9 +6433,9 @@ "severity": "error" }, { - "line": 700, + "line": 837, "column": 30, - "stop_line": 700, + "stop_line": 837, "stop_column": 43, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6445,9 +6445,9 @@ "severity": "error" }, { - "line": 743, + "line": 880, "column": 9, - "stop_line": 743, + "stop_line": 880, "stop_column": 24, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6457,9 +6457,9 @@ "severity": "error" }, { - "line": 750, + "line": 887, "column": 37, - "stop_line": 750, + "stop_line": 887, "stop_column": 51, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6469,9 +6469,9 @@ "severity": "error" }, { - "line": 750, + "line": 887, "column": 56, - "stop_line": 750, + "stop_line": 887, "stop_column": 67, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6481,9 +6481,9 @@ "severity": "error" }, { - "line": 828, + "line": 965, "column": 26, - "stop_line": 828, + "stop_line": 965, "stop_column": 39, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6493,9 +6493,9 @@ "severity": "error" }, { - "line": 829, + "line": 966, "column": 26, - "stop_line": 829, + "stop_line": 966, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6505,9 +6505,9 @@ "severity": "error" }, { - "line": 831, + "line": 968, "column": 26, - "stop_line": 831, + "stop_line": 968, "stop_column": 39, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6517,9 +6517,9 @@ "severity": "error" }, { - "line": 832, + "line": 969, "column": 26, - "stop_line": 832, + "stop_line": 969, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6529,9 +6529,9 @@ "severity": "error" }, { - "line": 834, + "line": 971, "column": 26, - "stop_line": 834, + "stop_line": 971, "stop_column": 39, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6541,9 +6541,9 @@ "severity": "error" }, { - "line": 835, + "line": 972, "column": 26, - "stop_line": 835, + "stop_line": 972, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6553,9 +6553,9 @@ "severity": "error" }, { - "line": 934, + "line": 1071, "column": 15, - "stop_line": 934, + "stop_line": 1071, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6565,9 +6565,9 @@ "severity": "error" }, { - "line": 943, + "line": 1080, "column": 13, - "stop_line": 943, + "stop_line": 1080, "stop_column": 29, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6577,9 +6577,9 @@ "severity": "error" }, { - "line": 964, + "line": 1101, "column": 15, - "stop_line": 964, + "stop_line": 1101, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6589,9 +6589,9 @@ "severity": "error" }, { - "line": 973, + "line": 1110, "column": 13, - "stop_line": 973, + "stop_line": 1110, "stop_column": 29, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6601,9 +6601,9 @@ "severity": "error" }, { - "line": 994, + "line": 1131, "column": 15, - "stop_line": 994, + "stop_line": 1131, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6613,9 +6613,9 @@ "severity": "error" }, { - "line": 1003, + "line": 1140, "column": 13, - "stop_line": 1003, + "stop_line": 1140, "stop_column": 29, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6625,9 +6625,9 @@ "severity": "error" }, { - "line": 1026, + "line": 1163, "column": 15, - "stop_line": 1026, + "stop_line": 1163, "stop_column": 36, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6637,9 +6637,9 @@ "severity": "error" }, { - "line": 1035, + "line": 1172, "column": 13, - "stop_line": 1035, + "stop_line": 1172, "stop_column": 29, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6649,9 +6649,9 @@ "severity": "error" }, { - "line": 1050, + "line": 1187, "column": 26, - "stop_line": 1050, + "stop_line": 1187, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6661,9 +6661,9 @@ "severity": "error" }, { - "line": 1161, + "line": 1298, "column": 26, - "stop_line": 1161, + "stop_line": 1298, "stop_column": 47, "path": "src/documents/tests/test_consumer.py", "code": -2, @@ -6973,9 +6973,9 @@ "severity": "error" }, { - "line": 34, + "line": 36, "column": 39, - "stop_line": 34, + "stop_line": 36, "stop_column": 62, "path": "src/documents/tests/test_management.py", "code": -2, @@ -6985,9 +6985,9 @@ "severity": "error" }, { - "line": 40, + "line": 42, "column": 39, - "stop_line": 40, + "stop_line": 42, "stop_column": 62, "path": "src/documents/tests/test_management.py", "code": -2, @@ -6997,9 +6997,9 @@ "severity": "error" }, { - "line": 48, + "line": 50, "column": 27, - "stop_line": 48, + "stop_line": 50, "stop_column": 43, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7009,9 +7009,9 @@ "severity": "error" }, { - "line": 84, + "line": 86, "column": 39, - "stop_line": 84, + "stop_line": 86, "stop_column": 62, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7021,9 +7021,9 @@ "severity": "error" }, { - "line": 85, + "line": 87, "column": 39, - "stop_line": 85, + "stop_line": 87, "stop_column": 62, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7033,9 +7033,9 @@ "severity": "error" }, { - "line": 118, + "line": 122, "column": 14, - "stop_line": 118, + "stop_line": 122, "stop_column": 30, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7045,9 +7045,9 @@ "severity": "error" }, { - "line": 128, + "line": 132, "column": 30, - "stop_line": 128, + "stop_line": 132, "stop_column": 46, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7057,9 +7057,9 @@ "severity": "error" }, { - "line": 130, + "line": 134, "column": 27, - "stop_line": 130, + "stop_line": 134, "stop_column": 44, "path": "src/documents/tests/test_management.py", "code": -2, @@ -7069,9 +7069,9 @@ "severity": "error" }, { - "line": 56, + "line": 58, "column": 24, - "stop_line": 56, + "stop_line": 58, "stop_column": 52, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7081,9 +7081,9 @@ "severity": "error" }, { - "line": 56, + "line": 58, "column": 24, - "stop_line": 56, + "stop_line": 58, "stop_column": 52, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7093,9 +7093,9 @@ "severity": "error" }, { - "line": 182, + "line": 184, "column": 22, - "stop_line": 182, + "stop_line": 184, "stop_column": 27, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7105,9 +7105,9 @@ "severity": "error" }, { - "line": 190, + "line": 192, "column": 28, - "stop_line": 190, + "stop_line": 192, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7117,9 +7117,9 @@ "severity": "error" }, { - "line": 193, + "line": 195, "column": 18, - "stop_line": 193, + "stop_line": 195, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7129,9 +7129,9 @@ "severity": "error" }, { - "line": 292, + "line": 294, "column": 28, - "stop_line": 292, + "stop_line": 294, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7141,9 +7141,9 @@ "severity": "error" }, { - "line": 295, + "line": 297, "column": 18, - "stop_line": 295, + "stop_line": 297, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7153,9 +7153,9 @@ "severity": "error" }, { - "line": 304, + "line": 306, "column": 28, - "stop_line": 304, + "stop_line": 306, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7165,9 +7165,9 @@ "severity": "error" }, { - "line": 307, + "line": 309, "column": 18, - "stop_line": 307, + "stop_line": 309, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7177,9 +7177,9 @@ "severity": "error" }, { - "line": 343, + "line": 345, "column": 28, - "stop_line": 343, + "stop_line": 345, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7189,9 +7189,9 @@ "severity": "error" }, { - "line": 346, + "line": 348, "column": 18, - "stop_line": 346, + "stop_line": 348, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7201,9 +7201,9 @@ "severity": "error" }, { - "line": 373, + "line": 375, "column": 28, - "stop_line": 373, + "stop_line": 375, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7213,9 +7213,9 @@ "severity": "error" }, { - "line": 376, + "line": 378, "column": 18, - "stop_line": 376, + "stop_line": 378, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7225,9 +7225,9 @@ "severity": "error" }, { - "line": 408, + "line": 410, "column": 28, - "stop_line": 408, + "stop_line": 410, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7237,9 +7237,9 @@ "severity": "error" }, { - "line": 411, + "line": 413, "column": 18, - "stop_line": 411, + "stop_line": 413, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7249,9 +7249,9 @@ "severity": "error" }, { - "line": 433, + "line": 435, "column": 24, - "stop_line": 433, + "stop_line": 435, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7261,9 +7261,9 @@ "severity": "error" }, { - "line": 433, + "line": 435, "column": 24, - "stop_line": 433, + "stop_line": 435, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7273,9 +7273,9 @@ "severity": "error" }, { - "line": 453, + "line": 455, "column": 28, - "stop_line": 453, + "stop_line": 455, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7285,9 +7285,9 @@ "severity": "error" }, { - "line": 456, + "line": 458, "column": 18, - "stop_line": 456, + "stop_line": 458, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7297,9 +7297,9 @@ "severity": "error" }, { - "line": 461, + "line": 463, "column": 22, - "stop_line": 461, + "stop_line": 463, "stop_column": 27, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7309,9 +7309,9 @@ "severity": "error" }, { - "line": 486, + "line": 488, "column": 28, - "stop_line": 486, + "stop_line": 488, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7321,9 +7321,9 @@ "severity": "error" }, { - "line": 489, + "line": 491, "column": 18, - "stop_line": 489, + "stop_line": 491, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7333,9 +7333,9 @@ "severity": "error" }, { - "line": 497, + "line": 499, "column": 26, - "stop_line": 497, + "stop_line": 499, "stop_column": 31, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7345,9 +7345,9 @@ "severity": "error" }, { - "line": 526, + "line": 528, "column": 28, - "stop_line": 526, + "stop_line": 528, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7357,9 +7357,9 @@ "severity": "error" }, { - "line": 529, + "line": 531, "column": 18, - "stop_line": 529, + "stop_line": 531, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7369,9 +7369,9 @@ "severity": "error" }, { - "line": 543, + "line": 545, "column": 22, - "stop_line": 543, + "stop_line": 545, "stop_column": 27, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7381,9 +7381,9 @@ "severity": "error" }, { - "line": 624, + "line": 626, "column": 28, - "stop_line": 624, + "stop_line": 626, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7393,9 +7393,9 @@ "severity": "error" }, { - "line": 627, + "line": 629, "column": 18, - "stop_line": 627, + "stop_line": 629, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7405,9 +7405,9 @@ "severity": "error" }, { - "line": 665, + "line": 667, "column": 28, - "stop_line": 665, + "stop_line": 667, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7417,9 +7417,9 @@ "severity": "error" }, { - "line": 668, + "line": 670, "column": 18, - "stop_line": 668, + "stop_line": 670, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7429,9 +7429,9 @@ "severity": "error" }, { - "line": 708, + "line": 710, "column": 28, - "stop_line": 708, + "stop_line": 710, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7441,9 +7441,9 @@ "severity": "error" }, { - "line": 711, + "line": 713, "column": 18, - "stop_line": 711, + "stop_line": 713, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7453,9 +7453,9 @@ "severity": "error" }, { - "line": 739, + "line": 741, "column": 28, - "stop_line": 739, + "stop_line": 741, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7465,9 +7465,9 @@ "severity": "error" }, { - "line": 742, + "line": 744, "column": 18, - "stop_line": 742, + "stop_line": 744, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7477,9 +7477,9 @@ "severity": "error" }, { - "line": 764, + "line": 766, "column": 28, - "stop_line": 764, + "stop_line": 766, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7489,9 +7489,9 @@ "severity": "error" }, { - "line": 767, + "line": 769, "column": 18, - "stop_line": 767, + "stop_line": 769, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7501,9 +7501,9 @@ "severity": "error" }, { - "line": 799, + "line": 801, "column": 28, - "stop_line": 799, + "stop_line": 801, "stop_column": 47, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7513,9 +7513,9 @@ "severity": "error" }, { - "line": 802, + "line": 804, "column": 18, - "stop_line": 802, + "stop_line": 804, "stop_column": 37, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7525,9 +7525,9 @@ "severity": "error" }, { - "line": 823, + "line": 825, "column": 23, - "stop_line": 823, + "stop_line": 825, "stop_column": 42, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7537,9 +7537,9 @@ "severity": "error" }, { - "line": 826, + "line": 828, "column": 13, - "stop_line": 826, + "stop_line": 828, "stop_column": 32, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7549,9 +7549,9 @@ "severity": "error" }, { - "line": 836, + "line": 838, "column": 23, - "stop_line": 836, + "stop_line": 838, "stop_column": 42, "path": "src/documents/tests/test_management_exporter.py", "code": -2, @@ -7561,9 +7561,9 @@ "severity": "error" }, { - "line": 41, + "line": 43, "column": 21, - "stop_line": 41, + "stop_line": 43, "stop_column": 42, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7573,9 +7573,9 @@ "severity": "error" }, { - "line": 59, + "line": 61, "column": 25, - "stop_line": 59, + "stop_line": 61, "stop_column": 46, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7585,9 +7585,9 @@ "severity": "error" }, { - "line": 67, + "line": 69, "column": 21, - "stop_line": 67, + "stop_line": 69, "stop_column": 42, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7597,9 +7597,9 @@ "severity": "error" }, { - "line": 85, + "line": 87, "column": 25, - "stop_line": 85, + "stop_line": 87, "stop_column": 46, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7609,9 +7609,9 @@ "severity": "error" }, { - "line": 96, + "line": 98, "column": 21, - "stop_line": 96, + "stop_line": 98, "stop_column": 42, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7620,18 +7620,6 @@ "concise_description": "Class `dirs` has no class attribute `scratch_dir`", "severity": "error" }, - { - "line": 200, - "column": 10, - "stop_line": 200, - "stop_column": 33, - "path": "src/documents/tests/test_management_importer.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `originals_dir`", - "concise_description": "Class `dirs` has no class attribute `originals_dir`", - "severity": "error" - }, { "line": 202, "column": 10, @@ -7645,45 +7633,57 @@ "severity": "error" }, { - "line": 210, - "column": 21, - "stop_line": 210, - "stop_column": 42, - "path": "src/documents/tests/test_management_importer.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 238, - "column": 21, - "stop_line": 238, - "stop_column": 42, - "path": "src/documents/tests/test_management_importer.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 274, - "column": 21, - "stop_line": 274, - "stop_column": 42, - "path": "src/documents/tests/test_management_importer.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 294, + "line": 204, "column": 10, - "stop_line": 294, + "stop_line": 204, + "stop_column": 33, + "path": "src/documents/tests/test_management_importer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `originals_dir`", + "concise_description": "Class `dirs` has no class attribute `originals_dir`", + "severity": "error" + }, + { + "line": 212, + "column": 21, + "stop_line": 212, + "stop_column": 42, + "path": "src/documents/tests/test_management_importer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 240, + "column": 21, + "stop_line": 240, + "stop_column": 42, + "path": "src/documents/tests/test_management_importer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 276, + "column": 21, + "stop_line": 276, + "stop_column": 42, + "path": "src/documents/tests/test_management_importer.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 296, + "column": 10, + "stop_line": 296, "stop_column": 31, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7693,9 +7693,9 @@ "severity": "error" }, { - "line": 301, + "line": 303, "column": 21, - "stop_line": 301, + "stop_line": 303, "stop_column": 42, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7705,9 +7705,9 @@ "severity": "error" }, { - "line": 320, + "line": 322, "column": 10, - "stop_line": 320, + "stop_line": 322, "stop_column": 31, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7717,9 +7717,9 @@ "severity": "error" }, { - "line": 321, + "line": 323, "column": 10, - "stop_line": 321, + "stop_line": 323, "stop_column": 31, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7729,9 +7729,9 @@ "severity": "error" }, { - "line": 330, + "line": 332, "column": 21, - "stop_line": 330, + "stop_line": 332, "stop_column": 42, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7741,9 +7741,9 @@ "severity": "error" }, { - "line": 350, + "line": 352, "column": 20, - "stop_line": 350, + "stop_line": 352, "stop_column": 41, "path": "src/documents/tests/test_management_importer.py", "code": -2, @@ -7752,6 +7752,18 @@ "concise_description": "Class `dirs` has no class attribute `scratch_dir`", "severity": "error" }, + { + "line": 418, + "column": 27, + "stop_line": 418, + "stop_column": 55, + "path": "src/documents/tests/test_management_retagger.py", + "code": -2, + "name": "no-matching-overload", + "description": "No matching overload found for function `_pytest.raises.raises` called with arguments: (tuple[type[CommandError], type[SystemExit]])\n Possible overloads:\n (expected_exception: tuple[type[E], ...] | type[E], *, match: Pattern[str] | str | None = ..., check: (E) -> bool = ...) -> RaisesExc[E] [closest match]\n (*, match: Pattern[str] | str, check: (BaseException) -> bool = ...) -> RaisesExc[BaseException]\n (*, check: (BaseException) -> bool) -> RaisesExc[BaseException]\n (expected_exception: tuple[type[E], ...] | type[E], func: (...) -> Any, *args: Any, **kwargs: Any) -> ExceptionInfo[E]", + "concise_description": "No matching overload found for function `_pytest.raises.raises` called with arguments: (tuple[type[CommandError], type[SystemExit]])", + "severity": "error" + }, { "line": 25, "column": 30, @@ -7813,147 +7825,51 @@ "severity": "error" }, { - "line": 27, - "column": 22, - "stop_line": 27, - "stop_column": 45, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `originals_dir`", - "concise_description": "Class `dirs` has no class attribute `originals_dir`", - "severity": "error" - }, - { - "line": 37, - "column": 22, - "stop_line": 37, - "stop_column": 43, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `archive_dir`", - "concise_description": "Class `dirs` has no class attribute `archive_dir`", - "severity": "error" - }, - { - "line": 47, - "column": 22, - "stop_line": 47, - "stop_column": 45, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `thumbnail_dir`", - "concise_description": "Class `dirs` has no class attribute `thumbnail_dir`", - "severity": "error" - }, - { - "line": 123, + "line": 133, "column": 14, - "stop_line": 123, - "stop_column": 30, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "severity": "error" - }, - { - "line": 128, - "column": 14, - "stop_line": 128, - "stop_column": 30, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "severity": "error" - }, - { - "line": 130, - "column": 14, - "stop_line": 130, - "stop_column": 30, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", - "severity": "error" - }, - { - "line": 153, - "column": 14, - "stop_line": 153, + "stop_line": 133, "stop_column": 37, "path": "src/documents/tests/test_sanity_check.py", "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `originals_dir`", - "concise_description": "Class `dirs` has no class attribute `originals_dir`", + "name": "bad-argument-type", + "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", + "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", "severity": "error" }, { - "line": 157, - "column": 32, - "stop_line": 157, - "stop_column": 36, + "line": 152, + "column": 24, + "stop_line": 152, + "stop_column": 47, "path": "src/documents/tests/test_sanity_check.py", "code": -2, - "name": "bad-index", - "description": "Cannot index into `dict[int, list[dict[Unknown, Unknown]]]`\n Argument `None` is not assignable to parameter `key` with type `int` in function `dict.__getitem__`", - "concise_description": "Cannot index into `dict[int, list[dict[Unknown, Unknown]]]`", + "name": "bad-argument-type", + "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", + "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", "severity": "error" }, { - "line": 166, - "column": 25, - "stop_line": 166, - "stop_column": 44, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `media_dir`", - "concise_description": "Class `dirs` has no class attribute `media_dir`", - "severity": "error" - }, - { - "line": 168, + "line": 165, "column": 14, - "stop_line": 168, - "stop_column": 33, + "stop_line": 165, + "stop_column": 37, "path": "src/documents/tests/test_sanity_check.py", "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `media_dir`", - "concise_description": "Class `dirs` has no class attribute `media_dir`", + "name": "bad-argument-type", + "description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", + "concise_description": "Argument `Path | None` is not assignable to parameter `*args` with type `PathLike[str] | str` in function `pathlib.Path.__new__`", "severity": "error" }, { - "line": 174, - "column": 14, - "stop_line": 174, - "stop_column": 33, + "line": 258, + "column": 16, + "stop_line": 258, + "stop_column": 55, "path": "src/documents/tests/test_sanity_check.py", "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `media_dir`", - "concise_description": "Class `dirs` has no class attribute `media_dir`", - "severity": "error" - }, - { - "line": 175, - "column": 14, - "stop_line": 175, - "stop_column": 33, - "path": "src/documents/tests/test_sanity_check.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `media_dir`", - "concise_description": "Class `dirs` has no class attribute `media_dir`", + "name": "not-iterable", + "description": "`in` is not supported between `Literal['Check logs for details']` and `None`", + "concise_description": "`in` is not supported between `Literal['Check logs for details']` and `None`", "severity": "error" }, { @@ -8053,9 +7969,9 @@ "severity": "error" }, { - "line": 54, + "line": 56, "column": 35, - "stop_line": 54, + "stop_line": 56, "stop_column": 59, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8065,9 +7981,9 @@ "severity": "error" }, { - "line": 77, + "line": 79, "column": 26, - "stop_line": 77, + "stop_line": 79, "stop_column": 39, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8077,9 +7993,9 @@ "severity": "error" }, { - "line": 98, + "line": 100, "column": 35, - "stop_line": 98, + "stop_line": 100, "stop_column": 58, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8089,9 +8005,9 @@ "severity": "error" }, { - "line": 117, + "line": 119, "column": 26, - "stop_line": 117, + "stop_line": 119, "stop_column": 39, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8101,9 +8017,9 @@ "severity": "error" }, { - "line": 137, + "line": 139, "column": 35, - "stop_line": 137, + "stop_line": 139, "stop_column": 57, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8113,9 +8029,9 @@ "severity": "error" }, { - "line": 154, + "line": 156, "column": 19, - "stop_line": 154, + "stop_line": 156, "stop_column": 32, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8125,9 +8041,9 @@ "severity": "error" }, { - "line": 159, + "line": 161, "column": 26, - "stop_line": 159, + "stop_line": 161, "stop_column": 39, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8137,9 +8053,9 @@ "severity": "error" }, { - "line": 179, + "line": 181, "column": 35, - "stop_line": 179, + "stop_line": 181, "stop_column": 57, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8149,9 +8065,9 @@ "severity": "error" }, { - "line": 200, + "line": 202, "column": 26, - "stop_line": 200, + "stop_line": 202, "stop_column": 39, "path": "src/documents/tests/test_task_signals.py", "code": -2, @@ -8161,9 +8077,9 @@ "severity": "error" }, { - "line": 216, + "line": 245, "column": 19, - "stop_line": 216, + "stop_line": 245, "stop_column": 40, "path": "src/documents/tests/test_tasks.py", "code": -2, @@ -8173,9 +8089,9 @@ "severity": "error" }, { - "line": 225, + "line": 254, "column": 27, - "stop_line": 225, + "stop_line": 254, "stop_column": 48, "path": "src/documents/tests/test_tasks.py", "code": -2, @@ -8185,9 +8101,9 @@ "severity": "error" }, { - "line": 257, + "line": 286, "column": 19, - "stop_line": 257, + "stop_line": 286, "stop_column": 40, "path": "src/documents/tests/test_tasks.py", "code": -2, @@ -8197,9 +8113,9 @@ "severity": "error" }, { - "line": 335, + "line": 364, "column": 55, - "stop_line": 335, + "stop_line": 364, "stop_column": 66, "path": "src/documents/tests/test_tasks.py", "code": -2, @@ -8365,9 +8281,9 @@ "severity": "error" }, { - "line": 136, + "line": 139, "column": 30, - "stop_line": 136, + "stop_line": 139, "stop_column": 51, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8377,9 +8293,9 @@ "severity": "error" }, { - "line": 172, + "line": 175, "column": 13, - "stop_line": 172, + "stop_line": 175, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8389,9 +8305,9 @@ "severity": "error" }, { - "line": 186, + "line": 189, "column": 34, - "stop_line": 186, + "stop_line": 189, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8401,9 +8317,9 @@ "severity": "error" }, { - "line": 187, + "line": 190, "column": 34, - "stop_line": 187, + "stop_line": 190, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8413,9 +8329,9 @@ "severity": "error" }, { - "line": 188, + "line": 191, "column": 39, - "stop_line": 188, + "stop_line": 191, "stop_column": 52, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8425,9 +8341,9 @@ "severity": "error" }, { - "line": 189, + "line": 192, "column": 34, - "stop_line": 189, + "stop_line": 192, "stop_column": 55, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8437,9 +8353,9 @@ "severity": "error" }, { - "line": 190, + "line": 193, "column": 34, - "stop_line": 190, + "stop_line": 193, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8449,9 +8365,9 @@ "severity": "error" }, { - "line": 194, + "line": 197, "column": 29, - "stop_line": 194, + "stop_line": 197, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8461,9 +8377,9 @@ "severity": "error" }, { - "line": 201, + "line": 204, "column": 25, - "stop_line": 205, + "stop_line": 208, "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8473,9 +8389,9 @@ "severity": "error" }, { - "line": 203, + "line": 206, "column": 29, - "stop_line": 203, + "stop_line": 206, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8485,9 +8401,9 @@ "severity": "error" }, { - "line": 211, + "line": 214, "column": 29, - "stop_line": 211, + "stop_line": 214, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8497,9 +8413,9 @@ "severity": "error" }, { - "line": 218, + "line": 221, "column": 25, - "stop_line": 222, + "stop_line": 225, "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8509,9 +8425,9 @@ "severity": "error" }, { - "line": 220, + "line": 223, "column": 29, - "stop_line": 220, + "stop_line": 223, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8521,9 +8437,9 @@ "severity": "error" }, { - "line": 226, + "line": 229, "column": 21, - "stop_line": 226, + "stop_line": 229, "stop_column": 35, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8533,9 +8449,9 @@ "severity": "error" }, { - "line": 230, + "line": 233, "column": 26, - "stop_line": 230, + "stop_line": 233, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8545,9 +8461,9 @@ "severity": "error" }, { - "line": 234, + "line": 237, "column": 21, - "stop_line": 234, + "stop_line": 237, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8557,9 +8473,9 @@ "severity": "error" }, { - "line": 283, + "line": 286, "column": 13, - "stop_line": 283, + "stop_line": 286, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8569,9 +8485,9 @@ "severity": "error" }, { - "line": 297, + "line": 300, "column": 34, - "stop_line": 297, + "stop_line": 300, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8581,9 +8497,9 @@ "severity": "error" }, { - "line": 298, + "line": 301, "column": 34, - "stop_line": 298, + "stop_line": 301, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8593,9 +8509,9 @@ "severity": "error" }, { - "line": 299, + "line": 302, "column": 39, - "stop_line": 299, + "stop_line": 302, "stop_column": 52, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8605,9 +8521,9 @@ "severity": "error" }, { - "line": 300, + "line": 303, "column": 34, - "stop_line": 300, + "stop_line": 303, "stop_column": 55, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8617,9 +8533,9 @@ "severity": "error" }, { - "line": 301, + "line": 304, "column": 34, - "stop_line": 301, + "stop_line": 304, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8629,9 +8545,9 @@ "severity": "error" }, { - "line": 305, + "line": 308, "column": 29, - "stop_line": 305, + "stop_line": 308, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8641,9 +8557,9 @@ "severity": "error" }, { - "line": 312, + "line": 315, "column": 25, - "stop_line": 316, + "stop_line": 319, "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8653,9 +8569,9 @@ "severity": "error" }, { - "line": 314, + "line": 317, "column": 29, - "stop_line": 314, + "stop_line": 317, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8665,9 +8581,9 @@ "severity": "error" }, { - "line": 322, + "line": 325, "column": 29, - "stop_line": 322, + "stop_line": 325, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8677,9 +8593,9 @@ "severity": "error" }, { - "line": 329, + "line": 332, "column": 25, - "stop_line": 333, + "stop_line": 336, "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8689,9 +8605,9 @@ "severity": "error" }, { - "line": 331, + "line": 334, "column": 29, - "stop_line": 331, + "stop_line": 334, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8701,9 +8617,9 @@ "severity": "error" }, { - "line": 337, + "line": 340, "column": 21, - "stop_line": 337, + "stop_line": 340, "stop_column": 35, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8713,9 +8629,9 @@ "severity": "error" }, { - "line": 357, + "line": 360, "column": 30, - "stop_line": 357, + "stop_line": 360, "stop_column": 51, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8725,9 +8641,9 @@ "severity": "error" }, { - "line": 401, + "line": 404, "column": 13, - "stop_line": 401, + "stop_line": 404, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8737,9 +8653,9 @@ "severity": "error" }, { - "line": 415, + "line": 418, "column": 34, - "stop_line": 415, + "stop_line": 418, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8749,9 +8665,9 @@ "severity": "error" }, { - "line": 417, + "line": 420, "column": 34, - "stop_line": 417, + "stop_line": 420, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8761,9 +8677,9 @@ "severity": "error" }, { - "line": 418, + "line": 421, "column": 34, - "stop_line": 418, + "stop_line": 421, "stop_column": 55, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8773,9 +8689,9 @@ "severity": "error" }, { - "line": 421, + "line": 424, "column": 26, - "stop_line": 421, + "stop_line": 424, "stop_column": 39, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8785,9 +8701,9 @@ "severity": "error" }, { - "line": 427, + "line": 430, "column": 29, - "stop_line": 427, + "stop_line": 430, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8797,9 +8713,9 @@ "severity": "error" }, { - "line": 452, + "line": 455, "column": 29, - "stop_line": 452, + "stop_line": 455, "stop_column": 50, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8809,9 +8725,9 @@ "severity": "error" }, { - "line": 469, + "line": 472, "column": 13, - "stop_line": 469, + "stop_line": 472, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8821,9 +8737,9 @@ "severity": "error" }, { - "line": 482, + "line": 485, "column": 34, - "stop_line": 482, + "stop_line": 485, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8833,9 +8749,9 @@ "severity": "error" }, { - "line": 521, + "line": 524, "column": 13, - "stop_line": 521, + "stop_line": 524, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8845,9 +8761,9 @@ "severity": "error" }, { - "line": 534, + "line": 537, "column": 35, - "stop_line": 534, + "stop_line": 537, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8857,9 +8773,9 @@ "severity": "error" }, { - "line": 535, + "line": 538, "column": 35, - "stop_line": 535, + "stop_line": 538, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8869,9 +8785,9 @@ "severity": "error" }, { - "line": 536, + "line": 539, "column": 34, - "stop_line": 536, + "stop_line": 539, "stop_column": 47, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8881,9 +8797,9 @@ "severity": "error" }, { - "line": 537, + "line": 540, "column": 35, - "stop_line": 537, + "stop_line": 540, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8893,9 +8809,9 @@ "severity": "error" }, { - "line": 538, + "line": 541, "column": 35, - "stop_line": 538, + "stop_line": 541, "stop_column": 49, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8905,9 +8821,9 @@ "severity": "error" }, { - "line": 541, + "line": 544, "column": 25, - "stop_line": 541, + "stop_line": 544, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8917,9 +8833,9 @@ "severity": "error" }, { - "line": 543, + "line": 546, "column": 28, - "stop_line": 543, + "stop_line": 546, "stop_column": 30, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8928,58 +8844,10 @@ "concise_description": "Missing positional argument `value` in function `list.count`", "severity": "error" }, - { - "line": 546, - "column": 34, - "stop_line": 546, - "stop_column": 71, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 546, - "column": 56, - "stop_line": 546, - "stop_column": 64, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, { "line": 549, - "column": 25, - "stop_line": 549, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 551, - "column": 28, - "stop_line": 551, - "stop_column": 30, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 554, "column": 34, - "stop_line": 554, + "stop_line": 549, "stop_column": 71, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -8989,9 +8857,9 @@ "severity": "error" }, { - "line": 554, + "line": 549, "column": 56, - "stop_line": 554, + "stop_line": 549, "stop_column": 64, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9001,9 +8869,57 @@ "severity": "error" }, { - "line": 555, + "line": 552, + "column": 25, + "stop_line": 552, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 554, + "column": 28, + "stop_line": 554, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 557, "column": 34, - "stop_line": 555, + "stop_line": 557, + "stop_column": 71, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 557, + "column": 56, + "stop_line": 557, + "stop_column": 64, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 558, + "column": 34, + "stop_line": 558, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9013,9 +8929,9 @@ "severity": "error" }, { - "line": 559, + "line": 562, "column": 45, - "stop_line": 559, + "stop_line": 562, "stop_column": 59, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9025,9 +8941,9 @@ "severity": "error" }, { - "line": 595, + "line": 598, "column": 13, - "stop_line": 595, + "stop_line": 598, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9036,202 +8952,22 @@ "concise_description": "Class `dirs` has no class attribute `scratch_dir`", "severity": "error" }, - { - "line": 608, - "column": 35, - "stop_line": 608, - "stop_column": 57, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `correspondent`", - "concise_description": "Object of class `NoneType` has no attribute `correspondent`", - "severity": "error" - }, - { - "line": 609, - "column": 35, - "stop_line": 609, - "stop_column": 57, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `document_type`", - "concise_description": "Object of class `NoneType` has no attribute `document_type`", - "severity": "error" - }, - { - "line": 610, - "column": 34, - "stop_line": 610, - "stop_column": 47, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `tags`", - "concise_description": "Object of class `NoneType` has no attribute `tags`", - "severity": "error" - }, { "line": 611, "column": 35, "stop_line": 611, - "stop_column": 56, + "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `storage_path`", - "concise_description": "Object of class `NoneType` has no attribute `storage_path`", + "description": "Object of class `NoneType` has no attribute `correspondent`", + "concise_description": "Object of class `NoneType` has no attribute `correspondent`", "severity": "error" }, { "line": 612, "column": 35, "stop_line": 612, - "stop_column": 49, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `owner`", - "concise_description": "Object of class `NoneType` has no attribute `owner`", - "severity": "error" - }, - { - "line": 615, - "column": 25, - "stop_line": 615, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 617, - "column": 28, - "stop_line": 617, - "stop_column": 30, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 621, - "column": 21, - "stop_line": 623, - "stop_column": 28, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 622, - "column": 25, - "stop_line": 622, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 628, - "column": 25, - "stop_line": 628, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 630, - "column": 28, - "stop_line": 630, - "stop_column": 30, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 634, - "column": 21, - "stop_line": 636, - "stop_column": 28, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 635, - "column": 25, - "stop_line": 635, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 639, - "column": 34, - "stop_line": 639, - "stop_column": 48, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `title`", - "concise_description": "Object of class `NoneType` has no attribute `title`", - "severity": "error" - }, - { - "line": 679, - "column": 13, - "stop_line": 679, - "stop_column": 34, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 693, - "column": 35, - "stop_line": 693, - "stop_column": 57, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `correspondent`", - "concise_description": "Object of class `NoneType` has no attribute `correspondent`", - "severity": "error" - }, - { - "line": 694, - "column": 35, - "stop_line": 694, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9241,9 +8977,9 @@ "severity": "error" }, { - "line": 695, + "line": 613, "column": 34, - "stop_line": 695, + "stop_line": 613, "stop_column": 47, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9252,154 +8988,154 @@ "concise_description": "Object of class `NoneType` has no attribute `tags`", "severity": "error" }, + { + "line": 614, + "column": 35, + "stop_line": 614, + "stop_column": 56, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `storage_path`", + "concise_description": "Object of class `NoneType` has no attribute `storage_path`", + "severity": "error" + }, + { + "line": 615, + "column": 35, + "stop_line": 615, + "stop_column": 49, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `owner`", + "concise_description": "Object of class `NoneType` has no attribute `owner`", + "severity": "error" + }, + { + "line": 618, + "column": 25, + "stop_line": 618, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 620, + "column": 28, + "stop_line": 620, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 624, + "column": 21, + "stop_line": 626, + "stop_column": 28, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 625, + "column": 25, + "stop_line": 625, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 631, + "column": 25, + "stop_line": 631, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 633, + "column": 28, + "stop_line": 633, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 637, + "column": 21, + "stop_line": 639, + "stop_column": 28, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 638, + "column": 25, + "stop_line": 638, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 642, + "column": 34, + "stop_line": 642, + "stop_column": 48, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `title`", + "concise_description": "Object of class `NoneType` has no attribute `title`", + "severity": "error" + }, + { + "line": 682, + "column": 13, + "stop_line": 682, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, { "line": 696, "column": 35, "stop_line": 696, - "stop_column": 56, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `storage_path`", - "concise_description": "Object of class `NoneType` has no attribute `storage_path`", - "severity": "error" - }, - { - "line": 697, - "column": 35, - "stop_line": 697, - "stop_column": 49, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `owner`", - "concise_description": "Object of class `NoneType` has no attribute `owner`", - "severity": "error" - }, - { - "line": 700, - "column": 25, - "stop_line": 700, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 702, - "column": 28, - "stop_line": 702, - "stop_column": 30, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 706, - "column": 21, - "stop_line": 708, - "stop_column": 28, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 707, - "column": 25, - "stop_line": 707, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 713, - "column": 25, - "stop_line": 713, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 715, - "column": 28, - "stop_line": 715, - "stop_column": 30, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 719, - "column": 21, - "stop_line": 721, - "stop_column": 28, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "severity": "error" - }, - { - "line": 720, - "column": 25, - "stop_line": 720, - "stop_column": 33, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 724, - "column": 34, - "stop_line": 724, - "stop_column": 48, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `title`", - "concise_description": "Object of class `NoneType` has no attribute `title`", - "severity": "error" - }, - { - "line": 764, - "column": 13, - "stop_line": 764, - "stop_column": 34, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 777, - "column": 35, - "stop_line": 777, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9409,9 +9145,9 @@ "severity": "error" }, { - "line": 778, + "line": 697, "column": 35, - "stop_line": 778, + "stop_line": 697, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9421,9 +9157,9 @@ "severity": "error" }, { - "line": 779, + "line": 698, "column": 34, - "stop_line": 779, + "stop_line": 698, "stop_column": 47, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9433,9 +9169,9 @@ "severity": "error" }, { - "line": 780, + "line": 699, "column": 35, - "stop_line": 780, + "stop_line": 699, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9445,9 +9181,9 @@ "severity": "error" }, { - "line": 781, + "line": 700, "column": 35, - "stop_line": 781, + "stop_line": 700, "stop_column": 49, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9457,9 +9193,9 @@ "severity": "error" }, { - "line": 784, + "line": 703, "column": 25, - "stop_line": 784, + "stop_line": 703, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9469,9 +9205,9 @@ "severity": "error" }, { - "line": 786, + "line": 705, "column": 28, - "stop_line": 786, + "stop_line": 705, "stop_column": 30, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9481,9 +9217,9 @@ "severity": "error" }, { - "line": 790, + "line": 709, "column": 21, - "stop_line": 792, + "stop_line": 711, "stop_column": 28, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9493,9 +9229,9 @@ "severity": "error" }, { - "line": 791, + "line": 710, "column": 25, - "stop_line": 791, + "stop_line": 710, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9505,9 +9241,9 @@ "severity": "error" }, { - "line": 797, + "line": 716, "column": 25, - "stop_line": 797, + "stop_line": 716, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9517,9 +9253,9 @@ "severity": "error" }, { - "line": 799, + "line": 718, "column": 28, - "stop_line": 799, + "stop_line": 718, "stop_column": 30, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9529,9 +9265,9 @@ "severity": "error" }, { - "line": 803, + "line": 722, "column": 21, - "stop_line": 805, + "stop_line": 724, "stop_column": 28, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9541,9 +9277,9 @@ "severity": "error" }, { - "line": 804, + "line": 723, "column": 25, - "stop_line": 804, + "stop_line": 723, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9553,9 +9289,9 @@ "severity": "error" }, { - "line": 808, + "line": 727, "column": 34, - "stop_line": 808, + "stop_line": 727, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9565,9 +9301,9 @@ "severity": "error" }, { - "line": 882, + "line": 767, "column": 13, - "stop_line": 882, + "stop_line": 767, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9577,9 +9313,189 @@ "severity": "error" }, { - "line": 896, + "line": 780, + "column": 35, + "stop_line": 780, + "stop_column": 57, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `correspondent`", + "concise_description": "Object of class `NoneType` has no attribute `correspondent`", + "severity": "error" + }, + { + "line": 781, + "column": 35, + "stop_line": 781, + "stop_column": 57, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `document_type`", + "concise_description": "Object of class `NoneType` has no attribute `document_type`", + "severity": "error" + }, + { + "line": 782, + "column": 34, + "stop_line": 782, + "stop_column": 47, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `tags`", + "concise_description": "Object of class `NoneType` has no attribute `tags`", + "severity": "error" + }, + { + "line": 783, + "column": 35, + "stop_line": 783, + "stop_column": 56, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `storage_path`", + "concise_description": "Object of class `NoneType` has no attribute `storage_path`", + "severity": "error" + }, + { + "line": 784, + "column": 35, + "stop_line": 784, + "stop_column": 49, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `owner`", + "concise_description": "Object of class `NoneType` has no attribute `owner`", + "severity": "error" + }, + { + "line": 787, + "column": 25, + "stop_line": 787, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 789, + "column": 28, + "stop_line": 789, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 793, + "column": 21, + "stop_line": 795, + "stop_column": 28, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 794, + "column": 25, + "stop_line": 794, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 800, + "column": 25, + "stop_line": 800, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 802, + "column": 28, + "stop_line": 802, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 806, + "column": 21, + "stop_line": 808, + "stop_column": 28, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 807, + "column": 25, + "stop_line": 807, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 811, + "column": 34, + "stop_line": 811, + "stop_column": 48, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `title`", + "concise_description": "Object of class `NoneType` has no attribute `title`", + "severity": "error" + }, + { + "line": 885, + "column": 13, + "stop_line": 885, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 899, "column": 26, - "stop_line": 896, + "stop_line": 899, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9589,9 +9505,9 @@ "severity": "error" }, { - "line": 1314, + "line": 1317, "column": 40, - "stop_line": 1314, + "stop_line": 1317, "stop_column": 46, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9601,9 +9517,9 @@ "severity": "error" }, { - "line": 1330, + "line": 1333, "column": 35, - "stop_line": 1330, + "stop_line": 1333, "stop_column": 41, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9613,9 +9529,9 @@ "severity": "error" }, { - "line": 1349, + "line": 1352, "column": 39, - "stop_line": 1349, + "stop_line": 1352, "stop_column": 45, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9625,9 +9541,9 @@ "severity": "error" }, { - "line": 1772, + "line": 1817, "column": 26, - "stop_line": 1772, + "stop_line": 1817, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9637,9 +9553,9 @@ "severity": "error" }, { - "line": 1797, + "line": 1842, "column": 13, - "stop_line": 1797, + "stop_line": 1842, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9649,9 +9565,9 @@ "severity": "error" }, { - "line": 1809, + "line": 1854, "column": 17, - "stop_line": 1809, + "stop_line": 1854, "stop_column": 31, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9661,9 +9577,9 @@ "severity": "error" }, { - "line": 1855, + "line": 1900, "column": 26, - "stop_line": 1855, + "stop_line": 1900, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9673,9 +9589,9 @@ "severity": "error" }, { - "line": 1904, + "line": 1949, "column": 38, - "stop_line": 1907, + "stop_line": 1952, "stop_column": 10, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9685,9 +9601,9 @@ "severity": "error" }, { - "line": 1908, + "line": 1953, "column": 40, - "stop_line": 1911, + "stop_line": 1956, "stop_column": 10, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9697,9 +9613,9 @@ "severity": "error" }, { - "line": 1919, + "line": 1964, "column": 33, - "stop_line": 1919, + "stop_line": 1964, "stop_column": 59, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9709,9 +9625,9 @@ "severity": "error" }, { - "line": 2598, + "line": 2697, "column": 26, - "stop_line": 2598, + "stop_line": 2697, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9721,9 +9637,9 @@ "severity": "error" }, { - "line": 2601, + "line": 2700, "column": 33, - "stop_line": 2601, + "stop_line": 2700, "stop_column": 59, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9733,9 +9649,9 @@ "severity": "error" }, { - "line": 2669, + "line": 2768, "column": 26, - "stop_line": 2669, + "stop_line": 2768, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9745,9 +9661,9 @@ "severity": "error" }, { - "line": 2672, + "line": 2771, "column": 33, - "stop_line": 2672, + "stop_line": 2771, "stop_column": 59, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9757,9 +9673,9 @@ "severity": "error" }, { - "line": 2736, + "line": 2835, "column": 13, - "stop_line": 2736, + "stop_line": 2835, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9769,9 +9685,9 @@ "severity": "error" }, { - "line": 2751, + "line": 2850, "column": 35, - "stop_line": 2751, + "stop_line": 2850, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9781,9 +9697,9 @@ "severity": "error" }, { - "line": 2752, + "line": 2851, "column": 35, - "stop_line": 2752, + "stop_line": 2851, "stop_column": 57, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9793,9 +9709,9 @@ "severity": "error" }, { - "line": 2754, + "line": 2853, "column": 26, - "stop_line": 2754, + "stop_line": 2853, "stop_column": 39, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9805,9 +9721,9 @@ "severity": "error" }, { - "line": 2757, + "line": 2856, "column": 35, - "stop_line": 2757, + "stop_line": 2856, "stop_column": 56, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9817,9 +9733,9 @@ "severity": "error" }, { - "line": 2758, + "line": 2857, "column": 35, - "stop_line": 2758, + "stop_line": 2857, "stop_column": 49, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9829,9 +9745,9 @@ "severity": "error" }, { - "line": 2762, + "line": 2861, "column": 29, - "stop_line": 2762, + "stop_line": 2861, "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -9841,166 +9757,34 @@ "severity": "error" }, { - "line": 2769, + "line": 2868, "column": 25, - "stop_line": 2773, - "stop_column": 22, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])\n Possible overloads:\n () -> None\n (iterable: Iterable[_T], /) -> None [closest match]", - "concise_description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])", - "severity": "error" - }, - { - "line": 2771, - "column": 29, - "stop_line": 2771, - "stop_column": 37, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 2779, - "column": 29, - "stop_line": 2779, - "stop_column": 37, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", - "severity": "error" - }, - { - "line": 2786, - "column": 25, - "stop_line": 2790, - "stop_column": 22, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])\n Possible overloads:\n () -> None\n (iterable: Iterable[_T], /) -> None [closest match]", - "concise_description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])", - "severity": "error" - }, - { - "line": 2788, - "column": 29, - "stop_line": 2788, - "stop_column": 37, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", - "severity": "error" - }, - { - "line": 2794, - "column": 21, - "stop_line": 2794, - "stop_column": 35, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `title`", - "concise_description": "Object of class `NoneType` has no attribute `title`", - "severity": "error" - }, - { - "line": 2798, - "column": 26, - "stop_line": 2798, - "stop_column": 48, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Document` has no attribute `custom_fields`\nObject of class `NoneType` has no attribute `custom_fields`", - "concise_description": "Object of class `Document` has no attribute `custom_fields`\nObject of class `NoneType` has no attribute `custom_fields`", - "severity": "error" - }, - { - "line": 2859, - "column": 13, - "stop_line": 2859, - "stop_column": 34, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Class `dirs` has no class attribute `scratch_dir`", - "concise_description": "Class `dirs` has no class attribute `scratch_dir`", - "severity": "error" - }, - { - "line": 2872, - "column": 35, "stop_line": 2872, - "stop_column": 57, + "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `correspondent`", - "concise_description": "Object of class `NoneType` has no attribute `correspondent`", + "name": "no-matching-overload", + "description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])\n Possible overloads:\n () -> None\n (iterable: Iterable[_T], /) -> None [closest match]", + "concise_description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])", "severity": "error" }, { - "line": 2873, - "column": 35, - "stop_line": 2873, - "stop_column": 57, + "line": 2870, + "column": 29, + "stop_line": 2870, + "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `document_type`", - "concise_description": "Object of class `NoneType` has no attribute `document_type`", + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", "severity": "error" }, { - "line": 2874, - "column": 34, - "stop_line": 2874, - "stop_column": 47, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `tags`", - "concise_description": "Object of class `NoneType` has no attribute `tags`", - "severity": "error" - }, - { - "line": 2876, - "column": 35, - "stop_line": 2876, - "stop_column": 56, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `storage_path`", - "concise_description": "Object of class `NoneType` has no attribute `storage_path`", - "severity": "error" - }, - { - "line": 2877, - "column": 35, - "stop_line": 2877, - "stop_column": 49, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `owner`", - "concise_description": "Object of class `NoneType` has no attribute `owner`", - "severity": "error" - }, - { - "line": 2880, - "column": 25, - "stop_line": 2880, - "stop_column": 33, + "line": 2878, + "column": 29, + "stop_line": 2878, + "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, "name": "bad-argument-type", @@ -10009,34 +9793,22 @@ "severity": "error" }, { - "line": 2882, - "column": 28, - "stop_line": 2882, - "stop_column": 30, + "line": 2885, + "column": 25, + "stop_line": 2889, + "stop_column": 22, "path": "src/documents/tests/test_workflows.py", "code": -2, - "name": "bad-argument-count", - "description": "Missing positional argument `value` in function `list.count`", - "concise_description": "Missing positional argument `value` in function `list.count`", - "severity": "error" - }, - { - "line": 2886, - "column": 21, - "stop_line": 2888, - "stop_column": 28, - "path": "src/documents/tests/test_workflows.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", - "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "name": "no-matching-overload", + "description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])\n Possible overloads:\n () -> None\n (iterable: Iterable[_T], /) -> None [closest match]", + "concise_description": "No matching overload found for function `list.__init__` called with arguments: (Group | dict[Unknown, Unknown])", "severity": "error" }, { "line": 2887, - "column": 25, + "column": 29, "stop_line": 2887, - "stop_column": 33, + "stop_column": 37, "path": "src/documents/tests/test_workflows.py", "code": -2, "name": "bad-argument-type", @@ -10046,8 +9818,104 @@ }, { "line": 2893, - "column": 25, + "column": 21, "stop_line": 2893, + "stop_column": 35, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `title`", + "concise_description": "Object of class `NoneType` has no attribute `title`", + "severity": "error" + }, + { + "line": 2897, + "column": 26, + "stop_line": 2897, + "stop_column": 48, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Document` has no attribute `custom_fields`\nObject of class `NoneType` has no attribute `custom_fields`", + "concise_description": "Object of class `Document` has no attribute `custom_fields`\nObject of class `NoneType` has no attribute `custom_fields`", + "severity": "error" + }, + { + "line": 2958, + "column": 13, + "stop_line": 2958, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 2971, + "column": 35, + "stop_line": 2971, + "stop_column": 57, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `correspondent`", + "concise_description": "Object of class `NoneType` has no attribute `correspondent`", + "severity": "error" + }, + { + "line": 2972, + "column": 35, + "stop_line": 2972, + "stop_column": 57, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `document_type`", + "concise_description": "Object of class `NoneType` has no attribute `document_type`", + "severity": "error" + }, + { + "line": 2973, + "column": 34, + "stop_line": 2973, + "stop_column": 47, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `tags`", + "concise_description": "Object of class `NoneType` has no attribute `tags`", + "severity": "error" + }, + { + "line": 2975, + "column": 35, + "stop_line": 2975, + "stop_column": 56, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `storage_path`", + "concise_description": "Object of class `NoneType` has no attribute `storage_path`", + "severity": "error" + }, + { + "line": 2976, + "column": 35, + "stop_line": 2976, + "stop_column": 49, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `owner`", + "concise_description": "Object of class `NoneType` has no attribute `owner`", + "severity": "error" + }, + { + "line": 2979, + "column": 25, + "stop_line": 2979, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10057,9 +9925,9 @@ "severity": "error" }, { - "line": 2895, + "line": 2981, "column": 28, - "stop_line": 2895, + "stop_line": 2981, "stop_column": 30, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10069,9 +9937,9 @@ "severity": "error" }, { - "line": 2899, + "line": 2985, "column": 21, - "stop_line": 2901, + "stop_line": 2987, "stop_column": 28, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10081,9 +9949,9 @@ "severity": "error" }, { - "line": 2900, + "line": 2986, "column": 25, - "stop_line": 2900, + "stop_line": 2986, "stop_column": 33, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10093,9 +9961,57 @@ "severity": "error" }, { - "line": 2905, + "line": 2992, + "column": 25, + "stop_line": 2992, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_users_with_perms`", + "severity": "error" + }, + { + "line": 2994, + "column": 28, + "stop_line": 2994, + "stop_column": 30, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-count", + "description": "Missing positional argument `value` in function `list.count`", + "concise_description": "Missing positional argument `value` in function `list.count`", + "severity": "error" + }, + { + "line": 2998, "column": 21, - "stop_line": 2905, + "stop_line": 3000, + "stop_column": 28, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "concise_description": "Object of class `Group` has no attribute `count`\nObject of class `dict` has no attribute `count`", + "severity": "error" + }, + { + "line": 2999, + "column": 25, + "stop_line": 2999, + "stop_column": 33, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "concise_description": "Argument `Document | None` is not assignable to parameter `obj` with type `Model` in function `guardian.shortcuts.get_groups_with_perms`", + "severity": "error" + }, + { + "line": 3004, + "column": 21, + "stop_line": 3004, "stop_column": 43, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10105,9 +10021,9 @@ "severity": "error" }, { - "line": 3014, + "line": 3113, "column": 13, - "stop_line": 3014, + "stop_line": 3113, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10117,9 +10033,9 @@ "severity": "error" }, { - "line": 3026, + "line": 3125, "column": 27, - "stop_line": 3026, + "stop_line": 3125, "stop_column": 44, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10129,9 +10045,9 @@ "severity": "error" }, { - "line": 3114, + "line": 3213, "column": 13, - "stop_line": 3114, + "stop_line": 3213, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10141,9 +10057,9 @@ "severity": "error" }, { - "line": 3152, + "line": 3251, "column": 13, - "stop_line": 3152, + "stop_line": 3251, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10153,9 +10069,9 @@ "severity": "error" }, { - "line": 3372, + "line": 3471, "column": 13, - "stop_line": 3372, + "stop_line": 3471, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10165,9 +10081,9 @@ "severity": "error" }, { - "line": 3492, + "line": 3591, "column": 13, - "stop_line": 3492, + "stop_line": 3591, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10177,9 +10093,9 @@ "severity": "error" }, { - "line": 3621, + "line": 3720, "column": 23, - "stop_line": 3621, + "stop_line": 3720, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10189,9 +10105,9 @@ "severity": "error" }, { - "line": 3639, + "line": 3738, "column": 23, - "stop_line": 3639, + "stop_line": 3738, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10201,9 +10117,9 @@ "severity": "error" }, { - "line": 3664, + "line": 3763, "column": 27, - "stop_line": 3664, + "stop_line": 3763, "stop_column": 31, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10213,9 +10129,9 @@ "severity": "error" }, { - "line": 3712, + "line": 3811, "column": 13, - "stop_line": 3712, + "stop_line": 3811, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10225,9 +10141,9 @@ "severity": "error" }, { - "line": 3761, + "line": 3860, "column": 23, - "stop_line": 3761, + "stop_line": 3860, "stop_column": 35, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10237,9 +10153,9 @@ "severity": "error" }, { - "line": 3810, + "line": 3909, "column": 23, - "stop_line": 3810, + "stop_line": 3909, "stop_column": 35, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10249,9 +10165,9 @@ "severity": "error" }, { - "line": 3842, + "line": 3941, "column": 23, - "stop_line": 3842, + "stop_line": 3941, "stop_column": 35, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10261,9 +10177,45 @@ "severity": "error" }, { - "line": 3939, + "line": 4154, + "column": 13, + "stop_line": 4154, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 4346, + "column": 13, + "stop_line": 4346, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 4410, + "column": 13, + "stop_line": 4410, + "stop_column": 34, + "path": "src/documents/tests/test_workflows.py", + "code": -2, + "name": "missing-attribute", + "description": "Class `dirs` has no class attribute `scratch_dir`", + "concise_description": "Class `dirs` has no class attribute `scratch_dir`", + "severity": "error" + }, + { + "line": 4459, "column": 19, - "stop_line": 3939, + "stop_line": 4459, "stop_column": 23, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10273,9 +10225,9 @@ "severity": "error" }, { - "line": 3942, + "line": 4462, "column": 16, - "stop_line": 3942, + "stop_line": 4462, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10285,9 +10237,9 @@ "severity": "error" }, { - "line": 3952, + "line": 4472, "column": 19, - "stop_line": 3952, + "stop_line": 4472, "stop_column": 23, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10297,9 +10249,9 @@ "severity": "error" }, { - "line": 3955, + "line": 4475, "column": 16, - "stop_line": 3955, + "stop_line": 4475, "stop_column": 48, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10309,9 +10261,9 @@ "severity": "error" }, { - "line": 3988, + "line": 4512, "column": 23, - "stop_line": 3988, + "stop_line": 4512, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10321,9 +10273,9 @@ "severity": "error" }, { - "line": 3997, + "line": 4521, "column": 23, - "stop_line": 3997, + "stop_line": 4521, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10333,9 +10285,9 @@ "severity": "error" }, { - "line": 4016, + "line": 4540, "column": 23, - "stop_line": 4016, + "stop_line": 4540, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10345,9 +10297,9 @@ "severity": "error" }, { - "line": 4043, + "line": 4567, "column": 23, - "stop_line": 4043, + "stop_line": 4567, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10357,9 +10309,9 @@ "severity": "error" }, { - "line": 4067, + "line": 4591, "column": 19, - "stop_line": 4067, + "stop_line": 4591, "stop_column": 23, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10369,9 +10321,9 @@ "severity": "error" }, { - "line": 4072, + "line": 4596, "column": 16, - "stop_line": 4072, + "stop_line": 4596, "stop_column": 23, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10381,9 +10333,9 @@ "severity": "error" }, { - "line": 4073, + "line": 4597, "column": 16, - "stop_line": 4073, + "stop_line": 4597, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10393,9 +10345,9 @@ "severity": "error" }, { - "line": 4097, + "line": 4621, "column": 23, - "stop_line": 4097, + "stop_line": 4621, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10405,9 +10357,9 @@ "severity": "error" }, { - "line": 4123, + "line": 4647, "column": 19, - "stop_line": 4123, + "stop_line": 4647, "stop_column": 23, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10417,9 +10369,9 @@ "severity": "error" }, { - "line": 4128, + "line": 4652, "column": 16, - "stop_line": 4128, + "stop_line": 4652, "stop_column": 27, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10429,9 +10381,9 @@ "severity": "error" }, { - "line": 4129, + "line": 4653, "column": 35, - "stop_line": 4129, + "stop_line": 4653, "stop_column": 46, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10441,9 +10393,9 @@ "severity": "error" }, { - "line": 4364, + "line": 4888, "column": 20, - "stop_line": 4364, + "stop_line": 4888, "stop_column": 34, "path": "src/documents/tests/test_workflows.py", "code": -2, @@ -10969,9 +10921,9 @@ "severity": "error" }, { - "line": 251, + "line": 269, "column": 31, - "stop_line": 251, + "stop_line": 269, "stop_column": 57, "path": "src/documents/views.py", "code": -2, @@ -10981,9 +10933,9 @@ "severity": "error" }, { - "line": 252, + "line": 270, "column": 32, - "stop_line": 252, + "stop_line": 270, "stop_column": 63, "path": "src/documents/views.py", "code": -2, @@ -10993,9 +10945,9 @@ "severity": "error" }, { - "line": 302, + "line": 325, "column": 17, - "stop_line": 302, + "stop_line": 325, "stop_column": 30, "path": "src/documents/views.py", "code": -2, @@ -11005,9 +10957,9 @@ "severity": "error" }, { - "line": 334, + "line": 357, "column": 19, - "stop_line": 334, + "stop_line": 357, "stop_column": 49, "path": "src/documents/views.py", "code": -2, @@ -11017,9 +10969,9 @@ "severity": "error" }, { - "line": 337, + "line": 360, "column": 21, - "stop_line": 337, + "stop_line": 360, "stop_column": 33, "path": "src/documents/views.py", "code": -2, @@ -11029,9 +10981,9 @@ "severity": "error" }, { - "line": 352, + "line": 375, "column": 24, - "stop_line": 352, + "stop_line": 375, "stop_column": 44, "path": "src/documents/views.py", "code": -2, @@ -11041,9 +10993,9 @@ "severity": "error" }, { - "line": 352, + "line": 375, "column": 45, - "stop_line": 352, + "stop_line": 375, "stop_column": 62, "path": "src/documents/views.py", "code": -2, @@ -11053,9 +11005,9 @@ "severity": "error" }, { - "line": 354, + "line": 377, "column": 22, - "stop_line": 354, + "stop_line": 377, "stop_column": 35, "path": "src/documents/views.py", "code": -2, @@ -11065,9 +11017,9 @@ "severity": "error" }, { - "line": 429, + "line": 476, "column": 29, - "stop_line": 429, + "stop_line": 476, "stop_column": 51, "path": "src/documents/views.py", "code": -2, @@ -11077,9 +11029,9 @@ "severity": "error" }, { - "line": 435, + "line": 482, "column": 25, - "stop_line": 435, + "stop_line": 482, "stop_column": 47, "path": "src/documents/views.py", "code": -2, @@ -11089,21 +11041,9 @@ "severity": "error" }, { - "line": 450, - "column": 15, - "stop_line": 450, - "stop_column": 37, - "path": "src/documents/views.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)\n Possible overloads:\n (cls: type[int], x: ConvertibleToInt = 0, /) -> int [closest match]\n (cls: type[int], x: bytearray | bytes | str, /, base: SupportsIndex) -> int", - "concise_description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)", - "severity": "error" - }, - { - "line": 498, + "line": 546, "column": 13, - "stop_line": 498, + "stop_line": 546, "stop_column": 65, "path": "src/documents/views.py", "code": -2, @@ -11113,21 +11053,21 @@ "severity": "error" }, { - "line": 819, + "line": 979, "column": 9, - "stop_line": 819, + "stop_line": 979, "stop_column": 16, "path": "src/documents/views.py", "code": -2, "name": "bad-override", - "description": "Class member `DocumentViewSet.destroy` overrides parent class `DestroyModelMixin` in an inconsistent manner\n `DocumentViewSet.destroy` has type `BoundMethod[DocumentViewSet, (self: DocumentViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response]`, which is not assignable to `BoundMethod[DocumentViewSet, (self: DocumentViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `DestroyModelMixin.destroy`", + "description": "Class member `DocumentViewSet.destroy` overrides parent class `DestroyModelMixin` in an inconsistent manner\n `DocumentViewSet.destroy` has type `(self: DocumentViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response`, which is not assignable to `(self: DocumentViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `DestroyModelMixin.destroy`\n Signature mismatch:\n ...umentViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n ...umentViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `DocumentViewSet.destroy` overrides parent class `DestroyModelMixin` in an inconsistent manner", "severity": "error" }, { - "line": 916, + "line": 1131, "column": 37, - "stop_line": 916, + "stop_line": 1131, "stop_column": 54, "path": "src/documents/views.py", "code": -2, @@ -11137,9 +11077,9 @@ "severity": "error" }, { - "line": 1027, + "line": 1242, "column": 45, - "stop_line": 1027, + "stop_line": 1242, "stop_column": 57, "path": "src/documents/views.py", "code": -2, @@ -11149,9 +11089,9 @@ "severity": "error" }, { - "line": 1040, + "line": 1255, "column": 61, - "stop_line": 1040, + "stop_line": 1255, "stop_column": 71, "path": "src/documents/views.py", "code": -2, @@ -11161,9 +11101,9 @@ "severity": "error" }, { - "line": 1042, + "line": 1257, "column": 56, - "stop_line": 1042, + "stop_line": 1257, "stop_column": 66, "path": "src/documents/views.py", "code": -2, @@ -11173,9 +11113,9 @@ "severity": "error" }, { - "line": 1044, + "line": 1259, "column": 63, - "stop_line": 1044, + "stop_line": 1259, "stop_column": 73, "path": "src/documents/views.py", "code": -2, @@ -11185,9 +11125,9 @@ "severity": "error" }, { - "line": 1047, + "line": 1262, "column": 62, - "stop_line": 1047, + "stop_line": 1262, "stop_column": 72, "path": "src/documents/views.py", "code": -2, @@ -11197,9 +11137,9 @@ "severity": "error" }, { - "line": 1151, + "line": 1375, "column": 21, - "stop_line": 1151, + "stop_line": 1375, "stop_column": 48, "path": "src/documents/views.py", "code": -2, @@ -11209,9 +11149,9 @@ "severity": "error" }, { - "line": 1186, + "line": 1410, "column": 17, - "stop_line": 1186, + "stop_line": 1410, "stop_column": 44, "path": "src/documents/views.py", "code": -2, @@ -11221,9 +11161,9 @@ "severity": "error" }, { - "line": 1213, + "line": 1437, "column": 5, - "stop_line": 1213, + "stop_line": 1437, "stop_column": 62, "path": "src/documents/views.py", "code": -2, @@ -11233,9 +11173,9 @@ "severity": "error" }, { - "line": 1270, + "line": 1494, "column": 26, - "stop_line": 1270, + "stop_line": 1494, "stop_column": 57, "path": "src/documents/views.py", "code": -2, @@ -11245,9 +11185,9 @@ "severity": "error" }, { - "line": 1276, + "line": 1500, "column": 22, - "stop_line": 1276, + "stop_line": 1500, "stop_column": 54, "path": "src/documents/views.py", "code": -2, @@ -11257,9 +11197,9 @@ "severity": "error" }, { - "line": 1277, + "line": 1501, "column": 13, - "stop_line": 1277, + "stop_line": 1501, "stop_column": 30, "path": "src/documents/views.py", "code": -2, @@ -11269,9 +11209,9 @@ "severity": "error" }, { - "line": 1311, + "line": 1535, "column": 36, - "stop_line": 1311, + "stop_line": 1535, "stop_column": 64, "path": "src/documents/views.py", "code": -2, @@ -11281,9 +11221,9 @@ "severity": "error" }, { - "line": 1351, + "line": 1575, "column": 30, - "stop_line": 1351, + "stop_line": 1575, "stop_column": 45, "path": "src/documents/views.py", "code": -2, @@ -11293,9 +11233,33 @@ "severity": "error" }, { - "line": 1424, + "line": 1743, + "column": 13, + "stop_line": 1743, + "stop_column": 40, + "path": "src/documents/views.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Manager` has no attribute `log_create`", + "concise_description": "Object of class `Manager` has no attribute `log_create`", + "severity": "error" + }, + { + "line": 1822, + "column": 13, + "stop_line": 1822, + "stop_column": 40, + "path": "src/documents/views.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `Manager` has no attribute `log_create`", + "concise_description": "Object of class `Manager` has no attribute `log_create`", + "severity": "error" + }, + { + "line": 1898, "column": 70, - "stop_line": 1424, + "stop_line": 1898, "stop_column": 79, "path": "src/documents/views.py", "code": -2, @@ -11305,21 +11269,21 @@ "severity": "error" }, { - "line": 1480, + "line": 1954, "column": 9, - "stop_line": 1480, + "stop_line": 1954, "stop_column": 24, "path": "src/documents/views.py", "code": -2, "name": "bad-override", - "description": "Class member `UnifiedSearchViewSet.filter_queryset` overrides parent class `DocumentViewSet` in an inconsistent manner\n `UnifiedSearchViewSet.filter_queryset` has type `BoundMethod[UnifiedSearchViewSet, (self: UnifiedSearchViewSet, queryset: Unknown) -> DelayedFullTextQuery | DelayedMoreLikeThisQuery | QuerySet[Unknown, Unknown]]`, which is not assignable to `BoundMethod[UnifiedSearchViewSet, (self: UnifiedSearchViewSet, queryset: QuerySet[Unknown, Unknown]) -> QuerySet[Unknown, Unknown]]`, the type of `DocumentViewSet.filter_queryset`", + "description": "Class member `UnifiedSearchViewSet.filter_queryset` overrides parent class `DocumentViewSet` in an inconsistent manner\n `UnifiedSearchViewSet.filter_queryset` has type `(self: UnifiedSearchViewSet, queryset: Unknown) -> DelayedFullTextQuery | DelayedMoreLikeThisQuery | QuerySet[Unknown, Unknown]`, which is not assignable to `(self: UnifiedSearchViewSet, queryset: QuerySet[Unknown, Unknown]) -> QuerySet[Unknown, Unknown]`, the type of `DocumentViewSet.filter_queryset`\n Signature mismatch:\n ...iedSearchViewSet, queryset: QuerySet[Unknown, Unknown]) -> QuerySet[Unknown, Unknown]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n ...iedSearchViewSet, queryset: Unknown) -> DelayedFullTextQuery | DelayedMoreLikeThisQuery | QuerySet[Unknown, Unknown]: ...\n ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `UnifiedSearchViewSet.filter_queryset` overrides parent class `DocumentViewSet` in an inconsistent manner", "severity": "error" }, { - "line": 1494, + "line": 1968, "column": 17, - "stop_line": 1494, + "stop_line": 1968, "stop_column": 30, "path": "src/documents/views.py", "code": -2, @@ -11329,9 +11293,9 @@ "severity": "error" }, { - "line": 1496, + "line": 1970, "column": 17, - "stop_line": 1496, + "stop_line": 1970, "stop_column": 45, "path": "src/documents/views.py", "code": -2, @@ -11341,21 +11305,21 @@ "severity": "error" }, { - "line": 1502, + "line": 1976, "column": 9, - "stop_line": 1502, + "stop_line": 1976, "stop_column": 13, "path": "src/documents/views.py", "code": -2, "name": "bad-override", - "description": "Class member `UnifiedSearchViewSet.list` overrides parent class `DocumentViewSet` in an inconsistent manner\n `UnifiedSearchViewSet.list` has type `BoundMethod[UnifiedSearchViewSet, (self: UnifiedSearchViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response]`, which is not assignable to `BoundMethod[UnifiedSearchViewSet, (self: UnifiedSearchViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `DocumentViewSet.list`", + "description": "Class member `UnifiedSearchViewSet.list` overrides parent class `DocumentViewSet` in an inconsistent manner\n `UnifiedSearchViewSet.list` has type `(self: UnifiedSearchViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response`, which is not assignable to `(self: UnifiedSearchViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `DocumentViewSet.list`\n Signature mismatch:\n ...earchViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n ...earchViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `UnifiedSearchViewSet.list` overrides parent class `DocumentViewSet` in an inconsistent manner", "severity": "error" }, { - "line": 1510, + "line": 1984, "column": 51, - "stop_line": 1510, + "stop_line": 1984, "stop_column": 59, "path": "src/documents/views.py", "code": -2, @@ -11365,9 +11329,9 @@ "severity": "error" }, { - "line": 1539, + "line": 2013, "column": 25, - "stop_line": 1539, + "stop_line": 2013, "stop_column": 36, "path": "src/documents/views.py", "code": -2, @@ -11377,9 +11341,9 @@ "severity": "error" }, { - "line": 1704, + "line": 2182, "column": 16, - "stop_line": 1704, + "stop_line": 2182, "stop_column": 33, "path": "src/documents/views.py", "code": -2, @@ -11389,9 +11353,9 @@ "severity": "error" }, { - "line": 1713, + "line": 2191, "column": 25, - "stop_line": 1713, + "stop_line": 2191, "stop_column": 38, "path": "src/documents/views.py", "code": -2, @@ -11401,9 +11365,9 @@ "severity": "error" }, { - "line": 1750, + "line": 2228, "column": 25, - "stop_line": 1750, + "stop_line": 2228, "stop_column": 38, "path": "src/documents/views.py", "code": -2, @@ -11413,9 +11377,9 @@ "severity": "error" }, { - "line": 1764, + "line": 2242, "column": 25, - "stop_line": 1764, + "stop_line": 2242, "stop_column": 38, "path": "src/documents/views.py", "code": -2, @@ -11425,9 +11389,9 @@ "severity": "error" }, { - "line": 1793, + "line": 2271, "column": 33, - "stop_line": 1793, + "stop_line": 2271, "stop_column": 46, "path": "src/documents/views.py", "code": -2, @@ -11437,9 +11401,9 @@ "severity": "error" }, { - "line": 1803, + "line": 2281, "column": 21, - "stop_line": 1803, + "stop_line": 2281, "stop_column": 48, "path": "src/documents/views.py", "code": -2, @@ -11449,9 +11413,9 @@ "severity": "error" }, { - "line": 2009, + "line": 2494, "column": 52, - "stop_line": 2009, + "stop_line": 2494, "stop_column": 68, "path": "src/documents/views.py", "code": -2, @@ -11461,9 +11425,9 @@ "severity": "error" }, { - "line": 2013, + "line": 2498, "column": 52, - "stop_line": 2013, + "stop_line": 2498, "stop_column": 68, "path": "src/documents/views.py", "code": -2, @@ -11473,9 +11437,9 @@ "severity": "error" }, { - "line": 2016, + "line": 2501, "column": 52, - "stop_line": 2016, + "stop_line": 2501, "stop_column": 68, "path": "src/documents/views.py", "code": -2, @@ -11485,9 +11449,9 @@ "severity": "error" }, { - "line": 2019, + "line": 2504, "column": 52, - "stop_line": 2019, + "stop_line": 2504, "stop_column": 68, "path": "src/documents/views.py", "code": -2, @@ -11497,9 +11461,9 @@ "severity": "error" }, { - "line": 2023, + "line": 2508, "column": 52, - "stop_line": 2023, + "stop_line": 2508, "stop_column": 68, "path": "src/documents/views.py", "code": -2, @@ -11509,9 +11473,9 @@ "severity": "error" }, { - "line": 2083, + "line": 2568, "column": 17, - "stop_line": 2083, + "stop_line": 2568, "stop_column": 21, "path": "src/documents/views.py", "code": -2, @@ -11521,9 +11485,21 @@ "severity": "error" }, { - "line": 3051, + "line": 3264, + "column": 32, + "stop_line": 3264, + "stop_column": 43, + "path": "src/documents/views.py", + "code": -2, + "name": "bad-argument-type", + "description": "Unpacked keyword argument `bool | Unknown` is not assignable to parameter `iter_wrapper` with type `(Iterable[Document]) -> Iterable[Document]` in function `celery.app.task.Task.__call__`", + "concise_description": "Unpacked keyword argument `bool | Unknown` is not assignable to parameter `iter_wrapper` with type `(Iterable[Document]) -> Iterable[Document]` in function `celery.app.task.Task.__call__`", + "severity": "error" + }, + { + "line": 3555, "column": 24, - "stop_line": 3051, + "stop_line": 3555, "stop_column": 51, "path": "src/documents/views.py", "code": -2, @@ -11533,9 +11509,9 @@ "severity": "error" }, { - "line": 3056, + "line": 3560, "column": 16, - "stop_line": 3056, + "stop_line": 3560, "stop_column": 33, "path": "src/documents/views.py", "code": -2, @@ -11545,9 +11521,9 @@ "severity": "error" }, { - "line": 3063, + "line": 3567, "column": 25, - "stop_line": 3063, + "stop_line": 3567, "stop_column": 38, "path": "src/documents/views.py", "code": -2, @@ -11557,45 +11533,33 @@ "severity": "error" }, { - "line": 3118, + "line": 3622, "column": 9, - "stop_line": 3118, + "stop_line": 3622, "stop_column": 23, "path": "src/documents/views.py", "code": -2, "name": "bad-override", - "description": "Class member `WorkflowTriggerViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner\n `WorkflowTriggerViewSet.partial_update` has type `BoundMethod[WorkflowTriggerViewSet, (self: WorkflowTriggerViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response]`, which is not assignable to `BoundMethod[WorkflowTriggerViewSet, (self: WorkflowTriggerViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `ModelViewSet.partial_update`", + "description": "Class member `WorkflowTriggerViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner\n `WorkflowTriggerViewSet.partial_update` has type `(self: WorkflowTriggerViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response`, which is not assignable to `(self: WorkflowTriggerViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `ModelViewSet.partial_update`\n Signature mismatch:\n ...iggerViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n ...iggerViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `WorkflowTriggerViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner", "severity": "error" }, { - "line": 3143, + "line": 3647, "column": 9, - "stop_line": 3143, + "stop_line": 3647, "stop_column": 23, "path": "src/documents/views.py", "code": -2, "name": "bad-override", - "description": "Class member `WorkflowActionViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner\n `WorkflowActionViewSet.partial_update` has type `BoundMethod[WorkflowActionViewSet, (self: WorkflowActionViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response]`, which is not assignable to `BoundMethod[WorkflowActionViewSet, (self: WorkflowActionViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `ModelViewSet.partial_update`", + "description": "Class member `WorkflowActionViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner\n `WorkflowActionViewSet.partial_update` has type `(self: WorkflowActionViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response`, which is not assignable to `(self: WorkflowActionViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `ModelViewSet.partial_update`\n Signature mismatch:\n ...ctionViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n ...ctionViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseBadRequest | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `WorkflowActionViewSet.partial_update` overrides parent class `ModelViewSet` in an inconsistent manner", "severity": "error" }, { - "line": 3187, - "column": 45, - "stop_line": 3187, - "stop_column": 75, - "path": "src/documents/views.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `AbstractBaseUser` has no attribute `is_superuser`", - "concise_description": "Object of class `AbstractBaseUser` has no attribute `is_superuser`", - "severity": "error" - }, - { - "line": 3343, + "line": 3823, "column": 36, - "stop_line": 3343, + "stop_line": 3823, "stop_column": 52, "path": "src/documents/views.py", "code": -2, @@ -11605,9 +11569,9 @@ "severity": "error" }, { - "line": 3344, + "line": 3824, "column": 33, - "stop_line": 3344, + "stop_line": 3824, "stop_column": 56, "path": "src/documents/views.py", "code": -2, @@ -11617,9 +11581,9 @@ "severity": "error" }, { - "line": 3459, + "line": 3939, "column": 40, - "stop_line": 3459, + "stop_line": 3939, "stop_column": 54, "path": "src/documents/views.py", "code": -2, @@ -11629,9 +11593,9 @@ "severity": "error" }, { - "line": 3467, + "line": 3947, "column": 38, - "stop_line": 3467, + "stop_line": 3947, "stop_column": 51, "path": "src/documents/views.py", "code": -2, @@ -11641,9 +11605,9 @@ "severity": "error" }, { - "line": 3531, + "line": 4016, "column": 16, - "stop_line": 3531, + "stop_line": 4016, "stop_column": 31, "path": "src/documents/views.py", "code": -2, @@ -11653,9 +11617,9 @@ "severity": "error" }, { - "line": 36, + "line": 38, "column": 22, - "stop_line": 36, + "stop_line": 38, "stop_column": 36, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11665,9 +11629,9 @@ "severity": "error" }, { - "line": 37, + "line": 39, "column": 80, - "stop_line": 37, + "stop_line": 39, "stop_column": 91, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11677,9 +11641,9 @@ "severity": "error" }, { - "line": 38, + "line": 40, "column": 30, - "stop_line": 38, + "stop_line": 40, "stop_column": 57, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11689,9 +11653,9 @@ "severity": "error" }, { - "line": 39, + "line": 41, "column": 16, - "stop_line": 39, + "stop_line": 41, "stop_column": 38, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11701,9 +11665,9 @@ "severity": "error" }, { - "line": 41, + "line": 43, "column": 30, - "stop_line": 41, + "stop_line": 43, "stop_column": 57, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11713,9 +11677,9 @@ "severity": "error" }, { - "line": 42, + "line": 44, "column": 16, - "stop_line": 42, + "stop_line": 44, "stop_column": 38, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11725,9 +11689,9 @@ "severity": "error" }, { - "line": 44, + "line": 46, "column": 31, - "stop_line": 44, + "stop_line": 46, "stop_column": 54, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11737,9 +11701,9 @@ "severity": "error" }, { - "line": 44, + "line": 46, "column": 58, - "stop_line": 44, + "stop_line": 46, "stop_column": 72, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11749,9 +11713,9 @@ "severity": "error" }, { - "line": 45, + "line": 47, "column": 25, - "stop_line": 45, + "stop_line": 47, "stop_column": 51, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11761,9 +11725,9 @@ "severity": "error" }, { - "line": 46, + "line": 48, "column": 33, - "stop_line": 46, + "stop_line": 48, "stop_column": 50, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11773,9 +11737,9 @@ "severity": "error" }, { - "line": 47, + "line": 49, "column": 41, - "stop_line": 47, + "stop_line": 49, "stop_column": 55, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11785,9 +11749,9 @@ "severity": "error" }, { - "line": 48, + "line": 50, "column": 24, - "stop_line": 48, + "stop_line": 50, "stop_column": 40, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11797,9 +11761,9 @@ "severity": "error" }, { - "line": 49, + "line": 51, "column": 19, - "stop_line": 49, + "stop_line": 51, "stop_column": 30, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11809,9 +11773,9 @@ "severity": "error" }, { - "line": 68, + "line": 70, "column": 42, - "stop_line": 68, + "stop_line": 70, "stop_column": 64, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11821,9 +11785,9 @@ "severity": "error" }, { - "line": 106, + "line": 108, "column": 13, - "stop_line": 106, + "stop_line": 108, "stop_column": 33, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11833,9 +11797,9 @@ "severity": "error" }, { - "line": 118, + "line": 120, "column": 12, - "stop_line": 118, + "stop_line": 120, "stop_column": 32, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11845,9 +11809,9 @@ "severity": "error" }, { - "line": 123, + "line": 125, "column": 13, - "stop_line": 123, + "stop_line": 125, "stop_column": 30, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11857,9 +11821,9 @@ "severity": "error" }, { - "line": 135, + "line": 137, "column": 12, - "stop_line": 135, + "stop_line": 137, "stop_column": 29, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11869,9 +11833,9 @@ "severity": "error" }, { - "line": 141, + "line": 143, "column": 12, - "stop_line": 141, + "stop_line": 143, "stop_column": 41, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11881,9 +11845,9 @@ "severity": "error" }, { - "line": 174, + "line": 176, "column": 16, - "stop_line": 174, + "stop_line": 176, "stop_column": 31, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11893,9 +11857,9 @@ "severity": "error" }, { - "line": 178, + "line": 180, "column": 59, - "stop_line": 178, + "stop_line": 180, "stop_column": 74, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11905,9 +11869,9 @@ "severity": "error" }, { - "line": 197, + "line": 199, "column": 12, - "stop_line": 197, + "stop_line": 199, "stop_column": 37, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11917,9 +11881,9 @@ "severity": "error" }, { - "line": 198, + "line": 200, "column": 16, - "stop_line": 198, + "stop_line": 200, "stop_column": 37, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11929,9 +11893,9 @@ "severity": "error" }, { - "line": 200, + "line": 202, "column": 39, - "stop_line": 200, + "stop_line": 202, "stop_column": 66, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11941,9 +11905,9 @@ "severity": "error" }, { - "line": 219, + "line": 221, "column": 14, - "stop_line": 219, + "stop_line": 221, "stop_column": 33, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11953,9 +11917,9 @@ "severity": "error" }, { - "line": 221, + "line": 223, "column": 17, - "stop_line": 221, + "stop_line": 223, "stop_column": 36, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11965,9 +11929,9 @@ "severity": "error" }, { - "line": 234, + "line": 236, "column": 12, - "stop_line": 234, + "stop_line": 236, "stop_column": 34, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11977,9 +11941,9 @@ "severity": "error" }, { - "line": 236, + "line": 238, "column": 55, - "stop_line": 236, + "stop_line": 238, "stop_column": 83, "path": "src/documents/workflows/actions.py", "code": -2, @@ -11989,9 +11953,9 @@ "severity": "error" }, { - "line": 243, + "line": 245, "column": 12, - "stop_line": 243, + "stop_line": 245, "stop_column": 43, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12001,9 +11965,9 @@ "severity": "error" }, { - "line": 255, + "line": 257, "column": 17, - "stop_line": 255, + "stop_line": 257, "stop_column": 35, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12013,9 +11977,9 @@ "severity": "error" }, { - "line": 258, + "line": 260, "column": 19, - "stop_line": 258, + "stop_line": 260, "stop_column": 24, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12025,9 +11989,9 @@ "severity": "error" }, { - "line": 259, + "line": 261, "column": 21, - "stop_line": 259, + "stop_line": 261, "stop_column": 43, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12037,9 +12001,9 @@ "severity": "error" }, { - "line": 262, + "line": 264, "column": 27, - "stop_line": 262, + "stop_line": 264, "stop_column": 45, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12049,9 +12013,9 @@ "severity": "error" }, { - "line": 298, + "line": 300, "column": 43, - "stop_line": 298, + "stop_line": 300, "stop_column": 65, "path": "src/documents/workflows/actions.py", "code": -2, @@ -12416,7 +12380,7 @@ "path": "src/paperless/adapter.py", "code": -2, "name": "bad-override", - "description": "Class member `CustomAccountAdapter.is_open_for_signup` overrides parent class `DefaultAccountAdapter` in an inconsistent manner\n `CustomAccountAdapter.is_open_for_signup` has type `BoundMethod[CustomAccountAdapter, (self: CustomAccountAdapter, request: Unknown) -> bool | Any]`, which is not assignable to `BoundMethod[CustomAccountAdapter, (self: CustomAccountAdapter, request: Unknown) -> Literal[True]]`, the type of `DefaultAccountAdapter.is_open_for_signup`", + "description": "Class member `CustomAccountAdapter.is_open_for_signup` overrides parent class `DefaultAccountAdapter` in an inconsistent manner\n `CustomAccountAdapter.is_open_for_signup` has type `(self: CustomAccountAdapter, request: Unknown) -> bool | Any`, which is not assignable to `(self: CustomAccountAdapter, request: Unknown) -> Literal[True]`, the type of `DefaultAccountAdapter.is_open_for_signup`\n Signature mismatch:\n expected: def is_open_for_signup(self: CustomAccountAdapter, request: Unknown) -> Literal[True]: ...\n ^^^^^^^^^^^^^ return type\n found: def is_open_for_signup(self: CustomAccountAdapter, request: Unknown) -> bool | Any: ...\n ^^^^^^^^^^ return type", "concise_description": "Class member `CustomAccountAdapter.is_open_for_signup` overrides parent class `DefaultAccountAdapter` in an inconsistent manner", "severity": "error" }, @@ -12452,7 +12416,7 @@ "path": "src/paperless/adapter.py", "code": -2, "name": "bad-override", - "description": "Class member `CustomSocialAccountAdapter.is_open_for_signup` overrides parent class `DefaultSocialAccountAdapter` in an inconsistent manner\n `CustomSocialAccountAdapter.is_open_for_signup` has type `BoundMethod[CustomSocialAccountAdapter, (self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> bool | Any]`, which is not assignable to `BoundMethod[CustomSocialAccountAdapter, (self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> Literal[True]]`, the type of `DefaultSocialAccountAdapter.is_open_for_signup`", + "description": "Class member `CustomSocialAccountAdapter.is_open_for_signup` overrides parent class `DefaultSocialAccountAdapter` in an inconsistent manner\n `CustomSocialAccountAdapter.is_open_for_signup` has type `(self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> bool | Any`, which is not assignable to `(self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> Literal[True]`, the type of `DefaultSocialAccountAdapter.is_open_for_signup`\n Signature mismatch:\n expected: def is_open_for_signup(self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> Literal[True]: ...\n ^^^^^^^^^^^^^ return type\n found: def is_open_for_signup(self: CustomSocialAccountAdapter, request: Unknown, sociallogin: Unknown) -> bool | Any: ...\n ^^^^^^^^^^ return type", "concise_description": "Class member `CustomSocialAccountAdapter.is_open_for_signup` overrides parent class `DefaultSocialAccountAdapter` in an inconsistent manner", "severity": "error" }, @@ -12488,7 +12452,7 @@ "path": "src/paperless/admin.py", "code": -2, "name": "bad-override", - "description": "Class member `PaperlessUserAdmin.get_form` overrides parent class `UserAdmin` in an inconsistent manner\n `PaperlessUserAdmin.get_form` has type `BoundMethod[PaperlessUserAdmin, (self: PaperlessUserAdmin, request: Unknown, obj: Unknown | None = None, **kwargs: Unknown) -> type[ModelForm[Unknown]]]`, which is not assignable to `BoundMethod[PaperlessUserAdmin, (self: PaperlessUserAdmin, request: HttpRequest, obj: Unknown | None = ..., change: bool = ..., **kwargs: Any) -> type[ModelForm[Unknown]]]`, the type of `UserAdmin.get_form`", + "description": "Class member `PaperlessUserAdmin.get_form` overrides parent class `UserAdmin` in an inconsistent manner\n `PaperlessUserAdmin.get_form` has type `(self: PaperlessUserAdmin, request: Unknown, obj: Unknown | None = None, **kwargs: Unknown) -> type[ModelForm[Unknown]]`, which is not assignable to `(self: PaperlessUserAdmin, request: HttpRequest, obj: Unknown | None = ..., change: bool = ..., **kwargs: Any) -> type[ModelForm[Unknown]]`, the type of `UserAdmin.get_form`\n Signature mismatch:\n ...essUserAdmin, request: HttpRequest, obj: Unknown | None = ..., change: bool = ..., **kwargs: Any) -> type[ModelForm[Unknown]]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters\n ...essUserAdmin, request: Unknown, obj: Unknown | None = None, **kwargs: Unknown) -> type[ModelForm[Unknown]]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters", "concise_description": "Class member `PaperlessUserAdmin.get_form` overrides parent class `UserAdmin` in an inconsistent manner", "severity": "error" }, @@ -12553,9 +12517,9 @@ "severity": "error" }, { - "line": 211, + "line": 199, "column": 13, - "stop_line": 213, + "stop_line": 201, "stop_column": 14, "path": "src/paperless/checks.py", "code": -2, @@ -12728,7 +12692,7 @@ "path": "src/paperless/serialisers.py", "code": -2, "name": "bad-override", - "description": "Class member `ApplicationConfigurationSerializer.run_validation` overrides parent class `ModelSerializer` in an inconsistent manner\n `ApplicationConfigurationSerializer.run_validation` has type `BoundMethod[ApplicationConfigurationSerializer, (self: ApplicationConfigurationSerializer, data: Unknown) -> Any]`, which is not assignable to `BoundMethod[ApplicationConfigurationSerializer, (self: ApplicationConfigurationSerializer, data: Any = ...) -> Any]`, the type of `ModelSerializer.run_validation`", + "description": "Class member `ApplicationConfigurationSerializer.run_validation` overrides parent class `ModelSerializer` in an inconsistent manner\n `ApplicationConfigurationSerializer.run_validation` has type `(self: ApplicationConfigurationSerializer, data: Unknown) -> Any`, which is not assignable to `(self: ApplicationConfigurationSerializer, data: Any = ...) -> Any`, the type of `ModelSerializer.run_validation`\n Signature mismatch:\n expected: def run_validation(self: ApplicationConfigurationSerializer, data: Any = ...) -> Any: ...\n ^^^^^^^^^ parameters\n found: def run_validation(self: ApplicationConfigurationSerializer, data: Unknown) -> Any: ...\n ^^^^^^^ parameters", "concise_description": "Class member `ApplicationConfigurationSerializer.run_validation` overrides parent class `ModelSerializer` in an inconsistent manner", "severity": "error" }, @@ -12745,11 +12709,23 @@ "severity": "error" }, { - "line": 301, + "line": 260, + "column": 26, + "stop_line": 260, + "stop_column": 64, + "path": "src/paperless/settings/__init__.py", + "code": -2, + "name": "no-matching-overload", + "description": "No matching overload found for function `os.getenv` called with arguments: (dict[str, float] | str, dict[str, float] | str)\n Possible overloads:\n (key: str) -> str | None\n (key: str, default: _T) -> str | _T [closest match]", + "concise_description": "No matching overload found for function `os.getenv` called with arguments: (dict[str, float] | str, dict[str, float] | str)", + "severity": "error" + }, + { + "line": 303, "column": 39, - "stop_line": 301, + "stop_line": 303, "stop_column": 77, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-argument-type", "description": "Argument `str | None` is not assignable to parameter `default` with type `PathLike[Unknown] | str` in function `__get_path`", @@ -12757,11 +12733,11 @@ "severity": "error" }, { - "line": 434, + "line": 436, "column": 12, - "stop_line": 434, + "stop_line": 436, "stop_column": 85, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-return", "description": "Returned type `tuple[str | None, str, str, str, str]` is not assignable to declared return type `tuple[str, str, str, str, str]`", @@ -12769,11 +12745,11 @@ "severity": "error" }, { - "line": 665, + "line": 667, "column": 30, - "stop_line": 665, + "stop_line": 667, "stop_column": 52, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-argument-type", "description": "Argument `str | None` is not assignable to parameter `object` with type `str` in function `list.append`", @@ -12781,107 +12757,11 @@ "severity": "error" }, { - "line": 739, - "column": 21, - "stop_line": 739, - "stop_column": 50, - "path": "src/paperless/settings.py", - "code": -2, - "name": "bad-typed-dict-key", - "description": "`str | None` is not assignable to TypedDict key with type `Path | dict[Unknown, Unknown] | str`", - "concise_description": "`str | None` is not assignable to TypedDict key with type `Path | dict[Unknown, Unknown] | str`", - "severity": "error" - }, - { - "line": 740, - "column": 21, - "stop_line": 740, - "stop_column": 63, - "path": "src/paperless/settings.py", - "code": -2, - "name": "bad-typed-dict-key", - "description": "`str` is not assignable to TypedDict key `NAME` with type `Path`", - "concise_description": "`str` is not assignable to TypedDict key `NAME` with type `Path`", - "severity": "error" - }, - { - "line": 746, - "column": 44, - "stop_line": 746, - "stop_column": 73, - "path": "src/paperless/settings.py", - "code": -2, - "name": "bad-typed-dict-key", - "description": "`str | None` is not assignable to TypedDict key `PORT` with type `Path | dict[Unknown, Unknown] | str`", - "concise_description": "`str | None` is not assignable to TypedDict key `PORT` with type `Path | dict[Unknown, Unknown] | str`", - "severity": "error" - }, - { - "line": 774, - "column": 31, - "stop_line": 781, - "stop_column": 18, - "path": "src/paperless/settings.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `typing.MutableMapping.update` called with arguments: (dict[str, dict[str, int]])\n Possible overloads:\n (m: SupportsKeysAndGetItem[str, str | None], /) -> None [closest match]\n (m: SupportsKeysAndGetItem[str, str | None], /, **kwargs: str | None) -> None\n (m: Iterable[tuple[str, str | None]], /) -> None\n (m: Iterable[tuple[str, str | None]], /, **kwargs: str | None) -> None\n (**kwargs: str | None) -> None", - "concise_description": "No matching overload found for function `typing.MutableMapping.update` called with arguments: (dict[str, dict[str, int]])", - "severity": "error" - }, - { - "line": 778, - "column": 44, - "stop_line": 778, - "stop_column": 80, - "path": "src/paperless/settings.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)\n Possible overloads:\n (cls: type[int], x: ConvertibleToInt = 0, /) -> int [closest match]\n (cls: type[int], x: bytearray | bytes | str, /, base: SupportsIndex) -> int", - "concise_description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)", - "severity": "error" - }, - { - "line": 789, - "column": 32, - "stop_line": 789, - "stop_column": 67, - "path": "src/paperless/settings.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)\n Possible overloads:\n (cls: type[int], x: ConvertibleToInt = 0, /) -> int [closest match]\n (cls: type[int], x: bytearray | bytes | str, /, base: SupportsIndex) -> int", - "concise_description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)", - "severity": "error" - }, - { - "line": 793, - "column": 40, - "stop_line": 793, - "stop_column": 75, - "path": "src/paperless/settings.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)\n Possible overloads:\n (cls: type[int], x: ConvertibleToInt = 0, /) -> int [closest match]\n (cls: type[int], x: bytearray | bytes | str, /, base: SupportsIndex) -> int", - "concise_description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)", - "severity": "error" - }, - { - "line": 796, - "column": 32, - "stop_line": 796, - "stop_column": 67, - "path": "src/paperless/settings.py", - "code": -2, - "name": "no-matching-overload", - "description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)\n Possible overloads:\n (cls: type[int], x: ConvertibleToInt = 0, /) -> int [closest match]\n (cls: type[int], x: bytearray | bytes | str, /, base: SupportsIndex) -> int", - "concise_description": "No matching overload found for function `int.__new__` called with arguments: (type[int], str | None)", - "severity": "error" - }, - { - "line": 1328, + "line": 1250, "column": 12, - "stop_line": 1328, + "stop_line": 1250, "stop_column": 25, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-return", "description": "Returned type `set[date]` is not assignable to declared return type `set[datetime]`", @@ -12889,11 +12769,11 @@ "severity": "error" }, { - "line": 1335, + "line": 1257, "column": 20, - "stop_line": 1335, + "stop_line": 1257, "stop_column": 76, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-assignment", "description": "`set[datetime]` is not assignable to variable `IGNORE_DATES` with type `set[date]`", @@ -12901,11 +12781,11 @@ "severity": "error" }, { - "line": 1335, + "line": 1257, "column": 40, - "stop_line": 1335, + "stop_line": 1257, "stop_column": 75, - "path": "src/paperless/settings.py", + "path": "src/paperless/settings/__init__.py", "code": -2, "name": "bad-argument-type", "description": "Argument `str | None` is not assignable to parameter `env_ignore` with type `str` in function `_parse_ignore_dates`", @@ -12913,9 +12793,9 @@ "severity": "error" }, { - "line": 41, + "line": 45, "column": 14, - "stop_line": 41, + "stop_line": 45, "stop_column": 32, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12925,9 +12805,9 @@ "severity": "error" }, { - "line": 42, + "line": 46, "column": 14, - "stop_line": 42, + "stop_line": 46, "stop_column": 33, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12937,9 +12817,9 @@ "severity": "error" }, { - "line": 43, + "line": 47, "column": 14, - "stop_line": 43, + "stop_line": 47, "stop_column": 39, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12949,9 +12829,9 @@ "severity": "error" }, { - "line": 45, + "line": 49, "column": 35, - "stop_line": 45, + "stop_line": 49, "stop_column": 53, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12961,9 +12841,9 @@ "severity": "error" }, { - "line": 46, + "line": 50, "column": 35, - "stop_line": 46, + "stop_line": 50, "stop_column": 54, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12973,9 +12853,9 @@ "severity": "error" }, { - "line": 47, + "line": 51, "column": 35, - "stop_line": 47, + "stop_line": 51, "stop_column": 60, "path": "src/paperless/tests/test_checks.py", "code": -2, @@ -12984,6 +12864,78 @@ "concise_description": "Class `dirs` has no class attribute `consumption_dir`", "severity": "error" }, + { + "line": 302, + "column": 16, + "stop_line": 302, + "stop_column": 39, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "not-iterable", + "description": "`in` is not supported between `str` and `None`", + "concise_description": "`in` is not supported between `str` and `None`", + "severity": "error" + }, + { + "line": 303, + "column": 16, + "stop_line": 303, + "stop_column": 45, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "not-iterable", + "description": "`in` is not supported between `str` and `None`", + "concise_description": "`in` is not supported between `str` and `None`", + "severity": "error" + }, + { + "line": 321, + "column": 29, + "stop_line": 321, + "stop_column": 53, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "no-matching-overload", + "description": "No matching overload found for function `str.join` called with arguments: (Generator[str | None, None, None])\n Possible overloads:\n (iterable: Iterable[LiteralString], /) -> LiteralString [closest match]\n (iterable: Iterable[str], /) -> str", + "concise_description": "No matching overload found for function `str.join` called with arguments: (Generator[str | None, None, None])", + "severity": "error" + }, + { + "line": 351, + "column": 16, + "stop_line": 351, + "stop_column": 56, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "not-iterable", + "description": "`in` is not supported between `Literal['PAPERLESS_DB_TIMEOUT']` and `None`", + "concise_description": "`in` is not supported between `Literal['PAPERLESS_DB_TIMEOUT']` and `None`", + "severity": "error" + }, + { + "line": 354, + "column": 20, + "stop_line": 354, + "stop_column": 50, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "not-iterable", + "description": "`not in` is not supported between `str` and `None`", + "concise_description": "`not in` is not supported between `str` and `None`", + "severity": "error" + }, + { + "line": 382, + "column": 16, + "stop_line": 382, + "stop_column": 56, + "path": "src/paperless/tests/test_checks.py", + "code": -2, + "name": "not-iterable", + "description": "`in` is not supported between `Literal['PAPERLESS_DB_OPTIONS']` and `None`", + "concise_description": "`in` is not supported between `Literal['PAPERLESS_DB_OPTIONS']` and `None`", + "severity": "error" + }, { "line": 294, "column": 23, @@ -13280,7 +13232,7 @@ "path": "src/paperless/views.py", "code": -2, "name": "bad-override", - "description": "Class member `UserViewSet.create` overrides parent class `ModelViewSet` in an inconsistent manner\n `UserViewSet.create` has type `BoundMethod[UserViewSet, (self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response]`, which is not assignable to `BoundMethod[UserViewSet, (self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `ModelViewSet.create`", + "description": "Class member `UserViewSet.create` overrides parent class `ModelViewSet` in an inconsistent manner\n `UserViewSet.create` has type `(self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response`, which is not assignable to `(self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `ModelViewSet.create`\n Signature mismatch:\n expected: def create(self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n found: def create(self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `UserViewSet.create` overrides parent class `ModelViewSet` in an inconsistent manner", "severity": "error" }, @@ -13292,7 +13244,7 @@ "path": "src/paperless/views.py", "code": -2, "name": "bad-override", - "description": "Class member `UserViewSet.update` overrides parent class `ModelViewSet` in an inconsistent manner\n `UserViewSet.update` has type `BoundMethod[UserViewSet, (self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response]`, which is not assignable to `BoundMethod[UserViewSet, (self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response]`, the type of `ModelViewSet.update`", + "description": "Class member `UserViewSet.update` overrides parent class `ModelViewSet` in an inconsistent manner\n `UserViewSet.update` has type `(self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response`, which is not assignable to `(self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response`, the type of `ModelViewSet.update`\n Signature mismatch:\n expected: def update(self: UserViewSet, request: Request, *args: Any, **kwargs: Any) -> Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ return type\n |\n parameters\n found: def update(self: UserViewSet, request: Unknown, *args: Unknown, **kwargs: Unknown) -> HttpResponseForbidden | Response: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ return type\n |\n parameters", "concise_description": "Class member `UserViewSet.update` overrides parent class `ModelViewSet` in an inconsistent manner", "severity": "error" }, @@ -13381,9 +13333,9 @@ "severity": "error" }, { - "line": 416, + "line": 415, "column": 23, - "stop_line": 416, + "stop_line": 415, "stop_column": 45, "path": "src/paperless/views.py", "code": -2, @@ -13429,9 +13381,9 @@ "severity": "error" }, { - "line": 86, + "line": 87, "column": 21, - "stop_line": 86, + "stop_line": 87, "stop_column": 38, "path": "src/paperless_ai/embedding.py", "code": -2, @@ -13441,9 +13393,9 @@ "severity": "error" }, { - "line": 241, + "line": 255, "column": 46, - "stop_line": 241, + "stop_line": 255, "stop_column": 51, "path": "src/paperless_ai/indexing.py", "code": -2, @@ -13453,9 +13405,9 @@ "severity": "error" }, { - "line": 254, + "line": 268, "column": 46, - "stop_line": 254, + "stop_line": 268, "stop_column": 51, "path": "src/paperless_ai/indexing.py", "code": -2, @@ -13465,9 +13417,9 @@ "severity": "error" }, { - "line": 305, + "line": 319, "column": 15, - "stop_line": 305, + "stop_line": 319, "stop_column": 20, "path": "src/paperless_ai/indexing.py", "code": -2, @@ -13484,7 +13436,7 @@ "path": "src/paperless_ai/tests/test_ai_indexing.py", "code": -2, "name": "bad-override", - "description": "Class member `FakeEmbedding._aget_query_embedding` overrides parent class `BaseEmbedding` in an inconsistent manner\n `FakeEmbedding._aget_query_embedding` has type `BoundMethod[FakeEmbedding, (self: FakeEmbedding, query: str) -> list[float]]`, which is not assignable to `BoundMethod[FakeEmbedding, (self: FakeEmbedding, query: str) -> Coroutine[Unknown, Unknown, list[float]]]`, the type of `BaseEmbedding._aget_query_embedding`", + "description": "Class member `FakeEmbedding._aget_query_embedding` overrides parent class `BaseEmbedding` in an inconsistent manner\n `FakeEmbedding._aget_query_embedding` has type `(self: FakeEmbedding, query: str) -> list[float]`, which is not assignable to `(self: FakeEmbedding, query: str) -> Coroutine[Unknown, Unknown, list[float]]`, the type of `BaseEmbedding._aget_query_embedding`\n Signature mismatch:\n expected: def _aget_query_embedding(self: FakeEmbedding, query: str) -> Coroutine[Unknown, Unknown, list[float]]: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return type\n found: def _aget_query_embedding(self: FakeEmbedding, query: str) -> list[float]: ...\n ^^^^^^^^^^ return type", "concise_description": "Class member `FakeEmbedding._aget_query_embedding` overrides parent class `BaseEmbedding` in an inconsistent manner", "severity": "error" }, @@ -13592,7 +13544,7 @@ "path": "src/paperless_mail/mail.py", "code": -2, "name": "bad-override", - "description": "Class member `DeleteMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `DeleteMailAction.post_consume` has type `BoundMethod[DeleteMailAction, (self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> None]`, which is not assignable to `BoundMethod[DeleteMailAction, (self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> Never]`, the type of `BaseMailAction.post_consume`", + "description": "Class member `DeleteMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `DeleteMailAction.post_consume` has type `(self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> None`, which is not assignable to `(self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> Never`, the type of `BaseMailAction.post_consume`\n Signature mismatch:\n expected: def post_consume(self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> Never: ...\n ^^^^ return type\n found: def post_consume(self: DeleteMailAction, M: MailBox, message_uid: str, parameter: str) -> None: ...\n ^^^ return type", "concise_description": "Class member `DeleteMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner", "severity": "error" }, @@ -13604,7 +13556,7 @@ "path": "src/paperless_mail/mail.py", "code": -2, "name": "bad-override", - "description": "Class member `MarkReadMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `MarkReadMailAction.post_consume` has type `BoundMethod[MarkReadMailAction, (self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> None]`, which is not assignable to `BoundMethod[MarkReadMailAction, (self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> Never]`, the type of `BaseMailAction.post_consume`", + "description": "Class member `MarkReadMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `MarkReadMailAction.post_consume` has type `(self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> None`, which is not assignable to `(self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> Never`, the type of `BaseMailAction.post_consume`\n Signature mismatch:\n expected: def post_consume(self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> Never: ...\n ^^^^ return type\n found: def post_consume(self: MarkReadMailAction, M: MailBox, message_uid: str, parameter: str) -> None: ...\n ^^^ return type", "concise_description": "Class member `MarkReadMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner", "severity": "error" }, @@ -13616,7 +13568,7 @@ "path": "src/paperless_mail/mail.py", "code": -2, "name": "bad-override", - "description": "Class member `MoveMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `MoveMailAction.post_consume` has type `BoundMethod[MoveMailAction, (self: MoveMailAction, M: Unknown, message_uid: Unknown, parameter: Unknown) -> None]`, which is not assignable to `BoundMethod[MoveMailAction, (self: MoveMailAction, M: MailBox, message_uid: str, parameter: str) -> Never]`, the type of `BaseMailAction.post_consume`", + "description": "Class member `MoveMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `MoveMailAction.post_consume` has type `(self: MoveMailAction, M: Unknown, message_uid: Unknown, parameter: Unknown) -> None`, which is not assignable to `(self: MoveMailAction, M: MailBox, message_uid: str, parameter: str) -> Never`, the type of `BaseMailAction.post_consume`\n Signature mismatch:\n expected: def post_consume(self: MoveMailAction, M: MailBox, message_uid: str, parameter: str) -> Never: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ return type\n |\n parameters\n found: def post_consume(self: MoveMailAction, M: Unknown, message_uid: Unknown, parameter: Unknown) -> None: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ return type\n |\n parameters", "concise_description": "Class member `MoveMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner", "severity": "error" }, @@ -13628,7 +13580,7 @@ "path": "src/paperless_mail/mail.py", "code": -2, "name": "bad-override", - "description": "Class member `FlagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `FlagMailAction.post_consume` has type `BoundMethod[FlagMailAction, (self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> None]`, which is not assignable to `BoundMethod[FlagMailAction, (self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never]`, the type of `BaseMailAction.post_consume`", + "description": "Class member `FlagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `FlagMailAction.post_consume` has type `(self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> None`, which is not assignable to `(self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never`, the type of `BaseMailAction.post_consume`\n Signature mismatch:\n expected: def post_consume(self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never: ...\n ^^^^ return type\n found: def post_consume(self: FlagMailAction, M: MailBox, message_uid: str, parameter: str) -> None: ...\n ^^^ return type", "concise_description": "Class member `FlagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner", "severity": "error" }, @@ -13652,7 +13604,7 @@ "path": "src/paperless_mail/mail.py", "code": -2, "name": "bad-override", - "description": "Class member `TagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `TagMailAction.post_consume` has type `BoundMethod[TagMailAction, (self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> None]`, which is not assignable to `BoundMethod[TagMailAction, (self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never]`, the type of `BaseMailAction.post_consume`", + "description": "Class member `TagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner\n `TagMailAction.post_consume` has type `(self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> None`, which is not assignable to `(self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never`, the type of `BaseMailAction.post_consume`\n Signature mismatch:\n expected: def post_consume(self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> Never: ...\n ^^^^ return type\n found: def post_consume(self: TagMailAction, M: MailBox, message_uid: str, parameter: str) -> None: ...\n ^^^ return type", "concise_description": "Class member `TagMailAction.post_consume` overrides parent class `BaseMailAction` in an inconsistent manner", "severity": "error" }, @@ -14317,9 +14269,9 @@ "severity": "error" }, { - "line": 565, + "line": 566, "column": 54, - "stop_line": 565, + "stop_line": 566, "stop_column": 67, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14329,9 +14281,9 @@ "severity": "error" }, { - "line": 568, + "line": 569, "column": 29, - "stop_line": 568, + "stop_line": 569, "stop_column": 42, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14341,9 +14293,9 @@ "severity": "error" }, { - "line": 607, + "line": 615, "column": 31, - "stop_line": 607, + "stop_line": 615, "stop_column": 52, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14353,9 +14305,9 @@ "severity": "error" }, { - "line": 614, + "line": 622, "column": 44, - "stop_line": 614, + "stop_line": 622, "stop_column": 50, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14365,9 +14317,9 @@ "severity": "error" }, { - "line": 626, + "line": 634, "column": 40, - "stop_line": 626, + "stop_line": 634, "stop_column": 46, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14377,9 +14329,9 @@ "severity": "error" }, { - "line": 926, + "line": 951, "column": 40, - "stop_line": 926, + "stop_line": 951, "stop_column": 60, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14389,9 +14341,9 @@ "severity": "error" }, { - "line": 930, + "line": 955, "column": 32, - "stop_line": 930, + "stop_line": 955, "stop_column": 52, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14401,9 +14353,9 @@ "severity": "error" }, { - "line": 931, + "line": 956, "column": 32, - "stop_line": 931, + "stop_line": 956, "stop_column": 52, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14413,9 +14365,9 @@ "severity": "error" }, { - "line": 932, + "line": 957, "column": 17, - "stop_line": 932, + "stop_line": 957, "stop_column": 37, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14425,9 +14377,9 @@ "severity": "error" }, { - "line": 946, + "line": 971, "column": 27, - "stop_line": 946, + "stop_line": 971, "stop_column": 40, "path": "src/paperless_mail/mail.py", "code": -2, @@ -14509,33 +14461,33 @@ "severity": "error" }, { - "line": 55, + "line": 56, "column": 9, - "stop_line": 55, + "stop_line": 56, "stop_column": 22, "path": "src/paperless_mail/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `MailDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.get_thumbnail` has type `BoundMethod[MailDocumentParser, (self: MailDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> Path]`, which is not assignable to `BoundMethod[MailDocumentParser, (self: MailDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.get_thumbnail`", + "description": "Class member `MailDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.get_thumbnail` has type `(self: MailDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> Path`, which is not assignable to `(self: MailDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.get_thumbnail`\n Signature mismatch:\n ...Parser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters ^^^^^ return type\n ...Parser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> Path: ...\n ^^^^^^^^^^^^^^^^^^^^ parameters ^^^^ return type", "concise_description": "Class member `MailDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, { - "line": 125, + "line": 126, "column": 9, - "stop_line": 125, + "stop_line": 126, "stop_column": 14, "path": "src/paperless_mail/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `MailDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.parse` has type `BoundMethod[MailDocumentParser, (self: MailDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None, mailrule_id: int | None = None) -> None]`, which is not assignable to `BoundMethod[MailDocumentParser, (self: MailDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.parse`", + "description": "Class member `MailDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.parse` has type `(self: MailDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None, mailrule_id: int | None = None) -> None`, which is not assignable to `(self: MailDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.parse`\n Signature mismatch:\n ...ment_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters ^^^^ return type\n ...ment_path: Path, mime_type: str, file_name: Unknown | None = None, mailrule_id: int | None = None) -> None: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters ^^^ return type", "concise_description": "Class member `MailDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, { - "line": 151, + "line": 152, "column": 34, - "stop_line": 151, + "stop_line": 152, "stop_column": 63, "path": "src/paperless_mail/parsers.py", "code": -2, @@ -14545,9 +14497,9 @@ "severity": "error" }, { - "line": 192, + "line": 193, "column": 57, - "stop_line": 192, + "stop_line": 193, "stop_column": 72, "path": "src/paperless_mail/parsers.py", "code": -2, @@ -14557,9 +14509,9 @@ "severity": "error" }, { - "line": 313, + "line": 314, "column": 35, - "stop_line": 313, + "stop_line": 314, "stop_column": 56, "path": "src/paperless_mail/parsers.py", "code": -2, @@ -14569,14 +14521,14 @@ "severity": "error" }, { - "line": 474, + "line": 477, "column": 9, - "stop_line": 474, + "stop_line": 477, "stop_column": 21, "path": "src/paperless_mail/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `MailDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.get_settings` has type `BoundMethod[MailDocumentParser, (self: MailDocumentParser) -> None]`, which is not assignable to `BoundMethod[MailDocumentParser, (self: MailDocumentParser) -> Never]`, the type of `DocumentParser.get_settings`", + "description": "Class member `MailDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `MailDocumentParser.get_settings` has type `(self: MailDocumentParser) -> None`, which is not assignable to `(self: MailDocumentParser) -> Never`, the type of `DocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: MailDocumentParser) -> Never: ...\n ^^^^ return type\n found: def get_settings(self: MailDocumentParser) -> None: ...\n ^^^ return type", "concise_description": "Class member `MailDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -14617,9 +14569,9 @@ "severity": "error" }, { - "line": 137, + "line": 138, "column": 11, - "stop_line": 137, + "stop_line": 138, "stop_column": 15, "path": "src/paperless_mail/serialisers.py", "code": -2, @@ -14629,9 +14581,9 @@ "severity": "error" }, { - "line": 55, + "line": 56, "column": 44, - "stop_line": 55, + "stop_line": 56, "stop_column": 48, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14641,9 +14593,9 @@ "severity": "error" }, { - "line": 74, + "line": 75, "column": 37, - "stop_line": 74, + "stop_line": 75, "stop_column": 42, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14653,9 +14605,9 @@ "severity": "error" }, { - "line": 117, + "line": 118, "column": 37, - "stop_line": 117, + "stop_line": 118, "stop_column": 42, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14665,9 +14617,9 @@ "severity": "error" }, { - "line": 122, + "line": 123, "column": 37, - "stop_line": 122, + "stop_line": 123, "stop_column": 42, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14677,9 +14629,9 @@ "severity": "error" }, { - "line": 126, + "line": 127, "column": 37, - "stop_line": 126, + "stop_line": 127, "stop_column": 42, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14689,9 +14641,9 @@ "severity": "error" }, { - "line": 172, + "line": 173, "column": 25, - "stop_line": 172, + "stop_line": 173, "stop_column": 40, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14701,9 +14653,9 @@ "severity": "error" }, { - "line": 174, + "line": 175, "column": 25, - "stop_line": 174, + "stop_line": 175, "stop_column": 37, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14712,22 +14664,22 @@ "concise_description": "Object of class `MailMessage` has no attribute `seen`", "severity": "error" }, - { - "line": 260, - "column": 9, - "stop_line": 260, - "stop_column": 22, - "path": "src/paperless_mail/tests/test_mail.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `MailMessage` has no attribute `seen`", - "concise_description": "Object of class `MailMessage` has no attribute `seen`", - "severity": "error" - }, { "line": 261, "column": 9, "stop_line": 261, + "stop_column": 22, + "path": "src/paperless_mail/tests/test_mail.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `MailMessage` has no attribute `seen`", + "concise_description": "Object of class `MailMessage` has no attribute `seen`", + "severity": "error" + }, + { + "line": 262, + "column": 9, + "stop_line": 262, "stop_column": 25, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14737,9 +14689,9 @@ "severity": "error" }, { - "line": 419, + "line": 420, "column": 30, - "stop_line": 419, + "stop_line": 420, "stop_column": 43, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14749,9 +14701,9 @@ "severity": "error" }, { - "line": 426, + "line": 427, "column": 31, - "stop_line": 426, + "stop_line": 427, "stop_column": 44, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14761,9 +14713,9 @@ "severity": "error" }, { - "line": 433, + "line": 434, "column": 58, - "stop_line": 433, + "stop_line": 434, "stop_column": 72, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14773,9 +14725,9 @@ "severity": "error" }, { - "line": 442, + "line": 443, "column": 54, - "stop_line": 442, + "stop_line": 443, "stop_column": 61, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14785,9 +14737,9 @@ "severity": "error" }, { - "line": 448, + "line": 449, "column": 40, - "stop_line": 448, + "stop_line": 449, "stop_column": 47, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14797,9 +14749,9 @@ "severity": "error" }, { - "line": 453, + "line": 454, "column": 40, - "stop_line": 453, + "stop_line": 454, "stop_column": 48, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14809,9 +14761,9 @@ "severity": "error" }, { - "line": 462, + "line": 463, "column": 40, - "stop_line": 462, + "stop_line": 463, "stop_column": 47, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14821,9 +14773,9 @@ "severity": "error" }, { - "line": 465, + "line": 466, "column": 40, - "stop_line": 465, + "stop_line": 466, "stop_column": 48, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14833,9 +14785,9 @@ "severity": "error" }, { - "line": 474, + "line": 475, "column": 40, - "stop_line": 474, + "stop_line": 475, "stop_column": 47, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14845,9 +14797,9 @@ "severity": "error" }, { - "line": 478, + "line": 479, "column": 30, - "stop_line": 478, + "stop_line": 479, "stop_column": 43, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14857,9 +14809,9 @@ "severity": "error" }, { - "line": 480, + "line": 481, "column": 26, - "stop_line": 480, + "stop_line": 481, "stop_column": 38, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14869,9 +14821,9 @@ "severity": "error" }, { - "line": 489, + "line": 490, "column": 45, - "stop_line": 489, + "stop_line": 490, "stop_column": 52, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14881,9 +14833,9 @@ "severity": "error" }, { - "line": 489, + "line": 490, "column": 54, - "stop_line": 489, + "stop_line": 490, "stop_column": 57, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14893,9 +14845,9 @@ "severity": "error" }, { - "line": 494, + "line": 495, "column": 45, - "stop_line": 494, + "stop_line": 495, "stop_column": 52, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14905,9 +14857,9 @@ "severity": "error" }, { - "line": 494, + "line": 495, "column": 54, - "stop_line": 494, + "stop_line": 495, "stop_column": 57, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14917,9 +14869,9 @@ "severity": "error" }, { - "line": 499, + "line": 500, "column": 45, - "stop_line": 499, + "stop_line": 500, "stop_column": 52, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14929,9 +14881,9 @@ "severity": "error" }, { - "line": 499, + "line": 500, "column": 54, - "stop_line": 499, + "stop_line": 500, "stop_column": 57, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14941,9 +14893,9 @@ "severity": "error" }, { - "line": 531, + "line": 532, "column": 30, - "stop_line": 531, + "stop_line": 532, "stop_column": 43, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14953,9 +14905,9 @@ "severity": "error" }, { - "line": 1168, + "line": 1245, "column": 9, - "stop_line": 1168, + "stop_line": 1245, "stop_column": 50, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14965,9 +14917,9 @@ "severity": "error" }, { - "line": 1174, + "line": 1251, "column": 9, - "stop_line": 1174, + "stop_line": 1251, "stop_column": 50, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14977,9 +14929,9 @@ "severity": "error" }, { - "line": 1201, + "line": 1278, "column": 9, - "stop_line": 1201, + "stop_line": 1278, "stop_column": 50, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -14989,9 +14941,9 @@ "severity": "error" }, { - "line": 1207, + "line": 1284, "column": 9, - "stop_line": 1207, + "stop_line": 1284, "stop_column": 50, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -15001,9 +14953,9 @@ "severity": "error" }, { - "line": 1269, + "line": 1346, "column": 13, - "stop_line": 1273, + "stop_line": 1350, "stop_column": 14, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -15013,9 +14965,9 @@ "severity": "error" }, { - "line": 1288, + "line": 1365, "column": 13, - "stop_line": 1292, + "stop_line": 1369, "stop_column": 14, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -15025,9 +14977,9 @@ "severity": "error" }, { - "line": 1583, + "line": 1660, "column": 41, - "stop_line": 1583, + "stop_line": 1660, "stop_column": 61, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -15037,9 +14989,9 @@ "severity": "error" }, { - "line": 1886, + "line": 2050, "column": 26, - "stop_line": 1886, + "stop_line": 2050, "stop_column": 35, "path": "src/paperless_mail/tests/test_mail.py", "code": -2, @@ -15097,9 +15049,9 @@ "severity": "error" }, { - "line": 110, + "line": 111, "column": 45, - "stop_line": 110, + "stop_line": 111, "stop_column": 49, "path": "src/paperless_mail/tests/test_parsers.py", "code": -2, @@ -15109,9 +15061,9 @@ "severity": "error" }, { - "line": 315, + "line": 316, "column": 47, - "stop_line": 315, + "stop_line": 316, "stop_column": 75, "path": "src/paperless_mail/tests/test_parsers.py", "code": -2, @@ -15121,9 +15073,9 @@ "severity": "error" }, { - "line": 669, + "line": 671, "column": 20, - "stop_line": 669, + "stop_line": 671, "stop_column": 31, "path": "src/paperless_mail/tests/test_parsers.py", "code": -2, @@ -15205,45 +15157,9 @@ "severity": "error" }, { - "line": 114, - "column": 66, - "stop_line": 114, - "stop_column": 82, - "path": "src/paperless_mail/views.py", - "code": -2, - "name": "unbound-name", - "description": "`existing_account` may be uninitialized", - "concise_description": "`existing_account` may be uninitialized", - "severity": "error" - }, - { - "line": 116, - "column": 25, - "stop_line": 116, - "stop_column": 41, - "path": "src/paperless_mail/views.py", - "code": -2, - "name": "unbound-name", - "description": "`existing_account` may be uninitialized", - "concise_description": "`existing_account` may be uninitialized", - "severity": "error" - }, - { - "line": 117, - "column": 44, - "stop_line": 117, - "stop_column": 60, - "path": "src/paperless_mail/views.py", - "code": -2, - "name": "unbound-name", - "description": "`existing_account` may be uninitialized", - "concise_description": "`existing_account` may be uninitialized", - "severity": "error" - }, - { - "line": 242, + "line": 264, "column": 28, - "stop_line": 242, + "stop_line": 264, "stop_column": 34, "path": "src/paperless_mail/views.py", "code": -2, @@ -15253,9 +15169,9 @@ "severity": "error" }, { - "line": 243, + "line": 265, "column": 29, - "stop_line": 243, + "stop_line": 265, "stop_column": 35, "path": "src/paperless_mail/views.py", "code": -2, @@ -15265,9 +15181,9 @@ "severity": "error" }, { - "line": 244, + "line": 266, "column": 26, - "stop_line": 244, + "stop_line": 266, "stop_column": 32, "path": "src/paperless_mail/views.py", "code": -2, @@ -15277,9 +15193,9 @@ "severity": "error" }, { - "line": 248, + "line": 270, "column": 29, - "stop_line": 248, + "stop_line": 270, "stop_column": 40, "path": "src/paperless_mail/views.py", "code": -2, @@ -15289,9 +15205,9 @@ "severity": "error" }, { - "line": 251, + "line": 274, "column": 26, - "stop_line": 251, + "stop_line": 274, "stop_column": 34, "path": "src/paperless_mail/views.py", "code": -2, @@ -15308,7 +15224,7 @@ "path": "src/paperless_remote/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `RemoteDocumentParser.get_settings` overrides parent class `RasterisedDocumentParser` in an inconsistent manner\n `RemoteDocumentParser.get_settings` has type `BoundMethod[RemoteDocumentParser, (self: RemoteDocumentParser) -> RemoteEngineConfig]`, which is not assignable to `BoundMethod[RemoteDocumentParser, (self: RemoteDocumentParser) -> OcrConfig]`, the type of `RasterisedDocumentParser.get_settings`", + "description": "Class member `RemoteDocumentParser.get_settings` overrides parent class `RasterisedDocumentParser` in an inconsistent manner\n `RemoteDocumentParser.get_settings` has type `(self: RemoteDocumentParser) -> RemoteEngineConfig`, which is not assignable to `(self: RemoteDocumentParser) -> OcrConfig`, the type of `RasterisedDocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: RemoteDocumentParser) -> OcrConfig: ...\n ^^^ return type\n found: def get_settings(self: RemoteDocumentParser) -> RemoteEngineConfig: ...\n ^^^^^^^^^^^^ return type", "concise_description": "Class member `RemoteDocumentParser.get_settings` overrides parent class `RasterisedDocumentParser` in an inconsistent manner", "severity": "error" }, @@ -15368,7 +15284,7 @@ "path": "src/paperless_tesseract/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `RasterisedDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_settings` has type `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser) -> OcrConfig]`, which is not assignable to `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser) -> Never]`, the type of `DocumentParser.get_settings`", + "description": "Class member `RasterisedDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_settings` has type `(self: RasterisedDocumentParser) -> OcrConfig`, which is not assignable to `(self: RasterisedDocumentParser) -> Never`, the type of `DocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: RasterisedDocumentParser) -> Never: ...\n ^^^^^ return type\n found: def get_settings(self: RasterisedDocumentParser) -> OcrConfig: ...\n ^^^^^^^^^ return type", "concise_description": "Class member `RasterisedDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -15380,7 +15296,7 @@ "path": "src/paperless_tesseract/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `RasterisedDocumentParser.get_page_count` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_page_count` has type `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> int | None]`, which is not assignable to `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> None]`, the type of `DocumentParser.get_page_count`", + "description": "Class member `RasterisedDocumentParser.get_page_count` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_page_count` has type `(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> int | None`, which is not assignable to `(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> None`, the type of `DocumentParser.get_page_count`\n Signature mismatch:\n expected: def get_page_count(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> None: ...\n ^ return type\n found: def get_page_count(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown) -> int | None: ...\n ^^^^^^ return type", "concise_description": "Class member `RasterisedDocumentParser.get_page_count` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -15392,7 +15308,7 @@ "path": "src/paperless_tesseract/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `RasterisedDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_thumbnail` has type `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Path]`, which is not assignable to `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.get_thumbnail`", + "description": "Class member `RasterisedDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.get_thumbnail` has type `(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Path`, which is not assignable to `(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.get_thumbnail`\n Signature mismatch:\n ...ime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^ return type\n ...ime_type: Unknown, file_name: Unknown | None = None) -> Path: ...\n ^^^^ return type", "concise_description": "Class member `RasterisedDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -15452,7 +15368,7 @@ "path": "src/paperless_tesseract/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `RasterisedDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.parse` has type `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> None]`, which is not assignable to `BoundMethod[RasterisedDocumentParser, (self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.parse`", + "description": "Class member `RasterisedDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `RasterisedDocumentParser.parse` has type `(self: RasterisedDocumentParser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> None`, which is not assignable to `(self: RasterisedDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.parse`\n Signature mismatch:\n ...Parser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^^^ parameters ^^^^ return type\n ...Parser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> None: ...\n ^^^^ parameters ^^^ return type", "concise_description": "Class member `RasterisedDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -15889,9 +15805,9 @@ "severity": "error" }, { - "line": 57, + "line": 58, "column": 36, - "stop_line": 57, + "stop_line": 58, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15901,9 +15817,9 @@ "severity": "error" }, { - "line": 147, + "line": 148, "column": 13, - "stop_line": 147, + "stop_line": 148, "stop_column": 58, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15913,9 +15829,9 @@ "severity": "error" }, { - "line": 151, + "line": 152, "column": 27, - "stop_line": 151, + "stop_line": 152, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15925,9 +15841,9 @@ "severity": "error" }, { - "line": 159, + "line": 160, "column": 13, - "stop_line": 159, + "stop_line": 160, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15937,9 +15853,9 @@ "severity": "error" }, { - "line": 163, + "line": 164, "column": 27, - "stop_line": 163, + "stop_line": 164, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15949,9 +15865,9 @@ "severity": "error" }, { - "line": 175, + "line": 176, "column": 13, - "stop_line": 175, + "stop_line": 176, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15961,9 +15877,9 @@ "severity": "error" }, { - "line": 189, + "line": 190, "column": 22, - "stop_line": 189, + "stop_line": 190, "stop_column": 59, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15973,9 +15889,9 @@ "severity": "error" }, { - "line": 205, + "line": 206, "column": 13, - "stop_line": 205, + "stop_line": 206, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15985,9 +15901,9 @@ "severity": "error" }, { - "line": 216, + "line": 217, "column": 13, - "stop_line": 216, + "stop_line": 217, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -15997,9 +15913,9 @@ "severity": "error" }, { - "line": 230, + "line": 231, "column": 13, - "stop_line": 230, + "stop_line": 231, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16009,9 +15925,9 @@ "severity": "error" }, { - "line": 242, + "line": 243, "column": 22, - "stop_line": 242, + "stop_line": 243, "stop_column": 59, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16021,9 +15937,9 @@ "severity": "error" }, { - "line": 244, + "line": 245, "column": 27, - "stop_line": 244, + "stop_line": 245, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16033,9 +15949,9 @@ "severity": "error" }, { - "line": 258, + "line": 259, "column": 26, - "stop_line": 258, + "stop_line": 259, "stop_column": 40, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16045,9 +15961,9 @@ "severity": "error" }, { - "line": 260, + "line": 261, "column": 31, - "stop_line": 260, + "stop_line": 261, "stop_column": 50, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16057,9 +15973,9 @@ "severity": "error" }, { - "line": 280, + "line": 281, "column": 17, - "stop_line": 280, + "stop_line": 281, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16069,9 +15985,9 @@ "severity": "error" }, { - "line": 290, + "line": 291, "column": 22, - "stop_line": 290, + "stop_line": 291, "stop_column": 66, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16081,9 +15997,9 @@ "severity": "error" }, { - "line": 292, + "line": 293, "column": 27, - "stop_line": 292, + "stop_line": 293, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16093,9 +16009,9 @@ "severity": "error" }, { - "line": 295, + "line": 296, "column": 13, - "stop_line": 295, + "stop_line": 296, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16105,9 +16021,9 @@ "severity": "error" }, { - "line": 302, + "line": 303, "column": 13, - "stop_line": 302, + "stop_line": 303, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16117,9 +16033,9 @@ "severity": "error" }, { - "line": 305, + "line": 306, "column": 27, - "stop_line": 305, + "stop_line": 306, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16129,9 +16045,9 @@ "severity": "error" }, { - "line": 307, + "line": 308, "column": 13, - "stop_line": 307, + "stop_line": 308, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16141,9 +16057,9 @@ "severity": "error" }, { - "line": 315, + "line": 316, "column": 13, - "stop_line": 315, + "stop_line": 316, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16153,9 +16069,9 @@ "severity": "error" }, { - "line": 318, + "line": 319, "column": 27, - "stop_line": 318, + "stop_line": 319, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16165,9 +16081,9 @@ "severity": "error" }, { - "line": 320, + "line": 321, "column": 13, - "stop_line": 320, + "stop_line": 321, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16177,9 +16093,9 @@ "severity": "error" }, { - "line": 328, + "line": 329, "column": 13, - "stop_line": 328, + "stop_line": 329, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16189,9 +16105,9 @@ "severity": "error" }, { - "line": 331, + "line": 332, "column": 27, - "stop_line": 331, + "stop_line": 332, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16201,9 +16117,9 @@ "severity": "error" }, { - "line": 333, + "line": 334, "column": 13, - "stop_line": 333, + "stop_line": 334, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16213,9 +16129,9 @@ "severity": "error" }, { - "line": 341, + "line": 342, "column": 13, - "stop_line": 341, + "stop_line": 342, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16225,9 +16141,9 @@ "severity": "error" }, { - "line": 344, + "line": 345, "column": 27, - "stop_line": 344, + "stop_line": 345, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16237,9 +16153,9 @@ "severity": "error" }, { - "line": 346, + "line": 347, "column": 13, - "stop_line": 346, + "stop_line": 347, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16249,9 +16165,9 @@ "severity": "error" }, { - "line": 354, + "line": 355, "column": 13, - "stop_line": 354, + "stop_line": 355, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16261,9 +16177,9 @@ "severity": "error" }, { - "line": 357, + "line": 358, "column": 27, - "stop_line": 357, + "stop_line": 358, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16273,9 +16189,9 @@ "severity": "error" }, { - "line": 359, + "line": 360, "column": 13, - "stop_line": 359, + "stop_line": 360, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16285,9 +16201,9 @@ "severity": "error" }, { - "line": 378, + "line": 379, "column": 13, - "stop_line": 378, + "stop_line": 379, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16296,28 +16212,16 @@ "concise_description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", "severity": "error" }, - { - "line": 381, - "column": 27, - "stop_line": 381, - "stop_column": 46, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "severity": "error" - }, { "line": 382, - "column": 36, + "column": 27, "stop_line": 382, - "stop_column": 59, + "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `lower`", - "concise_description": "Object of class `NoneType` has no attribute `lower`", + "name": "bad-argument-type", + "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", + "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", "severity": "error" }, { @@ -16333,9 +16237,21 @@ "severity": "error" }, { - "line": 400, + "line": 384, + "column": 36, + "stop_line": 384, + "stop_column": 59, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `lower`", + "concise_description": "Object of class `NoneType` has no attribute `lower`", + "severity": "error" + }, + { + "line": 401, "column": 13, - "stop_line": 400, + "stop_line": 401, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16345,9 +16261,9 @@ "severity": "error" }, { - "line": 403, + "line": 404, "column": 27, - "stop_line": 403, + "stop_line": 404, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16356,18 +16272,6 @@ "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", "severity": "error" }, - { - "line": 404, - "column": 36, - "stop_line": 404, - "stop_column": 59, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `lower`", - "concise_description": "Object of class `NoneType` has no attribute `lower`", - "severity": "error" - }, { "line": 405, "column": 36, @@ -16393,9 +16297,21 @@ "severity": "error" }, { - "line": 422, + "line": 407, + "column": 36, + "stop_line": 407, + "stop_column": 59, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `lower`", + "concise_description": "Object of class `NoneType` has no attribute `lower`", + "severity": "error" + }, + { + "line": 423, "column": 13, - "stop_line": 422, + "stop_line": 423, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16405,9 +16321,9 @@ "severity": "error" }, { - "line": 427, + "line": 428, "column": 13, - "stop_line": 427, + "stop_line": 428, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16417,9 +16333,9 @@ "severity": "error" }, { - "line": 445, + "line": 446, "column": 13, - "stop_line": 445, + "stop_line": 446, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16429,9 +16345,9 @@ "severity": "error" }, { - "line": 450, + "line": 451, "column": 13, - "stop_line": 450, + "stop_line": 451, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16441,9 +16357,9 @@ "severity": "error" }, { - "line": 470, + "line": 471, "column": 13, - "stop_line": 470, + "stop_line": 471, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16453,9 +16369,9 @@ "severity": "error" }, { - "line": 475, + "line": 476, "column": 13, - "stop_line": 475, + "stop_line": 476, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16465,9 +16381,9 @@ "severity": "error" }, { - "line": 493, + "line": 494, "column": 13, - "stop_line": 493, + "stop_line": 494, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16477,9 +16393,9 @@ "severity": "error" }, { - "line": 498, + "line": 499, "column": 13, - "stop_line": 498, + "stop_line": 499, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16489,9 +16405,9 @@ "severity": "error" }, { - "line": 516, + "line": 517, "column": 13, - "stop_line": 516, + "stop_line": 517, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16501,9 +16417,9 @@ "severity": "error" }, { - "line": 521, + "line": 522, "column": 13, - "stop_line": 521, + "stop_line": 522, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16513,9 +16429,9 @@ "severity": "error" }, { - "line": 539, + "line": 540, "column": 13, - "stop_line": 539, + "stop_line": 540, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16525,9 +16441,9 @@ "severity": "error" }, { - "line": 544, + "line": 545, "column": 13, - "stop_line": 544, + "stop_line": 545, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16537,9 +16453,9 @@ "severity": "error" }, { - "line": 562, + "line": 563, "column": 13, - "stop_line": 562, + "stop_line": 563, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16549,9 +16465,9 @@ "severity": "error" }, { - "line": 567, + "line": 568, "column": 13, - "stop_line": 567, + "stop_line": 568, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16561,9 +16477,9 @@ "severity": "error" }, { - "line": 585, + "line": 586, "column": 13, - "stop_line": 585, + "stop_line": 586, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16573,9 +16489,9 @@ "severity": "error" }, { - "line": 590, + "line": 591, "column": 13, - "stop_line": 590, + "stop_line": 591, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16585,9 +16501,9 @@ "severity": "error" }, { - "line": 608, + "line": 609, "column": 13, - "stop_line": 608, + "stop_line": 609, "stop_column": 60, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16597,9 +16513,9 @@ "severity": "error" }, { - "line": 614, + "line": 615, "column": 13, - "stop_line": 614, + "stop_line": 615, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16609,9 +16525,9 @@ "severity": "error" }, { - "line": 639, + "line": 640, "column": 13, - "stop_line": 639, + "stop_line": 640, "stop_column": 61, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16621,9 +16537,9 @@ "severity": "error" }, { - "line": 645, + "line": 646, "column": 13, - "stop_line": 645, + "stop_line": 646, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16633,9 +16549,9 @@ "severity": "error" }, { - "line": 676, + "line": 677, "column": 13, - "stop_line": 676, + "stop_line": 677, "stop_column": 60, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16645,9 +16561,9 @@ "severity": "error" }, { - "line": 681, + "line": 682, "column": 13, - "stop_line": 681, + "stop_line": 682, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16657,9 +16573,9 @@ "severity": "error" }, { - "line": 688, + "line": 689, "column": 22, - "stop_line": 688, + "stop_line": 689, "stop_column": 60, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16669,9 +16585,9 @@ "severity": "error" }, { - "line": 710, + "line": 711, "column": 13, - "stop_line": 710, + "stop_line": 711, "stop_column": 62, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16681,9 +16597,9 @@ "severity": "error" }, { - "line": 713, + "line": 714, "column": 27, - "stop_line": 713, + "stop_line": 714, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16693,9 +16609,9 @@ "severity": "error" }, { - "line": 715, + "line": 716, "column": 13, - "stop_line": 715, + "stop_line": 716, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16705,9 +16621,9 @@ "severity": "error" }, { - "line": 734, + "line": 735, "column": 17, - "stop_line": 734, + "stop_line": 735, "stop_column": 30, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16717,9 +16633,9 @@ "severity": "error" }, { - "line": 737, + "line": 738, "column": 31, - "stop_line": 737, + "stop_line": 738, "stop_column": 50, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16729,9 +16645,9 @@ "severity": "error" }, { - "line": 739, + "line": 740, "column": 17, - "stop_line": 739, + "stop_line": 740, "stop_column": 40, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16741,9 +16657,9 @@ "severity": "error" }, { - "line": 761, + "line": 762, "column": 17, - "stop_line": 761, + "stop_line": 762, "stop_column": 30, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16753,9 +16669,9 @@ "severity": "error" }, { - "line": 764, + "line": 765, "column": 31, - "stop_line": 764, + "stop_line": 765, "stop_column": 50, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16765,9 +16681,9 @@ "severity": "error" }, { - "line": 766, + "line": 767, "column": 17, - "stop_line": 766, + "stop_line": 767, "stop_column": 40, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16777,9 +16693,9 @@ "severity": "error" }, { - "line": 846, + "line": 847, "column": 13, - "stop_line": 846, + "stop_line": 847, "stop_column": 52, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16789,21 +16705,21 @@ "severity": "error" }, { - "line": 851, - "column": 40, - "stop_line": 851, - "stop_column": 57, + "line": 855, + "column": 55, + "stop_line": 855, + "stop_column": 72, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `container` with type `Container[Any] | Iterable[Any]` in function `unittest.case.TestCase.assertIn`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `container` with type `Container[Any] | Iterable[Any]` in function `unittest.case.TestCase.assertIn`", + "description": "Argument `Unknown | None` is not assignable to parameter `unistr` with type `str` in function `unicodedata.normalize`", + "concise_description": "Argument `Unknown | None` is not assignable to parameter `unistr` with type `str` in function `unicodedata.normalize`", "severity": "error" }, { - "line": 871, + "line": 882, "column": 22, - "stop_line": 871, + "stop_line": 882, "stop_column": 59, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16812,70 +16728,70 @@ "concise_description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", "severity": "error" }, - { - "line": 872, - "column": 27, - "stop_line": 872, - "stop_column": 46, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "severity": "error" - }, - { - "line": 873, - "column": 50, - "stop_line": 873, - "stop_column": 73, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `lower`", - "concise_description": "Object of class `NoneType` has no attribute `lower`", - "severity": "error" - }, - { - "line": 877, - "column": 22, - "stop_line": 877, - "stop_column": 59, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", - "concise_description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", - "severity": "error" - }, - { - "line": 878, - "column": 27, - "stop_line": 878, - "stop_column": 46, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "bad-argument-type", - "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", - "severity": "error" - }, - { - "line": 879, - "column": 50, - "stop_line": 879, - "stop_column": 73, - "path": "src/paperless_tesseract/tests/test_parser.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `lower`", - "concise_description": "Object of class `NoneType` has no attribute `lower`", - "severity": "error" - }, { "line": 883, - "column": 22, + "column": 27, "stop_line": 883, + "stop_column": 46, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", + "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", + "severity": "error" + }, + { + "line": 884, + "column": 50, + "stop_line": 884, + "stop_column": 73, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `lower`", + "concise_description": "Object of class `NoneType` has no attribute `lower`", + "severity": "error" + }, + { + "line": 888, + "column": 22, + "stop_line": 888, + "stop_column": 59, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", + "concise_description": "Argument `str` is not assignable to parameter `document_path` with type `Path` in function `paperless_tesseract.parsers.RasterisedDocumentParser.parse`", + "severity": "error" + }, + { + "line": 889, + "column": 27, + "stop_line": 889, + "stop_column": 46, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "bad-argument-type", + "description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", + "concise_description": "Argument `Unknown | None` is not assignable to parameter `path` with type `PathLike[Unknown] | str` in function `documents.tests.utils.FileSystemAssertsMixin.assertIsFile`", + "severity": "error" + }, + { + "line": 890, + "column": 50, + "stop_line": 890, + "stop_column": 73, + "path": "src/paperless_tesseract/tests/test_parser.py", + "code": -2, + "name": "missing-attribute", + "description": "Object of class `NoneType` has no attribute `lower`", + "concise_description": "Object of class `NoneType` has no attribute `lower`", + "severity": "error" + }, + { + "line": 894, + "column": 22, + "stop_line": 894, "stop_column": 60, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16885,9 +16801,9 @@ "severity": "error" }, { - "line": 884, + "line": 895, "column": 27, - "stop_line": 884, + "stop_line": 895, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16897,9 +16813,9 @@ "severity": "error" }, { - "line": 885, + "line": 896, "column": 32, - "stop_line": 885, + "stop_line": 896, "stop_column": 55, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16909,9 +16825,9 @@ "severity": "error" }, { - "line": 890, + "line": 901, "column": 22, - "stop_line": 890, + "stop_line": 901, "stop_column": 59, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16921,9 +16837,9 @@ "severity": "error" }, { - "line": 891, + "line": 902, "column": 27, - "stop_line": 891, + "stop_line": 902, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16933,9 +16849,9 @@ "severity": "error" }, { - "line": 892, + "line": 903, "column": 50, - "stop_line": 892, + "stop_line": 903, "stop_column": 73, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16945,9 +16861,9 @@ "severity": "error" }, { - "line": 896, + "line": 907, "column": 22, - "stop_line": 896, + "stop_line": 907, "stop_column": 59, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16957,9 +16873,9 @@ "severity": "error" }, { - "line": 897, + "line": 908, "column": 27, - "stop_line": 897, + "stop_line": 908, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16969,9 +16885,9 @@ "severity": "error" }, { - "line": 898, + "line": 909, "column": 50, - "stop_line": 898, + "stop_line": 909, "stop_column": 73, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16981,9 +16897,9 @@ "severity": "error" }, { - "line": 904, + "line": 915, "column": 13, - "stop_line": 904, + "stop_line": 915, "stop_column": 53, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -16993,9 +16909,9 @@ "severity": "error" }, { - "line": 907, + "line": 918, "column": 27, - "stop_line": 907, + "stop_line": 918, "stop_column": 46, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -17005,9 +16921,9 @@ "severity": "error" }, { - "line": 911, + "line": 922, "column": 13, - "stop_line": 911, + "stop_line": 922, "stop_column": 36, "path": "src/paperless_tesseract/tests/test_parser.py", "code": -2, @@ -17185,45 +17101,9 @@ "severity": "error" }, { - "line": 162, + "line": 183, "column": 13, - "stop_line": 162, - "stop_column": 34, - "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `rotate_pages`", - "concise_description": "Object of class `NoneType` has no attribute `rotate_pages`", - "severity": "error" - }, - { - "line": 163, - "column": 13, - "stop_line": 163, - "stop_column": 44, - "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `rotate_pages_threshold`", - "concise_description": "Object of class `NoneType` has no attribute `rotate_pages_threshold`", - "severity": "error" - }, - { - "line": 164, - "column": 13, - "stop_line": 164, - "stop_column": 26, - "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", - "code": -2, - "name": "missing-attribute", - "description": "Object of class `NoneType` has no attribute `save`", - "concise_description": "Object of class `NoneType` has no attribute `save`", - "severity": "error" - }, - { - "line": 182, - "column": 13, - "stop_line": 182, + "stop_line": 183, "stop_column": 38, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17233,9 +17113,9 @@ "severity": "error" }, { - "line": 183, + "line": 184, "column": 13, - "stop_line": 183, + "stop_line": 184, "stop_column": 26, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17245,9 +17125,9 @@ "severity": "error" }, { - "line": 200, + "line": 201, "column": 13, - "stop_line": 200, + "stop_line": 201, "stop_column": 47, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17257,9 +17137,9 @@ "severity": "error" }, { - "line": 201, + "line": 202, "column": 13, - "stop_line": 201, + "stop_line": 202, "stop_column": 26, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17269,9 +17149,9 @@ "severity": "error" }, { - "line": 223, + "line": 224, "column": 13, - "stop_line": 223, + "stop_line": 224, "stop_column": 31, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17281,9 +17161,9 @@ "severity": "error" }, { - "line": 224, + "line": 225, "column": 13, - "stop_line": 224, + "stop_line": 225, "stop_column": 26, "path": "src/paperless_tesseract/tests/test_parser_custom_settings.py", "code": -2, @@ -17300,7 +17180,7 @@ "path": "src/paperless_text/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TextDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.get_thumbnail` has type `BoundMethod[TextDocumentParser, (self: TextDocumentParser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> Path]`, which is not assignable to `BoundMethod[TextDocumentParser, (self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.get_thumbnail`", + "description": "Class member `TextDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.get_thumbnail` has type `(self: TextDocumentParser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> Path`, which is not assignable to `(self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.get_thumbnail`\n Signature mismatch:\n ...Parser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^^^ parameters ^^^^^ return type\n ...Parser, document_path: Path, mime_type: Unknown, file_name: Unknown | None = None) -> Path: ...\n ^^^^ parameters ^^^^ return type", "concise_description": "Class member `TextDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -17312,7 +17192,7 @@ "path": "src/paperless_text/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TextDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.parse` has type `BoundMethod[TextDocumentParser, (self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None]`, which is not assignable to `BoundMethod[TextDocumentParser, (self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.parse`", + "description": "Class member `TextDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.parse` has type `(self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> None`, which is not assignable to `(self: TextDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.parse`\n Signature mismatch:\n ...ime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^ return type\n ...ime_type: Unknown, file_name: Unknown | None = None) -> None: ...\n ^^^ return type", "concise_description": "Class member `TextDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -17324,7 +17204,7 @@ "path": "src/paperless_text/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TextDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.get_settings` has type `BoundMethod[TextDocumentParser, (self: TextDocumentParser) -> None]`, which is not assignable to `BoundMethod[TextDocumentParser, (self: TextDocumentParser) -> Never]`, the type of `DocumentParser.get_settings`", + "description": "Class member `TextDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `TextDocumentParser.get_settings` has type `(self: TextDocumentParser) -> None`, which is not assignable to `(self: TextDocumentParser) -> Never`, the type of `DocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: TextDocumentParser) -> Never: ...\n ^^^^ return type\n found: def get_settings(self: TextDocumentParser) -> None: ...\n ^^^ return type", "concise_description": "Class member `TextDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -17336,7 +17216,7 @@ "path": "src/paperless_tika/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TikaDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.get_thumbnail` has type `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Path]`, which is not assignable to `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.get_thumbnail`", + "description": "Class member `TikaDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.get_thumbnail` has type `(self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Path`, which is not assignable to `(self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.get_thumbnail`\n Signature mismatch:\n ...ime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^ return type\n ...ime_type: Unknown, file_name: Unknown | None = None) -> Path: ...\n ^^^^ return type", "concise_description": "Class member `TikaDocumentParser.get_thumbnail` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -17348,7 +17228,7 @@ "path": "src/paperless_tika/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TikaDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.parse` has type `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> None]`, which is not assignable to `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never]`, the type of `DocumentParser.parse`", + "description": "Class member `TikaDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.parse` has type `(self: TikaDocumentParser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> None`, which is not assignable to `(self: TikaDocumentParser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never`, the type of `DocumentParser.parse`\n Signature mismatch:\n ...Parser, document_path: Unknown, mime_type: Unknown, file_name: Unknown | None = None) -> Never: ...\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^ parameters ^^^^ return type\n ...Parser, document_path: Path, mime_type: str, file_name: Unknown | None = None) -> None: ...\n ^^^^^^^^^^^^^^^^^^^^ parameters ^^^ return type", "concise_description": "Class member `TikaDocumentParser.parse` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }, @@ -17360,7 +17240,7 @@ "path": "src/paperless_tika/parsers.py", "code": -2, "name": "bad-override", - "description": "Class member `TikaDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.get_settings` has type `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser) -> OutputTypeConfig]`, which is not assignable to `BoundMethod[TikaDocumentParser, (self: TikaDocumentParser) -> Never]`, the type of `DocumentParser.get_settings`", + "description": "Class member `TikaDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner\n `TikaDocumentParser.get_settings` has type `(self: TikaDocumentParser) -> OutputTypeConfig`, which is not assignable to `(self: TikaDocumentParser) -> Never`, the type of `DocumentParser.get_settings`\n Signature mismatch:\n expected: def get_settings(self: TikaDocumentParser) -> Never: ...\n ^^^^^ return type\n found: def get_settings(self: TikaDocumentParser) -> OutputTypeConfig: ...\n ^^^^^^^^^^^^^^^^ return type", "concise_description": "Class member `TikaDocumentParser.get_settings` overrides parent class `DocumentParser` in an inconsistent manner", "severity": "error" }