Skip to content

Commit

Permalink
importers.csvbase: Allow to use None as default column value
Browse files Browse the repository at this point in the history
  • Loading branch information
dnicolodi committed Jan 24, 2025
1 parent c6c444d commit 04b641b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
13 changes: 9 additions & 4 deletions beangulp/importers/csvbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@

EMPTY = frozenset()

NA = object()
"""Marker to indicate that a value was not specified."""


def _resolve(spec, names):
"""Resolve column specification into column index.
Expand Down Expand Up @@ -40,10 +43,12 @@ class Column:
Args:
name: Column name or index.
default: Value to return if the field is empty.
"""
default: Value to return if the field is empty. When a default
value is not provided, emty fields are passed to the parser
to generate a value.
def __init__(self, *names, default=None):
"""
def __init__(self, *names, default=NA):
self.names = names
self.default = default

Expand All @@ -70,7 +75,7 @@ def getter(self, names):
idxs = [_resolve(x, names) for x in self.names]
def func(obj):
value = tuple(obj[i] for i in idxs)
if not all(value) and self.default:
if self.default is not NA and not any(value):
return self.default
return self.parse(*value)
return func
Expand Down
8 changes: 7 additions & 1 deletion beangulp/importers/csvbase_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,18 @@ def test_strip(self):
value = func((' value ', ))
self.assertEqual(value, 'value')

def test_default(self):
def test_default_value(self):
column = Column(0, default=42)
func = column.getter(None)
value = func(('', ))
self.assertEqual(value, 42)

def test_default_value_none(self):
column = Column(0, default=None)
func = column.getter(None)
value = func(('', ))
self.assertIsNone(value)


class TestDateColumn(unittest.TestCase):

Expand Down

0 comments on commit 04b641b

Please sign in to comment.