iris-pex-embedded-python 3.5.3b3__tar.gz → 3.5.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/PKG-INFO +1 -1
  2. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/pyproject.toml +1 -1
  3. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_cli.py +10 -2
  4. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_director.py +6 -5
  5. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_utils.py +36 -16
  6. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Message.cls +18 -0
  7. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/PKG-INFO +1 -1
  8. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/LICENSE +0 -0
  9. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/README.md +0 -0
  10. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/setup.cfg +0 -0
  11. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/setup.py +0 -0
  12. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/__init__.py +0 -0
  13. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
  14. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
  15. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
  16. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
  17. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
  18. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
  19. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
  20. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
  21. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
  22. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
  23. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
  24. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
  25. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
  26. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
  27. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
  28. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
  29. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
  30. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
  31. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
  32. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
  33. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/__init__.py +0 -0
  34. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/__main__.py +0 -0
  35. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/_business_host.py +0 -0
  36. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/_cli.py +0 -0
  37. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/_common.py +0 -0
  38. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/_director.py +0 -0
  39. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/_utils.py +0 -0
  40. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/grongier/pex/wsgi/handlers.py +0 -0
  41. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/__init__.py +0 -0
  42. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/__main__.py +0 -0
  43. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_async_request.py +0 -0
  44. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_business_host.py +0 -0
  45. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_business_operation.py +0 -0
  46. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_business_process.py +0 -0
  47. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_business_service.py +0 -0
  48. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_common.py +0 -0
  49. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_debugpy.py +0 -0
  50. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_decorators.py +0 -0
  51. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_dispatch.py +0 -0
  52. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_generator_request.py +0 -0
  53. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_inbound_adapter.py +0 -0
  54. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_iris.py +0 -0
  55. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_log_manager.py +0 -0
  56. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_message.py +0 -0
  57. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_message_validator.py +0 -0
  58. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_outbound_adapter.py +0 -0
  59. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_private_session_duplex.py +0 -0
  60. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_private_session_process.py +0 -0
  61. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_remote.py +0 -0
  62. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/_serialization.py +0 -0
  63. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
  64. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
  65. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/BusinessService.cls +0 -0
  66. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Common.cls +0 -0
  67. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Director.cls +0 -0
  68. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
  69. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
  70. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
  71. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Generator/Message/Ack.cls +0 -0
  72. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Generator/Message/Poll.cls +0 -0
  73. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Generator/Message/Start.cls +0 -0
  74. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Generator/Message/StartPickle.cls +0 -0
  75. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Generator/Message/Stop.cls +0 -0
  76. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
  77. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
  78. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
  79. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PickleMessage.cls +0 -0
  80. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
  81. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
  82. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
  83. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
  84. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
  85. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Projection.cls +0 -0
  86. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Service/Remote/Handler.cls +0 -0
  87. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Service/Remote/Rest/v1.cls +0 -0
  88. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
  89. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Test.cls +0 -0
  90. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Utils.cls +0 -0
  91. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/cls/IOP/Wrapper.cls +0 -0
  92. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iop/wsgi/handlers.py +0 -0
  93. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
  94. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
  95. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
  96. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
  97. {iris_pex_embedded_python-3.5.3b3 → iris_pex_embedded_python-3.5.4}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris_pex_embedded_python
3
- Version: 3.5.3b3
3
+ Version: 3.5.4
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"]
3
3
 
4
4
  [project]
5
5
  name = "iris_pex_embedded_python"
6
- version = "3.5.3b3"
6
+ version = "3.5.4"
7
7
  description = "Iris Interoperability based on Embedded Python"
8
8
  readme = "README.md"
