def _duplicate_apps(self, api: CloudShellAPISession, apps: List[ReservationAppResource], app_connectors: Dict[str, List[Connector]], sandbox_id: str) \ -> List[ConnectorsAttrUpdateRequest]: apps_to_duplicate = self._components_service.get_apps_to_duplicate( apps) service_app_positions_dict = self._components_service.get_service_and_app_name_to_position_dict( api, sandbox_id) app_edit_requests = [] set_connector_requests = [] connectors_attr_updates = [] for user_index, user in enumerate(self._env_data.users_list): # set user ID based on index user_id = str(user_index + 1) self._users_data_manager.add_or_update(user, userDataKeys.ID, user_id) for app in apps_to_duplicate: self._sandbox_output.debug_print( f"Duplicating app {app.Name} for user #{user_id}") # create new name for duplicate app based on user id new_app_name = f"{user_id}_{app.Name}" # duplicate app and get request for update to be called in batch later app_edit_requests.append( self._duplicate_app_and_get_update_request( api, new_app_name, app, sandbox_id, service_app_positions_dict[app.Name], user_index)) # duplicate all connectors for duplicated app with all attributes app_set_connector_requests, app_connectors_attr_updates = \ self._create_duplicate_app_connectors_requests(app, app_connectors[app.Name], new_app_name) set_connector_requests.extend(app_set_connector_requests) connectors_attr_updates.extend(app_connectors_attr_updates) # run bulk update requests if app_edit_requests: api.EditAppsInReservation(sandbox_id, app_edit_requests) if set_connector_requests: api.SetConnectorsInReservation(sandbox_id, set_connector_requests) return connectors_attr_updates
''' :param str attribute_name: :param ApiEditAppRequest edit_app_object: :return: ''' for attribute in edit_app_object.AppDetails.Attributes: if attribute_name == attribute.Name or '{0}.{1}'.format(edit_app_object.AppDetails.ModelName, attribute_name) == attribute.Name: attribute.Value = attribute_value print 'replaced password for app {}'.format(edit_app_object.Name) return edit_app_object all_apps = session.GetReservationDetails(res_id).ReservationDescription.Apps app_names = [app.Name for app in all_apps] all_app_get_objects = session.GetAppsDetailsInReservation( reservationId=res_id, appNames=app_names ) for app in all_app_get_objects.Apps: converted_object = convert_get_to_set_app(app) changed_converted_object = change_attribute(converted_object, 'Password', 'abcd12342314') session.EditAppsInReservation( reservationId=res_id, editAppsRequests=[changed_converted_object] ) qq = session.GetAppsDetailsInReservation( reservationId=res_id, appNames=app_names ) pass