1
1
from datetime import datetime
2
2
from typing import Dict , Iterable , Optional , Union
3
-
4
3
from aleph_message .models import MessageType
4
+ from ..utils import _date_field_to_timestamp , serialize_list , enum_as_str
5
+ from enum import Enum , IntEnum
6
+
7
+
8
+ class SortBy (str , Enum ):
9
+ """Supported SortBy types"""
10
+
11
+ TIME = "time"
12
+ TX_TIME = "tx-time"
13
+
14
+
15
+ class SortOrder (str , Enum ):
16
+ """Supported SortOrder types"""
5
17
6
- from ..utils import _date_field_to_timestamp , serialize_list
18
+ ASCENDING = "1"
19
+ DESCENDING = "-1"
7
20
8
21
9
22
class MessageFilter :
@@ -20,6 +33,8 @@ class MessageFilter:
20
33
:param chains: Filter by sender address chain
21
34
:param start_date: Earliest date to fetch messages from
22
35
:param end_date: Latest date to fetch messages from
36
+ :param sort_by: Sort by time or tx-time
37
+ :param sort_order: Sort by ascending or descending order
23
38
"""
24
39
25
40
message_types : Optional [Iterable [MessageType ]]
@@ -33,6 +48,8 @@ class MessageFilter:
33
48
chains : Optional [Iterable [str ]]
34
49
start_date : Optional [Union [datetime , float ]]
35
50
end_date : Optional [Union [datetime , float ]]
51
+ sort_by : Optional [SortBy ]
52
+ sort_order : Optional [SortOrder ]
36
53
37
54
def __init__ (
38
55
self ,
@@ -47,6 +64,8 @@ def __init__(
47
64
chains : Optional [Iterable [str ]] = None ,
48
65
start_date : Optional [Union [datetime , float ]] = None ,
49
66
end_date : Optional [Union [datetime , float ]] = None ,
67
+ sort_by : Optional [SortBy ] = None ,
68
+ sort_order : Optional [SortOrder ] = None ,
50
69
):
51
70
self .message_types = message_types
52
71
self .content_types = content_types
@@ -59,14 +78,16 @@ def __init__(
59
78
self .chains = chains
60
79
self .start_date = start_date
61
80
self .end_date = end_date
81
+ self .sort_by = sort_by
82
+ self .sort_order = sort_order
62
83
63
84
def as_http_params (self ) -> Dict [str , str ]:
64
85
"""Convert the filters into a dict that can be used by an `aiohttp` client
65
86
as `params` to build the HTTP query string.
66
87
"""
67
88
68
89
partial_result = {
69
- "msgType " : serialize_list (
90
+ "msgTypes " : serialize_list (
70
91
[type .value for type in self .message_types ]
71
92
if self .message_types
72
93
else None
@@ -81,6 +102,8 @@ def as_http_params(self) -> Dict[str, str]:
81
102
"chains" : serialize_list (self .chains ),
82
103
"startDate" : _date_field_to_timestamp (self .start_date ),
83
104
"endDate" : _date_field_to_timestamp (self .end_date ),
105
+ "sortBy" : enum_as_str (self .sort_by ),
106
+ "sortOrder" : enum_as_str (self .sort_order ),
84
107
}
85
108
86
109
# Ensure all values are strings.
@@ -110,6 +133,8 @@ class PostFilter:
110
133
chains : Optional [Iterable [str ]]
111
134
start_date : Optional [Union [datetime , float ]]
112
135
end_date : Optional [Union [datetime , float ]]
136
+ sort_by : Optional [SortBy ]
137
+ sort_order : Optional [SortOrder ]
113
138
114
139
def __init__ (
115
140
self ,
@@ -122,6 +147,8 @@ def __init__(
122
147
chains : Optional [Iterable [str ]] = None ,
123
148
start_date : Optional [Union [datetime , float ]] = None ,
124
149
end_date : Optional [Union [datetime , float ]] = None ,
150
+ sort_by : Optional [SortBy ] = None ,
151
+ sort_order : Optional [SortOrder ] = None ,
125
152
):
126
153
self .types = types
127
154
self .refs = refs
@@ -132,6 +159,8 @@ def __init__(
132
159
self .chains = chains
133
160
self .start_date = start_date
134
161
self .end_date = end_date
162
+ self .sort_by = sort_by
163
+ self .sort_order = sort_order
135
164
136
165
def as_http_params (self ) -> Dict [str , str ]:
137
166
"""Convert the filters into a dict that can be used by an `aiohttp` client
@@ -148,6 +177,8 @@ def as_http_params(self) -> Dict[str, str]:
148
177
"chains" : serialize_list (self .chains ),
149
178
"startDate" : _date_field_to_timestamp (self .start_date ),
150
179
"endDate" : _date_field_to_timestamp (self .end_date ),
180
+ "sortBy" : enum_as_str (self .sort_by ),
181
+ "sortOrder" : enum_as_str (self .sort_order ),
151
182
}
152
183
153
184
# Ensure all values are strings.
0 commit comments