Skip to content

Commit 2a72dc3

Browse files
committed
update endpoint query params
1 parent 2352f70 commit 2a72dc3

File tree

5 files changed

+78
-43
lines changed

5 files changed

+78
-43
lines changed

extend/resources/credit_cards.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,37 @@ def __init__(self, api_client: APIClient):
1515
async def get_credit_cards(
1616
self,
1717
page: Optional[int] = None,
18-
page_size: Optional[int] = None,
18+
per_page: Optional[int] = None,
1919
status: Optional[str] = None,
20+
search_term: Optional[str] = None,
2021
) -> Dict:
2122
"""Get a list of all credit cards associated with your account.
2223
2324
Args:
2425
page (Optional[int]): The page number for pagination (1-based)
25-
page_size (Optional[int]): Number of items per page
26+
per_page (Optional[int]): Number of items per page
2627
status (Optional[str]): Filter cards by status (e.g., "ACTIVE", "CANCELLED")
28+
search_term (Optional[str]): Filter cards by search term (e.g., "Marketing")
2729
2830
Returns:
29-
Dict: A dictionary containing the list of credit cards and pagination info
31+
Dict: A dictionary containing:
32+
- creditCards: List of creditCard objects
33+
- pagination: Dictionary containing the following pagination stats:
34+
- page: Current page number
35+
- pageItemCount: Number of items per page
36+
- totalItems: Total number of credit cards across all pages
37+
- numberOfPages: Total number of pages
3038
3139
Raises:
3240
httpx.HTTPError: If the request fails
3341
"""
3442

35-
params = {}
36-
if page is not None:
37-
params["page"] = page
38-
if page_size is not None:
39-
params["count"] = page_size
40-
if status:
41-
params["statuses"] = status
43+
params = {
44+
"page": page,
45+
"count": per_page,
46+
"statuses": status,
47+
"search": search_term,
48+
}
49+
params = {k: v for k, v in params.items() if v is not None}
4250

4351
return await self._request(method="get", params=params)

extend/resources/transactions.py

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,51 @@ def __init__(self, api_client: APIClient):
1414

1515
async def get_transactions(
1616
self,
17+
page: Optional[int] = None,
18+
per_page: Optional[int] = None,
1719
from_date: Optional[str] = None,
1820
to_date: Optional[str] = None,
19-
page: Optional[int] = None,
20-
page_size: Optional[int] = None,
21+
virtual_card_id: Optional[str] = None,
22+
min_amount_cents: Optional[int] = None,
23+
max_amount_cents: Optional[int] = None,
24+
search_term: Optional[str] = None,
2125
) -> Dict:
2226
"""Get a list of transactions with optional filtering and pagination.
2327
2428
Args:
29+
page (Optional[int]): The page number for pagination (1-based)
30+
per_page (Optional[int]): Number of items per page
2531
from_date (Optional[str]): Start date in YYYY-MM-DD format
2632
to_date (Optional[str]): End date in YYYY-MM-DD format
27-
page (Optional[int]): The page number for pagination (1-based)
28-
page_size (Optional[int]): Number of items per page
33+
virtual_card_id (str): Filter by specific virtual card
34+
min_amount_cents (int): Minimum clearing amount in cents
35+
max_amount_cents (int): Maximum clearing amount in cents
36+
search_term (Optional[str]): Filter cards by search term (e.g., "Marketing")
2937
3038
Returns:
3139
Dict: A dictionary containing:
3240
- transactions: List of Transaction objects
33-
- total: Total number of transactions
34-
- page: Current page number
35-
- pageSize: Number of items per page
41+
- pagination: Dictionary containing the following pagination stats:
42+
- page: Current page number
43+
- pageItemCount: Number of items per page
44+
- totalItems: Total items will be 1 more than pageItemCount if there is another page to fetch
45+
- numberOfPages: Total number of pages
3646
3747
Raises:
3848
httpx.HTTPError: If the request fails
3949
"""
40-
params = {}
41-
if from_date:
42-
params["fromDate"] = from_date
43-
if to_date:
44-
params["toDate"] = to_date
45-
if page is not None:
46-
params["page"] = page
47-
if page_size is not None:
48-
params["count"] = page_size
50+
51+
params = {
52+
"page": page,
53+
"count": per_page,
54+
"fromDate": from_date,
55+
"toDate": to_date,
56+
"virtualCardId": virtual_card_id,
57+
"minClearingBillingCents": min_amount_cents,
58+
"maxClearingBillingCents": max_amount_cents,
59+
"search": search_term,
60+
}
61+
params = {k: v for k, v in params.items() if v is not None}
4962

