A Python API for Architect.
Just some of the features of this API: symbology, market snapshots, past trades, account queries, order management (including sending advanced algos!), and market feed subscriptions.
This repo heavily uses type hinting, so using a type checker such as Pylance or mypy is suggestible to reduce potential for error.
AsyncClient
and Client
are the entryways into making calls to the Architect backend.
import asyncio
from architect_py.async_client import AsyncClient
async def main():
c = AsyncClient(
host="<your installation domain>", # e.g. app.architect.co for the brokerage
api_key="<api key>",
api_secret="<api secret>"
)
print(await c.execute("query { me { userId email } }"))
s = c.subscribe_trades("BTC Crypto/USD*COINBASE/DIRECT")
async for trade in s:
print(trade)
asyncio.run(main())
from architect_py.client import Client
def main():
c = Client(
host="<your installation domain>",
api_key="<api key>",
api_secret="<api secret>"
)
print(await c.execute("query { me { userId email } }"))
print("\n\n")
print(client.get_balances_and_positions())
print("\n\n")
print(client.search_markets(glob="ES*", venue="CME"))
While the AsyncClient is the recommended way to use the Architect API, the Client instead without any familiarity with async/await
.
The sync clients and async clients usage is identical, except one removes the await
before the call. The only exception to this is that the sync client does not support any subscriptions, because they are inherently asynchronous.
Check the examples
folder or the architect_py/tests
folders for example usages.
Clone this repository to run examples in the examples
directory. This package
uses poetry for dependency management. To enter a poetry virtual environment, make
sure you have poetry installed and run the
following from the repository root.
poetry shell
poetry install --sync
export ARCHITECT_HOST="<your installation domain>"
export ARCHITECT_API_KEY="<api key>"
export ARCHITECT_API_SECRET="<api secret>"
python -m examples.trades
You can exit the poetry shell by running exit
. Environment variables set
within the shell are not persisted.
API keys/secrets for the brokerage can be generated on the user account page.
Python type conversions for scalars should be added to the codegen toml files, if needed.
Important files:
schema.graphql
: autogenerated fromarchitect-gql schema
queries.graphql
: add any new queries/mutationsgenerate_protocol.py
: autogenerates thearchitect_py/protocol/client_protocol.py
architect_py/protocol/client_protocol.py
: autogenerated fromgenerate_protocol.py
, contains the class that the sync client inherits fromarchitect_py/async_client.py
: inherits from the ariadne generated base clientarchitect_py/client.py
: contains the sync client, delegates functions calls to a composed AsyncClient in the innards, inherits from the client_protocol to give the correct type hinting from Pylancetests
andexamples
: self-explanatory
The purpose of the client_protocol.py is so that the sync client can inherit from it and users can get good code completion and get the correct typing on their function calls, because the type-checker would otherwise not play nice with the way the sync_client is using the getattr magic function.
On any update, please run update.sh
and update the version in the version
file on the top level
In addition, any new function should have a test included in test.py
To run tests:
export $(cat pytest.env | xargs)
pytest tests/*
- Uses ariadne-codegen to generate the async client
- Autogenerates the protocol that the sync client inherits from