Python adapter via callout for InterSystems Data Platforms.
- Load ObjectScript code.
- Place callout DLL/SO in
bin
folder.
- Check that your
PYTHONHOME
environment variable points to Python 3.6. - Check that your SYSTEM
PATH
environment variable hasPYTHONHOME
variable (or directory it points to).
- Check that your SYSTEM
PATH
environment variable has/usr/lib
, preferably at the begining
If you modified environment variables (for Windows or Linux) restart your InterSystems product.
- Call:
do ##class(isc.py.Callout).Setup()
once per systems start (add to ZSTART: docs, sample). - Call main method (can be called many times, context persists):
write ##class(isc.py.Callout).SimpleString(code, data)
- Call:
do ##class(isc.py.Callout).Finalize()
to free Python context. - Call:
write ##class(isc.py.Callout).Unload()
to free callout library.
do ##class(isc.py.Callout).Setup()
write ##class(isc.py.Callout).SimpleString("x='ПРИВЕТ'","x")
write ##class(isc.py.Callout).SimpleString("x=repr('ПРИВЕТ')","x")
write ##class(isc.py.Callout).SimpleString("x=123","x")
do ##class(isc.py.Callout).Finalize()
write ##class(isc.py.Callout).Unload()
Along with callout code and Interoperability adapter there's also a test Interoperability Production and test Business Process. To use them:
- In OS bash execute
python -m pip install pyodbc pandas matplotlib seaborn
. - Execute:
do ##class(isc.py.test.CannibalizationData).Import()
to populate test data. - Create ODBC connection to the namespace with data
- In test Business Process
isc.py.test.Process
edit annotation forCorrelation Matrix: Tabular
call, specifying correct ODBC DSN in line 3 - Edit annotation for
Correlation Matrix: Graph
call, specifying valid filepath forf.savefig
function. - Save and compile business process.
- Start
isc.py.test.Production
production. - Send empty
Ens.Request
mesage to theisc.py.test.Process
.
To run tests execute:
set repo = ##class(%SourceControl.Git.Utils).TempFolder()
set ^UnitTestRoot = ##class(%File).SubDirectoryName(##class(%File).SubDirectoryName(##class(%File).SubDirectoryName(repo,"isc"),"py"),"unit",1)
set sc = ##class(%UnitTest.Manager).RunTest(,"/nodelete")
There are several limitaions associated with the use of PythonAdapter.
- Modules reinitialization. Some modules may only be loaded once diring process lifetime (i.e. numpy). While Finalization clears the context of the process, repeated load of such libraries terminates the process. Discussions: 1, 2.
- Variables. Do not use these variables:
zzztype
,zzzjson
. They are used byisc.py.data
package.
Development of ObjectScript is done via cache-tort-git in UDL mode. Development of C code is done in Eclipse.
- Install MinGW-w64 you'll need
make
andgcc
. - Rename
mingw32-make.exe
tomake.exe
inmingw64\bin
directory. - Set
GLOBALS_HOME
environment variable to the root of Caché or Ensemble installation. - Set
PYTHONHOME
environment variable to the root of Python3 installation. UsuallyC:\Users\<User>\AppData\Local\Programs\Python\Python3<X>
- Open MinGW bash (
mingw64env.cmd
). - In
<Repository>\c\
executemake
.
- Add Python 3.6 repo:
add-apt-repository ppa:jonathonf/python-3.6
andapt-get update
- Install:
apt install python3.6 python3.6-dev libpython3.6-dev build-essential
- Set
GLOBALS_HOME
environment variable to the root of Caché or Ensemble installation. - Set environment variable
PYTHONVER
to the python version you want to build, i.e.:export PYTHONVER=3.6
- In
<Repository>/c/
executemake
.