1
1
import datetime
2
- from typing import Any , Iterable , Mapping
2
+ from typing import Any , Iterable , List , Mapping , Union
3
3
4
4
from indico .errors import IndicoInputError
5
5
@@ -48,7 +48,10 @@ class SubmissionReviewFilter(Filter):
48
48
__options__ = ("rejected" , "created_by" , "review_type" )
49
49
50
50
def __init__ (
51
- self , rejected : bool = None , created_by : int = None , review_type : str = None
51
+ self ,
52
+ rejected : Union [bool , None ] = None ,
53
+ created_by : Union [int , None ] = None ,
54
+ review_type : Union [str , None ] = None ,
52
55
):
53
56
kwargs = {
54
57
"rejected" : rejected ,
@@ -59,33 +62,75 @@ def __init__(
59
62
super ().__init__ (** kwargs )
60
63
61
64
65
+ class DateRangeFilter (dict ):
66
+ """
67
+ Create a Filter when querying for Submissions within a certain date range
68
+ Args:
69
+ filter_from (str): A valid string representation of a datetime for start date to filter
70
+ filter_to (str): A valid string representation of a datetime for end date to filter
71
+ """
72
+
73
+ def __init__ (
74
+ self , filter_from : Union [str , None ] = None , filter_to : Union [str , None ] = None
75
+ ):
76
+ kwargs = {"from" : filter_from , "to" : filter_to }
77
+ self .update (kwargs )
78
+
79
+
62
80
class SubmissionFilter (Filter ):
63
81
"""
64
82
Create a Filter when querying for WorkflowSubmissions.
65
83
66
84
Args:
85
+ file_type (list): submissions with a file type in this list. Options:
86
+ [CSV, PDF, EXCEL, DOC, DOCX, PPT, PPTX, PNG, JPG, TIFF, TXT, RTF, XLS, XLSX, UNKNOWN, MSG, EML]
67
87
input_filename (str): submissions with input file names containing this string
68
88
status (str): submissions in this status. Options:
69
89
[PROCESSING, PENDING_REVIEW, PENDING_ADMIN_REVIEW, COMPLETE, FAILED]
70
- retrieved(bool): Filter submissions on the retrieved flag
90
+ retrieved (bool): submissions that have been retrieved (True) or not (False)
91
+ reviews (SubmissionReviewFilter): submissions whose completed reviews match this review filter
92
+ review_in_progress (bool): submissions where a review is in progress (True) or not (False)
93
+ files_deleted (bool): submissions that have had their internal files removed (True) or not (False)
94
+ created_at (DateRangeFilter): submissions created during given time range
95
+ updated_at (DateRangeFilter): submissions updated during given time range
71
96
Returns:
72
97
dict containing query filter parameters
73
98
"""
74
99
75
- __options__ = ("input_filename" , "status" , "retrieved" )
100
+ __options__ = (
101
+ "file_type" ,
102
+ "input_filename" ,
103
+ "status" ,
104
+ "retrieved" ,
105
+ "reviews" ,
106
+ "review_in_progress" ,
107
+ "files_deleted" ,
108
+ "created_at" ,
109
+ "updated_at" ,
110
+ )
76
111
77
112
def __init__ (
78
113
self ,
79
- input_filename : str = None ,
80
- status : str = None ,
81
- retrieved : bool = None ,
82
- reviews : SubmissionReviewFilter = None ,
114
+ file_type : Union [List [str ], None ] = None ,
115
+ input_filename : Union [str , None ] = None ,
116
+ status : Union [str , None ] = None ,
117
+ retrieved : Union [bool , None ] = None ,
118
+ reviews : Union [SubmissionReviewFilter , None ] = None ,
119
+ review_in_progress : Union [bool , None ] = None ,
120
+ files_deleted : Union [bool , None ] = None ,
121
+ created_at : Union [DateRangeFilter , None ] = None ,
122
+ updated_at : Union [DateRangeFilter , None ] = None ,
83
123
):
84
124
kwargs = {
125
+ "filetype" : file_type ,
85
126
"inputFilename" : input_filename ,
86
127
"status" : status .upper () if status else status ,
87
128
"retrieved" : retrieved ,
88
129
"reviews" : reviews ,
130
+ "reviewInProgress" : review_in_progress ,
131
+ "filesDeleted" : files_deleted ,
132
+ "createdAt" : created_at ,
133
+ "updatedAt" : updated_at ,
89
134
}
90
135
91
136
super ().__init__ (** kwargs )
@@ -110,10 +155,10 @@ class ModelGroupExampleFilter(Filter):
110
155
111
156
def __init__ (
112
157
self ,
113
- file_name : str = None ,
114
- partial : bool = None ,
115
- status : str = None ,
116
- text_search : str = None ,
158
+ file_name : Union [ str , None ] = None ,
159
+ partial : Union [ bool , None ] = None ,
160
+ status : Union [ str , None ] = None ,
161
+ text_search : Union [ str , None ] = None ,
117
162
):
118
163
kwargs = {
119
164
"fileName" : file_name ,
@@ -138,7 +183,9 @@ class UserMetricsFilter(Filter):
138
183
139
184
__options__ = ("user_id" , "user_email" )
140
185
141
- def __init__ (self , user_id : int = None , user_email : str = None ):
186
+ def __init__ (
187
+ self , user_id : Union [int , None ] = None , user_email : Union [str , None ] = None
188
+ ):
142
189
kwargs = {"userId" : user_id , "userEmail" : user_email }
143
190
144
191
super ().__init__ (** kwargs )
@@ -172,32 +219,36 @@ class DocumentReportFilter(Filter):
172
219
173
220
def __init__ (
174
221
self ,
175
- submission_id : int = None ,
176
- workflow_id : int = None ,
177
- status : str = None ,
178
- created_at_start_date : datetime = None ,
179
- created_at_end_date : datetime = None ,
180
- updated_at_start_date : datetime = None ,
181
- updated_at_end_date : datetime = None ,
222
+ submission_id : Union [ int , None ] = None ,
223
+ workflow_id : Union [ int , None ] = None ,
224
+ status : Union [ str , None ] = None ,
225
+ created_at_start_date : Union [ datetime . datetime , None ] = None ,
226
+ created_at_end_date : Union [ datetime . datetime , None ] = None ,
227
+ updated_at_start_date : Union [ datetime . datetime , None ] = None ,
228
+ updated_at_end_date : Union [ datetime . datetime , None ] = None ,
182
229
):
183
230
kwargs = {"workflowId" : workflow_id , "id" : submission_id , "status" : status }
184
231
if created_at_end_date and not created_at_start_date :
185
232
raise IndicoInputError ("Must specify created_at_start_date" )
186
233
if created_at_start_date :
187
234
kwargs ["createdAt" ] = {
188
235
"from" : created_at_start_date .strftime ("%Y-%m-%d" ),
189
- "to" : created_at_end_date .strftime ("%Y-%m-%d" )
190
- if created_at_end_date is not None
191
- else datetime .datetime .now ().strftime ("%Y-%m-%d" ),
236
+ "to" : (
237
+ created_at_end_date .strftime ("%Y-%m-%d" )
238
+ if created_at_end_date is not None
239
+ else datetime .datetime .now ().strftime ("%Y-%m-%d" )
240
+ ),
192
241
}
193
242
194
243
if updated_at_end_date and not updated_at_start_date :
195
244
raise IndicoInputError ("Must specify updated_at_start_date" )
196
245
if updated_at_start_date is not None :
197
246
kwargs ["updatedAt" ] = {
198
247
"from" : updated_at_start_date .strftime ("%Y-%m-%d" ),
199
- "to" : updated_at_end_date .strftime ("%Y-%m-%d" )
200
- if updated_at_end_date is not None
201
- else datetime .datetime .now ().strftime ("%Y-%m-%d" ),
248
+ "to" : (
249
+ updated_at_end_date .strftime ("%Y-%m-%d" )
250
+ if updated_at_end_date is not None
251
+ else datetime .datetime .now ().strftime ("%Y-%m-%d" )
252
+ ),
202
253
}
203
254
super ().__init__ (** kwargs )
0 commit comments