Skip to content

Commit

Permalink
Problem: Filtering by start_date or end_date would fail assertion
Browse files Browse the repository at this point in the history
Solution: Cast to string in date field conversion
  • Loading branch information
MHHukiewitz committed Nov 9, 2023
1 parent 00592c2 commit e95c3a9
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
10 changes: 5 additions & 5 deletions src/aleph/sdk/query/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from aleph_message.models import MessageType

from ..utils import _date_field_to_float, serialize_list
from ..utils import _date_field_to_timestamp, serialize_list


class MessageFilter:
Expand Down Expand Up @@ -79,8 +79,8 @@ def as_http_params(self) -> Dict[str, str]:
"hashes": serialize_list(self.hashes),
"channels": serialize_list(self.channels),
"chains": serialize_list(self.chains),
"startDate": _date_field_to_float(self.start_date),
"endDate": _date_field_to_float(self.end_date),
"startDate": _date_field_to_timestamp(self.start_date),
"endDate": _date_field_to_timestamp(self.end_date),
}

# Ensure all values are strings.
Expand Down Expand Up @@ -146,8 +146,8 @@ def as_http_params(self) -> Dict[str, str]:
"hashes": serialize_list(self.hashes),
"channels": serialize_list(self.channels),
"chains": serialize_list(self.chains),
"startDate": _date_field_to_float(self.start_date),
"endDate": _date_field_to_float(self.end_date),
"startDate": _date_field_to_timestamp(self.start_date),
"endDate": _date_field_to_timestamp(self.end_date),
}

# Ensure all values are strings.
Expand Down
6 changes: 3 additions & 3 deletions src/aleph/sdk/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,12 @@ def serialize_list(values: Optional[Iterable[str]]) -> Optional[str]:
return None


def _date_field_to_float(date: Optional[Union[datetime, float]]) -> Optional[float]:
def _date_field_to_timestamp(date: Optional[Union[datetime, float]]) -> Optional[str]:
if date is None:
return None
elif isinstance(date, float):
return date
return str(date)
elif hasattr(date, "timestamp"):
return date.timestamp()
return str(date.timestamp())
else:
raise TypeError(f"Invalid type: `{type(date)}`")
3 changes: 3 additions & 0 deletions tests/unit/test_asynchronous_get.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import unittest
from datetime import datetime
from typing import Any, Dict
from unittest.mock import AsyncMock

Expand Down Expand Up @@ -75,6 +76,7 @@ async def test_get_posts():
page_size=2,
post_filter=PostFilter(
channels=["TEST"],
start_date=datetime(2021, 1, 1),
),
)

Expand All @@ -89,6 +91,7 @@ async def test_get_messages():
page_size=2,
message_filter=MessageFilter(
message_types=[MessageType.post],
start_date=datetime(2021, 1, 1),
),
)

Expand Down

0 comments on commit e95c3a9

Please sign in to comment.