"""
Transaction endpoints for the OpenBankProject API Client.
"""
from typing import Dict, List, Optional, Union, Any
[docs]
class TransactionEndpoints:
"""Transaction-related API endpoints."""
[docs]
def __init__(self, client):
"""
Initialize the endpoint group.
Args:
client: OpenBankProjectClient instance
"""
self.client = client
[docs]
def get_transactions(self, bank_id: str, account_id: str, view_id: str, params: Optional[Dict] = None) -> Dict:
"""
Get transactions for an account.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
params: Optional query parameters like from_date, to_date, limit, offset, etc.
Returns:
Dict containing transaction information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions", params=params)
[docs]
def get_transaction(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get transaction by ID.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}")
[docs]
def create_transaction(self, bank_id: str, account_id: str, view_id: str, data: Dict) -> Dict:
"""
Create a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
data: Transaction data
Returns:
Dict containing created transaction information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions", data=data)
[docs]
def update_transaction(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Update a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Updated transaction data
Returns:
Dict containing updated transaction information
"""
return self.client.put(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}", data=data)
[docs]
def delete_transaction(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Delete a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing deletion status
"""
return self.client.delete(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}")
[docs]
def get_transaction_attributes(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get attributes for a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction attribute information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/attributes")
[docs]
def add_transaction_attribute(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Add an attribute to a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Attribute data
Returns:
Dict containing added attribute information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/attributes", data=data)
[docs]
def update_transaction_attribute(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, attribute_id: str, data: Dict) -> Dict:
"""
Update an attribute of a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
attribute_id: Attribute identifier
data: Updated attribute data
Returns:
Dict containing updated attribute information
"""
return self.client.put(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/attributes/{attribute_id}", data=data)
[docs]
def delete_transaction_attribute(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, attribute_id: str) -> Dict:
"""
Delete an attribute from a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
attribute_id: Attribute identifier
Returns:
Dict containing deletion status
"""
return self.client.delete(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/attributes/{attribute_id}")
[docs]
def add_transaction_tag(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Add a tag to a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Tag data
Returns:
Dict containing added tag information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/tags", data=data)
[docs]
def delete_transaction_tag(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, tag_id: str) -> Dict:
"""
Delete a tag from a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
tag_id: Tag identifier
Returns:
Dict containing deletion status
"""
return self.client.delete(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/tags/{tag_id}")
[docs]
def get_transaction_images(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get images for a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction image information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/images")
[docs]
def add_transaction_image(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Add an image to a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Image data
Returns:
Dict containing added image information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/images", data=data)
[docs]
def delete_transaction_image(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, image_id: str) -> Dict:
"""
Delete an image from a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
image_id: Image identifier
Returns:
Dict containing deletion status
"""
return self.client.delete(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/images/{image_id}")
[docs]
def get_transaction_narratives(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get narratives for a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction narrative information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/narrative")
[docs]
def add_transaction_narrative(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Add a narrative to a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Narrative data
Returns:
Dict containing added narrative information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/narrative", data=data)
[docs]
def update_transaction_narrative(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, data: Dict) -> Dict:
"""
Update the narrative of a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
data: Updated narrative data
Returns:
Dict containing updated narrative information
"""
return self.client.put(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/narrative", data=data)
[docs]
def delete_transaction_narrative(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Delete the narrative from a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing deletion status
"""
return self.client.delete(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/narrative")
[docs]
def get_transaction_types(self) -> Dict:
"""
Get all transaction types.
Returns:
Dict containing transaction type information
"""
return self.client.get("transaction-types")
[docs]
def get_transaction_status(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get the status of a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction status information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/status")
[docs]
def get_transaction_challenges(self, bank_id: str, account_id: str, view_id: str, transaction_id: str) -> Dict:
"""
Get challenges for a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
Returns:
Dict containing transaction challenge information
"""
return self.client.get(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/challenges")
[docs]
def answer_transaction_challenge(self, bank_id: str, account_id: str, view_id: str, transaction_id: str, challenge_id: str, data: Dict) -> Dict:
"""
Answer a challenge for a transaction.
Args:
bank_id: Bank identifier
account_id: Account identifier
view_id: View identifier
transaction_id: Transaction identifier
challenge_id: Challenge identifier
data: Challenge answer data
Returns:
Dict containing challenge response information
"""
return self.client.post(f"banks/{bank_id}/accounts/{account_id}/{view_id}/transactions/{transaction_id}/challenges/{challenge_id}", data=data)