Skip to content

Commit 791abbe

Browse files
feat: Add Neon PostgreSQL preview API commands with parameter mapping fixes
- Added 13 new commands for Neon PostgreSQL 2025-06-23-preview API - Fixed critical parameter mapping issues in endpoint/database/role create commands - Added comprehensive test suite with 6 test methods covering all functionality - Updated azext_metadata.json with new command registrations New Commands Added: - az neon postgres endpoint create/list/delete - az neon postgres neon-database create/list/delete - az neon postgres neon-role create/list/delete - az neon postgres get-postgres-version Parameter Mapping Fixes: - Fixed URL parameter mapping to use project_id/branch_id when available - Resolved 'branch not found' errors in create commands - Ensured proper API endpoint construction for nested resources Testing: - All 6 tests passing (100% success rate) - Comprehensive validation of parameter mapping fixes - Help command testing for all new commands - Parameter validation testing for required fields
1 parent 9dc1464 commit 791abbe

File tree

22 files changed

+3573
-605
lines changed

22 files changed

+3573
-605
lines changed

src/neon/azext_neon/aaz/latest/neon/postgres/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010

1111
from .__cmd_group import *
1212
from ._create import *
13+
from ._get_postgres_version import *
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
# --------------------------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for license information.
4+
#
5+
# Code generated by aaz-dev-tools
6+
# --------------------------------------------------------------------------------------------
7+
8+
# pylint: skip-file
9+
# flake8: noqa
10+
11+
from azure.cli.core.aaz import *
12+
13+
14+
@register_command(
15+
"neon postgres get-postgres-version",
16+
)
17+
class GetPostgresVersion(AAZCommand):
18+
"""Action to retrieve the PostgreSQL versions.
19+
"""
20+
21+
_aaz_info = {
22+
"version": "2025-06-23-preview",
23+
"resources": [
24+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/neon.postgres/getpostgresversions", "2025-06-23-preview"],
25+
]
26+
}
27+
28+
def _handler(self, command_args):
29+
super()._handler(command_args)
30+
self._execute_operations()
31+
return self._output()
32+
33+
_args_schema = None
34+
35+
@classmethod
36+
def _build_arguments_schema(cls, *args, **kwargs):
37+
if cls._args_schema is not None:
38+
return cls._args_schema
39+
cls._args_schema = super()._build_arguments_schema(*args, **kwargs)
40+
41+
# define Arg Group ""
42+
43+
_args_schema = cls._args_schema
44+
_args_schema.resource_group = AAZResourceGroupNameArg(
45+
required=True,
46+
)
47+
48+
# define Arg Group "Parameters"
49+
50+
_args_schema = cls._args_schema
51+
_args_schema.version = AAZIntArg(
52+
options=["--version"],
53+
arg_group="Parameters",
54+
help="The major PostgreSQL version number",
55+
)
56+
return cls._args_schema
57+
58+
def _execute_operations(self):
59+
self.pre_operations()
60+
self.OrganizationsGetPostgresVersions(ctx=self.ctx)()
61+
self.post_operations()
62+
63+
@register_callback
64+
def pre_operations(self):
65+
pass
66+
67+
@register_callback
68+
def post_operations(self):
69+
pass
70+
71+
def _output(self, *args, **kwargs):
72+
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True)
73+
return result
74+
75+
class OrganizationsGetPostgresVersions(AAZHttpOperation):
76+
CLIENT_TYPE = "MgmtClient"
77+
78+
def __call__(self, *args, **kwargs):
79+
request = self.make_request()
80+
session = self.client.send_request(request=request, stream=False, **kwargs)
81+
if session.http_response.status_code in [200]:
82+
return self.on_200(session)
83+
84+
return self.on_error(session.http_response)
85+
86+
@property
87+
def url(self):
88+
return self.client.format_url(
89+
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Neon.Postgres/getPostgresVersions",
90+
**self.url_parameters
91+
)
92+
93+
@property
94+
def method(self):
95+
return "POST"
96+
97+
@property
98+
def error_format(self):
99+
return "MgmtErrorFormat"
100+
101+
@property
102+
def url_parameters(self):
103+
parameters = {
104+
**self.serialize_url_param(
105+
"resourceGroupName", self.ctx.args.resource_group,
106+
required=True,
107+
),
108+
**self.serialize_url_param(
109+
"subscriptionId", self.ctx.subscription_id,
110+
required=True,
111+
),
112+
}
113+
return parameters
114+
115+
@property
116+
def query_parameters(self):
117+
parameters = {
118+
**self.serialize_query_param(
119+
"api-version", "2025-06-23-preview",
120+
required=True,
121+
),
122+
}
123+
return parameters
124+
125+
@property
126+
def header_parameters(self):
127+
parameters = {
128+
**self.serialize_header_param(
129+
"Content-Type", "application/json",
130+
),
131+
**self.serialize_header_param(
132+
"Accept", "application/json",
133+
),
134+
}
135+
return parameters
136+
137+
@property
138+
def content(self):
139+
_content_value, _builder = self.new_content_builder(
140+
self.ctx.args,
141+
typ=AAZObjectType,
142+
typ_kwargs={"flags": {"client_flatten": True}}
143+
)
144+
_builder.set_prop("version", AAZIntType, ".version")
145+
146+
return self.serialize_content(_content_value)
147+
148+
def on_200(self, session):
149+
data = self.deserialize_http_content(session)
150+
self.ctx.set_var(
151+
"instance",
152+
data,
153+
schema_builder=self._build_schema_on_200
154+
)
155+
156+
_schema_on_200 = None
157+
158+
@classmethod
159+
def _build_schema_on_200(cls):
160+
if cls._schema_on_200 is not None:
161+
return cls._schema_on_200
162+
163+
cls._schema_on_200 = AAZObjectType()
164+
165+
_schema_on_200 = cls._schema_on_200
166+
_schema_on_200.versions = AAZListType(
167+
flags={"required": True},
168+
)
169+
170+
versions = cls._schema_on_200.versions
171+
versions.Element = AAZObjectType()
172+
173+
_element = cls._schema_on_200.versions.Element
174+
_element.version = AAZIntType()
175+
176+
return cls._schema_on_200
177+
178+
179+
class _GetPostgresVersionHelper:
180+
"""Helper class for GetPostgresVersion"""
181+
182+
183+
__all__ = ["GetPostgresVersion"]

0 commit comments

Comments
 (0)