Merge pull request #9 from abhishekbhakat/8-remove-content-type-header-for-zero-body-requests
8 remove content type header for zero body requests
This commit is contained in:
@@ -98,7 +98,6 @@ class AirflowClient:
|
||||
self.base_url = base_url.rstrip("/")
|
||||
self.headers = {
|
||||
"Authorization": f"Basic {auth_token}",
|
||||
"Content-Type": "application/json",
|
||||
"Accept": "application/json",
|
||||
}
|
||||
|
||||
@@ -211,6 +210,10 @@ class AirflowClient:
|
||||
logger.debug("Request body: %s", body)
|
||||
logger.debug("Request query params: %s", query_params)
|
||||
|
||||
# Dynamically set headers based on presence of body
|
||||
request_headers = self.headers.copy()
|
||||
if body is not None:
|
||||
request_headers["Content-Type"] = "application/json"
|
||||
# Make request
|
||||
async with self._session.request(
|
||||
method=method,
|
||||
@@ -219,8 +222,23 @@ class AirflowClient:
|
||||
json=body,
|
||||
) as response:
|
||||
response.raise_for_status()
|
||||
content_type = response.headers.get("Content-Type", "").lower()
|
||||
# Status codes that typically have no body
|
||||
no_body_statuses = {204}
|
||||
if response.status in no_body_statuses:
|
||||
if content_type and "application/json" in content_type:
|
||||
logger.warning("Unexpected JSON body with status %s", response.status)
|
||||
return await response.json() # Parse if present, though rare
|
||||
logger.debug("Received %s response with no body", response.status)
|
||||
return response.status
|
||||
# For statuses expecting a body, check mimetype
|
||||
if "application/json" in content_type:
|
||||
logger.debug("Response: %s", await response.text())
|
||||
return await response.json()
|
||||
# Unexpected mimetype with body
|
||||
response_text = await response.text()
|
||||
logger.error("Unexpected mimetype %s for status %s: %s", content_type, response.status, response_text)
|
||||
raise ValueError(f"Cannot parse response with mimetype {content_type} as JSON")
|
||||
|
||||
except aiohttp.ClientError as e:
|
||||
logger.error("Error executing operation %s: %s", operation_id, e)
|
||||
|
||||
@@ -18,15 +18,11 @@ def create_valid_spec(paths: dict[str, Any] | None = None) -> dict[str, Any]:
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def spec_file() -> dict[str, Any]:
|
||||
with resources.files("tests.client").joinpath("v1.yaml").open("r") as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client(spec_file: dict[str, Any]) -> AirflowClient:
|
||||
def client() -> AirflowClient:
|
||||
with resources.files("airflow_mcp_server.resources").joinpath("v1.yaml").open("rb") as f:
|
||||
spec = yaml.safe_load(f)
|
||||
return AirflowClient(
|
||||
spec_path=spec_file,
|
||||
spec_path=spec,
|
||||
base_url="http://localhost:8080/api/v1",
|
||||
auth_token="test-token",
|
||||
)
|
||||
@@ -84,9 +80,9 @@ def test_ops_case_sensitive_operation(client: AirflowClient) -> None:
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_exec_without_context(spec_file: dict[str, Any]) -> None:
|
||||
async def test_exec_without_context() -> None:
|
||||
client = AirflowClient(
|
||||
spec_path=spec_file,
|
||||
spec_path=create_valid_spec(),
|
||||
base_url="http://test",
|
||||
auth_token="test",
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user