jetstream-api 0.27.1__tar.gz → 0.28.0__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.
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/PKG-INFO +15 -1
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/README.md +14 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/__init__.py +1 -1
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/admin.py +5 -1
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/common.py +4 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/properties.py +40 -9
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/jetstream_api.egg-info/PKG-INFO +15 -1
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/pyproject.toml +1 -1
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/LICENSE.txt +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_codec.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_consumer.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_groupwire.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_propv2.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_qleader.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/_throttle.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/admintopic.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/connectivity.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/exception.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/msg.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/partitioner.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/pattern.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/producer.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/py.typed +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/qmgr.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/topic.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/ilink/util.py +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/jetstream_api.egg-info/SOURCES.txt +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/jetstream_api.egg-info/dependency_links.txt +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/jetstream_api.egg-info/requires.txt +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/jetstream_api.egg-info/top_level.txt +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/setup.cfg +0 -0
- {jetstream_api-0.27.1 → jetstream_api-0.28.0}/tests/test_example.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jetstream-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.28.0
|
|
4
4
|
Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
|
|
5
5
|
Author: snowjeans
|
|
6
6
|
License: Boost Software License - Version 1.0 - August 17th, 2003
|
|
@@ -60,6 +60,20 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
|
|
|
60
60
|
## 설치 방법
|
|
61
61
|
pip install jetstream-api
|
|
62
62
|
|
|
63
|
+
## 0.28.0 변경 - IBMMQ 채널 MQ 인증 · 채널 사유(REASON) · 입력값 오류 표시 (자바 v2.24.0 와 같음, 짝 엔진 7.0.1.3638 이상)
|
|
64
|
+
|
|
65
|
+
- 새 칸: IBMMQ 채널 MQ CONNAUTH ``mqUser`` · ``mqPassword`` (엔진 7.0.1.3638 이상). 둘은 한 쌍이다(한쪽만 있으면 엔진이 ``MIMQE_INVALID_PROPERTY``,
|
|
66
|
+
걷으려면 둘 다 ``""``). ``mqPassword`` 는 비밀 칸이다 - 조회하면 ``"*****"`` (없으면 ``""``), ``"*****"`` 를 되보내면 그대로 유지, ``""`` 는 지우기,
|
|
67
|
+
``"{ARIA}<hex>"`` 는 봉인값으로 받는다. 클라는 비밀번호 길이를 검사하지 않고 사람이 읽는 요약에 찍지 않는다. 빈 인증 칸은 CREATE 에 싣지 않는다.
|
|
68
|
+
- 새 칸: 채널 읽기 전용 ``reason`` (엔진 7.0.1.3637 이상, 최대 69자) - ERROR · STOPPED 가 된 사유(``"stopped by ..."`` · MQ cc/rc · ``"follower node"``).
|
|
69
|
+
RUNNING · STARTING 이면 빈칸이다. MQ 인증 실패는 ``MQCONNX failed cc=2 rc=2035 (auth: ...)`` 로 보인다.
|
|
70
|
+
- 채널 목록(``getChannelList``)은 ``REASON`` 을 7.0.1.3637 이상, 인증 칸을 7.0.1.3638 이상 엔진에만 묻는다(``ILC.CHANNEL_REASON_MIN_REVISION`` · ``ILC.IBMMQ_AUTH_MIN_REVISION``).
|
|
71
|
+
- IBMMQ 채널 흐름(엔진 7.0.1.3634 이상): START 가 실제 MQ 흐름을 띄운다(3633 · MQ SDK 없이 지은 엔진은 ``MIMQE_UNSUPPORTED``).
|
|
72
|
+
START 를 받아들인 뒤의 MQ 연결 실패는 채널 ERROR + 엔진 자동 재시도, STOP 은 1초 안에 STOPPED, MsgId · CorrelId 는 24바이트 <-> base64url 32자.
|
|
73
|
+
클러스터 팔로워의 IBMMQ 채널은 START 해도 STANDBY 로 남는다(REASON ``"follower node"``).
|
|
74
|
+
- 고침: 보내기 전에 막는 열거 코드 오류(ACL ``type`` · 큐 관리자 ACLTYPE/STARTMODE · 서비스 TYPE/ACLTYPE · 로그 레벨 0~7 밖)가
|
|
75
|
+
``MIMQC_FATAL_ERROR (MIMQE_INTERNAL_ERROR)`` 로 감싸여 보였다 - 이제 ``UnsupportedOperationException`` (``[v] is an unacceptable value. ...``) 그대로다.
|
|
76
|
+
|
|
63
77
|
## 0.27.1 변경 - 기동 · 정지 중 큐 관리자 조회 (자바 v2.23.1 와 같음, 짝 엔진 7.0.1.3633 이상)
|
|
64
78
|
|
|
65
79
|
0.27.0 은 시험 판(test.pypi)만 내고 버렸다 - 회귀에서 아래 결함이 나왔다.
|
|
@@ -10,6 +10,20 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
|
|
|
10
10
|
## 설치 방법
|
|
11
11
|
pip install jetstream-api
|
|
12
12
|
|
|
13
|
+
## 0.28.0 변경 - IBMMQ 채널 MQ 인증 · 채널 사유(REASON) · 입력값 오류 표시 (자바 v2.24.0 와 같음, 짝 엔진 7.0.1.3638 이상)
|
|
14
|
+
|
|
15
|
+
- 새 칸: IBMMQ 채널 MQ CONNAUTH ``mqUser`` · ``mqPassword`` (엔진 7.0.1.3638 이상). 둘은 한 쌍이다(한쪽만 있으면 엔진이 ``MIMQE_INVALID_PROPERTY``,
|
|
16
|
+
걷으려면 둘 다 ``""``). ``mqPassword`` 는 비밀 칸이다 - 조회하면 ``"*****"`` (없으면 ``""``), ``"*****"`` 를 되보내면 그대로 유지, ``""`` 는 지우기,
|
|
17
|
+
``"{ARIA}<hex>"`` 는 봉인값으로 받는다. 클라는 비밀번호 길이를 검사하지 않고 사람이 읽는 요약에 찍지 않는다. 빈 인증 칸은 CREATE 에 싣지 않는다.
|
|
18
|
+
- 새 칸: 채널 읽기 전용 ``reason`` (엔진 7.0.1.3637 이상, 최대 69자) - ERROR · STOPPED 가 된 사유(``"stopped by ..."`` · MQ cc/rc · ``"follower node"``).
|
|
19
|
+
RUNNING · STARTING 이면 빈칸이다. MQ 인증 실패는 ``MQCONNX failed cc=2 rc=2035 (auth: ...)`` 로 보인다.
|
|
20
|
+
- 채널 목록(``getChannelList``)은 ``REASON`` 을 7.0.1.3637 이상, 인증 칸을 7.0.1.3638 이상 엔진에만 묻는다(``ILC.CHANNEL_REASON_MIN_REVISION`` · ``ILC.IBMMQ_AUTH_MIN_REVISION``).
|
|
21
|
+
- IBMMQ 채널 흐름(엔진 7.0.1.3634 이상): START 가 실제 MQ 흐름을 띄운다(3633 · MQ SDK 없이 지은 엔진은 ``MIMQE_UNSUPPORTED``).
|
|
22
|
+
START 를 받아들인 뒤의 MQ 연결 실패는 채널 ERROR + 엔진 자동 재시도, STOP 은 1초 안에 STOPPED, MsgId · CorrelId 는 24바이트 <-> base64url 32자.
|
|
23
|
+
클러스터 팔로워의 IBMMQ 채널은 START 해도 STANDBY 로 남는다(REASON ``"follower node"``).
|
|
24
|
+
- 고침: 보내기 전에 막는 열거 코드 오류(ACL ``type`` · 큐 관리자 ACLTYPE/STARTMODE · 서비스 TYPE/ACLTYPE · 로그 레벨 0~7 밖)가
|
|
25
|
+
``MIMQC_FATAL_ERROR (MIMQE_INTERNAL_ERROR)`` 로 감싸여 보였다 - 이제 ``UnsupportedOperationException`` (``[v] is an unacceptable value. ...``) 그대로다.
|
|
26
|
+
|
|
13
27
|
## 0.27.1 변경 - 기동 · 정지 중 큐 관리자 조회 (자바 v2.23.1 와 같음, 짝 엔진 7.0.1.3633 이상)
|
|
14
28
|
|
|
15
29
|
0.27.0 은 시험 판(test.pypi)만 내고 버렸다 - 회귀에서 아래 결함이 나왔다.
|
|
@@ -5665,7 +5665,7 @@ class ILAdminQmgr:
|
|
|
5665
5665
|
#: LIST 로 전체 속성을 받을 때의 _KEYS(설정 키 + 읽기 전용 + 목적지 그룹). IBMMQ 전용 키는 IBMMQ 를 아는 엔진에만 묻는다
|
|
5666
5666
|
#: (모르는 엔진은 "_KEYS[i]" unknown 으로 무시하고 클라가 호출마다 경고를 남기게 된다)
|
|
5667
5667
|
_CHANNEL_LIST_KEYS = [k for k, _ in ILChannelProperty._PV2_KEYS.values() if k not in ILChannelProperty._PV2_MQ_KEYS] + ["STATUS", "RTT", "DESTGROUP"]
|
|
5668
|
-
_CHANNEL_LIST_KEYS_MQ = _CHANNEL_LIST_KEYS +
|
|
5668
|
+
_CHANNEL_LIST_KEYS_MQ = _CHANNEL_LIST_KEYS + [k for k in ILChannelProperty._PV2_MQ_KEYS if k not in ILChannelProperty._PV2_MQ_AUTH_KEYS]
|
|
5669
5669
|
#: 요약 목록의 _KEYS(요약 클래스의 칸)
|
|
5670
5670
|
_CHANNEL_MINOR_KEYS = ["TYPE", "DIRECTION", "STATUS", "STARTMODE"]
|
|
5671
5671
|
|
|
@@ -5681,6 +5681,10 @@ class ILAdminQmgr:
|
|
|
5681
5681
|
def _channelListV2(self, ctype=None, direction=None) -> list:
|
|
5682
5682
|
# 종류 · 방향 거르기는 클라가 한다(옛 3016 arg "CLIENT.SEND" 의 엔진 거르기와 같은 결과)
|
|
5683
5683
|
keys = ILAdminQmgr._CHANNEL_LIST_KEYS_MQ if self.revision >= ILC.IBMMQ_CHANNEL_MIN_REVISION else ILAdminQmgr._CHANNEL_LIST_KEYS
|
|
5684
|
+
if self.revision >= ILC.CHANNEL_REASON_MIN_REVISION:
|
|
5685
|
+
keys = keys + ["REASON"]
|
|
5686
|
+
if self.revision >= ILC.IBMMQ_AUTH_MIN_REVISION:
|
|
5687
|
+
keys = keys + list(ILChannelProperty._PV2_MQ_AUTH_KEYS)
|
|
5684
5688
|
cs = self._channelItems(self._channelReq(_propv2.PROP_LIST, {"_KEYS": keys}))
|
|
5685
5689
|
return [c for c in cs if (ctype is None or c.type == ctype) and (direction is None or c.direction == direction)]
|
|
5686
5690
|
|
|
@@ -888,6 +888,10 @@ class ILC:
|
|
|
888
888
|
TOPIC_LOGGER_MIN_REVISION = 3283
|
|
889
889
|
#: IBMMQ 채널(TYPE IBMMQ · MQ 전용 키)을 아는 엔진 리비전(다음 판, 엔진 590 CHLMQ-1, 7.0.1.3633). 이보다 낮으면 채널 LIST 에 MQ 키를 묻지 않는다.
|
|
890
890
|
IBMMQ_CHANNEL_MIN_REVISION = 3633
|
|
891
|
+
#: 채널 읽기 전용 REASON 을 아는 엔진 리비전(다음 판, 엔진 594 CHLREASON-1, 7.0.1.3637). 이보다 낮으면 채널 LIST 에 REASON 을 묻지 않는다.
|
|
892
|
+
CHANNEL_REASON_MIN_REVISION = 3637
|
|
893
|
+
#: IBMMQ 채널 MQ CONNAUTH 칸(MQUSER · MQPASSWORD)을 아는 엔진 리비전(다음 판, 엔진 599 CHLMQAUTH-1, 7.0.1.3638). 이보다 낮으면 채널 LIST 에 묻지 않는다.
|
|
894
|
+
IBMMQ_AUTH_MIN_REVISION = 3638
|
|
891
895
|
|
|
892
896
|
#: ``getLastDiag`` 가 쓰는 진단 조회(3394)가 들어온 엔진 리비전.
|
|
893
897
|
#: 그 미만 엔진은 이 코드를 모르고 ``MIMQE_INVALID_REQ_CODE`` 를
|
|
@@ -1366,6 +1366,11 @@ class ILChannelType(IntEnum):
|
|
|
1366
1366
|
SERVER: 상대의 접속을 **받는** 채널.
|
|
1367
1367
|
IBMMQ: IBM MQ 와 주고받는 채널(다음 판, 엔진 7). 받기(RECV)는 클러스터 리더에서만 일하고 팔로워에서는
|
|
1368
1368
|
:attr:`ILChannelStatus.STANDBY` 로 대기한다. 이 값을 모르는 옛 클라는 IBMMQ 채널이 섞인 조회 · 목록 자체가 실패한다.
|
|
1369
|
+
흐름(START)은 엔진 7.0.1.3634 이상에서 돈다(3633 은 START 가 MIMQE_UNSUPPORTED, 와이어는 같다).
|
|
1370
|
+
MQ SDK 없이 지은 엔진도 START 가 MIMQE_UNSUPPORTED (... IBMMQ support is not built into this engine ...) 다.
|
|
1371
|
+
START 를 받아들인 뒤의 MQ 연결 실패는 채널 ERROR 상태가 되고(사유는 큐 관리자 로그),
|
|
1372
|
+
CHANNELRETRYINTERVAL 마다 엔진이 다시 붙는다. STOP 은 1초 안에 STOPPED 가 된다.
|
|
1373
|
+
MsgId · CorrelId: MQ 의 24바이트는 base64url 32자로 바뀌어 들어오고, MQ 로 보낼 때 32자 모양이면 원래 24바이트로 되살린다.
|
|
1369
1374
|
"""
|
|
1370
1375
|
|
|
1371
1376
|
SERVER = 0
|
|
@@ -1667,6 +1672,9 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1667
1672
|
스펙: 기본 30 · 범위 -1 또는 1~2147483647 · 단위 초 · 변경 가능/재기동 불필요.
|
|
1668
1673
|
rtt (int): **읽기 전용** 왕복 지연(밀리초). 측정 전이면 ``-1``.
|
|
1669
1674
|
스펙: 기본 -1 · 범위 -1~2147483647 (-1=미측정) · 단위 밀리초 · 변경 불가(ReadOnly).
|
|
1675
|
+
reason (str): **읽기 전용** 채널이 ERROR · STOPPED 가 된 사유(다음 판, 엔진 7.0.1.3637 이상의 JSON 에서만, 최대 69자).
|
|
1676
|
+
예: ``"stopped by <누구>"`` · MQ cc/rc · ``"follower node"`` (클러스터 팔로워의 IBMMQ 채널은 START 해도 STANDBY 로 남는다).
|
|
1677
|
+
RUNNING · STARTING 이 되면 엔진이 비운다. 블롭(6.x)과 그 전 엔진에서는 늘 ``""``.
|
|
1670
1678
|
traceEnabled (bool): 이 채널의 트레이스 여부. 기본 False.
|
|
1671
1679
|
스펙: 기본 OFF · 범위 ON | OFF · 변경 가능/재기동 불필요.
|
|
1672
1680
|
security (ILChannelSecurity): 보안 방식. 기본 ``NONE``.
|
|
@@ -1684,6 +1692,13 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1684
1692
|
mqQueue (str): **IBMMQ 전용** MQ 쪽 큐(RECV 일 때 필수). 48바이트 이하.
|
|
1685
1693
|
ilQueue (str): **IBMMQ 전용** ILink 쪽 큐(RECV 일 때 필수). 47바이트 이하.
|
|
1686
1694
|
batchSize (int): **IBMMQ 전용** 한 번에 옮길 메시지 수. 기본 10 · 범위 1~1000(판정은 엔진).
|
|
1695
|
+
mqUser (str): **IBMMQ 전용** MQ CONNAUTH 사용자(MQCSP, 다음 판, 엔진 7.0.1.3638 이상). 255바이트 이하. 기본 ``""`` (인증 안 함).
|
|
1696
|
+
``mqPassword`` 와 한 쌍이다 - 한쪽만 있으면 엔진이 MIMQE_INVALID_PROPERTY 로 거절한다. 인증을 걷으려면 둘 다 ``""`` 로 보낸다.
|
|
1697
|
+
mqPassword (str): **IBMMQ 전용 · 비밀** MQ CONNAUTH 비밀번호(다음 판, 엔진 7.0.1.3638 이상). 평문 256바이트 이하(판정은 엔진).
|
|
1698
|
+
쓰기 전용처럼 다룬다 - 엔진이 봉인해 저장하고, 조회하면 값이 있을 때 ``"*****"``, 없으면 ``""`` 다.
|
|
1699
|
+
``"*****"`` 를 보내면 기존 값 유지(조회한 객체를 그대로 되보내도 지워지지 않는다), ``""`` 는 지운다,
|
|
1700
|
+
``"{ARIA}<대문자 hex>"`` 는 봉인값으로 그대로 받는다. :meth:`__str__` 에는 나오지 않는다.
|
|
1701
|
+
인증 실패(MQ 2035)는 :attr:`reason` 에 ``MQCONNX failed cc=2 rc=2035 (auth: ...)`` 로 보인다.
|
|
1687
1702
|
IBMMQ 채널은 엔진 7 JSON 으로만 만들고 바꾼다(블롭은 거절). 보안은 NONE 만, 포트는 1~65535(MQ 기본 1414),
|
|
1688
1703
|
목적지 그룹 · balanceMode 는 쓰지 않는다(엔진이 무시한다).
|
|
1689
1704
|
destGroup (list[DestItem]): 분산 대상 목록. 비어 있으면 단일 대상 채널이다.
|
|
@@ -1700,7 +1715,7 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1700
1715
|
#: 다음 판 Property v2(엔진 P4, 설계 §15 · 덤프 tests/vectors/propv2_channel_table.json): ``{필드: (와이어 키, 종류)}``.
|
|
1701
1716
|
#: 종류 ``CHTYPE`` · ``CHDIR`` · ``CHSEC`` · ``CHBAL`` · ``STARTMODE`` 는 와이어 문자열로 바꿔 싣는다(:data:`_CHANNEL_ENUMS`).
|
|
1702
1717
|
#: 목적지 그룹(``DESTGROUP``)은 표에 없다 - 목록을 제자리에서 고치므로(add_dest) 읽은 사본과 대조해 다르면 통째로 싣는다.
|
|
1703
|
-
#: ``status`` · ``rtt``
|
|
1718
|
+
#: ``status`` · ``rtt`` · ``reason`` 은 읽기 전용이라 표에 없다(보내지 않는다 - 엔진이 READONLY 로 거절한다).
|
|
1704
1719
|
_PV2_KEYS = {
|
|
1705
1720
|
"type": ("TYPE", "CHTYPE"),
|
|
1706
1721
|
"direction": ("DIRECTION", "CHDIR"),
|
|
@@ -1722,9 +1737,14 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1722
1737
|
"mqQueue": ("MQQUEUE", "STR"),
|
|
1723
1738
|
"ilQueue": ("ILQUEUE", "STR"),
|
|
1724
1739
|
"batchSize": ("BATCHSIZE", "INT"),
|
|
1740
|
+
# 다음 판: MQ CONNAUTH(엔진 599 CHLMQAUTH-1, 7.0.1.3638) - 한 쌍, 비밀번호는 비밀 칸
|
|
1741
|
+
"mqUser": ("MQUSER", "STR"),
|
|
1742
|
+
"mqPassword": ("MQPASSWORD", "STR"),
|
|
1725
1743
|
}
|
|
1726
1744
|
#: IBMMQ 전용 칸(와이어 키). 다른 종류 채널의 CREATE · ALTER 본문에는 싣지 않는다(엔진이 "ibmmq-only" 로 무시한다).
|
|
1727
|
-
_PV2_MQ_KEYS = ("MQCHL", "MODE", "MQINSTALLPATH", "MQQUEUE", "ILQUEUE", "BATCHSIZE")
|
|
1745
|
+
_PV2_MQ_KEYS = ("MQCHL", "MODE", "MQINSTALLPATH", "MQQUEUE", "ILQUEUE", "BATCHSIZE", "MQUSER", "MQPASSWORD")
|
|
1746
|
+
#: 그중 MQ CONNAUTH 칸(엔진 7.0.1.3638 부터). CREATE 에는 빈칸이면 싣지 않는다 - 그 전 IBMMQ 엔진에서도 만들기가 그대로 된다.
|
|
1747
|
+
_PV2_MQ_AUTH_KEYS = ("MQUSER", "MQPASSWORD")
|
|
1728
1748
|
|
|
1729
1749
|
#: 열거 <-> 와이어 문자열(엔진 기술표의 ilsc 표기). IBMMQ 는 엔진 IBMMQ 판(590, 7.0.1.3633)부터 와이어에 있다.
|
|
1730
1750
|
_CHANNEL_ENUMS = {
|
|
@@ -1784,6 +1804,9 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1784
1804
|
rtt = _propv2.take(obj, "RTT", "INT")
|
|
1785
1805
|
if rtt is not None:
|
|
1786
1806
|
object.__setattr__(self, "rtt", rtt)
|
|
1807
|
+
reason = _propv2.take(obj, "REASON", "STR") # 다음 판: 엔진 594 CHLREASON-1(7.0.1.3637)
|
|
1808
|
+
if reason is not None:
|
|
1809
|
+
object.__setattr__(self, "reason", reason)
|
|
1787
1810
|
if "DESTGROUP" in obj:
|
|
1788
1811
|
arr = obj["DESTGROUP"]
|
|
1789
1812
|
if not isinstance(arr, list) or any(not isinstance(e, dict) for e in arr):
|
|
@@ -1837,6 +1860,9 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1837
1860
|
def _pv2_create_body(self) -> dict:
|
|
1838
1861
|
"""CREATE 본문(``NAME`` + 설정 칸 전부 + 목적지 그룹)을 만든다. **라이브러리 내부용이다.**"""
|
|
1839
1862
|
body = dict({"NAME": self.name}, **self._pv2_channel_body(type(self)._PV2_KEYS))
|
|
1863
|
+
for k in type(self)._PV2_MQ_AUTH_KEYS:
|
|
1864
|
+
if body.get(k) == "":
|
|
1865
|
+
del body[k] # 인증 안 함 = 엔진 기본값 - 3638 전 엔진에 모르는 키를 보내지 않는다
|
|
1840
1866
|
body["DESTGROUP"] = self._pv2_dest_body()
|
|
1841
1867
|
return body
|
|
1842
1868
|
|
|
@@ -1867,6 +1893,8 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1867
1893
|
"mqInstallPath": _spec_maxlen(255),
|
|
1868
1894
|
"mqQueue": _spec_maxlen(48),
|
|
1869
1895
|
"ilQueue": _spec_maxlen(47),
|
|
1896
|
+
"mqUser": _spec_maxlen(255),
|
|
1897
|
+
# mqPassword 는 길이를 검사하지 않는다 - 평문 상한(256)은 엔진이 판정하고, 봉인값 "{ARIA}<hex>" 은 그보다 길다
|
|
1870
1898
|
}
|
|
1871
1899
|
|
|
1872
1900
|
def __init__(
|
|
@@ -1901,6 +1929,7 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1901
1929
|
self.certFileName = ""
|
|
1902
1930
|
self.timeout = 30
|
|
1903
1931
|
self.rtt = -1
|
|
1932
|
+
self.reason = ""
|
|
1904
1933
|
self.traceEnabled = False
|
|
1905
1934
|
self.balanceMode = ILChannelBalanceMode.ROUND_ROBIN
|
|
1906
1935
|
self.mqChannel = "SYSTEM.DEF.SVRCONN"
|
|
@@ -1909,6 +1938,8 @@ class ILChannelProperty(_AutoAccessor):
|
|
|
1909
1938
|
self.mqQueue = ""
|
|
1910
1939
|
self.ilQueue = ""
|
|
1911
1940
|
self.batchSize = 10
|
|
1941
|
+
self.mqUser = ""
|
|
1942
|
+
self.mqPassword = ""
|
|
1912
1943
|
self.destGroupBufferLength = 0
|
|
1913
1944
|
self.destGroup: List[DestItem] = []
|
|
1914
1945
|
|
|
@@ -2341,7 +2372,7 @@ class _PV2LoggerMixin:
|
|
|
2341
2372
|
기준은 마지막으로 읽은(또는 보낸) 값이고, 읽은 적이 없으면 기본값이다.
|
|
2342
2373
|
|
|
2343
2374
|
Raises:
|
|
2344
|
-
|
|
2375
|
+
UnsupportedOperationException: 레벨 칸에 0~7 밖의 코드가 있을 때.
|
|
2345
2376
|
"""
|
|
2346
2377
|
from . import _propv2
|
|
2347
2378
|
cls = type(self)
|
|
@@ -2352,7 +2383,7 @@ class _PV2LoggerMixin:
|
|
|
2352
2383
|
body = {}
|
|
2353
2384
|
if now[0] != was[0]:
|
|
2354
2385
|
if not (isinstance(now[0], int) and 0 <= now[0] < len(cls._PV2_LOG_LEVELS)):
|
|
2355
|
-
raise
|
|
2386
|
+
raise UnsupportedOperationException("[%r] is an unacceptable value. (acceptable value range: LEVEL 0~7)" % (now[0],))
|
|
2356
2387
|
body["LEVEL"] = cls._PV2_LOG_LEVELS[now[0]]
|
|
2357
2388
|
if now[1] != was[1]:
|
|
2358
2389
|
body["FILESIZE"] = int(now[1])
|
|
@@ -2476,12 +2507,12 @@ class ILAccessRuleProperty(_AutoAccessor):
|
|
|
2476
2507
|
"""CREATE 본문(``_TYPE`` 없음)을 만든다. **라이브러리 내부용이다.** ID · EFFECTIVE 는 서버가 정하므로 싣지 않는다.
|
|
2477
2508
|
|
|
2478
2509
|
Raises:
|
|
2479
|
-
|
|
2510
|
+
UnsupportedOperationException: 규칙 종류 코드를 와이어 글자로 바꿀 수 없을 때(0 · 1 밖 - 판정이 아니라 인코딩 불가).
|
|
2480
2511
|
"""
|
|
2481
2512
|
from . import _propv2
|
|
2482
2513
|
back = {v: k for k, v in type(self)._ACL_TYPES.items()}
|
|
2483
2514
|
if self.type not in back or isinstance(self.type, bool):
|
|
2484
|
-
raise
|
|
2515
|
+
raise UnsupportedOperationException("[%r] is an unacceptable value. (acceptable value range: TYPE DENY(0) | ALLOW(1))" % (self.type,))
|
|
2485
2516
|
return {"TYPE": back[self.type], "CLIENTIP": str(self.ip or ""), "CLIENTNAME": str(self.clientName or ""),
|
|
2486
2517
|
"CLIENTTYPE": str(self.clientType or "")}
|
|
2487
2518
|
|
|
@@ -3424,7 +3455,7 @@ class ILQmgrProperty(_PV2LoggerMixin, _AutoAccessor):
|
|
|
3424
3455
|
if field == "autoStart":
|
|
3425
3456
|
v = bool(v)
|
|
3426
3457
|
if v not in back:
|
|
3427
|
-
raise
|
|
3458
|
+
raise UnsupportedOperationException("[%r] is an unacceptable value. (acceptable value range: %s %s)" % (getattr(self, field), type(self)._PV2_KEYS[field][0], " | ".join("%s(%s)" % (k, int(v)) for k, v in type(self)._QMGR_ENUMS[field].items())))
|
|
3428
3459
|
return back[v]
|
|
3429
3460
|
|
|
3430
3461
|
def _pv2_patch_body(self) -> dict:
|
|
@@ -4714,7 +4745,7 @@ class ILServiceProperty(_PV2LoggerMixin, _AutoAccessor):
|
|
|
4714
4745
|
"""ALTER 본문(세터로 바꾼 칸만, ``_TYPE`` 없음)을 만든다. **라이브러리 내부용이다.**
|
|
4715
4746
|
|
|
4716
4747
|
Raises:
|
|
4717
|
-
|
|
4748
|
+
UnsupportedOperationException: 열거 칸에 모르는 정수 코드가 있을 때.
|
|
4718
4749
|
"""
|
|
4719
4750
|
from . import _propv2
|
|
4720
4751
|
cls = type(self)
|
|
@@ -4725,7 +4756,7 @@ class ILServiceProperty(_PV2LoggerMixin, _AutoAccessor):
|
|
|
4725
4756
|
if field in dirty:
|
|
4726
4757
|
back = {code: name for name, code in cls._SERVICE_ENUMS[field].items()}
|
|
4727
4758
|
if getattr(self, field) not in back:
|
|
4728
|
-
raise
|
|
4759
|
+
raise UnsupportedOperationException("[%r] is an unacceptable value. (acceptable value range: %s %s)" % (getattr(self, field), key, " | ".join("%s(%d)" % (n, c) for n, c in cls._SERVICE_ENUMS[field].items())))
|
|
4729
4760
|
out[key] = back[getattr(self, field)]
|
|
4730
4761
|
return {k: out[k] for _, (k, _) in cls._PV2_KEYS.items() if k in out} # 표 순서
|
|
4731
4762
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jetstream-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.28.0
|
|
4
4
|
Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
|
|
5
5
|
Author: snowjeans
|
|
6
6
|
License: Boost Software License - Version 1.0 - August 17th, 2003
|
|
@@ -60,6 +60,20 @@ lz4 배치 압축을 쓰려면 `pip install "jetstream-api[lz4]"`, zstd 배치
|
|
|
60
60
|
## 설치 방법
|
|
61
61
|
pip install jetstream-api
|
|
62
62
|
|
|
63
|
+
## 0.28.0 변경 - IBMMQ 채널 MQ 인증 · 채널 사유(REASON) · 입력값 오류 표시 (자바 v2.24.0 와 같음, 짝 엔진 7.0.1.3638 이상)
|
|
64
|
+
|
|
65
|
+
- 새 칸: IBMMQ 채널 MQ CONNAUTH ``mqUser`` · ``mqPassword`` (엔진 7.0.1.3638 이상). 둘은 한 쌍이다(한쪽만 있으면 엔진이 ``MIMQE_INVALID_PROPERTY``,
|
|
66
|
+
걷으려면 둘 다 ``""``). ``mqPassword`` 는 비밀 칸이다 - 조회하면 ``"*****"`` (없으면 ``""``), ``"*****"`` 를 되보내면 그대로 유지, ``""`` 는 지우기,
|
|
67
|
+
``"{ARIA}<hex>"`` 는 봉인값으로 받는다. 클라는 비밀번호 길이를 검사하지 않고 사람이 읽는 요약에 찍지 않는다. 빈 인증 칸은 CREATE 에 싣지 않는다.
|
|
68
|
+
- 새 칸: 채널 읽기 전용 ``reason`` (엔진 7.0.1.3637 이상, 최대 69자) - ERROR · STOPPED 가 된 사유(``"stopped by ..."`` · MQ cc/rc · ``"follower node"``).
|
|
69
|
+
RUNNING · STARTING 이면 빈칸이다. MQ 인증 실패는 ``MQCONNX failed cc=2 rc=2035 (auth: ...)`` 로 보인다.
|
|
70
|
+
- 채널 목록(``getChannelList``)은 ``REASON`` 을 7.0.1.3637 이상, 인증 칸을 7.0.1.3638 이상 엔진에만 묻는다(``ILC.CHANNEL_REASON_MIN_REVISION`` · ``ILC.IBMMQ_AUTH_MIN_REVISION``).
|
|
71
|
+
- IBMMQ 채널 흐름(엔진 7.0.1.3634 이상): START 가 실제 MQ 흐름을 띄운다(3633 · MQ SDK 없이 지은 엔진은 ``MIMQE_UNSUPPORTED``).
|
|
72
|
+
START 를 받아들인 뒤의 MQ 연결 실패는 채널 ERROR + 엔진 자동 재시도, STOP 은 1초 안에 STOPPED, MsgId · CorrelId 는 24바이트 <-> base64url 32자.
|
|
73
|
+
클러스터 팔로워의 IBMMQ 채널은 START 해도 STANDBY 로 남는다(REASON ``"follower node"``).
|
|
74
|
+
- 고침: 보내기 전에 막는 열거 코드 오류(ACL ``type`` · 큐 관리자 ACLTYPE/STARTMODE · 서비스 TYPE/ACLTYPE · 로그 레벨 0~7 밖)가
|
|
75
|
+
``MIMQC_FATAL_ERROR (MIMQE_INTERNAL_ERROR)`` 로 감싸여 보였다 - 이제 ``UnsupportedOperationException`` (``[v] is an unacceptable value. ...``) 그대로다.
|
|
76
|
+
|
|
63
77
|
## 0.27.1 변경 - 기동 · 정지 중 큐 관리자 조회 (자바 v2.23.1 와 같음, 짝 엔진 7.0.1.3633 이상)
|
|
64
78
|
|
|
65
79
|
0.27.0 은 시험 판(test.pypi)만 내고 버렸다 - 회귀에서 아래 결함이 나왔다.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|