Example #1
0
    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