Skip to content

Commit

Permalink
Merge pull request #1427 from JoshKarpel/clear-table-cols
Browse files Browse the repository at this point in the history
Add option to clear columns in `DataTable.clear()`
  • Loading branch information
willmcgugan authored Dec 29, 2022
2 parents cef386a + a45a3dc commit e59d606
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [0.8.3] - Unreleased

### Added

- Added an option to clear columns in DataTable.clear() https://github.com/Textualize/textual/pull/1427

## [0.8.2] - 2022-12-28

### Fixed
Expand Down
4 changes: 3 additions & 1 deletion src/textual/widgets/_data_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ def _get_cell_region(self, row_index: int, column_index: int) -> Region:
cell_region = Region(x, y, width, height)
return cell_region

def clear(self) -> None:
def clear(self, columns: bool = False) -> None:
"""Clear the table.
Args:
Expand All @@ -323,6 +323,8 @@ def clear(self) -> None:
self._y_offsets.clear()
self.data.clear()
self.rows.clear()
if columns:
self.columns.clear()
self._line_no = 0
self._require_update_dimensions = True
self.refresh()
Expand Down
21 changes: 21 additions & 0 deletions tests/test_table.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import asyncio

from rich.text import Text

from textual.app import App, ComposeResult
from textual.widgets import DataTable

Expand All @@ -18,13 +20,32 @@ async def test_table_clear() -> None:
table.add_columns("foo", "bar")
assert table.row_count == 0
table.add_row("Hello", "World!")
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {0: ["Hello", "World!"]}
assert table.row_count == 1
table.clear()
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {}
assert table.row_count == 0


async def test_table_clear_with_columns() -> None:
"""Check DataTable.clear(columns=True)"""

app = TableApp()
async with app.run_test() as pilot:
table = app.query_one(DataTable)
table.add_columns("foo", "bar")
assert table.row_count == 0
table.add_row("Hello", "World!")
assert [col.label for col in table.columns] == [Text("foo"), Text("bar")]
assert table.data == {0: ["Hello", "World!"]}
assert table.row_count == 1
table.clear(columns=True)
assert [col.label for col in table.columns] == []
assert table.data == {}
assert table.row_count == 0

async def test_table_add_row() -> None:

app = TableApp()
Expand Down

0 comments on commit e59d606

Please sign in to comment.