def scan(self, table_name, filter_condition=None, attributes_to_get=None, limit=None, conditional_operator=None, scan_filter=None, return_consumed_capacity=None, exclusive_start_key=None, segment=None, total_segments=None, consistent_read=None, index_name=None):
    '\n        Performs the scan operation\n        '
    self._check_condition('filter_condition', filter_condition, scan_filter, conditional_operator)
    operation_kwargs = {TABLE_NAME: table_name}
    name_placeholders = {}
    expression_attribute_values = {}
    if (filter_condition is not None):
        filter_expression = filter_condition.serialize(name_placeholders, expression_attribute_values)
        operation_kwargs[FILTER_EXPRESSION] = filter_expression
    if (attributes_to_get is not None):
        projection_expression = create_projection_expression(attributes_to_get, name_placeholders)
        operation_kwargs[PROJECTION_EXPRESSION] = projection_expression
    if index_name:
        operation_kwargs[INDEX_NAME] = index_name
    if (limit is not None):
        operation_kwargs[LIMIT] = limit
    if return_consumed_capacity:
        operation_kwargs.update(self.get_consumed_capacity_map(return_consumed_capacity))
    if exclusive_start_key:
        operation_kwargs.update(self.get_exclusive_start_key_map(table_name, exclusive_start_key))
    if (segment is not None):
        operation_kwargs[SEGMENT] = segment
    if total_segments:
        operation_kwargs[TOTAL_SEGMENTS] = total_segments
    if scan_filter:
        conditional_operator = self.get_conditional_operator((conditional_operator or AND))
        filter_expression = self._get_filter_expression(table_name, scan_filter, conditional_operator, name_placeholders, expression_attribute_values)
        operation_kwargs[FILTER_EXPRESSION] = filter_expression
    if consistent_read:
        operation_kwargs[CONSISTENT_READ] = consistent_read
    if name_placeholders:
        operation_kwargs[EXPRESSION_ATTRIBUTE_NAMES] = self._reverse_dict(name_placeholders)
    if expression_attribute_values:
        operation_kwargs[EXPRESSION_ATTRIBUTE_VALUES] = expression_attribute_values
    try:
        return self.dispatch(SCAN, operation_kwargs)
    except BOTOCORE_EXCEPTIONS as e:
        raise ScanError('Failed to scan table: {0}'.format(e), e)
Performs the scan operation
def scan(self, table_name, filter_condition=None, attributes_to_get=None, limit=None, conditional_operator=None, scan_filter=None, return_consumed_capacity=None, exclusive_start_key=None, segment=None, total_segments=None, consistent_read=None, index_name=None):
    '\n        \n        '
    self._check_condition('filter_condition', filter_condition, scan_filter, conditional_operator)
    operation_kwargs = {TABLE_NAME: table_name}
    name_placeholders = {}
    expression_attribute_values = {}
    if (filter_condition is not None):
        filter_expression = filter_condition.serialize(name_placeholders, expression_attribute_values)
        operation_kwargs[FILTER_EXPRESSION] = filter_expression
    if (attributes_to_get is not None):
        projection_expression = create_projection_expression(attributes_to_get, name_placeholders)
        operation_kwargs[PROJECTION_EXPRESSION] = projection_expression
    if index_name:
        operation_kwargs[INDEX_NAME] = index_name
    if (limit is not None):
        operation_kwargs[LIMIT] = limit
    if return_consumed_capacity:
        operation_kwargs.update(self.get_consumed_capacity_map(return_consumed_capacity))
    if exclusive_start_key:
        operation_kwargs.update(self.get_exclusive_start_key_map(table_name, exclusive_start_key))
    if (segment is not None):
        operation_kwargs[SEGMENT] = segment
    if total_segments:
        operation_kwargs[TOTAL_SEGMENTS] = total_segments
    if scan_filter:
        conditional_operator = self.get_conditional_operator((conditional_operator or AND))
        filter_expression = self._get_filter_expression(table_name, scan_filter, conditional_operator, name_placeholders, expression_attribute_values)
        operation_kwargs[FILTER_EXPRESSION] = filter_expression
    if consistent_read:
        operation_kwargs[CONSISTENT_READ] = consistent_read
    if name_placeholders:
        operation_kwargs[EXPRESSION_ATTRIBUTE_NAMES] = self._reverse_dict(name_placeholders)
    if expression_attribute_values:
        operation_kwargs[EXPRESSION_ATTRIBUTE_VALUES] = expression_attribute_values
    try:
        return self.dispatch(SCAN, operation_kwargs)
    except BOTOCORE_EXCEPTIONS as e:
        raise ScanError('Failed to scan table: {0}'.format(e), e)