Source code for textflint.input_layer.component.field.list_field

"""
List Field Class
=====================

A helper class that represents input list values that to be modified.
"""

from .field import Field
from ....common.utils.list_op import *


[docs]class ListField(Field): r""" A helper class that represents input list values that to be modified. Operations which modify field_value would generate new Field instance. """
[docs] def __init__( self, field_value, **kwargs ): """ :param [str] field_value: The list that ListField represents. """ if isinstance(field_value, str): field_value = list(field_value) super().__init__(field_value, field_type=list, **kwargs)
[docs] def replace_at_indices(self, indices, new_items): r""" Replace items at indices. Notice: just support isometric replace. :param list[int|list|slice] indices: each index can be int indicate replace single item or their list like [1, 2, 3]. each index can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] each index can be slice which would be convert to list. :param list new_items: items corresponding indices. :return: new field object. """ field_value = replace_at_scopes(self.field_value, indices, new_items) return self.new_field(field_value)
[docs] def replace_at_index(self, index, new_items): r""" Replace item at index. :param int|list|slice index: can be int indicate replace single item or their list like [1, 2, 3] can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] can be slice which would be convert to list. :param list new_items: items corresponding index. :return: new field object. """ return self.replace_at_indices([index], [new_items])
[docs] def delete_at_indices(self, indices): r""" Delete items at indices. :param list[int|list|slice] indices: each index can be int indicate delete single item or their list like [1, 2, 3]. each index can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] each index can be slice which would be convert to list. :return: new field object. """ field_value = delete_at_scopes(self.field_value, indices) return self.new_field(field_value)
[docs] def delete_at_index(self, index): r""" Delete item at index. :param int|list|slice index: can be int indicate delete single item or their list like [1, 2, 3] can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] can be slice which would be convert to list. :return: new field object. """ return self.delete_at_indices([index])
[docs] def insert_before_indices(self, indices, new_items): r""" Insert items before indices. :param list[int|list|slice] indices: each index can be int indicate insert single item or their list like [1, 2, 3]. each index can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] each index can be slice which would be convert to list. :param list new_items: items corresponding indices. :return: new field object. """ field_value = insert_before_indices( self.field_value, indices, new_items) return self.new_field(field_value)
[docs] def insert_before_index(self, index, new_items): r""" Insert items before index. :param int|list|slice index: can be int indicate insert single item or their list like [1, 2, 3] can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] can be slice which would be convert to list. :param list new_items: items corresponding index. :return: new field object. """ return self.insert_before_indices([index], [new_items])
[docs] def insert_after_indices(self, indices, new_items): r""" Insert item after index. :param list[int|list|slice] indices: each index can be int indicate insert single item or their list like [1, 2, 3]. each index can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] each index can be slice which would be convert to list. :param list new_items: items corresponding indices. :return: new field object. """ field_value = insert_after_indices( self.field_value, indices, new_items) return self.new_field(field_value)
[docs] def insert_after_index(self, index, new_items): r""" Insert item after index. :param int|list|slice index: can be int indicate insert single item or their list like [1, 2, 3] can be list like (0,3) indicate replace items from 0 to 3(not included) or their list like [(0, 3), (5,6)] can be slice which would be convert to list. :param list new_items: items corresponding index :return: new field object. """ return self.insert_after_indices([index], [new_items])
[docs] def swap_at_index(self, first_index, second_index): r""" Swap item between first_index and second_index. :param int first_index: index of first item :param int second_index: index of second item :return: new field object. """ field_value = swap_at_index( self.field_value, first_index, second_index) return self.new_field(field_value)
def __len__(self): return len(self.field_value) def __getitem__(self, key): return self.field_value[key]