Hello Warren,

You can use "Schedule Specifications" in production to schedule running your business host. First select your business host(service) and go to additional setting and check "Schedule" option click the magnifier. It opens the "Schedule Spec Editor" and create your schedule ex: "monthend_9to930" and click add action. Then select START and STOP action this action is basically "action:YYYY-MM-DDThh:mm:ss" . Refer the below sample and documentation

START *-*-31T09:00:00
STOP *-*-31T09:30:00

Note: this is suitable only for 31 days of month

anyway when I keep my native python scripts under "IRISinstalldirectory\mgr\python" and import my code as module and it's working because it's running inside the IRIS not using the python "driver" 

ClassMethod CallPyscripts()
{
    set ap = "mypyap"
    set pyImport = ##class(%SYS.Python).Import(ap)
    set builtin = $SYSTEM.Python.Builtins()
    do builtin.help(pyImport)
    write pyImport.irisversion,!
    write pyImport."Execute_Classmethod1"()
}
#__init__.py
import iris
from .irisembdpyth2024 import *

irisversion = iris.execute('return $zv')

# irisembdpyth2024.py file
import iris

def Execute_Classmethod1():
    print(iris.cls('MyLearn.EmbeddedPython').test1())

Hello @Guillaume Rongier

Thanks for the feedback! I go over your pretty useful article. I just write python code inside the ObjectScript itself by using language mode because of it's small code snippets. I actually facing some issues while writing IRIS in native python script.

From my pervious community question. First I install this intersystems_irispython-3.2.0-py3-none-any.whl in python and there is no cls, execute, routine, gref, ref or other IRIS script functions available.

As you recommend from the post. I install the official driver  https://github.com/intersystems-community/intersystems-irispython/releases/download/3.8.0/intersystems_iris-3.8.0-py3-none-any.whl file and I could use the IRIS functions for embedded python cls, execute, routine, gref, ref etc...

However, I got this ImportError: DLL load failed while importing pythonint: The specified module could not be found." error while executing the .py scripterror while executing my script

script is nothing but simple class method invocation.

import iris
def Execute_Classmethod():
    print(iris.cls('MyLearn.EmbeddedPython').test1())

Execute_Classmethod()
 

And I'm trying to execute these lines from post  and git in to my .py source file. This functions are not available in iris library package.So, Is this code snippet is only applicable for embedded python. Please correct me If I'm doing wrong

If the below syntax works in python source file, What changed I need to do in my package.

    # switch namespace to the %SYS namespace
    iris.system.Process.SetNamespace("%SYS")

    # set credentials to not expire
    iris.cls('Security.Users').UnExpireUserPasswords("*")

    print(iris.cls('dc.python.ObjectScript').Test())

Thanks!

Thanks @Luis Angel Pérez Ramos 

It works. I downloaded and installed in python. However I got timeout error while trying to connect the IRIS in one machine  and it works in another machine. IDK pyodbc is required anyway it is also installed.

import iris

# Open a connection to the server
args = {'hostname':'127.0.0.1', 'port':52773,
    'namespace':'USER', 'username':'_SYSTEM', 'password':'SYS'
}

try:
    conn = iris.connect(**args)
    # Create an iris object
    irispy = iris.createIRIS(conn)
except Exception as e:
    # Handling the exception and printing the error
    print(f"An error occurred: {e}")

error mesage

    conn = iris.connect(**args)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_IRISNative.py", line 167, in connect
    connection._connect(hostname, port, namespace, username, password, timeout, sharedmemory, logfile, sslcontext, autoCommit, isolationLevel, featureOptions)
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_IRISConnection.py", line 282, in _connect
    raise e
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_IRISConnection.py", line 190, in _connect
    self._in_message._read_message_sql(sequence_number)
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_InStream.py", line 46, in _read_message_sql
    is_for_gateway = self.__read_message_internal(expected_message_id, expected_statement_id, type)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_InStream.py", line 59, in __read_message_internal
    self.__read_buffer(header.buffer, 0, iris._MessageHeader._MessageHeader.HEADER_SIZE)
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_InStream.py", line 133, in __read_buffer
    data = self._device.recv(length)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\HP\AppData\Local\Programs\Python\Python312\Lib\site-packages\iris\_Device.py", line 40, in recv
    return self._socket.recv(len)
           ^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out

Thanks!

Thanks Robert,

The validateIndices() and absolutely It's useful. For the first point. As far of my understanding both existing/newly created index both are set as "not selectable" at the time of building BUILD Index/%BuildIndices().  As per the documentation about the live system "not selectable" by default in BUILD INDEX. So, Does it applicable for programmatic %BuildIndices() as well?