fix(cli): use per-entry srv_type instead of stale loop variable

In the post-combine logic for rust-sdk/tui/types targets, 'srv_type'
and 'path' were stale loop variables from the res_mods iteration,
causing all generate_mod calls to receive the wrong service type and
path. Store srv_type per resource_results entry and read from gen_data
during generation. Also fix mod_path_str scoping issue in the while
loop list comprehension.

Change-Id: I3063e31b1eb1fa3dbb20cd953b006b1e88ea5490
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
This commit is contained in:
Artem Goncharov
2026-07-14 09:09:49 +02:00
parent aa6d286fed
commit 4938674560
3 changed files with 74 additions and 62 deletions
+20 -8
View File
@@ -305,15 +305,15 @@ def main():
resource_results: dict[str, dict] = {}
for srv_type, mod_path, mod_name, path, class_name in res_mods:
mn = "/".join(mod_path)
x = resource_results.setdefault(mn, {"path": path, "mods": {}})
x = resource_results.setdefault(
mn, {"path": path, "srv_type": srv_type, "mods": {}}
)
x["mods"][mod_name] = class_name
changed = True
while changed:
changed = False
for mod_path in [
mod_path_str.split("/")
for mod_path_str in resource_results.keys()
]:
for mod_path_str in list(resource_results.keys()):
mod_path = mod_path_str.split("/")
if len(mod_path) < (3 if args.target == "rust-tui" else 2):
continue
mn = "/".join(mod_path[0:-1])
@@ -324,17 +324,29 @@ def main():
changed = True
else:
changed = True
child = resource_results[mod_path_str]
parent_url = "/".join(mod_path[1:-1])
x = resource_results.setdefault(
mn, {"path": path, "mods": {}}
mn,
{
"path": parent_url,
"srv_type": child["srv_type"],
"mods": {},
},
)
x["mods"][mod_name] = None
for path, gen_data in resource_results.items():
url = gen_data["path"]
if args.target == "rust-types":
parts = path.split("/")
if len(parts) > 2 and parts[-1] == "response":
url = "/".join(parts[1:-1])
generators[args.target].generate_mod(
args.work_dir,
path.split("/"),
gen_data["mods"],
gen_data["path"],
url,
"".join(
"".join(
y.title()
@@ -342,7 +354,7 @@ def main():
for y in z.split("_")
)
),
service_type=srv_type,
service_type=gen_data["srv_type"],
)
exit(0)
+1 -1
View File
@@ -505,7 +505,7 @@ class RustTypesGenerator(BaseGenerator):
self._format_code(impl_path)
yield (mod_path[1:], final_mod_name, "response", class_name)
yield (mod_path[1:], final_mod_name, context["url"], class_name)
def generate_mod(
self, target_dir, mod_path, mod_list, url, resource_name, service_type
+53 -53
View File
@@ -3375,59 +3375,59 @@ resources:
rust-sdk:
module_name: register_finish
alternative_module_path: user/passkey
#identity.federation/identity_provider:
# spec_file: wrk/openapi_specs/identity/keystone_rust.yaml
# api_version: v4
# operations:
# list:
# operation_id: /federation/identity_provider:list
# operation_type: list
# targets:
# rust-sdk:
# module_name: list
# rust-cli:
# module_name: list
# sdk_mod_name: list
# cli_full_command: federation identity-provider list
# show:
# operation_id: /federation/identity_provider:show
# operation_type: show
# targets:
# rust-sdk:
# module_name: get
# rust-cli:
# module_name: show
# sdk_mod_name: get
# cli_full_command: federation identity-provider show
# create:
# operation_id: /federation/identity_provider:create
# operation_type: create
# targets:
# rust-sdk:
# module_name: create
# rust-cli:
# module_name: create
# sdk_mod_name: create
# cli_full_command: federation identity-provider create
# update:
# operation_id: /federation/identity_provider:update
# operation_type: set
# targets:
# rust-sdk:
# module_name: set
# rust-cli:
# module_name: set
# sdk_mod_name: set
# cli_full_command: federation identity-provider set
# delete:
# operation_id: /federation/identity_provider:delete
# operation_type: delete
# targets:
# rust-sdk:
# module_name: delete
# rust-cli:
# module_name: delete
# cli_full_command: federation identity-provider delete
identity.federation/identity_provider:
spec_file: wrk/openapi_specs/identity/keystone_rust.yaml
api_version: v4
operations:
list:
operation_id: /federation/identity_provider:list
operation_type: list
targets:
rust-sdk:
module_name: list
rust-cli:
module_name: list
sdk_mod_name: list
cli_full_command: federation identity-provider list
show:
operation_id: /federation/identity_provider:show
operation_type: show
targets:
rust-sdk:
module_name: get
rust-cli:
module_name: show
sdk_mod_name: get
cli_full_command: federation identity-provider show
create:
operation_id: /federation/identity_provider:create
operation_type: create
targets:
rust-sdk:
module_name: create
rust-cli:
module_name: create
sdk_mod_name: create
cli_full_command: federation identity-provider create
update:
operation_id: /federation/identity_provider:update
operation_type: set
targets:
rust-sdk:
module_name: set
rust-cli:
module_name: set
sdk_mod_name: set
cli_full_command: federation identity-provider set
delete:
operation_id: /federation/identity_provider:delete
operation_type: delete
targets:
rust-sdk:
module_name: delete
rust-cli:
module_name: delete
cli_full_command: federation identity-provider delete
#identity.federation/mapping:
# spec_file: wrk/openapi_specs/identity/keystone_rust.yaml
# api_version: v4