diff --git a/.pylintrc b/.pylintrc index 8175adc7..362c3f53 100644 --- a/.pylintrc +++ b/.pylintrc @@ -3,7 +3,7 @@ ignore=snapshots load-plugins=pylint.extensions.bad_builtin, pylint.extensions.mccabe [MESSAGES CONTROL] -disable=C0103, C0111, C0209, C0412, I0011, R0101, R0801, R0901, R0902, R0903, R0912, R0913, R0914, R0915, R1260, W0105, W0231, W0511, W0621, W0703 +disable=C0103, C0111, C0209, C0412, I0011, R0101, R0801, R0901, R0902, R0903, R0912, R0913, R0914, R0915, R0917, R1260, W0105, W0231, W0511, W0621, W0703 [SIMILARITIES] ignore-imports=yes diff --git a/ariadne/contrib/tracing/copy_args.py b/ariadne/contrib/tracing/copy_args.py index 474ce51d..df6a5db9 100644 --- a/ariadne/contrib/tracing/copy_args.py +++ b/ariadne/contrib/tracing/copy_args.py @@ -22,11 +22,15 @@ def copy_args_for_tracing(value: Any) -> Any: def repr_upload_file(upload_file: Union[UploadFile, File]) -> str: + filename: Union[str, None, bytes] if isinstance(upload_file, File): filename = upload_file.file_name else: filename = upload_file.filename + if isinstance(filename, bytes): + filename = filename.decode() + mime_type: Union[str, None] if isinstance(upload_file, File): diff --git a/ariadne/contrib/tracing/utils.py b/ariadne/contrib/tracing/utils.py index ad79c945..8b67c38c 100644 --- a/ariadne/contrib/tracing/utils.py +++ b/ariadne/contrib/tracing/utils.py @@ -25,11 +25,15 @@ def copy_args_for_tracing(value: Any) -> Any: def repr_upload_file(upload_file: Union[UploadFile, File]) -> str: + filename: Union[str, None, bytes] if isinstance(upload_file, File): filename = upload_file.file_name else: filename = upload_file.filename + if isinstance(filename, bytes): + filename = filename.decode() + mime_type: Union[str, None] if isinstance(upload_file, File): diff --git a/ariadne/load_schema.py b/ariadne/load_schema.py index 43fdfd8b..dac3bc8b 100644 --- a/ariadne/load_schema.py +++ b/ariadne/load_schema.py @@ -1,4 +1,5 @@ import os +from pathlib import Path from typing import Generator, Union from graphql import parse @@ -27,7 +28,7 @@ def load_schema_from_path(path: Union[str, os.PathLike]) -> str: if os.path.isdir(path): schema_list = [read_graphql_file(f) for f in sorted(walk_graphql_files(path))] return "\n".join(schema_list) - return read_graphql_file(os.path.abspath(path)) + return read_graphql_file(Path(path).resolve()) def walk_graphql_files(path: Union[str, os.PathLike]) -> Generator[str, None, None]: diff --git a/ariadne/wsgi.py b/ariadne/wsgi.py index 8a185d79..ec652b0f 100644 --- a/ariadne/wsgi.py +++ b/ariadne/wsgi.py @@ -40,7 +40,7 @@ from multipart import parse_form except ImportError: - def parse_form(*_args, **_kwargs): + def parse_form(*_args, **_kwargs): # type: ignore raise NotImplementedError( "WSGI file uploads requires 'python-multipart' library." ) @@ -668,8 +668,11 @@ def parse_multipart_request(environ: dict) -> "FormData": headers = {"Content-Type": content_type} form_data = FormData(content_type) + # Silence mypy error for this incorrect type. + # parse_fprm defines the type as dict[str, bytes] but works with + # dict[str, Optional[str | bytes]] and will throw ValueError if Content-Type is None. parse_form( - headers, + headers, # type: ignore environ["wsgi.input"], form_data.on_field, form_data.on_file,