11from itertools import islice
22import sys
3+ import time
34import urllib .parse
45
56import numpy as np
@@ -137,6 +138,7 @@ def search_dataset_via_api(self,
137138 circles : list [str ] = None ,
138139 collections : list [str ] = None ,
139140 circle_collection_union : bool = False ,
141+ since_time : float = None ,
140142 sort_solr : str = "metadata_created desc" ,
141143 limit : int = 100 ):
142144 """Search datasets via the CKAN API
@@ -146,7 +148,9 @@ def search_dataset_via_api(self,
146148 query: str
147149 search query
148150 filter_queries: list of str
149- SOLR `fq` filter queries (are joined with 'AND')
151+ SOLR `fq` filter queries (are joined with 'AND'). The `circles`,
152+ `collections`, `circle_collection_union`, and `since_date`
153+ convenience kwargs are appended to the query list.
150154 circles: list of str
151155 list of circles (organizations) to search in
152156 collections: list of str
@@ -156,6 +160,9 @@ def search_dataset_via_api(self,
156160 sets. Otherwise (default), search only for datasets that
157161 are at least member of one of the circles and one of the
158162 collections.
163+ since_time: float
164+ Return only datasets that have been modified after this time
165+ since the epoch.
159166 sort_solr: str
160167 SOLR search ordering. By default, sort according to dataset
161168 creation date `'metadata_created desc'`. The CKAN default is
@@ -185,6 +192,7 @@ def search_dataset_via_api(self,
185192 else :
186193 solr_collections_query = None
187194
195+ # collections and/or circles filter query
188196 if solr_circle_query and solr_collections_query :
189197 if circle_collection_union :
190198 fq = f"({ solr_circle_query } OR { solr_collections_query } )"
@@ -198,6 +206,16 @@ def search_dataset_via_api(self,
198206 fq = ""
199207 if fq :
200208 filter_queries .append (fq )
209+
210+ # time filter query
211+ if since_time is not None :
212+ gm_time_str = time .strftime (r"%Y-%m-%dT%H\:%M\:%SZ" ,
213+ time .gmtime (since_time - 60 ))
214+ # Use "metadata_modified", since datasets that were previously
215+ # drafts or private datasets made public would not show up
216+ # if "metadata_created" was used.
217+ filter_queries .append (f"metadata_modified:[{ gm_time_str } TO NOW]" )
218+
201219 if len (filter_queries ) == 0 :
202220 final_fq = ""
203221 elif len (filter_queries ) == 1 :
0 commit comments