9
9
  authors = [
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
  import argparse
3
3
  import json
4
+ import logging
4
5
  import os
5
6
  from dataclasses import dataclass
6
7
  from enum import Enum, auto
@@ -48,6 +49,7 @@ class CommandArgs:
48
49
  classname: Optional[str] = None
49
50
  body: Optional[str] = None
50
51
  namespace: Optional[str] = None
52
+ force_local: bool = False
51
53
 
52
54
  class Command:
53
55
  def __init__(self, args: CommandArgs):
@@ -147,7 +149,7 @@ class Command:
147
149
  if migrate_path is not None:
148
150
  if not os.path.isabs(migrate_path):
149
151
  migrate_path = os.path.join(os.getcwd(), migrate_path)
150
- _Utils.migrate_remote(migrate_path)
152
+ _Utils.migrate_remote(migrate_path, force_local=self.args.force_local)
151
153
 
152
154
  def _handle_log(self) -> None:
153
155
  if self.args.log == 'not_set':
@@ -160,7 +162,10 @@ class Command:
160
162
 
161
163
  def _handle_help(self) -> None:
162
164
  create_parser().print_help()
163
- print(f"\nDefault production: {_Director.get_default_production()}")
165
+ try:
166
+ print(f"\nDefault production: {_Director.get_default_production()}")
167
+ except Exception:
168
+ logging.warning("Could not retrieve default production.")
164
169
 
165
170
  def create_parser() -> argparse.ArgumentParser:
166
171
  """Create and configure argument parser"""
@@ -190,6 +195,9 @@ def create_parser() -> argparse.ArgumentParser:
190
195
  test.add_argument('-C', '--classname', help='test classname', nargs='?', const='not_set')
191
196
  test.add_argument('-B', '--body', help='test body', nargs='?', const='not_set')
192
197
 
198
+ migrate = main_parser.add_argument_group('migrate arguments')
199
+ migrate.add_argument('--force-local', help='force local migration, skip remote even if REMOTE_SETTINGS is present', action='store_true')
200
+
193
201
  namespace = main_parser.add_argument_group('namespace arguments')
194
202
  namespace.add_argument('-n', '--namespace', help='set namespace', nargs='?', const='not_set')
195
203
 
@@ -268,21 +268,22 @@ class _Director():
268
268
  classname: the name of the class to test
269
269
  body: the body of the message
270
270
  """
271
+ iris = _iris.get_iris()
271
272
  if not message:
272
- message = _iris.get_iris().cls('Ens.Request')._New()
273
+ message = iris.cls('Ens.Request')._New()
273
274
  if classname:
274
275
  # if classname start with 'iris.' then create an iris object
275
276
  if classname.startswith('iris.'):
276
277
  # strip the iris. prefix
277
278
  classname = classname[5:]
278
279
  if body:
279
- message = _iris.get_iris().cls(classname)._New(body)
280
+ message = iris.cls(classname)._New(body)
280
281
  else:
281
- message = _iris.get_iris().cls(classname)._New()
282
+ message = iris.cls(classname)._New()
282
283
  # else create a python object
283
284
  else:
284
285
  # python message are casted to Grongier.PEX.Message
285
- message = _iris.get_iris().cls("IOP.Message")._New()
286
+ message = iris.cls("IOP.Message")._New()
286
287
  message.classname = classname
287
288
  if body:
288
289
  message.json = body
@@ -290,7 +291,7 @@ class _Director():
290
291
  message.json = _Utils.string_to_stream("{}")
291
292
  # serialize the message
292
293
  serial_message = dispatch_serializer(message)
293
- response = _iris.get_iris().cls('IOP.Utils').dispatchTestComponent(target,serial_message)
294
+ response = iris.cls('IOP.Utils').dispatchTestComponent(target,serial_message)
294
295
  try:
295
296
  deserialized_response = dispatch_deserializer(response)
296
297
  except ImportError as e:
@@ -23,6 +23,7 @@ class RemoteSettings(TypedDict, total=False):
23
23
  remote_folder: str # Optional: the folder to use (default: '')
24
24
  username: str # Optional: the username to use to connect (default: '')
25
25
  password: str # Optional: the password to use to connect (default: '')
26
+ verify_ssl: bool # Optional: verify SSL certificates (default: True, set to False for self-signed certs)
26
27
 
27
28
  class _Utils():
28
29
  @staticmethod
@@ -261,7 +262,7 @@ class _Utils():
261
262
  return module
262
263
 
263
264
  @staticmethod
264
- def migrate_remote(filename=None):
265
+ def migrate_remote(filename=None, force_local=False):
265
266
  """
266
267
  Read a settings file from the filename
267
268
  If the settings.py file has a key 'REMOTE_SETTINGS' then it will use the value of that key
@@ -273,6 +274,7 @@ class _Utils():
273
274
  * 'remote_folder': the folder to use (optional, default is '')
274
275
  * 'username': the username to use to connect (optional, default is '')
275
276
  * 'password': the password to use to connect (optional, default is '')
277
+ * 'verify_ssl': verify SSL certificates (optional, default is True)
276
278
 
277
279
  The remote host is a rest API that will be used to register the components
278
280
  The payload will be a json object with the following keys:
@@ -283,11 +285,15 @@ class _Utils():
283
285
  * 'data': the data of the file, it will be an UTF-8 encoded string
284
286
 
285
287
  'body' will be constructed with all the files in the folder if the folder is not empty else use root folder of settings.py
288
+
289
+ Args:
290
+ filename: Path to the settings file
291
+ force_local: If True, skip remote migration even if REMOTE_SETTINGS is present
286
292
  """
287
293
  settings, path = _Utils._load_settings(filename)
288
294
  remote_settings: Optional[RemoteSettings] = getattr(settings, 'REMOTE_SETTINGS', None) if settings else None
289
295
 
290
- if not remote_settings:
296
+ if not remote_settings or force_local:
291
297
  _Utils.migrate(filename)
292
298
  return
293
299
 
@@ -321,21 +327,35 @@ class _Utils():
321
327
  'data': data
322
328
  })
323
329
 
330
+ # Get SSL verification setting (default to True for security)
331
+ verify_ssl = remote_settings.get('verify_ssl', True)
332
+
333
+ # Disable SSL warnings if verify_ssl is False
334
+ if not verify_ssl:
335
+ import urllib3
336
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
337
+
324
338
  # send the request to the remote settings
325
- response = requests.put(
326
- url=f"{remote_settings['url']}/api/iop/migrate",
327
- json=payload,
328
- headers={
329
- 'Content-Type': 'application/json',
330
- 'Accept': 'application/json'
331
- },
332
- auth=(remote_settings.get('username', ''), remote_settings.get('password', '')),
333
- timeout=10
334
- )
335
-
336
- print(f"Response from remote migration:\n{response.text}")
337
-
338
- response.raise_for_status() # Raise an error for bad responses
339
+ try:
340
+ response = requests.put(
341
+ url=f"{remote_settings['url']}/api/iop/migrate",
342
+ json=payload,
343
+ headers={
344
+ 'Content-Type': 'application/json',
345
+ 'Accept': 'application/json'
346
+ },
347
+ auth=(remote_settings.get('username', ''), remote_settings.get('password', '')),
348
+ timeout=10,
349
+ verify=verify_ssl
350
+ )
351
+
352
+ print(f"Response from remote migration:\n{response.text}")
353
+
354
+ response.raise_for_status() # Raise an error for bad responses
355
+ except requests.exceptions.SSLError as e:
356
+ print(f"SSL Error: {e}")
357
+ print("If you're using a self-signed certificate, set 'verify_ssl': False in REMOTE_SETTINGS")
358
+ raise
339
359
 
340
360
  @staticmethod
341
361
  def migrate(filename=None):
@@ -681,6 +681,24 @@ Method %ShowContents(pZenOutput As %Boolean = 0)
681
681
  &html<<script>$(function() {$('#element').jsonView(makeCompleteJSON(#(jsonObject)#,false));});</script>>
682
682
  }
683
683
 
684
+ ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private ]
685
+ {
686
+ // Delete the property object references.
687
+ Set tSC = $$$OK
688
+ // Kill the global references in ^Ens.MessageBodyD(oid) and all its sub-nodes
689
+ Do ##class(Ens.MessageBody).%DeleteId(oid,.tSC)
690
+ Quit tSC
691
+ }
692
+
693
+ /// Callback/Trigger for SQL delete
694
+ Trigger OnDelete [ Event = DELETE ]
695
+ {
696
+ // Delete the property object references. {%%ID} holds the id of the record being deleted.
697
+ Set tID={%%ID}
698
+ Do ##class(Ens.MessageBody).%DeleteId(tID,.tSC)
699
+ Quit
700
+ }
701
+
684
702
  Storage Default
685
703
  {
686
704
  <Data name="MessageDefaultData">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris_pex_embedded_python
3
- Version: 3.5.3b3
3
+ Version: 3.5.4
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License