Skip to content

Commit

Permalink
Merge pull request #99 from DaniilAnichin/feature/lazy-date-lut
Browse files Browse the repository at this point in the history
Add lazy date_lut, similar to clickhouse-driver
  • Loading branch information
long2ice authored Apr 24, 2024
2 parents 55cf91f + af8e1d6 commit 57ab436
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions asynch/proto/columns/datecolumn.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,20 @@
epoch_end = date(2149, 6, 6)

epoch_start_date32 = date(1900, 1, 1)
epoch_end_date32 = date(2283, 11, 11)
epoch_end_date32 = date(2299, 12, 31)


class LazyLUT(dict):
def __init__(self, *args, _factory, **kwargs):
super().__init__(*args, **kwargs)
self._default_factory = _factory

def __missing__(self, key):
return self.setdefault(key, self._default_factory(key))


lazy_date_lut = LazyLUT(_factory=lambda x: epoch_start + timedelta(x))
lazy_date_lut_reverse = LazyLUT(_factory=lambda x: (x - epoch_start).days)


class DateColumn(FormatColumn):
Expand All @@ -19,9 +32,8 @@ class DateColumn(FormatColumn):
min_value = epoch_start
max_value = epoch_end

date_lut_days = (epoch_end - epoch_start).days + 1
date_lut = {x: epoch_start + timedelta(x) for x in range(date_lut_days)}
date_lut_reverse = {value: key for key, value in date_lut.items()}
date_lut = lazy_date_lut
date_lut_reverse = lazy_date_lut_reverse

def before_write_items(self, items, nulls_map=None):
null_value = self.null_value
Expand Down Expand Up @@ -61,9 +73,5 @@ class Date32Column(DateColumn):
min_value = epoch_start_date32
max_value = epoch_end_date32

date_lut_days = (epoch_end_date32 - epoch_start).days + 1
date_lut = {
x: epoch_start + timedelta(x)
for x in range((epoch_start_date32 - epoch_start).days, date_lut_days)
}
date_lut_reverse = {value: key for key, value in date_lut.items()}
date_lut = lazy_date_lut
date_lut_reverse = lazy_date_lut_reverse

0 comments on commit 57ab436

Please sign in to comment.