検索

記事
· 2024年9月12日 4m read

Python IRIS Nativo

Olá comunidade

Nós experimentamos anteriormente o Python embutido em IRIS; no entanto, eu ainda não tive a oportunidade de implementar IRIS usando Python nativo. Nesse artigo, vou percorrer os passos que eu usei para começar a aprender e implementar IRIS dentro da fonte Python. Eu também gostaria de agradecer @Guillaume Rongier@Luis Angel Pérez Ramos pela ajuda resolvendo os problemas que encontrei durante minha recente instalação PIP de IRIS no Python, que eu habilitei para funcionar adequadamente.

Vamos começar a escrever IRIS em Python.

Em primeiro lugar, você precisa instalar o arquivo intersystems_irispython-3.2.0-py3-none-any.whl do repositório github. Eu fiz o download e baixei na minha máquina windows.

py -m pip install intersystems_irispython-3.2.0-py3-none-any.whl

Verifiquei que os pacotes estão instalados na minha máquina executando py -m pip list

intersystems-irispython 3.2.0
iris                    0.0.5

Agora estamos prontos para começar a escrever o Python. Eu criei um arquivo .py e importei um pacote iris em cima da classe.

Agora, vamos estabelecer a conexão ao IRIS usando o método de conexão e criar e usar o objeto de conexão para instanciar o objeto iris.IRIS usando o "createIRIS" e esse é o  passo crucial para seguir com operações mais adiante.

import iris
impor time

args = {'hostname':'127.0.0.1', 'port':1972,'namespace':'LEARNING', 'username':'_SYSTEM', 'password':'SYS'}

try:
    """
    some other ways instead of kwargs
    conn = iris.connect(hostname='127.0.0.1', port=1972, namespace='LEARNING',username='_SYSTEM',password='SYS')
    """
    conn = iris.connect(**args)
    # A new IRIS object that uses the given connection.
    irispy = iris.createIRIS(conn)

    print('connected!')
except Exception as e:
    # Handling the exception and printing the error
    print(f"An error occurred: {e}")
    

Agora, vamos falar sobre os métodos para COS e globais.

Uma vez que você criou com sucesso um objeto IRIS, agora está pronto para usar várias operações.

set : Essa função é usada para definir os valores de globais na base de dados IRIS.

1. O primeiro parâmetro é o valor

2. Segundo parâmetro é o nome da global

3. *args - o terceiro parâmetro são subscritos.

def set_global(value=None,gbl=None,*args):
    #set method is in _IRIS from iris package
    irispy.set('set from irispy','mygbl','a',str(time.time()))
    print('global set done!')

set_global()

 

kill: Essa função é usada para deletar a global da base de dados

def kill_global():
    irispy.kill('mygbl')
    print('global kill done!')

IsDefined: o mesmo que $data: verifica se existe

def data_isDefined():
    # equal to $data
    print(irispy.isDefined('mygbl','a')) # o/p 10
    print(irispy.isDefined('mygbl','a','1724996313.480835')) # o/p 1

nextSubscript: Igual a $Order

irispy.nextSubscript(0,'mygbl','a')

tStart, tCommit e tRollback: o mesmo que TStart, TCommit, TRollback

def global_transaction_commit():
    irispy.tStart()
    print(irispy.getTLevel())
    irispy.set('set from irispy','mygbl','trans',str(time.time()))
    irispy.tCommit()

def global_transaction_rollback():
    irispy.tStart()
    print(irispy.getTLevel())
    irispy.set('set from irispy','mygbl','trans1',str(time.time()))
    irispy.tRollback() # tRollbackOne()

 

lock e unlock: por default lock incremental/lock exclusivo

def global_lock():
    #default exclusive lock
    s = irispy.lock('',1,'^mygbl')
    time.sleep(10) # verify the lock in locktab
    irispy.unlock('','^mygbl')
    
def global_shared_lock():
    s = irispy.lock('S',1,'^mygbl')
    time.sleep(10)
    irispy.unlock('S','^mygbl')

node: nó de subscrito da árvore mesmo que $Order

def node_traversal():
    # subscript level traversal like $Order
    for mrn in irispy.node('^mygbl'):
         for phone in irispy.node('^mygbl',mrn):
            print(f'patient mrn {mrn} and phone number: {phone}')
            
"""
o/p
patient mrn 912 and phone number: 3166854791
patient mrn 991 and phone number: 78050314
patient mrn 991 and phone number: 9128127353
"""

O nó, valor de árvore e definições de classe e seus membros estão cobertos no próximo artigo.

Você pode ver a referência na documentação para todas as funções.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月12日 1m read

QuinielaML - Predicciones de la 7ª jornada de la Quiniela

Después del parón de selecciones tenemos nueva jornada de Primera y Segunda División en la Quiniela del próximo fin de semana. Estos son los partidos que forman parte de la jornada: 

Estas son las predicciones para Primera División:

Y para la Segunda División:

Lo que nos deja la siguiente Quiniela:

¡Pues ya tenemos la Quiniela ganadora!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月12日 3m read

Crear, Listar, Subir y Descargar archivos y carpetas de red usando el protocolo SMB y la interoperabilidad de IRIS

