def move_row(self, identifier: str, row_id: str, position: int, datastore: Datastore) -> VizualApiResult: """Move a row within a given dataset. Raises ValueError if no dataset with given identifier exists or if the specified row or position is not within the range of the dataset. Parameters ---------- identifier: string Unique dataset identifier row_id: int Global row identifier for deleted row position: int Target position for the row datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') command = {"id": "moveRow", "row": row_id, "position": position} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def delete_row(self, identifier: str, row_index: str, datastore: Datastore) -> VizualApiResult: """Delete a row in a given dataset. Raises ValueError if no dataset with given identifier exists or if the specified row is not within the range of the dataset. Parameters ---------- identifier: string Unique dataset identifier row_index: int Row index for deleted row datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') assert (isinstance(dataset, MimirDatasetHandle)) # Create a view for the modified dataset col_list = [] for col in dataset.columns: assert (isinstance(col, MimirDatasetColumn)) col_list.append(col.name_in_rdb) command = {"id": "deleteRow", "row": int(row_index)} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def delete_column(self, identifier: str, column_id: int, datastore: Datastore) -> VizualApiResult: """Delete a column in a given dataset. Raises ValueError if no dataset with given identifier exists or if the specified column is unknown. Parameters ---------- identifier: string Unique dataset identifier column_id: int Unique column identifier datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # Confirm that the column actually exists and convert the column_identifier to # a position in the schema (usually ==, but not guaranteed) col_index = get_index_for_column(dataset, column_id) command = {"id": "deleteColumn", "column": col_index} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response, identifier)
def insert_row(self, identifier: str, position: int, datastore: Datastore) -> VizualApiResult: """Insert row at given position in a dataset. Raises ValueError if no dataset with given identifier exists or if the specified row psotion isoutside the dataset bounds. Parameters ---------- identifier: string Unique dataset identifier position: int Index position at which the row will be inserted datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') command = {"id": "insertRow", "position": position} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def filter_columns(self, identifier: str, columns: List[int], names: List[str], datastore: Datastore) -> VizualApiResult: """Dataset projection operator. Returns a copy of the dataset with the given identifier that contains only those columns listed in columns. The list of names contains optional new names for the filtered columns. A value of None in names indicates that the name of the corresponding column is not changed. Raises ValueError if no dataset with given identifier exists or if any of the filter columns are unknown. Parameters ---------- identifier: string Unique dataset identifier columns: list(int) List of column identifier for columns in the result. names: list(string) Optional new names for filtered columns. datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # The schema of the new dataset only contains the columns in the given # list. A column might need to be renamed. schema = list() column_mapping = list() col_list = [] for i in range(len(columns)): col_idx = get_index_for_column(dataset, columns[i]) col = dataset.columns[col_idx] if not names[i] is None: if not is_valid_name(names[i]): raise ValueError('invalid column name \'' + str(names[i]) + '\'') schema.append( MimirDatasetColumn(identifier=col.identifier, name_in_dataset=names[i], name_in_rdb=names[i])) else: schema.append(col) column_mapping.append({ "columns_column": col_idx, "columns_name": schema[-1].name }) col_list.append(col.name_in_rdb) command = {"id": "projection", "columns": column_mapping} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def move_column(self, identifier: str, column_id: int, position: int, datastore: Datastore) -> VizualApiResult: """Move a column within a given dataset. Raises ValueError if no dataset with given identifier exists or if the specified column is unknown or the target position invalid. Parameters ---------- identifier: string Unique dataset identifier column_id: int Unique column identifier position: int Target position for the column datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # Make sure that position is a valid column index in the new dataset if position < 0 or position > len(dataset.columns): raise ValueError('invalid target position \'' + str(position) + '\'') # Get index position of column that is being moved source_idx = get_index_for_column(dataset, column_id) # No need to do anything if source position equals target position if source_idx != position: # Keep the mimir-side schema aligned with the vizier-side schema command = { "id": "moveColumn", "column": source_idx, "position": position } response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response) else: return VizualApiResult(dataset)
def insert_column(self, identifier: str, position: int, name: str, datastore: Datastore) -> VizualApiResult: """Insert column with given name at given position in dataset. Raises ValueError if no dataset with given identifier exists, if the specified column position is outside of the current schema bounds, or if the column name is invalid. Parameters ---------- identifier: string Unique dataset identifier position: int Index position at which the column will be inserted name: string, optional New column name datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Raise ValueError if given colum name is invalid if not is_valid_name(name): raise ValueError('invalid column name \'' + str(name) + '\'') # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # Make sure that position is a valid column index in the new dataset if position < 0 or position > len(dataset.columns): raise ValueError('invalid column index \'' + str(position) + '\'') # Get identifier for new column col_id = dataset.max_column_id() + 1 # Insert new column into schema schema = list(dataset.columns) new_column = MimirDatasetColumn(col_id, name, name) schema.insert(position, new_column) command = {"id": "insertColumn", "name": name, "position": position} response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def update_cell(self, identifier: str, column_id: int, row_id: str, value: str, datastore: Datastore) -> VizualApiResult: """Update a cell in a given dataset. Raises ValueError if no dataset with given identifier exists or if the specified cell is outside of the current dataset ranges. Parameters ---------- identifier : string Unique dataset identifier column_id: int Unique column identifier for updated cell row_id: int Unique row identifier value: string New cell value datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # Get the index of the specified cell column col_index = get_index_for_column(dataset, column_id) # Raise exception if row id is not valid command = { "id": "updateCell", "column": col_index, "row": row_id, "value": str(value) if value is not None else None } response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)
def rename_column(self, identifier: str, column_id: int, name: str, datastore: Datastore) -> VizualApiResult: """Rename column in a given dataset. Raises ValueError if no dataset with given identifier exists, if the specified column is unknown, or if the given column name is invalid. Parameters ---------- identifier: string Unique dataset identifier column_id: int Unique column identifier name: string New column name datastore : vizier.datastore.fs.base.FileSystemDatastore Datastore to retireve and update datasets Returns ------- vizier.engine.packages.vizual.api.VizualApiResult """ # Raise ValueError if given colum name is invalid if not is_valid_name(name): raise ValueError('invalid column name \'' + str(name) + '\'') # Get dataset. Raise exception if dataset is unknown dataset = datastore.get_dataset(identifier) if dataset is None: raise ValueError('unknown dataset \'' + identifier + '\'') # Get the specified column that is to be renamed and set the column name # to the new name target_col_index = get_index_for_column(dataset, column_id) command = { "id": "renameColumn", "column": target_col_index, "name": name } response = mimir.vizualScript(dataset.identifier, command) return VizualApiResult.from_mimir(response)