in src/sagemaker_core/tools/resources_extractor.py [0:0]
def _extract_resource_plan_as_dataframe(self):
"""
Builds a DataFrame containing resource information.
Returns:
None
"""
self.df = pd.DataFrame(
columns=[
"resource_name",
"type",
"class_methods",
"object_methods",
"chain_resource_name",
"additional_methods",
"raw_actions",
"resource_status_chain",
"resource_states",
]
)
for resource, actions in sorted(self.resource_actions.items()):
class_methods = set()
object_methods = set()
additional_methods = set()
chain_resource_names = set()
resource_status_chain = set()
resource_states = set()
for action in actions:
action_low = action.lower()
resource_low = resource.lower()
if action_low.split(resource_low)[0] == "describe":
class_methods.add("get")
object_methods.add("refresh")
output_shape_name = self.operations[action]["output"]["shape"]
output_members_data = self.shapes[output_shape_name]["members"]
resource_status_chain, resource_states = self.get_status_chain_and_states(
resource
)
if resource_low.endswith("job") or resource_low.endswith("jobv2"):
object_methods.add("wait")
elif resource_states and resource_low != "action":
object_methods.add("wait_for_status")
if "Deleting" in resource_states or "DELETING" in resource_states:
object_methods.add("wait_for_delete")
continue
if action_low.split(resource_low)[0] == "create":
shape_name = self.operations[action]["input"]["shape"]
input = self.shapes[shape_name]
for member in input["members"]:
if member.endswith("Name") or member.endswith("Names"):
chain_resource_name = member[: -len("Name")]
if (
chain_resource_name != resource
and chain_resource_name in self.resources
):
chain_resource_names.add(chain_resource_name)
action_split = action_low.split(resource_low)
if action_split[0] == "invoke":
if not action_split[1]:
invoke_method = "invoke"
elif action_split[1] == "async":
invoke_method = "invoke_async"
else:
invoke_method = "invoke_with_response_stream"
object_methods.add(invoke_method)
elif action_split[0] in CLASS_METHODS:
if action_low.split(resource_low)[0] == "list":
class_methods.add("get_all")
else:
class_methods.add(action_low.split(resource_low)[0])
elif action_split[0] in OBJECT_METHODS:
object_methods.add(action_split[0])
else:
additional_methods.add(action)
if resource in self.RESOURCE_TO_ADDITIONAL_METHODS:
additional_methods.update(self.RESOURCE_TO_ADDITIONAL_METHODS[resource])
new_row = pd.DataFrame(
{
"resource_name": [resource],
"type": ["resource"],
"class_methods": [list(sorted(class_methods))],
"object_methods": [list(sorted(object_methods))],
"chain_resource_name": [list(sorted(chain_resource_names))],
"additional_methods": [list(sorted(additional_methods))],
"raw_actions": [list(sorted(actions))],
"resource_status_chain": [list(resource_status_chain)],
"resource_states": [list(resource_states)],
}
)
self.df = pd.concat([self.df, new_row], ignore_index=True)
self.df.to_csv("resource_plan.csv", index=False)