Skip to content
This repository was archived by the owner on Nov 15, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 46 additions & 42 deletions neo/bin/prompt.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@
import sys
from time import sleep
from logzero import logger
from prompt_toolkit import prompt
from prompt_toolkit.contrib.completers import WordCompleter
from prompt_toolkit.completion import WordCompleter
from prompt_toolkit.history import FileHistory
from prompt_toolkit.shortcuts import print_tokens
from prompt_toolkit.styles import style_from_dict
from prompt_toolkit.token import Token
from prompt_toolkit.shortcuts import print_formatted_text, PromptSession
from prompt_toolkit.formatted_text import FormattedText
from prompt_toolkit.styles import Style
from twisted.internet import reactor, task

from neo import __version__
Expand Down Expand Up @@ -162,20 +161,24 @@ def __init__(self, history_filename=None):
self.start_height = Blockchain.Default().Height
self.start_dt = datetime.datetime.utcnow()

self.token_style = style_from_dict({
Token.Command: preferences.token_style['Command'],
Token.Neo: preferences.token_style['Neo'],
Token.Default: preferences.token_style['Default'],
Token.Number: preferences.token_style['Number'],
self.token_style = Style.from_dict({
"command": preferences.token_style['Command'],
"neo": preferences.token_style['Neo'],
"default": preferences.token_style['Default'],
"number": preferences.token_style['Number'],
})

def get_bottom_toolbar(self, cli=None):
out = []
try:
out = [(Token.Command, '[%s] Progress: ' % settings.net_name),
(Token.Number, str(Blockchain.Default().Height + 1)),
(Token.Neo, '/'),
(Token.Number, str(Blockchain.Default().HeaderHeight + 1))]
# Note: not sure if prompt-toolkit still supports foreground colors, couldn't get it to work
# out = [("class:command", '[%s] Progress: ' % settings.net_name),
# ("class:number", str(Blockchain.Default().Height + 1)),
# ("class:neo", '/'),
# ("class:number", str(Blockchain.Default().HeaderHeight + 1))]
return "[%s] Progress: %s/%s" % (settings.net_name,
str(Blockchain.Default().Height + 1),
str(Blockchain.Default().HeaderHeight + 1))
except Exception as e:
pass

Expand Down Expand Up @@ -217,8 +220,8 @@ def quit(self):
def help(self):
tokens = []
for c in self.commands:
tokens.append((Token.Command, "%s\n" % c))
print_tokens(tokens, self.token_style)
tokens.append(("class:command", "%s\n" % c))
print_formatted_text(FormattedText(tokens), style=self.token_style)

def do_open(self, arguments):
if self.Wallet:
Expand Down Expand Up @@ -605,15 +608,15 @@ def show_state(self):
out += "Time elapsed %s mins\n" % mins
out += "Blocks per min %s \n" % bpm
out += "TPS: %s \n" % tps
tokens = [(Token.Number, out)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", out)]
print_formatted_text(FormattedText(tokens), self.token_style)

def show_nodes(self):
if len(NodeLeader.Instance().Peers) > 0:
out = "Total Connected: %s\n" % len(NodeLeader.Instance().Peers)
for peer in NodeLeader.Instance().Peers:
out += "Peer %s - IO: %s\n" % (peer.Name(), peer.IOStats())
print_tokens([(Token.Number, out)], self.token_style)
print_formatted_text(FormattedText([("class:number", out)]), self.token_style)
else:
print("Not connected yet\n")

Expand All @@ -626,8 +629,8 @@ def show_block(self, args):
if block is not None:

bjson = json.dumps(block.ToJson(), indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
if txarg and 'tx' in txarg:

Expand Down Expand Up @@ -660,8 +663,8 @@ def show_tx(self, args):
jsn['height'] = height
jsn['unspents'] = [uns.ToJson(tx.outputs.index(uns)) for uns in
Blockchain.Default().GetAllUnspent(txid)]
tokens = [(Token.Command, json.dumps(jsn, indent=4))]
print_tokens(tokens, self.token_style)
tokens = [("class:command", json.dumps(jsn, indent=4))]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
except Exception as e:
print("Could not find transaction from args: %s (%s)" % (e, args))
Expand All @@ -676,8 +679,8 @@ def show_account_state(self, args):

if account is not None:
bjson = json.dumps(account.ToJson(), indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
else:
print("Account %s not found" % item)
Expand All @@ -695,8 +698,8 @@ def show_asset_state(self, args):
print("Found %s results for %s" % (len(results), query))
for asset in results:
bjson = json.dumps(asset.ToJson(), indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')

return
Expand All @@ -705,8 +708,8 @@ def show_asset_state(self, args):

if asset is not None:
bjson = json.dumps(asset.ToJson(), indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
else:
print("Asset %s not found" % item)
Expand All @@ -729,8 +732,8 @@ def show_contract_state(self, args):
print("Found %s results for %s" % (len(contracts), query))
for contract in contracts:
bjson = json.dumps(contract.ToJson(), indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
else:
print("Please specify a search query")
Expand All @@ -741,8 +744,8 @@ def show_contract_state(self, args):
contract.DetermineIsNEP5()
jsn = contract.ToJson()
bjson = json.dumps(jsn, indent=4)
tokens = [(Token.Number, bjson)]
print_tokens(tokens, self.token_style)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), self.token_style)
print('\n')
else:
print("Please specify a contract")
Expand Down Expand Up @@ -831,7 +834,7 @@ def show_mem(self):
totalmb = total / (1024 * 1024)
out = "Total: %s MB\n" % totalmb
out += "Total buffers: %s\n" % StreamManager.TotalBuffers()
print_tokens([(Token.Number, out)], self.token_style)
print_formatted_text(FormattedText([("class:number", out)]), self.token_style)

def handle_debug_storage(self, args):
what = get_arg(args)
Expand Down Expand Up @@ -913,22 +916,23 @@ def run(self):

# Blockchain.Default().PersistBlocks()

tokens = [(Token.Neo, 'NEO'), (Token.Default, ' cli. Type '),
(Token.Command, '\'help\' '), (Token.Default, 'to get started')]
tokens = [("class:neo", 'NEO'), ("class:default", ' cli. Type '),
("class:command", '\'help\' '), ("class:default", 'to get started')]

print_tokens(tokens, self.token_style)
print_formatted_text(FormattedText(tokens), style=self.token_style)
print('\n')

while self.go_on:

try:
result = prompt("neo> ",
session = PromptSession("neo> ",
completer=self.get_completer(),
history=self.history,
get_bottom_toolbar_tokens=self.get_bottom_toolbar,
bottom_toolbar=self.get_bottom_toolbar,
style=self.token_style,
refresh_interval=3
)
while self.go_on:

try:
result = session.prompt()
except EOFError:
# Control-D pressed: quit
return self.quit()
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ pbr==4.0.4
peewee==2.10.2
pluggy==0.6.0
plyvel==1.0.4
prompt-toolkit==1.0.15
prompt-toolkit==2.0.3
psutil==5.4.6
py==1.5.3
pycodestyle==2.4.0
Expand Down