From 710e6c4b20430c529b6b1f70f18f590eb3c717e0 Mon Sep 17 00:00:00 2001 From: Michael Herrmann Date: Tue, 3 Nov 2015 18:32:54 +0100 Subject: [PATCH] Add support for deleting table rows. --- README.rst | 12 +++++++++--- pypxlib/__init__.py | 16 ++++++++++++---- setup.py | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index 1f4ac1d..95d2cfa 100644 --- a/README.rst +++ b/README.rst @@ -95,11 +95,17 @@ given by the table's ``.fields`` property: OrderedDict([('field1', ), ('field2', )] >>> table.insert((50, 'Some text')) - 97 - >>> table[97] + 2 + >>> table[2] Row(field1=50, field2='Some text') -Don't forget to close the table when you are done! +Deleting a row can be done via the ``del`` keyword: + +.. code:: python + + >>> del table[2] + +Finally, don't forget to close the table when you are done! .. code:: python diff --git a/pypxlib/__init__.py b/pypxlib/__init__.py index 1def25b..61a7be9 100644 --- a/pypxlib/__init__.py +++ b/pypxlib/__init__.py @@ -44,10 +44,7 @@ def fields(self): Field.from_type(ord(field.px_ftype), i, self.encoding) return self._fields_cached def __getitem__(self, rownum): - if not isinstance(rownum, int): - raise TypeError( - 'Table indices must be integers, not %s.' % type(rownum) - ) + self._check_rownum(rownum) _len = len(self) if rownum < 0: rownum %= _len @@ -60,6 +57,17 @@ def __getitem__(self, rownum): (rownum, self.file_path) ) return Row(self, rownum, pxvals) + def _check_rownum(self, rownum): + if not isinstance(rownum, int): + raise TypeError( + 'Table indices must be integers, not %s.' % type(rownum) + ) + def __delitem__(self, rownum): + self._check_rownum(rownum) + if PX_delete_record(self.pxdoc, rownum) == -1: + raise PXError( + 'Could not delete row %d of file %s.' % (rownum, self.file_path) + ) def __len__(self): return self.pxdoc.contents.px_head.contents.px_numrecords def __iter__(self): diff --git a/setup.py b/setup.py index e44beaa..52b105f 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ setup( name='pypxlib', - version='1.4', + version='1.5', description=description, long_description=