How to Print Out an Arbitrary Global via Embedded Python ?
Hi, devs!
Consider you have an arbitrary global with an unknown amount of indexes.
How to print all the values to the terminal with Embedded Python?
With IRIS I'd do:
USER>ZWrite ^Global
Or with the following code:
ClassMethod PrintGlobal(gname) As %Status
{
set global=$Name(@gname)
set next=$Query(@global@(""))
for {
quit:next=""
write !,next,@next
set next=$Query(@next)
}
with embedded python if I know that global is 2-dimensional I can do:
ClassMethod PrintGlobal() As %Status [ Language = python ]
{
i=0
j=0
for (key,value) in bs.query([i,j]):
print(key,value)
}
But if I don't know the depth of indexes?
Thoughts?
Product version: IRIS 2022.1
I do the same exercise in my package GlobalToJSON-ePython-pure
it should be basically sufficient to replace the JSON packing + writing by print(...)
see >>> def node(nd,nxt,fil):
query is the way to go :
import iris g = iris.gref("^MyGlobal") # Insert some data g[1] = "my first line" g[2] = "my second line" g[1,"a"] = "my first line with a key" g[1,"b"] = "my first line with a key" g[2,"a"] = "my second line with a key" g[2,"b"] = "my second line with a key" g[3,"a",1] = "my third line with a key and a subkey" for (key, value) in g.query(): print(f"{key} -> {value}")
result :
['1'] -> my first line ['1', 'a'] -> my first line with a key ['1', 'b'] -> my first line with a key ['2'] -> my second line ['2', 'a'] -> my second line with a key ['2', 'b'] -> my second line with a key ['3'] -> None ['3', 'a'] -> None ['3', 'a', '1'] -> my third line with a key and a subkey
Thanks, @Guillaume Rongier !
Yes, I was confused by the documentation a bit. Variables i,j are not needed to go through all the global.