fix(apigw-manager): parse v2 api responses - #300
Conversation
0b1bb80 to
4456599
Compare
|
previous pr #279 Found multiple compatibility issues. The upgrade is not correct yet for several v2 input/output contracts. Findings
create_version_and_release_apigw.py (line 89) expects list_resource_versions() to return {"count": ...}, but dashboard v2 returns data as a list of {version, comment} items from views.py (line 452) and serializers.py (line 687). After _parse_v2_result, SDK returns a list, so resource_versions["count"] will fail.
The SDK later uses resource_version["version"] at create_version_and_release_apigw.py (line 133). Dashboard v2 create returns OKJsonResponse(status=201) with no data at views.py (line 464), so _parse_v2_result() returns None.
sync_stage_mcp_servers() now returns parsed data directly as a list, but the command still does result.get("data", []) at sync_apigw_stage_mcp_servers.py (line 36). Dashboard returns OKJsonResponse(data=output_slz.data) where output_slz.data is already the list at views.py (line 665).
The v2 open apply serializer requires applicant at serializers.py (line 106), but the command only defaults target_app_code and grant_dimension at apply_apigw_permissions.py (line 31). The docs example also omits applicant at sync_apigateway.md (line 264).
The dashboard saves stage, but serializes the pre-save instance at views.py (line 172). For a new stage, instance is None, while the SDK command expects result["id"] and result["name"] at sync_apigw_stage.py (line 35). |
09a726c to
fd61d1d
Compare
fd61d1d to
90f277d
Compare
90f277d to
f357164
Compare
Summary
apigw-manageras5.0.1and add the corresponding changelog entry.apigw-managerso successful 20x v2 responses return thedatafield directly, including{}and[]payloads.errorbody intoApiResultError, with a status/text fallback for non-JSON responses.countenvelope.commentfrom v2 resource-version responses when releasing; created/latest resource-version payloads are treated as id/version-only and release comment defaults to an empty string unless passed explicitly.datalist directly instead of unwrapping a legacydataenvelope again.applicantfield when applying gateway permissions, while preserving explicit applicant values from definitions._call,_call_with_cache,_parse_result, anditemgetter.Verification
PYENV_VERSION=apigw-manager poetry check-> passed with existing metadata warningsPYENV_VERSION=apigw-manager PYTHONPATH=src poetry run pytest -q --ds demo.settings tests/apigw_manager/apigw/management/commands/test_create_version_and_release_apigw.py -q-> 29 passedPYENV_VERSION=apigw-manager PYTHONPATH=src poetry run pytest -q --ds demo.settings tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py -q-> 1 passedPYENV_VERSION=apigw-manager PYTHONPATH=src poetry run pytest -q --ds demo.settings tests/apigw_manager/apigw/management/commands/test_sync_apigw_stage_mcp_servers.py -q-> 2 passedPYENV_VERSION=apigw-manager PYTHONPATH=src poetry run pytest -q --ds demo.settings tests/apigw_manager/apigw/management/commands -q-> 42 passedPYENV_VERSION=apigw-manager PYTHONPATH=src poetry run pytest -q --ds demo.settings tests/apigw_manager/core -q-> 15 passedPYENV_VERSION=apigw-manager make test-> 274 passedPYENV_VERSION=apigw-manager poetry run mypy src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py tests/apigw_manager/apigw/management/commands/test_create_version_and_release_apigw.py-> no issues found in 2 source filesPYENV_VERSION=apigw-manager poetry run mypy src/apigw_manager/apigw/management/commands/apply_apigw_permissions.py tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py-> no issues found in 2 source filesPYENV_VERSION=apigw-manager poetry run mypy src/apigw_manager/apigw/management/commands/sync_apigw_stage_mcp_servers.py tests/apigw_manager/apigw/management/commands/test_sync_apigw_stage_mcp_servers.py-> no issues found in 2 source filesPYENV_VERSION=apigw-manager poetry run mypy src/apigw_manager/core tests/apigw_manager/core-> no issues found in 13 source filesgit diff --check/git diff --cached --check-> passedPYENV_VERSION=apigw-manager make lint-> failed: nolinttarget insdks/apigw-manager/Makefileor included parent MakefilePYENV_VERSION=apigw-manager poetry run mypy src-> failed on existing errors in untouched files:src/apigw_manager/drf/utils.py,src/apigw_manager/drf/management/commands/generate_resources_yaml.py, andsrc/apigw_manager/plugin/config.py