122 lines
4 KiB
Python
122 lines
4 KiB
Python
|
|
import warnings
|
||
|
|
|
||
|
|
from plaid.api import (
|
||
|
|
Accounts,
|
||
|
|
AssetReport,
|
||
|
|
Auth,
|
||
|
|
Categories,
|
||
|
|
CreditDetails,
|
||
|
|
DepositSwitch,
|
||
|
|
Holdings,
|
||
|
|
Identity,
|
||
|
|
Income,
|
||
|
|
Institutions,
|
||
|
|
InvestmentTransactions,
|
||
|
|
Item,
|
||
|
|
Liabilities,
|
||
|
|
LinkToken,
|
||
|
|
PaymentInitiation,
|
||
|
|
Processor,
|
||
|
|
Sandbox,
|
||
|
|
Transactions,
|
||
|
|
Webhooks,
|
||
|
|
)
|
||
|
|
|
||
|
|
from plaid.internal.requester import DEFAULT_TIMEOUT, post_request
|
||
|
|
from plaid.internal.utils import urljoin
|
||
|
|
|
||
|
|
|
||
|
|
class Client(object):
|
||
|
|
'''
|
||
|
|
Python Plaid API client.
|
||
|
|
|
||
|
|
See official documentation at: https://plaid.com/docs.
|
||
|
|
|
||
|
|
All of the endpoints documented under the ``plaid.api``
|
||
|
|
module may be called from a ``plaid.Client`` instance.
|
||
|
|
'''
|
||
|
|
|
||
|
|
def __init__(self,
|
||
|
|
client_id=None,
|
||
|
|
secret=None,
|
||
|
|
environment=None,
|
||
|
|
suppress_warnings=False,
|
||
|
|
timeout=DEFAULT_TIMEOUT,
|
||
|
|
api_version=None,
|
||
|
|
client_app=None):
|
||
|
|
'''
|
||
|
|
Initialize a client with credentials.
|
||
|
|
|
||
|
|
:param str client_id: Your Plaid client ID
|
||
|
|
:arg str secret: Your Plaid secret
|
||
|
|
:arg str environment: One of ``sandbox``,
|
||
|
|
``development``, or ``production``.
|
||
|
|
:arg bool suppress_warnings: Suppress Plaid warnings.
|
||
|
|
:arg int timeout: Timeout for API requests.
|
||
|
|
:arg str api_version: API version to use for requests
|
||
|
|
:arg str client_app: Internal header to include
|
||
|
|
in requests
|
||
|
|
'''
|
||
|
|
self.client_id = client_id
|
||
|
|
self.secret = secret
|
||
|
|
self.environment = environment
|
||
|
|
self.suppress_warnings = suppress_warnings
|
||
|
|
self.timeout = timeout
|
||
|
|
self.api_version = api_version
|
||
|
|
self.client_app = client_app
|
||
|
|
|
||
|
|
if self.environment == 'development' and not self.suppress_warnings:
|
||
|
|
warnings.warn('''
|
||
|
|
Development is not intended for production usage.
|
||
|
|
Swap out url for https://production.plaid.com
|
||
|
|
via Client.config before switching to production
|
||
|
|
''')
|
||
|
|
|
||
|
|
# Mirror the HTTP API hierarchy
|
||
|
|
self.Accounts = Accounts(self)
|
||
|
|
self.AssetReport = AssetReport(self)
|
||
|
|
self.Auth = Auth(self)
|
||
|
|
self.Categories = Categories(self)
|
||
|
|
self.CreditDetails = CreditDetails(self)
|
||
|
|
self.DepositSwitch = DepositSwitch(self)
|
||
|
|
self.Holdings = Holdings(self)
|
||
|
|
self.Identity = Identity(self)
|
||
|
|
self.Income = Income(self)
|
||
|
|
self.Institutions = Institutions(self)
|
||
|
|
self.InvestmentTransactions = InvestmentTransactions(self)
|
||
|
|
self.Item = Item(self)
|
||
|
|
self.Liabilities = Liabilities(self)
|
||
|
|
self.LinkToken = LinkToken(self)
|
||
|
|
self.PaymentInitiation = PaymentInitiation(self)
|
||
|
|
self.Processor = Processor(self)
|
||
|
|
self.Sandbox = Sandbox(self)
|
||
|
|
self.Transactions = Transactions(self)
|
||
|
|
self.Webhooks = Webhooks(self)
|
||
|
|
|
||
|
|
def post(self, path, data, is_json=True):
|
||
|
|
'''Make a post request with client_id and secret key.'''
|
||
|
|
post_data = {
|
||
|
|
'client_id': self.client_id,
|
||
|
|
'secret': self.secret,
|
||
|
|
}
|
||
|
|
post_data.update(data)
|
||
|
|
return self._post(path, post_data, is_json)
|
||
|
|
|
||
|
|
def post_public(self, path, data, is_json=True):
|
||
|
|
'''Make a post request requiring no auth.'''
|
||
|
|
return self._post(path, data, is_json)
|
||
|
|
|
||
|
|
def _post(self, path, data, is_json):
|
||
|
|
headers = {}
|
||
|
|
if self.api_version is not None:
|
||
|
|
headers['Plaid-Version'] = self.api_version
|
||
|
|
if self.client_app is not None:
|
||
|
|
headers['Plaid-Client-App'] = self.client_app
|
||
|
|
return post_request(
|
||
|
|
urljoin('https://' + self.environment + '.plaid.com', path),
|
||
|
|
data=data,
|
||
|
|
timeout=self.timeout,
|
||
|
|
is_json=is_json,
|
||
|
|
headers=headers,
|
||
|
|
)
|