accéder à la publication Guillaume Rongier · Avr 23 Bonjour, Je pense que vous n'avez pas accès, cette commande comme la majorité des commandes objectscripts sont codées en C. Et ce code C n'est pas public.
accéder à la publication Guillaume Rongier · Fév 26 Ok, effectivement, les choses semblent avoir changées. D'apres la doc kong : https://docs.konghq.com/gateway/latest/kong-manager/auth/super-admin/#cr... Lors de la migration de kong, tu dois passer le paramètre : KONG_PASSWORD Activer le RBAC : KONG_ENFORCE_RBAC: 'on' Et te connecter avec : Login : kong_admin et Mot de passe : Celui spécifié dans la migration Après tu dois avoir accès au bouton Invite Admin
accéder à la publication Guillaume Rongier · Fév 26 Dans mes souvenirs, c'est pas trivial d'activer le RBAC pour Kong car on a vite fait de se retrouver à l’extérieur de la maison sans les clés. Il y a quelques temps, j'ai créé un tuto sur Kong avec une procedure pour creer un utilisateur admin, l'idée c'est de créer le compte admin avant de forcer l'RBAC : https://github.com/grongierisc/kong-ee-training?tab=readme-ov-file#10-se... J'espere que cette procédure est toujours valide avec la version 3.4
accéder à la publication Guillaume Rongier · Fév 8 Wow tant de récompenses ! Merci à tous les membres de la communauté qui ont contribué à ce succès. C'est un honneur de faire partie de cette communauté. Je suis très heureux de voir que les membres de notre communauté ont été récompensés pour leur travail acharné. Cela montre que nous sommes une communauté active et que nous avons beaucoup à offrir. Je suis impatient de voir ce que l'année prochaine nous réserve !
accéder à la publication Guillaume Rongier · Fév 6 Je ne connais pas l'impact sur les performances, je pense qu'il est minime dans ton scénario. Cependant, dans le cas d'insertion en batch (+100 000 d'un coup), je passerai peut etre pas d'autre méthode que SQLAlchemy que je ne connais pas tres bien, je ne sais pas par exemple si il support les methodes `executemany` de db-api. Avant de rentrer dans ces considerations d'optimisation, faisons en sorte que le flux fonctionne ;)
accéder à la publication Guillaume Rongier · Fév 6 Je viens d'en discuter avec le developpeur du driver SQLAlchemy, c'est un problème connu de SQLAlchemy avec EmbeddedPython, les transactions ne sont jamais relachées. Un correctif arrivera bientot, d'ici là, une solution peut etre de forcer l'autoCommit: engine = create_engine('iris+emb:///', connect_args={'autoCommit': True})
accéder à la publication Guillaume Rongier · Fév 6 autre solution est de forcer l'autoCommit lors de la création de l'engine avec embeddded python : engine = create_engine('iris+emb:///', connect_args={'autoCommit': True})
accéder à la publication Guillaume Rongier · Fév 6 effectivement, il y a un problem de lock avec SQLAlchmy et embedded python. ce que tu proposes, c'est de passer d'une connexion SQLAlchmy avec EmbeddedPython vers une connexion classique sur TCP/IP. Pourquoi cela ne fonctionnerait pas en production ? Tu as à variabiliser les login et mot de passe et le tour est joué. L'adresse du server ne doit pas changer, ca sera toujours localhost dans ton cas.
accéder à la publication Guillaume Rongier · Fév 6 Bonjour @Cyril Grosjean Je me demande si ton problème n'est pas en relation avec cette erreur : https://fr.community.intersystems.com/post/erreur-errcannotacquirejobroo... L'idée, c'est que si tu déclares une connexion avec SQLAlchmy en mode embedded, une transaction est ouverte automatique, la solution proposée est après l'utilisation SQLalchmy fermer la connexion avec un dispose.
accéder à la publication Guillaume Rongier · Déc 22, 2023 Les bons sites pour commencer à apprendre le python sont : geeksforgeeks.org w3schools.com realpython.com Ensuite, je m'inspirerai des examples cités dans la réponse précédente. Un article dédié sur Python et IRIS doit sortir pour l'année prochain, il présentera les similitudes (qui sont nombreuses) et aussi les différences entre l'ObjectScript et le Python. Patience :)
accéder à la publication Guillaume Rongier · Déc 22, 2023 Bonjour, La facon, la plus simple aujourd'hui est de passer par du code Python ou Java pour ce genre d'opération : Java : https://openexchange.intersystems.com/package/excel-java-iris Python : https://openexchange.intersystems.com/package/eap-sql2xlsx https://openexchange.intersystems.com/package/appmsw-sql2xlsx Ou encore utiliser le super module d'interopérabilité 100% python : iop : https://openexchange.intersystems.com/package/interoperability-embedded-... https://github.com/grongierisc/formation-template-python
accéder à la publication Guillaume Rongier · Déc 21, 2023 Bonjour, C'est la connexion sqlalchemy qui creer une transaction qui n'est jamais relâchée, le code suivant devrait fonctionner: ClassMethod creerFichierCSV( query As %String, filename As %String) [ Language = python ] { import pandas as pd from sqlalchemy import create_engine,text engine = create_engine('iris+emb:///') try: df = pd.read_sql(text("SELECT * from Ens_Util.Log"),engine) except Exception as e: raise e finally: engine.dispose() df.to_csv("toto", index=False, header = True, encoding='utf-8', sep =';') return } Pour relâcher la transaction, aller dans : Puis selection la transaction : et enfin, la terminer :
accéder à la publication Guillaume Rongier · Déc 21, 2023 Je ne sais pas si VsCode support cette fonctionnalité, ce pendant, il est tout à fait possible d'ouvrir un ticket pour en faire une demande : https://github.com/intersystems-community/vscode-objectscript/issues J'imagine que ces propriétés sont liées aux objects projects qui aident aux déploiements. Pour accéder aux options de projets il faut monter un dossier isfs qui fait la passerelle entre iris et vscode : https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls...
accéder à la publication Guillaume Rongier · Déc 18, 2023 Bonjour, Je rencontre aussi ce problème, c'est lié à la version 2023.1 d'iris et pas à VsCode. La redirection des erreurs dans la sortie standard ne se fait pas systématiquement. C'est résolu à partir de la 2023.3. Un workaround : Do $system.OBJ.SetQualifiers("/multicompile=0",1) Cette commande désactive la compilation parallèle dans tout le système. Cela ne pose pas de problème si des classes individuelles sont compilées. Par contre, elle est plus lente pour de nombreuses classes. Mais vous pouvez le réactiver en utilisant le CompileFlag /multicompile=1 si vous devez compiler beaucoup de classes à la fois : do $SYSTEM.OBJ.Compile("Demo.Demo","/multicompile=1",.err)
accéder à la publication Guillaume Rongier · Déc 13, 2023 Bonjour, J'aurai besoin d'un example de model où l'erreur arrive. De plus, peux tu essayer de mettre à jour le driver db-api d'iris, nous avons récemment corrigé des problèmes par rapport aux TINYINT et aux streams. pip install intersystems_iris@https://github.com/intersystems-community/intersystems-irispython/releases/download/3.7.3/intersystems_iris-3.7.3-py3-none-any.whl --upgrade Sinon, tu peux toujours soumettre un bug sur l’interpréteur django pour iris ici: https://github.com/caretdev/django-iris
accéder à la publication Guillaume Rongier · Déc 13, 2023 Salut, As tu essayé d'ajouter la commande over + un ordre dans ton ROW_NUMBER() ? C'est recommandé car sinon le résultat peut être aléatoire. SELECT * FROM (SELECT _DATA.ID, ROW_NUMBER() over (order by _DATA.ID) _RN, COUNT(*) _COUNT FROM XX.srsshiptype _DATA ) WHERE _RN BETWEEN 1 and 1000
accéder à la publication Guillaume Rongier · Déc 12, 2023 Salut, As tu activé le service %Service_Callin ? Par default il est désactivé mais obligatoire pour embedded python.
accéder à la publication Guillaume Rongier · Déc 11, 2023 C'est bizarre, si l'inspect fonctionne, le runserver doit aussi fonctionner. Tu peux visualiser les log d'audit pour avoir plus de détail sur l'erreur de connexion : Dans cet exemple, j'ai essayé de me connecter avec un user grongier en lieu et place de SuperUser, la faute à : "USER": os.environ.get("USER", "SuperUser"), dans mon settings.py
accéder à la publication Guillaume Rongier · Déc 11, 2023 C'est le principe des streams d'écrire chunk par chunk.
accéder à la publication Guillaume Rongier · Déc 11, 2023 Salut Cyril, La méthode PutStream() prend un objet %Stream d'IRIS en paramètre. Il faut donc que tu convertisses ton fichier en %Stream avant de l'envoyer. Exemple : XMessage from grongier.pex import Message from dataclasses import dataclass @dataclass class XMessage(Message): StringStream: str BinaryStream: bytes BusinessOperation from grongier.pex import BusinessOperation from datetime import datetime from X.xImport import XMessage import iris class XArticleExport(BusinessOperation): def get_adapter_type(): return "EnsLib.FTP.OutboundAdapter" def on_init(self): return super().on_init() def on_message(self, request: XMessage): if hasattr(request, "Stream"): # Préparation du stream stream = iris.cls("%Stream.GlobalCharacter")._New() source = "" # Si le stream est en string on l'utilise tel quel if request.StringStream: source = request.StringStream elif request.BinaryStream: source = request.BinaryStream.decode("utf-8") # On écrit le contenu du fichier dans le stream n = 4092 chunks = [source[i:i+n] for i in range(0, len(source), n)] for chunk in chunks: stream.Write(chunk) filename = "exportArticles_" + datetime.now().strftime("%Y%m%d") + ".csv" esc: int = self.Adapter.PutStream(filename, stream) if esc == 1: self.log_info("File imported successfully with code : " + esc) else: self.log_error("Pas de stream reçu ! Code: " + esc) return super().on_message(request)