jaklis/lib/gvaWallets.py

89 lines
2.7 KiB
Python
Raw Normal View History

2021-08-27 05:02:16 +02:00
#!/usr/bin/env python3
2023-09-09 09:44:27 +02:00
import sys, json
2021-08-27 05:02:16 +02:00
from termcolor import colored
from lib.natools import fmt, sign, get_privkey
from gql import gql, Client
from gql.transport.aiohttp import AIOHTTPTransport
PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}"
2023-09-09 09:38:22 +02:00
class ListWallets:
2021-08-28 02:47:20 +02:00
def __init__(self, node, brut, mbr, nonMbr, larf):
self.mbr = mbr
self.larf = larf
self.nonMbr = nonMbr
2021-08-27 05:02:16 +02:00
self.brut = brut
# Define Duniter GVA node
transport = AIOHTTPTransport(url=node)
self.client = Client(transport=transport, fetch_schema_from_transport=True)
2021-08-28 02:47:20 +02:00
def sendDoc(self):
2021-08-27 05:02:16 +02:00
# Build wallets generation document
2021-08-27 05:02:16 +02:00
queryBuild = gql(
"""
{
2021-08-27 23:08:38 +02:00
wallets(pagination: { cursor: null, ord: ASC, pageSize: 0 }) {
2021-08-27 05:02:16 +02:00
pageInfo {
hasNextPage
endCursor
}
edges {
node {
script
balance {
amount
base
}
idty {
isMember
username
}
}
}
}
}
2023-09-09 09:38:22 +02:00
"""
)
2021-08-27 05:02:16 +02:00
# Send wallets document
try:
queryResult = self.client.execute(queryBuild)
except Exception as e:
2021-08-27 23:02:08 +02:00
sys.stderr.write("Echec de récupération de la liste:\n" + str(e) + "\n")
2021-08-27 05:02:16 +02:00
sys.exit(1)
2023-09-09 09:38:22 +02:00
jsonBrut = queryResult["wallets"]["edges"]
2023-09-09 09:38:22 +02:00
walletMap = {}
2021-08-28 02:47:20 +02:00
for i, trans in enumerate(jsonBrut):
2023-09-09 09:38:22 +02:00
dataWork = trans["node"]
if self.mbr and (
dataWork["idty"] == None or dataWork["idty"]["isMember"] == False
):
continue
if self.nonMbr and (
dataWork["idty"] == None or dataWork["idty"]["isMember"] == True
):
continue
if self.larf and (dataWork["idty"] != None):
continue
walletMap[dataWork["script"]] = {
"balance": dataWork["balance"]["amount"] / 100,
"id": dataWork["idty"],
}
2021-08-28 02:47:20 +02:00
2023-09-09 09:38:22 +02:00
if self.brut:
2021-08-27 05:02:16 +02:00
names = []
2023-09-09 09:38:22 +02:00
for dataWork in walletMap:
if self.mbr or self.nonMbr:
names.append(dataWork["pubkey"] + " " + dataWork["id"]["username"])
2021-08-28 03:11:11 +02:00
else:
2023-09-09 09:38:22 +02:00
names.append(dataWork["pubkey"])
2021-08-28 02:47:20 +02:00
return "\n".join(names)
2021-08-27 05:02:16 +02:00
else:
2023-09-09 09:38:22 +02:00
return json.dumps(walletMap, indent=2)