iris-pex-embedded-python 3.5.0b5__tar.gz → 3.5.0b6__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.

Potentially problematic release.


This version of iris-pex-embedded-python might be problematic. Click here for more details.

Files changed (92) hide show
  1. {iris_pex_embedded_python-3.5.0b5/src/iris_pex_embedded_python.egg-info → iris_pex_embedded_python-3.5.0b6}/PKG-INFO +1 -1
  2. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/pyproject.toml +1 -1
  3. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_message.py +14 -4
  4. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_serialization.py +43 -23
  5. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6/src/iris_pex_embedded_python.egg-info}/PKG-INFO +1 -1
  6. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/LICENSE +0 -0
  7. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/README.md +0 -0
  8. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/setup.cfg +0 -0
  9. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/setup.py +0 -0
  10. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/__init__.py +0 -0
  11. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
  12. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
  13. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
  14. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
  15. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
  16. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
  17. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
  18. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
  19. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
  20. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
  21. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
  22. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
  23. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
  24. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
  25. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
  26. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
  27. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
  28. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
  29. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
  30. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
  31. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/__init__.py +0 -0
  32. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/__main__.py +0 -0
  33. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/_business_host.py +0 -0
  34. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/_cli.py +0 -0
  35. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/_common.py +0 -0
  36. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/_director.py +0 -0
  37. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/_utils.py +0 -0
  38. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/grongier/pex/wsgi/handlers.py +0 -0
  39. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/__init__.py +0 -0
  40. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/__main__.py +0 -0
  41. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_async_request.py +0 -0
  42. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_business_host.py +0 -0
  43. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_business_operation.py +0 -0
  44. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_business_process.py +0 -0
  45. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_business_service.py +0 -0
  46. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_cli.py +0 -0
  47. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_common.py +0 -0
  48. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_debugpy.py +0 -0
  49. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_decorators.py +0 -0
  50. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_director.py +0 -0
  51. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_dispatch.py +0 -0
  52. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_generator_request.py +0 -0
  53. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_inbound_adapter.py +0 -0
  54. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_iris.py +0 -0
  55. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_log_manager.py +0 -0
  56. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_message_validator.py +0 -0
  57. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_outbound_adapter.py +0 -0
  58. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_private_session_duplex.py +0 -0
  59. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_private_session_process.py +0 -0
  60. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/_utils.py +0 -0
  61. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
  62. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
  63. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/BusinessService.cls +0 -0
  64. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Common.cls +0 -0
  65. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Director.cls +0 -0
  66. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
  67. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
  68. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
  69. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Generator/Message/Ack.cls +0 -0
  70. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Generator/Message/Poll.cls +0 -0
  71. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Generator/Message/Start.cls +0 -0
  72. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Generator/Message/StartPickle.cls +0 -0
  73. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Generator/Message/Stop.cls +0 -0
  74. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
  75. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Message/JSONSchema.cls +0 -0
  76. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Message.cls +0 -0
  77. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
  78. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PickleMessage.cls +0 -0
  79. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
  80. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
  81. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
  82. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
  83. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
  84. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
  85. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Test.cls +0 -0
  86. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/cls/IOP/Utils.cls +0 -0
  87. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iop/wsgi/handlers.py +0 -0
  88. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -0
  89. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
  90. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
  91. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
  92. {iris_pex_embedded_python-3.5.0b5 → iris_pex_embedded_python-3.5.0b6}/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.0b5
3
+ Version: 3.5.0b6
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.0b5"
6
+ version = "3.5.0b6"
7
7
  description = "Iris Interoperability based on Embedded Python"
8
8
  readme = "README.md"
