Skip to content

Commit

Permalink
Account information
Browse files Browse the repository at this point in the history
  • Loading branch information
alexgolec committed Apr 3, 2024
1 parent c0417d4 commit 5e3ea54
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 8 deletions.
10 changes: 10 additions & 0 deletions schwab/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from . import auth
from . import client
#from . import contrib
from . import debug
#from . import orders
#from . import streaming

from .version import version as __version__

LOG_REDACTOR = debug.LogRedactor()
60 changes: 58 additions & 2 deletions schwab/client/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import json
import logging
import pickle
#import tda
import schwab
import time
import warnings

Expand Down Expand Up @@ -44,7 +44,7 @@ def __init__(self, api_key, session, *, enforce_enums=True,
self.logger = get_logger()
self.request_number = 0

#tda.LOG_REDACTOR.register(api_key, 'API_KEY')
schwab.LOG_REDACTOR.register(api_key, 'API_KEY')

self.token_metadata = token_metadata

Expand Down Expand Up @@ -129,3 +129,59 @@ def set_timeout(self, timeout):
#setting-a-default-timeout-on-a-client>`__ for
examples.'''
self.session.timeout = timeout


##########################################################################
# Accounts

class Account:
class Fields(Enum):
'''Account fields passed to :meth:`get_account` and
:meth:`get_accounts`'''
POSITIONS = 'positions'
ORDERS = 'orders'

def get_account(self, account_id, *, fields=None):
'''Account balances, positions, and orders for a specific account.
`Official documentation
<https://developer.tdameritrade.com/account-access/apis/get/accounts/
%7BaccountId%7D-0>`__.
:param fields: Balances displayed by default, additional fields can be
added here by adding values from :class:`Account.Fields`.
'''
fields = self.convert_enum_iterable(fields, self.Account.Fields)

params = {}
if fields:
params['fields'] = ','.join(fields)

path = '/trader/v1/accounts/{}'.format(account_id)
return self._get_request(path, params)

def get_account_numbers(self):
# TODO: Documentation
'''
'''
path = '/trader/v1/accounts/accountNumbers'
return self._get_request(path, {})

def get_accounts(self, *, fields=None):
'''Account balances, positions, and orders for all linked accounts.
`Official documentation
<https://developer.tdameritrade.com/account-access/apis/get/
accounts-0>`__.
:param fields: Balances displayed by default, additional fields can be
added here by adding values from :class:`Account.Fields`.
'''
fields = self.convert_enum_iterable(fields, self.Account.Fields)

params = {}
if fields:
params['fields'] = ','.join(fields)

path = '/trader/v1/accounts'
return self._get_request(path, params)


10 changes: 5 additions & 5 deletions schwab/client/synchronous.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Client(BaseClient):
def _get_request(self, path, params):
self.ensure_updated_refresh_token()

dest = 'https://api.tdameritrade.com' + path
dest = 'https://api.schwabapi.com' + path

req_num = self._req_num()
self.logger.debug('Req %s: GET to %s, params=%s',
Expand All @@ -26,7 +26,7 @@ def _get_request(self, path, params):
def _post_request(self, path, data):
self.ensure_updated_refresh_token()

dest = 'https://api.tdameritrade.com' + path
dest = 'https://api.schwabapi.com' + path

req_num = self._req_num()
self.logger.debug('Req %s: POST to %s, json=%s',
Expand All @@ -40,7 +40,7 @@ def _post_request(self, path, data):
def _put_request(self, path, data):
self.ensure_updated_refresh_token()

dest = 'https://api.tdameritrade.com' + path
dest = 'https://api.schwabapi.com' + path

req_num = self._req_num()
self.logger.debug('Req %s: PUT to %s, json=%s',
Expand All @@ -54,7 +54,7 @@ def _put_request(self, path, data):
def _patch_request(self, path, data):
self.ensure_updated_refresh_token()

dest = 'https://api.tdameritrade.com' + path
dest = 'https://api.schwabapi.com' + path

req_num = self._req_num()
self.logger.debug('Req %s: PATCH to %s, json=%s',
Expand All @@ -68,7 +68,7 @@ def _patch_request(self, path, data):
def _delete_request(self, path):
self.ensure_updated_refresh_token()

dest = 'https://api.tdameritrade.com' + path
dest = 'https://api.schwabapi.com' + path

req_num = self._req_num()
self.logger.debug('Req %s: DELETE to %s'.format(req_num, dest))
Expand Down
2 changes: 1 addition & 1 deletion schwab/debug.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ def _enable_bug_report_logging(output=sys.stderr, loggers=None):
loggers = (
schwab.auth.get_logger(),
schwab.client.base.get_logger(),
schwab.streaming.get_logger(),
#schwab.streaming.get_logger(),
get_logger())

class RecordingHandler(logging.Handler):
Expand Down

0 comments on commit 5e3ea54

Please sign in to comment.