From 8b61089e0f70258c7bf8d1d214e1805b93b0f941 Mon Sep 17 00:00:00 2001 From: Martin Lambertsen Date: Tue, 9 Jul 2024 17:13:31 +0200 Subject: [PATCH] fix: avoid using default mutable parameters * Do not use mutable default arguments Using mutable default arguments is a common Python problem, see e.g. https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments In this specific case the default argument even tries to setup some infrastructure settings at import time, which can potentially fail. * chore: adds date to changelog entry * Update CHANGELOG.md --------- Co-authored-by: Vincent Biret --- CHANGELOG.md | 7 +++++++ kiota_http/_version.py | 2 +- kiota_http/httpx_request_adapter.py | 26 ++++++++++++-------------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e443c8..54e4625 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.3.2] - 2024-07-09 + +### Added + +### Changed +- Do not use mutable default arguments for HttpxRequestAdapter.[#383](https://github.com/microsoft/kiota-http-python/pull/383) + ## [1.3.1] - 2024-02-13 ### Added diff --git a/kiota_http/_version.py b/kiota_http/_version.py index d045b44..b84f08f 100644 --- a/kiota_http/_version.py +++ b/kiota_http/_version.py @@ -1 +1 @@ -VERSION: str = '1.3.1' +VERSION: str = '1.3.2' diff --git a/kiota_http/httpx_request_adapter.py b/kiota_http/httpx_request_adapter.py index ebc822c..69c1045 100644 --- a/kiota_http/httpx_request_adapter.py +++ b/kiota_http/httpx_request_adapter.py @@ -1,10 +1,8 @@ """HTTPX client request adapter.""" import re -from collections.abc import AsyncIterable, Iterable from datetime import datetime from typing import Any, Dict, Generic, List, Optional, TypeVar, Union from urllib import parse -from urllib.parse import unquote import httpx from kiota_abstractions.api_client_builder import ( @@ -63,29 +61,29 @@ class HttpxRequestAdapter(RequestAdapter, Generic[ModelType]): def __init__( self, authentication_provider: AuthenticationProvider, - parse_node_factory: ParseNodeFactory = ParseNodeFactoryRegistry(), - serialization_writer_factory: - SerializationWriterFactory = SerializationWriterFactoryRegistry(), - http_client: httpx.AsyncClient = KiotaClientFactory.create_with_default_middleware(), - base_url: str = "", - observability_options=ObservabilityOptions(), + parse_node_factory: Optional[ParseNodeFactory] = None, + serialization_writer_factory: Optional[SerializationWriterFactory] = None, + http_client: Optional[httpx.AsyncClient] = None, + base_url: Optional[str] = None, + observability_options: Optional[ObservabilityOptions] = None, ) -> None: if not authentication_provider: raise TypeError("Authentication provider cannot be null") self._authentication_provider = authentication_provider if not parse_node_factory: - raise TypeError("Parse node factory cannot be null") + parse_node_factory = ParseNodeFactoryRegistry() self._parse_node_factory = parse_node_factory if not serialization_writer_factory: - raise TypeError("Serialization writer factory cannot be null") + serialization_writer_factory = SerializationWriterFactoryRegistry() self._serialization_writer_factory = serialization_writer_factory if not http_client: - raise TypeError("Http Client cannot be null") - if not observability_options: - observability_options = ObservabilityOptions() - + http_client = KiotaClientFactory.create_with_default_middleware() self._http_client = http_client + if not base_url: + base_url = "" self._base_url: str = base_url + if not observability_options: + observability_options = ObservabilityOptions() self.observability_options = observability_options @property