Article
· Aug 15, 2023 2m read

Using NativeAPI Extension from Python

In my previous articles, I described my Command Line Extension to NativeAPI.
Of course, this is also available for any other NativeAPI package.
So I created this example in Python as a demo.

The package contains also an IRIS server in Docker for the demo
It is evident that it also works with any remote IRIS server.
You just have to provide it with my NativeAPI CommandLine Extension.

I think this demo is easy to follow and shows the essential features.

  • First, you install the package and start the container
  • then you start the demo
    docker-compose exec iris python3 src/rcc.py
  • Next, you connect  to your IRIS server defaults refer to the ádde IRIS server in the container
    >>> serverIP [127.0.0.1]:
    >>> serverPORT [1972]:
    >>> namespace [USER]:
    >>> username [_SYSTEM]:
    >>> password [SYS]:
    Connected to Instance IRIS on Server 1C09927CAE60 
  • Now, you get into the demo menu
    Select Demo to exercise 
     0 = free ObjectScript
     1 = $ZV from Server
     2 = Actual Time in Server
     3 = TimeZone Offset of Server
     4 = Server ArchitectureVendorModel
     5 = List Global in ZWRITE style
     * = Terminate demo
    >>> take a choice [1]:  
  • And this is the result when you run through all 5 examples
    >>> take a choice [1]:
     IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2023.2 (Build 227U) Mon Jul 31 2023 18:04:28 EDT 
    
    >>> take a choice [1]: 2
     2023-08-15 07:42:16 
    
    >>> take a choice [1]: 3
     0 
    
    >>> take a coice [1]: 4
     x86_64 * Intel * Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz 
    
    >>> take a choice [1]: 0 
    >>> Your ObjectScript [ quit "?"]: quit $ZTS
     66701,27813.678790226 
    
    >>> take a choice [1]: 0 
    >>> Your ObjectScript [ quit "?"]: quit 17/4
     4.250000000000000000 
    
    >>> take a choice [1]: 0 
    >>> Your ObjectScript [ quit "?"]: quit 17/0
     <DIVIDE> 18 x^%ZX 
    
    >>> take a choice [1]: 5 
    >>> Your Global [^dc.MultiD]:
     ^dc.MultiD = 5
     ^dc.MultiD(1) = $lb("Braam,Ted Q.",51353)
     ^dc.MultiD(1,"mJSON") = "{}"
     ^dc.MultiD(2) = $lb("Klingman,Uma C.",62459)
     ^dc.MultiD(2,2,"Multi","a") = 1
     ^dc.MultiD(2,2,"Multi","rob",1) = "rcc"
     ^dc.MultiD(2,2,"Multi","rob",2) = 2222
     ^dc.MultiD(2,"Multi","a") = 1
     ^dc.MultiD(2,"Multi","rob",1) = "rcc"
     ^dc.MultiD(2,"Multi","rob",2) = 2222
     ^dc.MultiD(2,"mJSON") = "{""A"":""ahahah"",""Rob"":""VIP"",""Rob2"":1111,""Rob3"":true}"
     ^dc.MultiD(3) = $lb("Goldman,Kenny H.",45831)
     ^dc.MultiD(3,"mJSON") = "{}"
     ^dc.MultiD(4) = $lb("","")
     ^dc.MultiD(4,"mJSON") = "{""rcc"":122}"
     ^dc.MultiD(5) = $lb("","")
     ^dc.MultiD(5,"mJSON") = "{}"
     **** done ***
    
     >>> take a choice [1]: *
       Thank you for trying the demo

If you prefer to test it with embedded Python use

docker-compose exec iris iris session iris "##class(nacl.rcc).py()"

 

Video

GitHub

Discussion (3)2
Log in or sign up to continue

Very good demo of Python native API in interactive mode

This app is a very good example of how to use the IRIS native Python API to run an interactive routine from a pure Python code.
Very useful.

If you want to use it by connecting to an external instance (ie: other than your local container), you'll have to install the %ZX routine as this is the function used in the rcc.py code :

ans=iris.function("","%ZX",what+" quit 0")

To install %ZX routine or your remote IRIS instance, you can either execute from the Management Portal > System Explorer > SQL :

CREATE PROCEDURE %Zrcc.X()    
LANGUAGE OBJECTSCRIPT     
{     
 set %rcc=##class(%Routine).%New("%ZX.int")    
 set %rccline="x(%rcc) try {return $xecute(%rcc)} catch %rcc {return %rcc.DisplayString()}"    
 do %rcc.WriteLine(%rccline)     
 do %rcc.Save()   
 quit %rcc.Compile()   
}

Or simply add it from ZPM :

USER> zpm "install nacl-server"

Then from your local container, just execute rcc.py :

% docker compose exec iris python3 src/rcc.py
>>> serverIP [127.0.0.1]: host.docker.internal
>>> serverPORT [1972]: 51770
>>> namespace [USER]: 
>>> username [_SYSTEM]: 
>>> password [SYS]: 

Connected to Instance I4H on Server DEMOSERVER.EXTERNAL.COM
Select Demo to exercise
 0 = free ObjectScript
 1 = $ZV from Server
 2 = Actual Time in Server
 3 = TimeZone Offset of Server
 4 = Server Architecture*Vendor*Model
 5 = List Global in ZWRITE style
 * = Terminate demo
>>> take a choice [1]:

Hi Robert!

Your video is available on InterSystems Developers YouTube:

⏯️ Python client using IRIS NativeAPI CommandLine Extension

https://www.youtube.com/embed/UyConZLfsmM?si=LFHJXMnms6pRq6l2
[This is an embedded link, but you cannot view embedded content directly on the site because you have declined the cookies necessary to access it. To view embedded content, you would need to accept all cookies in your Cookies Settings]

Great work!