Skip to content

Commit f2fb8f0

Browse files
k9ertmoneymanolis
andauthored
Feature: Improve Dev-Console (#1850)
* Feature: Improve Dev-Console * some improvements Co-authored-by: Manolis Mandrapilias <[email protected]>
1 parent a8f1b80 commit f2fb8f0

File tree

3 files changed

+94
-17
lines changed

3 files changed

+94
-17
lines changed

src/cryptoadvance/specterext/devhelp/console.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def updateNamespace(self, namespace):
2222
self.namespace.update(
2323
{
2424
"help": f"You can try calling any of the following objects: {list(self.namespace.keys())}\n"
25-
f"Use a trainling '.' to get available methods and propeties, e.g. try: '{list(self.namespace.keys())[-1]}.'\n"
25+
f"Use a trailing '.' to get available methods and propeties, e.g. try: '{list(self.namespace.keys())[-1]}.'\n"
2626
"The command 'run' can execute python scripts, e.g., run('myscript.py')"
2727
}
2828
)

src/cryptoadvance/specterext/devhelp/service.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
from cryptoadvance.specter.services.service import Service, devstatus_alpha
55
from cryptoadvance.specter.specter_error import SpecterError
66
from cryptoadvance.specter.wallet import Wallet
7+
from cryptoadvance.specter import util
78
from .console import Console
89
import flask
910
import flask_login
11+
from flask_login import current_user
1012

1113
logger = logging.getLogger(__name__)
1214

@@ -22,11 +24,7 @@ class DevhelpService(Service):
2224
devstatus = devstatus_alpha
2325
console = Console()
2426
console.updateNamespace(
25-
{
26-
"app": app,
27-
"flask": flask,
28-
"flask_login": flask_login,
29-
}
27+
{"app": app, "flask": flask, "flask_login": flask_login, "util": util}
3028
)
3129

3230
sort_priority = 2

src/cryptoadvance/specterext/devhelp/templates/devhelp/dev-console.jinja

Lines changed: 90 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,43 @@
55

66
<div class="card" style="width:1000px">
77
<p>
8-
Python-expressions here:
8+
99
</p>
1010
<form name="console" onSubmit="return handleIt()">
1111

1212
<div style="display: flex;">
13-
<span>Code:</span>
13+
<span>Python-expressions here:</span>
14+
<tool-tip width="500px">
15+
<h4 slot="title">How to use the Console</h4>
16+
<span slot="paragraph">
17+
Try these things:
18+
<b>'help'</b> will give you a list of commands and objects available<br>
19+
Use a trailing '.' to get available methods and propeties, e.g. try: <b>'app.specter.'</b> <br>
20+
The command <b>'run'</b> can execute python scripts, e.g., run('myscript.py')
21+
</span>
22+
</tool-tip>
1423
</div>
15-
<p><input type="text" id="msgBody" name="msgBody" value="app.specter"></p>
24+
<input type="text" id="msgBody" name="msgBody" value="app.specter.">
25+
1626

1727
<br><br>
1828
<input name="Submit" class="btn" type="submit" value="Submit" />
1929
</form>
30+
you can also do that in any javascript.console with:
31+
<pre>
32+
await pythonCommand("app.specter")
33+
</pre>
34+
Some usefull idioms:
35+
<pre>
36+
list(flask_login.current_user.wallet_manager.wallets)
37+
</pre>
2038

2139
<p>
2240
Output
2341
</p>
24-
<pre>
25-
<div id="output"></div>
26-
</pre>
42+
<div id="start">
43+
44+
</div>
2745
</div>
2846

2947

@@ -32,13 +50,74 @@
3250

3351
{% block scripts %}
3452
<script type="text/javascript">
53+
var counter = 0
3554
function handleIt() {
36-
var msgBody = document.getElementById("msgBody").value;
37-
a = pythonCommand(msgBody).then((data) => {
38-
document.getElementById("output").append(data)
39-
document.getElementById("output").append("\n")
55+
start = document.getElementById("start")
56+
57+
58+
var command = document.getElementById("msgBody").value;
59+
console.log(msgBody)
60+
61+
62+
a = pythonCommand(command).then((result) => {
63+
var pre = document.createElement("pre");
64+
pre.append(counter + " > " + command + "\n")
65+
if (command.endsWith(".") && (! (typeof(result) == "string"))) {
66+
start.insertBefore(pre,start.children[0])
67+
68+
var varHider = document.createElement("input");
69+
varHider.type = "button"
70+
varHider.value="vars"
71+
start.insertBefore(varHider,start.children[1])
72+
var vars = document.createElement("pre");
73+
vars.id = "var" + counter
74+
varHider.onclick = function() {
75+
if (document.getElementById(vars.id ).style.display=='none') {
76+
document.getElementById(vars.id ).style.display='block'
77+
} else {
78+
document.getElementById(vars.id ).style.display='none'
79+
}
80+
81+
}
82+
vars.style.display='none'
83+
console.log(result.vars)
84+
for (const key in result.vars) {
85+
vars.appendChild(document.createTextNode((`${key}: ${result.vars[key]}\n`)))
86+
}
87+
start.insertBefore(vars,start.children[2])
88+
89+
var dirHider = document.createElement("input");
90+
dirHider.type = "button"
91+
dirHider.value="dirs"
92+
start.insertBefore(dirHider,start.children[3])
93+
var dirs = document.createElement("pre");
94+
dirs.id = "dirs" + counter
95+
dirHider.onclick = function() {
96+
if (document.getElementById(dirs.id ).style.display=='none') {
97+
document.getElementById(dirs.id ).style.display='block'
98+
} else {
99+
document.getElementById(dirs.id ).style.display='none'
100+
}
101+
102+
}
103+
dirs.style.display='none'
104+
console.log(result.dirs)
105+
result.dir.forEach((elem) => {
106+
dirs.appendChild(document.createTextNode((`${elem}\n`)))
107+
});
108+
start.insertBefore(dirs,start.children[4])
109+
110+
111+
} else {
112+
if (result == "") {
113+
result = "(empty string)"
114+
}
115+
pre.append(" " + result.toString() + "\n")
116+
start.insertBefore(pre,start.children[0])
117+
}
118+
40119
})
41-
console.log(a)
120+
counter++
42121
return false
43122
}
44123

0 commit comments

Comments
 (0)