kopia lustrzana https://github.com/bugout-dev/moonstream
113 wiersze
3.1 KiB
Python
113 wiersze
3.1 KiB
Python
import argparse
|
|
import json
|
|
|
|
from .db import yield_db_session_ctx
|
|
from .models import EthereumLabel
|
|
|
|
|
|
def labels_add_handler(args: argparse.Namespace) -> None:
|
|
"""
|
|
Add new label for ethereum address.
|
|
"""
|
|
try:
|
|
label_data = json.loads(args.data)
|
|
except ValueError as err:
|
|
print(str(err))
|
|
raise ValueError("Unable to parse data as dictionary")
|
|
|
|
with yield_db_session_ctx() as db_session:
|
|
label = EthereumLabel(
|
|
label=args.label, address=str(args.address), label_data=label_data
|
|
)
|
|
db_session.add(label)
|
|
db_session.commit()
|
|
|
|
print(
|
|
json.dumps(
|
|
{
|
|
"id": str(label.id),
|
|
"label": str(label.label),
|
|
"address_id": str(label.address),
|
|
"label_data": str(label.label_data),
|
|
"created_at": str(label.created_at),
|
|
}
|
|
)
|
|
)
|
|
|
|
|
|
def labels_list_handler(args: argparse.Namespace) -> None:
|
|
"""
|
|
Return list of all labels.
|
|
"""
|
|
with yield_db_session_ctx() as db_session:
|
|
query = db_session.query(EthereumLabel)
|
|
if str(args.address) is not None:
|
|
query = query.filter(EthereumLabel.address == str(args.address))
|
|
labels = query.all()
|
|
|
|
print(
|
|
json.dumps(
|
|
[
|
|
{
|
|
"id": str(label.id),
|
|
"label": str(label.label),
|
|
"address_id": str(label.address_id),
|
|
"label_data": str(label.label_data),
|
|
"created_at": str(label.created_at),
|
|
}
|
|
for label in labels
|
|
]
|
|
)
|
|
)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Crawls address identities CLI")
|
|
parser.set_defaults(func=lambda _: parser.print_help())
|
|
subcommands = parser.add_subparsers(description="Crawlers commands")
|
|
|
|
parser_labels = subcommands.add_parser("labels", description="Meta labels commands")
|
|
parser_labels.set_defaults(func=lambda _: parser_labels.print_help())
|
|
subcommands_labels = parser_labels.add_subparsers(
|
|
description="Database meta labels commands"
|
|
)
|
|
|
|
parser_labels_add = subcommands_labels.add_parser(
|
|
"add", description="Add new label command"
|
|
)
|
|
parser_labels_add.add_argument(
|
|
"-a",
|
|
"--address",
|
|
required=True,
|
|
help="Address attach to",
|
|
)
|
|
parser_labels_add.add_argument(
|
|
"-l",
|
|
"--label",
|
|
required=True,
|
|
help="New label name",
|
|
)
|
|
parser_labels_add.add_argument(
|
|
"-d",
|
|
"--data",
|
|
help="New label data",
|
|
)
|
|
parser_labels_add.set_defaults(func=labels_add_handler)
|
|
|
|
parser_labels_list = subcommands_labels.add_parser(
|
|
"list", description="List all meta labels command"
|
|
)
|
|
parser_labels_list.add_argument(
|
|
"-a",
|
|
"--address",
|
|
help="Filter address",
|
|
)
|
|
parser_labels_list.set_defaults(func=labels_list_handler)
|
|
|
|
args = parser.parse_args()
|
|
args.func(args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|