We’re continuing to modify the glide:
from glider import *
def query():
contracts = Contracts().with_name("ERC721").exec(10)
return contracts
This time, we’re going to add more logic to it besides the initial request to the DB.
contracts variable contains List[Contract], remember? What we can do is loop through the contracts, as was mentioned in Get Started
, getting some properties.
Modifications
To begin with, let’s add an additional variable between the two other instructions and change the return statement to this variable:
from glider import *
def query():
contracts = Contracts().with_name("ERC721").exec(10)
result = []
return result
We will save the properties there.
Next, we’ll add a for loop, which will append contracts to the result variable:
from glider import *
def query():
contracts = Contracts().with_name("ERC721").exec(10)
result = []
for contract in contracts:
result.append(contract)
return result
This doesn’t make much sense at the moment because the result of this glide is identical to the one without these modifications :D
Anyway, now we have individual access to every Contract instance from our DB request. What can we do with it? Let’s check the Contract API documentation
… Contract.events() looks promising.
Add the method call:
from glider import *
def query():
contracts = Contracts().with_name("ERC721").exec(10)
result = []
for contract in contracts:
result.append(contract.events())
return result
And hit the run button!
Oops, an error :) TypeError: Object of type Event is not JSON serializable means we’re trying to put something wrong to the output.
As you can see in the documentation, the method returns List[Event] type. I’ll spare your time and tell that if we try to output one Event it’ll lead to an error again. And this means we must:
- Save the events to a new variable.
- Loop through again.
- Call one of the
Eventproperties or methods (docs ) to get any serializable value, like.name. - Change the return statement using the trick from Get Started
from glider import *
def query():
contracts = Contracts().with_name("ERC721").exec(10)
result = []
for contract in contracts:
events = contract.events()
for event in events:
result.append(event.name)
return [{"result": result}]
And our beautiful glide is done! It’ll output all the event names from the first ten contracts in the DB with the “ERC721” name:
