Querying Horizon¶
py-stellar-sdk gives you access to all the endpoints exposed by Horizon.
Building requests¶
py-stellar-sdk uses the Builder pattern to create the requests to send
to Horizon. Starting with a Server
object, you can chain methods together to generate a query.
(See the Horizon reference documentation for what methods are possible.)
1 2 3 4 5 6 7 8 9 10 11 12 13 | from stellar_sdk import Server
server = Server(horizon_url="https://horizon-testnet.stellar.org")
# get a list of transactions that occurred in ledger 1400
transactions = server.transactions().for_ledger(1400).call()
print(transactions)
# get a list of transactions submitted by a particular account
transactions = server.transactions() \
.for_account(account_id="GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW") \
.call()
print(transactions)
|
Once the request is built, it can be invoked with call()
or
with stream()
.
call()
will return the
response given by Horizon.
Streaming requests¶
Many requests can be invoked with stream()
.
Instead of returning a result like call()
does,
stream()
will return an EventSource.
Horizon will start sending responses from either the beginning of time or from the point
specified with cursor()
.
(See the Horizon reference documentation to learn which endpoints support streaming.)
For example, to log instances of transactions from a particular account:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from stellar_sdk import Server
server = Server(horizon_url="https://horizon-testnet.stellar.org")
account_id = "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW"
last_cursor = 'now' # or load where you left off
def tx_handler(tx_response):
print(tx_response)
for tx in server.transactions().for_account(account_id).cursor(last_cursor).stream():
tx_handler(tx)
|