Samba es el estándar para la interoperabilidad de servicios de archivos entre Linux, Unix, DOS, Windows, OS/2 y otros sistemas operativos. Desde 1992, Samba ha proporcionado servicios de archivos seguros, estables y rápidos para todos los clientes (sistemas operativos y programas) utilizando el protocolo SMB/CIFS. Los administradores de red han utilizado SAMBA para crear carpetas de red compartidas que permiten a los empleados de la empresa crear, editar y visualizar archivos corporativos como si estuvieran en sus ordenadores localmente, aunque estos archivos se encuentren físicamente en un servidor de archivos en red. Es posible crear una carpeta de red en Linux y verla como una carpeta compartida en Windows, por ejemplo.

Actualmente, los conectores de IRIS no soportan el acceso ni la escritura de archivos y carpetas remotas usando el protocolo SMB, por lo que es necesario usar FTP. Sin embargo, ahora contamos con Python, que dispone de la librería "smbprotocol" (https://pypi.org/project/smbprotocol). Basado en esta librería, se ha creado una aplicación de interoperabilidad (producción) para listar, grabar y eliminar archivos y carpetas utilizando el protocolo SMB. Ahora, vuestras aplicaciones IRIS pueden escribir o acceder fácilmente a archivos de red. La aplicación se llama "samba-iris-adapter" (https://openexchange.intersystems.com/package/samba-iris-adapter).

 

Instalación de la aplicación

Instalación: ZPM

1. Abrir un Namespace de IRIS con la interoperabilidad habilitada. Abrir la Terminal y ejecutar:

USER>zpm "install samba-iris-adapter"

Instalación: Docker

1. Clonad/haced git pull del repositorio en cualquier directorio local.

$ git clone https://github.com/yurimarx/samba-iris-adapter.git

2. Abrid la terminal en este directorio y ejecutad:

$ docker-compose build

3. Ejecutad el contenedor de IRIS con vuestro proyecto:

$ docker-compose up -d

Cómo iniciar la aplicación

1. Id a Interoperabilidad > Configurar > Credenciales:

2. Estableced las credenciales y guardad con estos valores:

ID: SambaCredentials
User name: bob
Password: bobspasswd 
Credentials

3. Abrid la producción http://localhost:52795/csp/user/EnsPortal.ProductionConfig.zen?PRODUCTION=dc.samba.SambaProduction e iniciarla.

4. Id a vuestra aplicación cliente REST y utilizad estas operaciones REST (con autenticación básica y credenciales _SYSTEM/SYS):

5. Cread una nueva Carpeta Remota: POST http://localhost:52795/csp/samba/CreateFolder con el cuerpo JSON: {"Folder":"samplefolder"}

6. Para enviar un archivo a una Carpeta Remota: POST http://localhost:52795/csp/samba/CreateFile/samplefolder con form-data seleccionado para enviar un archivo multipart. El nombre del archivo multipart es "file" y en el valor seleccionad cualquier archivo de vuestro ordenador. Consultad esta imagen con un ejemplo usando Postman:

7. Listad los archivos dentro de una Carpeta Remota: GET http://localhost:52795/csp/samba/ListFilesIntoFolder/samplefolder:

8. Descargad el archivo: POST http://localhost:52795/csp/samba/DownloadFile con el cuerpo JSON: {"Folder":"samplefolder", "Filename":"cat.jpg"}

9. Ved los mensajes de las producciones en http://localhost:52795/csp/user/EnsPortal.ProductionConfig.zen?$NAMESPACE=USER&$NAMESPACE=USER& > Pestaña Mensajes > haced clic en la Sesión:

10. Comprobad la nueva carpeta y archivo dentro de la carpeta /mnt2 en la instancia Docker de Samba:

¡Disfrutadlo!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2024年9月12日

Running IRIS in a Swarm Cluster

Hi there,

I'm discovering IRIS and I need to POC the solution, with a constraint: containerization.
I'm used to deploy my apps in a Swarm cluster, and all my bind volumes are written on a GlusterFS volume.

The problem here, when I start my stack, the first log is:

[WARN] ISC_DATA_DIRECTORY is located on a mount of type 'fuse.glusterfs' which is not supported, consider a named volume for '/iris_conf'

And of course the deployment fails.

Any idea? How can I provide my data on all my cluster nodes? I read this article: https://community.intersystems.com/post/deploying-sharded-cluster-docker... But no swarm cluster here, it's only docker compose and 3 containers running, which is not I want. I don't want 3 containers, but just one, able to retrieve its data on the same path, without worrying about the cluster node on which it is running. So, any idea of how I can have the same behavior than data replication and availibilty without using GlusterFS?

My infrastructure is a 3 nodes Swarm Cluster, with a GlusterFS volume replicated on the 3 nodes, and keepalived for HA and vIP. And Traefik reverse proxy.

If someone can help me :D it would be nice.

 

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2024年9月12日

SYSTEM OBJ Export

I have a DOS batch file that calls *.scr script to back up an existing routine and upload the newly updated one.

I have a backup folder setup in C:\Users\[username]\Backup\ on each server, some with more recent versions of cache. The *.scr script calls on the command:  $SYSTEM.OBJ.Export(routine,path) . 

The problem is that it works consistently in some servers but not in others. Where it fails, the session unexpectedly terminated. Please note that the command works on the remote server terminal window where the script terminates unexpectedly. Is there a setting I need to change in Management Portal or somewhere else for my cache USER and ROLE under my name in the destination server? Is there another system command, perhaps, I should use that is better than OBJ.Export? If so, I have not found it.

Thank you for your anticipated replies.

ディスカッション (0)2
続けるにはログインするか新規登録を行ってください