# #
###############################################################################
+import datetime
import fastapi
import pydantic
import typing
@router.get("/{list}/history")
def get_list_history(
list = fastapi.Depends(get_list_from_path),
+ before: datetime.datetime = None,
limit: int = 10,
):
# Return the history as a dictionary
- return {
- e.ts : {
+ return [
+ {
+ "ts" : e.ts,
"domains_added" : e.domains_added,
"domains_removed" : e.domains_removed,
- } for e in list.get_history(limit=limit)
- }
+ } for e in list.get_history(before=before, limit=limit)
+ ]
@router.get("/{list}/sources")
def get_list_sources(list = fastapi.Depends(get_list_from_path)) -> typing.List[sources.Source]:
# History
- def get_history(self, limit=None):
+ def get_history(self, before=None, limit=None):
"""
Fetches the history of the list
"""
domains.Domain.added_at,
)
.limit(limit)
- .cte("domains_added")
)
# Collect all domains that have been removed
domains.Domain.removed_at,
)
.limit(limit)
- .cte("domains_removed")
)
+ # Filter if we want data before a certain point in time
+ if before:
+ domains_added = domains_added.where(
+ domains.Domain.added_at < before,
+ )
+
+ domains_removed = domains_removed.where(
+ domains.Domain.removed_at < before,
+ )
+
+ # Create CTEs
+ domains_added = domains_added.cte("domains_added")
+ domains_removed = domains_removed.cte("domains_removed")
+
# Union timestamps
timestamps = (
sqlmodel