5063
return await self._request(method="get", params=params)
5164

extend/resources/virtual_cards.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,40 @@ def __init__(self, api_client: APIClient):
1717
async def get_virtual_cards(
1818
self,
1919
page: Optional[int] = None,
20-
page_size: Optional[int] = None,
20+
per_page: Optional[int] = None,
2121
status: Optional[str] = None,
22+
recipient: Optional[str] = None,
23+
search_term: Optional[str] = None,
2224
) -> Dict:
2325
"""Get a list of virtual cards with optional filtering and pagination.
2426
2527
Args:
2628
page (Optional[int]): The page number for pagination (1-based)
27-
page_size (Optional[int]): Number of items per page
29+
per_page (Optional[int]): Number of items per page
2830
status (Optional[str]): Filter cards by status (e.g., "ACTIVE", "CANCELLED")
31+
recipient (Optional[str]): Filter cards by recipient id (e.g., "u_1234")
32+
search_term (Optional[str]): Filter cards by search term (e.g., "Marketing")
2933
3034
Returns:
3135
Dict: A dictionary containing:
3236
- virtualCards: List of VirtualCard objects
33-
- total: Total number of cards
34-
- page: Current page number
35-
- pageSize: Number of items per page
37+
- pagination: Dictionary containing the following pagination stats:
38+
- page: Current page number
39+
- pageItemCount: Number of items per page
40+
- totalItems: Total number of virtual cards across all pages
41+
- numberOfPages: Total number of pages
3642
3743
Raises:
3844
httpx.HTTPError: If the request fails
3945
"""
40-
params = {}
41-
if page is not None:
42-
params["page"] = page
43-
if page_size is not None:
44-
params["count"] = page_size
45-
if status:
46-
params["status"] = status
46+
params = {
47+
"page": page,
48+
"count": per_page,
49+
"statuses": status,
50+
"recipient": recipient,
51+
"search": search_term,
52+
}
53+
params = {k: v for k, v in params.items() if v is not None}
4754

4855
return await self._request(method="get", params=params)
4956

@@ -112,6 +119,7 @@ async def create_virtual_card(
112119
recipient_email=recipient,
113120
valid_to=valid_to,
114121
notes=notes,
122+
recurs=recurs,
115123
recurrence=recurrence
116124
)
117125

extend/validations.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def validate_card_creation_data(
1717
valid_from: Optional[str] = None,
1818
valid_to: Optional[str] = None,
1919
notes: Optional[str] = None,
20+
recurs: bool = False,
2021
recurrence: Optional[Dict] = None,
2122
) -> CardCreationRequest:
2223
"""Validate and format card creation data.
@@ -29,6 +30,7 @@ def validate_card_creation_data(
2930
valid_from (Optional[str]): Start date in YYYY-MM-DD format
3031
valid_to (Optional[str]): Expiration date in YYYY-MM-DD format
3132
notes (Optional[str]): Additional notes about the card
33+
recurs (bool): Flag to indicate the card should recur
3234
recurrence (Optional[Dict]): Recurrence configuration
3335
3436
Returns:
@@ -98,10 +100,14 @@ def validate_card_creation_data(
98100
raise ValueError("Notes must be less than 500 characters")
99101
data["notes"] = notes
100102

101-
# Handle recurrence configuration if provided
102-
if recurrence:
103-
data["recurs"] = True
104-
data["recurrence"] = validate_recurrence_data(**recurrence)
103+
if recurs:
104+
if not recurrence:
105+
raise ValueError("recurrence configuration is required for recurring cards")
106+
if not all([recurrence["period"], recurrence["interval"], recurrence["terminator"]]):
107+
raise ValueError("period, interval, and terminator are required for recurring cards")
108+
else:
109+
data["recurs"] = True
110+
data["recurrence"] = validate_recurrence_data(**recurrence)
105111

106112
return data
107113

tests/test_integration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ async def test_list_virtual_cards(self, extend):
117117
# List with pagination
118118
response = await extend.virtual_cards.get_virtual_cards(
119119
page=1,
120-
page_size=10
120+
per_page=10
121121
)
122122
assert len(response["virtualCards"]) <= 10
123123

0 commit comments

Comments
 (0)