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:
+20
-8
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user