Source code for tablate.classes.bases.TablateApiSet
from copy import deepcopy
from typing import Union
from tablate.classes.bases.TablateApiBase import TablateApiBase
from tablate.classes.classes import TablateUnion
from tablate.classes.helpers.get_frame import get_frame
from tablate.classes.helpers.list_frame import list_frames
from tablate.library.calcs.gen_frame_name import gen_frame_name
[docs]
class TablateApiSet(TablateApiBase):
[docs]
def list_frames(self):
"""
List the frames in the Tablate container instance with some details about each frame.
"""
list_frames(self._frame_list)
[docs]
def get_frame(self, selector: Union[int, str], apply_globals: bool = False):
"""
Gets a frame from the Tablate container instance and returns it as a TablateItem.
Args:
selector: The index or name of the frame to select.
apply_globals: Whether to apply the global defaults and container styles to the returned TablateItem.
Returns:
"""
if apply_globals:
return deepcopy(get_frame(frame_list=self._frame_list, selector=selector, global_options=self._globals_store.args))
else:
return deepcopy(get_frame(frame_list=self._frame_list, selector=selector))
[docs]
def remove_frame(self, selector: Union[int, str]):
"""
Deletes a frame.
Args:
selector: The index or name of the frame to delete.
"""
for frame_index, (frame_key, frame_item) in enumerate(self._frame_list.items()):
if (type(selector) == int and selector == frame_index) or (type(selector) == str and selector == frame_key):
del self._frame_list[frame_key]
break
[docs]
def replace_frame(self, selector: Union[int, str], new_frame: TablateUnion, new_name: str = None):
"""
Replaces a frame with another frame.
Args:
selector: The index or name of the frame to replace.
new_frame: A Tablate Container instance to replace the frame with (if more than one frame in the Tablate container instance, only the first frame will be used).
new_name: (Optional) The new name of the frame.
"""
new_frame = deepcopy(new_frame)
for frame_index, (frame_key, frame_item) in enumerate(self._frame_list.items()):
if (type(selector) == int and selector == frame_index) or (type(selector) == str and selector == frame_key):
new_frame_key, new_frame_item = list(new_frame._frame_list.items())[0]
new_name = new_name if new_name is not None else new_frame_key
new_name = gen_frame_name(name=new_name, type=new_frame_item.type, frame_dict=self._frame_list, ensure_unique=True)
new_frame_item.name = new_name
new_frame_item.args["name"] = new_name
self._frame_list = {key if key != frame_key else new_name: value for key, value in self._frame_list.items()}
self._frame_list[new_name] = new_frame_item
[docs]
def rename_frame(self, selector: Union[int, str], new_name: str):
"""
Renames a frame.
Args:
selector: The index or name of the frame to rename.
new_name: The new name to apply to the frame.
"""
for frame_index, (frame_key, frame_item) in enumerate(self._frame_list.items()):
if (type(selector) == int and selector == frame_index) or (type(selector) == str and selector == frame_key):
self._frame_list = {key if key != frame_key else new_name: value for key, value in self._frame_list.items()}
break
[docs]
def move_frame(self, from_selector: Union[int, str], to_index: int):
"""
Move a frame within a Tablate container instance to a new index.
Args:
from_selector: The index or name of the frame to move.
to_index: The index to which the selected frame should be moved.
"""
selected_frame = get_frame(frame_list=self._frame_list, selector=from_selector, global_options=self._globals_store.args).name[1]
new_frame_list = {}
for frame_index, (frame_key, frame_item) in enumerate(self._frame_list.items()):
if to_index == frame_index and selected_frame is not None:
new_frame_list[selected_frame.name] = selected_frame
if (type(from_selector) == int and from_selector == frame_index) or (type(from_selector) == str and from_selector == frame_key):
to_index += 1
else:
new_frame_list[frame_key] = frame_item
self._frame_list = new_frame_list
[docs]
def insert_frame(self, insert_index: int, new_frame: TablateUnion, new_name: str = None):
"""
Insert a frame into a Tablate container instance at a specified index.
Args:
insert_index: The index at which the new frame should be inserted.
new_frame: The Tablate container instance to insert.
new_name: (Optional) The name to apply to the inserted frame.
"""
new_frame = deepcopy(new_frame)
new_frame_list = {}
for frame_index, (frame_key, frame_item) in enumerate(self._frame_list.items()):
if insert_index == frame_index:
new_frame_key, new_frame_item = list(new_frame._frame_list.items())[0]
new_name = new_name if new_name is not None else new_frame_key
new_name = gen_frame_name(name=new_name, type=new_frame_item.type, frame_dict=self._frame_list, ensure_unique=True)
new_frame_item.name = new_name
new_frame_item.args["name"] = new_name
new_frame_list[new_name] = new_frame_item
new_frame_list[frame_key] = frame_item
self._frame_list = new_frame_list