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