9
9
  authors = [
@@ -1,4 +1,4 @@
1
- from typing import Any
1
+ from typing import Any, Optional
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
@@ -7,7 +7,11 @@ class _Message:
7
7
  This class has no properties or methods. Users subclass Message and add properties.
8
8
  The IOP framework provides the persistence to objects derived from the Message class.
9
9
  """
10
- pass
10
+ _iris_id: Optional[str] = None
11
+
12
+ def get_iris_id(self) -> Optional[str]:
13
+ """Get the IRIS ID of the message."""
14
+ return self._iris_id
11
15
 
12
16
  class _PickleMessage(_Message):
13
17
  """ The abstract class that is the superclass for persistent messages sent from one component to another.
@@ -19,12 +23,18 @@ class _PickleMessage(_Message):
19
23
  class _PydanticMessage(BaseModel):
20
24
  """Base class for Pydantic-based messages that can be serialized to IRIS."""
21
25
 
26
+ _iris_id: Optional[str] = None
27
+
22
28
  def __init__(self, **data: Any):
23
29
  super().__init__(**data)
24
30
 
25
- class _PydanticPickleMessage(BaseModel):
31
+ def get_iris_id(self) -> Optional[str]:
32
+ """Get the IRIS ID of the message."""
33
+ return self._iris_id
34
+
35
+ class _PydanticPickleMessage(_PydanticMessage):
26
36
  """Base class for Pydantic-based messages that can be serialized to IRIS."""
27
-
37
+
28
38
  def __init__(self, **data: Any):
29
39
  super().__init__(**data)
30
40
 
@@ -26,19 +26,10 @@ class TempPydanticModel(BaseModel):
26
26
  class MessageSerializer:
27
27
  """Handles message serialization and deserialization."""
28
28
 
29
- @staticmethod
30
- def _convert_to_json_safe(obj: Any) -> Any:
31
- """Convert objects to JSON-safe format."""
32
- if isinstance(obj, BaseModel):
33
- return obj.model_dump_json()
34
- elif is_dataclass(obj) and isinstance(obj, _Message):
35
- return TempPydanticModel.model_validate(dataclass_to_dict(obj)).model_dump_json()
36
- else:
37
- raise SerializationError(f"Object {obj} must be a Pydantic model or dataclass Message")
38
-
39
29
  @staticmethod
40
30
  def serialize(message: Any, use_pickle: bool = False, is_generator:bool = False) -> Any:
41
31
  """Serializes a message to IRIS format."""
32
+ message = remove_iris_id(message)
42
33
  if use_pickle:
43
34
  return MessageSerializer._serialize_pickle(message, is_generator)
44
35
  return MessageSerializer._serialize_json(message, is_generator)
@@ -58,12 +49,34 @@ class MessageSerializer:
58
49
  else:
59
50
  msg.json = json_string
60
51
  return msg
52
+
53
+ @staticmethod
54
+ def _serialize_pickle(message: Any, is_generator: bool = False) -> Any:
55
+ """Serializes a message to IRIS format using pickle."""
56
+ message = remove_iris_id(message)
57
+ pickle_string = codecs.encode(pickle.dumps(message), "base64").decode()
58
+ if is_generator:
59
+ msg = _iris.get_iris().cls('IOP.Generator.Message.StartPickle')._New()
60
+ else:
61
+ msg = _iris.get_iris().cls('IOP.PickleMessage')._New()
62
+ msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
63
+ msg.jstr = _Utils.string_to_stream(pickle_string)
64
+ return msg
61
65
 
62
66
  @staticmethod
63
67
  def deserialize(serial: Any, use_pickle: bool = False) -> Any:
64
68
  if use_pickle:
65
- return MessageSerializer._deserialize_pickle(serial)
66
- return MessageSerializer._deserialize_json(serial)
69
+ msg=MessageSerializer._deserialize_pickle(serial)
70
+ else:
71
+ msg=MessageSerializer._deserialize_json(serial)
72
+
73
+ try:
74
+ iris_id = serial._Id()
75
+ msg._iris_id = iris_id if iris_id else None
76
+ except Exception as e:
77
+ pass
78
+
79
+ return msg
67
80
 
68
81
  @staticmethod
69
82
  def _deserialize_json(serial: Any) -> Any:
@@ -90,17 +103,6 @@ class MessageSerializer:
90
103
  except Exception as e:
91
104
  raise SerializationError(f"Failed to deserialize JSON: {str(e)}")
92
105
 
93
- @staticmethod
94
- def _serialize_pickle(message: Any, is_generator: bool = False) -> Any:
95
- pickle_string = codecs.encode(pickle.dumps(message), "base64").decode()
96
- if is_generator:
97
- msg = _iris.get_iris().cls('IOP.Generator.Message.StartPickle')._New()
98
- else:
99
- msg = _iris.get_iris().cls('IOP.PickleMessage')._New()
100
- msg.classname = f"{message.__class__.__module__}.{message.__class__.__name__}"
101
- msg.jstr = _Utils.string_to_stream(pickle_string)
102
- return msg
103
-
104
106
  @staticmethod
105
107
  def _deserialize_pickle(serial: Any) -> Any:
106
108
  string = _Utils.stream_to_string(serial.jstr)
@@ -112,6 +114,24 @@ class MessageSerializer:
112
114
  if j <= 0:
113
115
  raise SerializationError(f"Classname must include a module: {classname}")
114
116
  return classname[:j], classname[j+1:]
117
+
118
+ @staticmethod
119
+ def _convert_to_json_safe(obj: Any) -> Any:
120
+ """Convert objects to JSON-safe format."""
121
+ if isinstance(obj, BaseModel):
122
+ return obj.model_dump_json()
123
+ elif is_dataclass(obj) and isinstance(obj, _Message):
124
+ return TempPydanticModel.model_validate(dataclass_to_dict(obj)).model_dump_json()
125
+ else:
126
+ raise SerializationError(f"Object {obj} must be a Pydantic model or dataclass Message")
127
+
128
+
129
+ def remove_iris_id(message: Any) -> Any:
130
+ try:
131
+ del message._iris_id
132
+ except AttributeError:
133
+ pass
134
+ return message
115
135
 
116
136
  def dataclass_from_dict(klass: Type | Any, dikt: Dict) -> Any:
117
137
  """Converts a dictionary to a dataclass instance.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris_pex_embedded_python
3
- Version: 3.5.0b5
3
+ Version: 3.5.0b6
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License