[mypy] # Logistics of what code to check and how to handle the data. scripts_are_modules = True show_traceback = True mypy_path = stubs/ cache_dir = var/mypy-cache # Options to make the checking stricter. check_untyped_defs = True disallow_untyped_defs = True disallow_any_generics = True warn_no_return = True no_implicit_optional = True # The mypy daemon requires using local_partial_types. local_partial_types = True # It's useful to try this occasionally, and keep it clean; but when # someone fixes a type error we don't want to add a burden for them. #warn_unused_ignores = True # Error on importing modules that are present but not part of the # build. If the module can't reasonably be made to not error, errors # can be suppressed with ignore_errors. # (The mypy daemon only supports error and skip for follow_imports) follow_imports = error # # # IGNORE ERRORS # # # We suppress all errors in a handful of files, all of them config files. [mypy-conf] # For docs/conf.py. ignore_errors = True [mypy-zproject.settings] ignore_errors = True [mypy-zproject.test_settings] ignore_errors = True # zerver.tornado.autoreload is a slightly-patched piece of upstream Tornado. [mypy-zerver.tornado.autoreload] ignore_errors = True # # # IGNORE MISSING IMPORTS # # # Our code, imported relative to tools/ by scripts in that directory. # Mypy doesn't know that these are scripts used as __main__, and # doesn't find the imports. [mypy-lib,lib.*] ignore_missing_imports = True [mypy-linter_lib.printer] ignore_missing_imports = True [mypy-lister,.lister] ignore_missing_imports = True # Our own libraries, maintained outside this repo and installed # through pip. We need to tell mypy where to find them. [mypy-zulip] ignore_missing_imports = True # This isn't the right solution (we should tell mypy where to find # them), but it's necessary to avoid warnings like this: # note: Import of 'zulip' ignored # I'm not sure how to tell mypy where to find these without having it # also process everything else in the Zulip virtualenv... follow_imports = skip [mypy-zulip_bots.lib] ignore_missing_imports = True [mypy-zulip_bots.custom_exceptions] ignore_missing_imports = True # Standard library (lex order) [mypy-ConfigParser] ignore_missing_imports = True [mypy-multiprocessing.sharedctypes] ignore_missing_imports = True [mypy-typing.re] ignore_missing_imports = True [mypy-unittest.result] ignore_missing_imports = True # Third-party libraries (lex order) [mypy-apiclient.sample_tools] ignore_missing_imports = True [mypy-apns2.*] ignore_missing_imports = True [mypy-bitfield,bitfield.*] ignore_missing_imports = True [mypy-bs4] ignore_missing_imports = True [mypy-coverage] ignore_missing_imports = True [mypy-cssutils,cssutils.*] ignore_missing_imports = True [mypy-defusedxml.*] ignore_missing_imports = True [mypy-digitalocean] ignore_missing_imports = True [mypy-disposable_email_domains] ignore_missing_imports = True [mypy-django,django.*] ignore_missing_imports = True [mypy-django_auth_ldap,django_auth_ldap.*] ignore_missing_imports = True [mypy-django_otp.*] ignore_missing_imports = True [mypy-django_statsd.*] ignore_missing_imports = True [mypy-DNS] ignore_missing_imports = True [mypy-gcm] ignore_missing_imports = True [mypy-gitlint,gitlint.*] ignore_missing_imports = True [mypy-httplib2] ignore_missing_imports = True [mypy-httpretty] ignore_missing_imports = True [mypy-hyper,hyper.*] ignore_missing_imports = True [mypy-ijson] ignore_missing_imports = True [mypy-ldap,fakeldap] ignore_missing_imports = True [mypy-libthumbor] ignore_missing_imports = True [mypy-lxml,lxml.*] ignore_missing_imports = True [mypy-markdown,markdown.*,markdown_include,markdown_include.*] ignore_missing_imports = True [mypy-mock] ignore_missing_imports = True [mypy-moto] ignore_missing_imports = True [mypy-netifaces] ignore_missing_imports = True [mypy-oauth2client.crypt] ignore_missing_imports = True [mypy-pika,pika.*] ignore_missing_imports = True [mypy-PIL] ignore_missing_imports = True [mypy-pipeline.storage] ignore_missing_imports = True [mypy-polib] ignore_missing_imports = True [mypy-premailer] ignore_missing_imports = True [mypy-psycopg2,psycopg2.*] ignore_missing_imports = True [mypy-pygments.*] ignore_missing_imports = True [mypy-pylibmc] ignore_missing_imports = True [mypy-pyoembed] ignore_missing_imports = True [mypy-redis] ignore_missing_imports = True [mypy-scrapy,scrapy.*] ignore_missing_imports = True [mypy-sendfile] ignore_missing_imports = True [mypy-six.moves.configparser] ignore_missing_imports = True [mypy-social_core.*] ignore_missing_imports = True [mypy-social_django,social_django.*] ignore_missing_imports = True [mypy-sockjs,sockjs.*] ignore_missing_imports = True [mypy-sourcemap] ignore_missing_imports = True [mypy-sqlalchemy,sqlalchemy.*] ignore_missing_imports = True [mypy-statsd] ignore_missing_imports = True [mypy-talon] ignore_missing_imports = True [mypy-tc_aws.loaders] ignore_missing_imports = True [mypy-thumbor.*] ignore_missing_imports = True [mypy-tornado,tornado.*] ignore_missing_imports = True [mypy-twitter] ignore_missing_imports = True [mypy-two_factor,two_factor.*] ignore_missing_imports = True # # # STRICT OPTIONAL # # strict_optional = True # REQ returning None issue [mypy-zerver.decorator] strict_optional = False [mypy-zerver.views.zephyr] strict_optional = False [mypy-zerver.views.user_settings] strict_optional = False [mypy-zerver.views.streams] strict_optional = False [mypy-zerver.views.storage] strict_optional = False [mypy-zerver.views.report] strict_optional = False [mypy-zerver.views.integrations] strict_optional = False [mypy-zerver.tornado.views] strict_optional = False [mypy-zerver.views.events_register] strict_optional = False [mypy-zerver.lib.webhooks.common] strict_optional = False [mypy-zerver.webhooks.yo.view] strict_optional = False [mypy-zerver.webhooks.transifex.view] strict_optional = False [mypy-zerver.webhooks.newrelic.view] strict_optional = False [mypy-zerver.webhooks.gogs.view] strict_optional = False [mypy-zerver.webhooks.gitlab.view] strict_optional = False [mypy-zerver.webhooks.github.view] strict_optional = False [mypy-zerver.webhooks.bitbucket.view] strict_optional = False [mypy-zerver.webhooks.bitbucket2.view] strict_optional = False [mypy-zerver.webhooks.beanstalk.view] strict_optional = False [mypy-zerver.views.auth] # Other issues in this file too strict_optional = False [mypy-zerver.views.realm] # Other issues in this file too strict_optional = False [mypy-zerver.views.messages] # Other issues in this file too strict_optional = False # One change required? [mypy-zerver.migrations.0077_add_file_name_field_to_realm_emoji] #73: error: Argument 2 to "upload_files" of "Uploader" has incompatible type "Optional[bytes]"; expected "bytes" strict_optional = False [mypy-zilencer.management.commands.calculate_first_visible_message_id] #33: error: Argument 1 to "maybe_update_first_visible_message_id" has incompatible type "Optional[Realm]"; expected "Realm" strict_optional = False [mypy-zilencer.management.commands.add_new_realm] #22: error: List item 0 has incompatible type "Optional[Stream]"; expected "Stream" strict_optional = False # Re-architecting required? [mypy-zerver.lib.queue] # Delayed setup of SimpleQueueClient.channel (Optional) strict_optional = False [mypy-zerver/management/commands/purge_queue] #24: error: Item "None" of "Optional[Any]" has no attribute "queue_purge" strict_optional = False [mypy-zerver.tornado.handlers] # Delayed setup of ASyncDjangoHandler._request_middleware (Optional), line 200 error strict_optional = False [mypy-zerver.tornado.descriptors] # line 10: 'get' can return None; only used in zerver/tornado/handlers? strict_optional = False # Tests (may be many issues in file; comment is just one error noted) [mypy-zerver/tests/test_tornado] #202: error: Item "None" of "Optional[Morsel[Any]]" has no attribute "coded_value" strict_optional = False [mypy-zerver/tests/test_slack_importer] #70: error: Argument 1 to "MockResponse" has incompatible type "None"; expected "Dict[str, Any]" strict_optional = False [mypy-zerver/tests/test_service_bot_system] #312: error: Argument 1 to "set_bot_config" has incompatible type "Optional[UserProfile]"; expected "UserProfile" strict_optional = False [mypy-zerver/tests/test_outgoing_webhook_system] #33: error: Argument 1 to "MockServiceHandler" has incompatible type "None"; expected "str" strict_optional = False [mypy-zerver/tests/test_outgoing_webhook_interfaces] #22: error: Argument "user_profile" to "GenericOutgoingWebhookService" has incompatible type "None"; expected "UserProfile" strict_optional = False [mypy-zerver/tests/test_narrow] #515: error: Incompatible types in assignment (expression has type "None", variable has type "int") strict_optional = False [mypy-zerver/tests/test_logging_handlers] #73: error: Argument 7 to "makeRecord" of "Logger" has incompatible type "Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]]"; expected "Union[Tuple[type, BaseException, TracebackType], Tuple[None, None, None], None]" strict_optional = False [mypy-zerver/tests/test_decorators] #1322: error: Item "None" of "Optional[Match[str]]" has no attribute "groupdict" strict_optional = False [mypy-zerver/tests/test_auth_backends] #2079: error: Incompatible types in assignment (expression has type "Optional[UserProfile]", variable has type "UserProfile") strict_optional = False [mypy-zerver/tests/test_signup] #1954: error: Item "None" of "Optional[Match[Any]]" has no attribute "groups" strict_optional = False [mypy-zerver/tests/test_realm] #191: error: Item "None" of "Optional[Stream]" has no attribute "id" strict_optional = False [mypy-zerver/tests/test_messages] #3070: error: Incompatible types in assignment (expression has type "None", variable has type "int") strict_optional = False [mypy-zerver/tests/test_events] #1365: error: Argument 2 to "do_set_realm_notifications_stream" has incompatible type "Optional[Stream]"; expected "Stream" strict_optional = False [mypy-zerver/tests/test_docs] #131: error: Argument 1 to "isfile" has incompatible type "Optional[str]"; expected "Union[bytes, str]" strict_optional = False # General exclusions to work on [mypy-zerver.lib.test_helpers] strict_optional = False [mypy-zerver.lib.test_classes] strict_optional = False [mypy-zerver.tornado.event_queue] strict_optional = False [mypy-zerver.lib.outgoing_webhook] strict_optional = False [mypy-zerver.lib.bugdown] # for __init__.py strict_optional = False [mypy-zerver.lib.push_notifications] strict_optional = False [mypy-zerver.lib.actions] strict_optional = False [mypy-zproject.backends] strict_optional = False [mypy-zerver.worker.queue_processors] strict_optional = False [mypy-zerver.tornado.websocket_client] strict_optional = False [mypy-zerver.views.registration] strict_optional = False [mypy-tools.lib.html_branches] strict_optional = False [mypy-zthumbor.loaders.helpers] strict_optional = False