Coverage for src/paperap/utils.py: 0%
19 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 23:40 -0400
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 23:40 -0400
1"""
2----------------------------------------------------------------------------
4 METADATA:
6 File: utils.py
7 Project: paperap
8 Created: 2025-03-04
9 Version: 0.0.5
10 Author: Jess Mann
11 Email: jess@jmann.me
12 Copyright (c) 2025 Jess Mann
14----------------------------------------------------------------------------
16 LAST MODIFIED:
18 2025-03-04 By Jess Mann
20"""
22from __future__ import annotations
24import json
25import os
26from datetime import datetime
27from typing import Any, BinaryIO, Optional
30def datetime_to_str(dt: datetime) -> str:
31 """
32 Convert a datetime object to an ISO 8601 string for the API.
34 Args:
35 dt: The datetime object to convert.
37 Returns:
38 ISO 8601 formatted string.
40 """
41 if dt is None:
42 return None
43 return dt.isoformat().replace("+00:00", "Z")
46def parse_filter_params(**kwargs: Any) -> dict[str, Any]:
47 """
48 Parse filter parameters for list endpoints.
50 Args:
51 **kwargs: Filter parameters.
53 Returns:
54 Dictionary of filter parameters.
56 """
57 filters: dict[str, Any] = {}
58 for key, value in kwargs.items():
59 if value is not None:
60 if isinstance(value, datetime):
61 filters[key] = datetime_to_str(value)
62 elif isinstance(value, list):
63 # Handle list parameters like tags__id__in
64 filters[key] = ",".join([str(v) for v in value])
65 else:
66 filters[key] = value
67 return filters