Skip to content

Commit 1cac6dd

Browse files
SP-738 Type Review: Python
1 parent 646e232 commit 1cac6dd

File tree

8 files changed

+66
-3
lines changed

8 files changed

+66
-3
lines changed

src/bitpay/models/invoice/invoice.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pydantic import Field
66
from .buyer import Buyer
77
from .buyer_provided_info import BuyerProvidedInfo
8+
from .invoice_refund_addresses import InvoiceRefundAddresses
89
from .miner_fees import MinerFees
910
from .refund_info import RefundInfo
1011
from .shopper import Shopper
@@ -46,7 +47,7 @@ class Invoice(BitPayModel):
4647
payment_codes: Union[Dict[str, Dict[str, str]], None] = None
4748
acceptance_window: Union[int, None] = None
4849
buyer: Union[Buyer, None] = None
49-
refund_addresses: Union[List[str], None] = None
50+
refund_addresses: Union[List[Dict[str, InvoiceRefundAddresses]], None] = None
5051
close_url: Union[str, None] = Field(alias="closeURL", default=None)
5152
auto_redirect: Union[bool, None] = False
5253
json_paypro_required: Union[bool, None] = False
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from datetime import datetime
2+
from pydantic import field_serializer
3+
from typing import Union
4+
5+
from bitpay.models.bitpay_model import BitPayModel
6+
7+
8+
class InvoiceRefundAddresses(BitPayModel):
9+
date: Union[datetime, None]
10+
email: Union[str, None]
11+
tag: Union[int, None] = None
12+
type: Union[str, None] = None
13+
14+
@field_serializer("date")
15+
def serialize_datetime(self, dt: datetime) -> str:
16+
return super().serialize_datetime_to_iso8601(dt)

src/bitpay/models/invoice/invoice_webhook.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,5 @@ class InvoiceWebhook(BitPayModel):
2121
status: Union[str, None] = None
2222
transaction_currency: Union[str, None] = None
2323
url: Union[str, None] = None
24+
in_invoice_id: Union[str, None] = None
25+
in_payment_request: Union[str, None] = None

src/bitpay/models/invoice/refund_webhook.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ class RefundWebhook(BitPayModel):
1818
request_date: Union[datetime, None] = None
1919
status: Union[str, None] = None
2020
support_request: Union[str, None] = None
21+
reference: Union[str, None] = None
22+
guid: Union[str, None] = None
23+
refund_address: Union[str, None] = None
24+
type: Union[str, None] = None
25+
txid: Union[str, None] = None
26+
transaction_currency: Union[str, None] = None
27+
transaction_amount: Union[float, None] = None
28+
transaction_refund_fee: Union[float, None] = None
2129

2230
@field_serializer("request_date", "last_refund_notification")
2331
def serialize_datetime(self, dt: datetime) -> str:

src/bitpay/models/payout/payout_transaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class PayoutTransaction(BitPayModel):
1515
txid: Union[str, None] = None
1616
amount: Union[float, None] = None
1717
date: Union[datetime, None] = None
18-
confirmations: Union[str, None] = None
18+
confirmations: Union[int, None] = None
1919

2020
@field_serializer("date")
2121
def serialize_datetime_to_iso8601(self, dt: datetime) -> str:
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from datetime import datetime
2+
from typing import Union, Dict, List
3+
4+
from bitpay.models.bitpay_model import BitPayModel
5+
from bitpay.models.payout.payout_transaction import PayoutTransaction
6+
7+
8+
class PayoutWebhook(BitPayModel):
9+
id: Union[str, None] = None
10+
recipient_id: Union[str, None] = None
11+
shopper_id: Union[str, None] = None
12+
price: Union[float, None] = None
13+
currency: Union[str, None] = None
14+
ledger_currency: Union[str, None] = None
15+
exchange_rates: Union[Dict[str, Dict[str, float]], None] = None
16+
email: Union[str, None] = None
17+
reference: Union[str, None] = None
18+
label: Union[str, None] = None
19+
notification_url: Union[str, None] = None
20+
notification_email: Union[str, None] = None
21+
effective_date: Union[datetime, None] = None
22+
request_date: Union[datetime, None] = None
23+
status: Union[str, None] = None
24+
transactions: Union[List[PayoutTransaction], None] = None
25+
account_id: Union[str, None] = None
26+
date: Union[datetime, None] = None
27+
group_id: Union[str, None] = None

tests/unit/json/create_invoice_response.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,15 @@
3131
"notify": true
3232
},
3333
"autoRedirect": true,
34-
"refundAddresses": [],
34+
"refundAddresses": [
35+
{
36+
"n2MDYgEhxCAnuoVd1JpPmvxZShE6rQA6zv": {
37+
"type": "buyerSupplied",
38+
"date": "2024-01-08T23:50:56.556Z",
39+
"email": "[email protected]"
40+
}
41+
}
42+
],
3543
"refundAddressRequestPending": false,
3644
"buyerProvidedEmail": "[email protected]",
3745
"buyerProvidedInfo": {

tests/unit/test_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ def test_create_invoice_by_merchant(mocker):
214214
result.universal_codes.payment_string
215215
== "https://link.test.bitpay.com/i/UZjwcYkWAKfTMn9J1yyfs4"
216216
)
217+
assert result.refund_addresses[0].get("n2MDYgEhxCAnuoVd1JpPmvxZShE6rQA6zv").date.strftime("%Y-%m-%d %H:%M:%S") == "2024-01-08 23:50:56"
217218

218219

219220
@pytest.mark.unit

0 commit comments

Comments
 (0)