jetstream-api 0.1.5__tar.gz → 0.3.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.
Files changed (32) hide show
  1. jetstream_api-0.3.0/PKG-INFO +235 -0
  2. jetstream_api-0.3.0/README.md +189 -0
  3. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/ilink/__init__.py +94 -90
  4. jetstream_api-0.3.0/ilink/admin.py +5413 -0
  5. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/ilink/common.py +1035 -776
  6. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/ilink/connectivity.py +964 -612
  7. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/ilink/exception.py +151 -1
  8. jetstream_api-0.3.0/ilink/msg.py +2578 -0
  9. jetstream_api-0.3.0/ilink/pattern.py +836 -0
  10. jetstream_api-0.3.0/ilink/producer.py +1142 -0
  11. jetstream_api-0.3.0/ilink/properties.py +3757 -0
  12. jetstream_api-0.3.0/ilink/py.typed +0 -0
  13. jetstream_api-0.3.0/ilink/qmgr.py +1520 -0
  14. jetstream_api-0.3.0/ilink/topic.py +1137 -0
  15. jetstream_api-0.3.0/ilink/util.py +441 -0
  16. jetstream_api-0.3.0/jetstream_api.egg-info/PKG-INFO +235 -0
  17. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/jetstream_api.egg-info/SOURCES.txt +5 -0
  18. jetstream_api-0.3.0/jetstream_api.egg-info/requires.txt +3 -0
  19. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/pyproject.toml +38 -33
  20. jetstream_api-0.1.5/PKG-INFO +0 -56
  21. jetstream_api-0.1.5/README.md +0 -12
  22. jetstream_api-0.1.5/ilink/admin.py +0 -3304
  23. jetstream_api-0.1.5/ilink/msg.py +0 -1241
  24. jetstream_api-0.1.5/ilink/properties.py +0 -1986
  25. jetstream_api-0.1.5/ilink/qmgr.py +0 -1024
  26. jetstream_api-0.1.5/ilink/util.py +0 -212
  27. jetstream_api-0.1.5/jetstream_api.egg-info/PKG-INFO +0 -56
  28. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/LICENSE.txt +0 -0
  29. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/jetstream_api.egg-info/dependency_links.txt +0 -0
  30. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/jetstream_api.egg-info/top_level.txt +0 -0
  31. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/setup.cfg +0 -0
  32. {jetstream_api-0.1.5 → jetstream_api-0.3.0}/tests/test_example.py +0 -0
@@ -0,0 +1,235 @@
1
+ Metadata-Version: 2.4
2
+ Name: jetstream-api
3
+ Version: 0.3.0
4
+ Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
5
+ Author: snowjeans
6
+ License: Boost Software License - Version 1.0 - August 17th, 2003
7
+
8
+ Permission is hereby granted, free of charge, to any person or organization
9
+ obtaining a copy of the software and accompanying documentation covered by
10
+ this license (the "Software") to use, reproduce, display, distribute,
11
+ execute, and transmit the Software, and to prepare derivative works of the
12
+ Software, and to permit third-parties to whom the Software is furnished to
13
+ do so, all subject to the following:
14
+
15
+ The copyright notices in the Software and this entire statement, including
16
+ the above license grant, this restriction and the following disclaimer,
17
+ must be included in all copies of the Software, in whole or in part, and
18
+ all derivative works of the Software, unless such copies or derivative
19
+ works are solely in the form of machine-executable object code generated by
20
+ a source language processor.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
+ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
26
+ FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
27
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28
+ DEALINGS IN THE SOFTWARE.
29
+
30
+ Keywords: ilink,mom,messaging,middleware,queue,jetstream
31
+ Classifier: Programming Language :: Python :: 3
32
+ Classifier: Programming Language :: Python :: 3.9
33
+ Classifier: Programming Language :: Python :: 3.10
34
+ Classifier: Programming Language :: Python :: 3.11
35
+ Classifier: Programming Language :: Python :: 3.12
36
+ Classifier: Programming Language :: Python :: 3.13
37
+ Classifier: License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)
38
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
39
+ Classifier: Topic :: System :: Networking
40
+ Requires-Python: >=3.9
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE.txt
43
+ Provides-Extra: test
44
+ Requires-Dist: docstring_parser>=0.16; extra == "test"
45
+ Dynamic: license-file
46
+
47
+ # jetstream-api
48
+
49
+ Python으로 작성된 ILink 클라이언트 API입니다.
50
+
51
+ ## 시스템 요구 사항
52
+ 시스템에 python 13 이상, pip가 설치되어 있어야 합니다.
53
+
54
+ ## 설치 방법
55
+ pip install jetstream-api
56
+
57
+ ## 0.2.0 신규 - pub/sub 토픽
58
+
59
+ 큐에 더해 **pub/sub 토픽**을 지원합니다. 발행된 메시지는 retention 정책이 지울 때까지 보존되어
60
+ 모든 구독자에게 각자의 커서로 전달됩니다(팬아웃). 큐와 달리 소비해도 사라지지 않습니다.
61
+
62
+ > 엔진 v7.1.1 rev 3265 이상이 필요합니다.
63
+
64
+ ### 구독
65
+
66
+ ```python
67
+ from ilink.qmgr import ILQmgr
68
+ from ilink.topic import ILTopic, ILSubscribeOptions
69
+
70
+ qmgr = ILQmgr()
71
+ qmgr.connect("127.0.0.1", 19999, "order-svc", True)
72
+
73
+ topic = qmgr.access_topic("ORDER.EVENT")
74
+ sub = topic.subscribe("settlement", ILSubscribeOptions()
75
+ .start_mode(ILTopic.START_EARLIEST)
76
+ .commit_mode(ILTopic.COMMIT_MANUAL))
77
+
78
+ for msg in sub.read_batch(100, 3000):
79
+ print(msg.get_offset(), msg.get_key(), msg.get_data_string())
80
+ sub.commit(msg)
81
+ ```
82
+
83
+ 콜백(push)으로 받을 수도 있습니다.
84
+
85
+ ```python
86
+ sub.listen(lambda m: print(m.get_data_string()),
87
+ lambda e: print("error:", e))
88
+ ...
89
+ sub.stop_listening()
90
+ ```
91
+
92
+ ### 발행
93
+
94
+ 발행은 producer 단일 경로입니다. 동기 발행은 `send().get()`을 씁니다.
95
+
96
+ ```python
97
+ from ilink.producer import ILProducerConfig, ILProducerRecord
98
+
99
+ prod = qmgr.create_producer(ILProducerConfig())
100
+ meta = prod.send(ILProducerRecord("ORDER.EVENT", "k1", b"payload",
101
+ properties={"trace-id": "abc"})).get()
102
+ print(meta.get_partition(), meta.get_offset())
103
+ prod.close()
104
+ ```
105
+
106
+ ### 와일드카드(패턴) 구독
107
+
108
+ 패턴에 맞는 여러 토픽을 한꺼번에 구독합니다.
109
+
110
+ ```python
111
+ pat = qmgr.access_pattern("ORDER.*")
112
+ print(pat.resolve()) # 지금 매칭되는 토픽 (구독 안 함)
113
+
114
+ ps = pat.subscribe("audit")
115
+ m = ps.read(3000)
116
+ print(m.get_topic_name(), m.get_data_string())
117
+ ```
118
+
119
+ **`*`는 구분자 `.`를 포함해 매칭합니다.** `ORDER.*`는 `ORDER.KR`뿐 아니라 `ORDER.KR.SUB`도 잡습니다.
120
+ **정규식이 아니라 글로브입니다.** `.`은 리터럴이라 `ORDER.*`는 `ORDERING`을 잡지 않습니다.
121
+
122
+ ### 토픽 관리
123
+
124
+ 토픽 생성/삭제/속성변경은 관리 표면 전용입니다.
125
+
126
+ ```python
127
+ from ilink.admin import ILAdminService
128
+
129
+ svc = ILAdminService(); svc.connect("127.0.0.1", 9998)
130
+ adm = svc.accessAdminQmgr("QMGR1")
131
+ adm.createTopic("ORDER.EVENT", "partitions=3")
132
+ print(adm.getTopicList())
133
+ ```
134
+
135
+ ## 0.2.0 신규 - 클러스터(HA) 페일오버
136
+
137
+ 클러스터 큐 관리자에 접속하면 후보 주소를 캐싱해 두었다가, 리더가 바뀌어도 따라갑니다.
138
+
139
+ ```python
140
+ qmgr.set_auto_reconnect(True) # auto-commit 세션에서만 동작
141
+ print(qmgr.get_cluster_addresses())
142
+ qmgr.reconnect() # 새 리더를 찾아 재접속
143
+ ```
144
+
145
+ > `set_auto_reconnect`는 **transacted 세션에서는 동작하지 않습니다.** 미커밋 트랜잭션이
146
+ > 재접속으로 유실되므로, 예외를 받고 앱이 트랜잭션을 처음부터 재수행해야 합니다
147
+ > (`reconnect()` 직접 호출은 가능합니다). auto-commit 세션도 응답 유실 시점의 재시도로
148
+ > **중복 put이 발생할 수 있습니다.**
149
+
150
+ ## 0.3.0 신규 - 허브-스포크 연결 전환 헬퍼
151
+
152
+ 허브에 접속해 스포크를 찾고 연결을 전환하는 세 단계를 한 번에 처리하는
153
+ `connectToSpoke()`가 추가되었습니다. Java API에도 같은 이름으로 있습니다.
154
+
155
+ ```python
156
+ from ilink.admin import ILAdminService
157
+
158
+ for name in ("S48", "S85"):
159
+ svc = ILAdminService.connectToSpoke("10.10.1.95", 9998, "ADMIN", name)
160
+ try:
161
+ print(name, [q.getName() for q in svc.getQmgrList()])
162
+ finally:
163
+ svc.disconnect()
164
+
165
+ # 키를 이미 알고 있으면 목록 조회를 건너뛴다 (키는 설정 파일에 저장되어 재기동해도 유지)
166
+ svc = ILAdminService.connectToSpokeByKey("10.10.1.95", 9998, "ADMIN", spoke_key)
167
+ ```
168
+
169
+ > 연결 전환 후 그 연결은 **해당 스포크에 직접 접속한 것으로 에뮬레이션**됩니다.
170
+ > 따라서 전환은 연결당 한 번뿐이고, 다른 스포크로 가려면 새 연결이 필요합니다.
171
+ > `connectToSpoke()`가 그 반복을 담당합니다. 실패하면 스스로 연결을 닫으므로
172
+ > 소켓이 새지 않습니다.
173
+
174
+ TCP 연결 방향이 **스포크 → 허브** 한 방향뿐이라 스포크 쪽에 인바운드 포트를 열지 않고도
175
+ 관리할 수 있습니다. 실측상 릴레이 오버헤드는 없었습니다(`getQmgrList()` 중앙값
176
+ 릴레이 18.3ms vs 허브 직결 18.4ms).
177
+
178
+ ## 0.2.1 신규 - Java API 옵션 표면 일치
179
+
180
+ 발행/구독 옵션이 Java API와 **같은 이름의 빌더**로 정리되었습니다. 기존 snake 표기
181
+ (`start_mode` / `commit_mode` / `linger_ms` ...)도 그대로 쓸 수 있습니다.
182
+
183
+ ```python
184
+ from ilink.producer import ILProducerConfig
185
+
186
+ cfg = (ILProducerConfig()
187
+ .acks(1).lingerMs(5).batchSize(32768)
188
+ .maxRequestSize(1048576) # 레코드 1건 상한 - 넘으면 send()가 거부
189
+ .bufferMemory(33554432) # 미전송 누적 상한
190
+ .retries(3).retryBackoffMs(100)
191
+ .deliveryTimeoutMs(120000) # 재시도를 포함한 완결 시한
192
+ .enableIdempotence(True)) # PID/시퀀스 중복 제거 (acks=1 필요)
193
+
194
+ prod = qmgr.create_producer(cfg)
195
+ print(prod.get_producer_id(), prod.is_connected())
196
+ ```
197
+
198
+ 구독 옵션에 리밸런스 리스너/prefetch/수동 파티션이 추가되었고, 파티션을 직접 고르는
199
+ `assign()`이 생겼습니다.
200
+
201
+ ```python
202
+ sub = topic.subscribe("app1", ILSubscribeOptions()
203
+ .startMode(ILTopic.START_EARLIEST)
204
+ .commitMode(ILTopic.COMMIT_MANUAL)
205
+ .expiryMs(600000) # 멤버 유휴 만료 10분
206
+ .prefetch(100)
207
+ .listener(on_rebalance))
208
+
209
+ sub = topic.assign("app1", [0, 2], ILTopic.START_EARLIEST) # 수동 파티션 배정
210
+ ```
211
+
212
+ > **주의 (0.2.0에서 올라올 때)**: 옵션 값은 이제 **게터로 읽습니다.**
213
+ > `cfg.acks` / `opt.durable` 은 빌더 **메서드**이므로 값이 필요하면
214
+ > `cfg.get_acks()` / `opt.is_durable()` 을 쓰세요. `cfg.acks = 0` 같은 **직접 대입은
215
+ > 그대로 동작합니다.** 같은 이유로 `ILClusterProperty.isAutoStart` 와
216
+ > `ILSpokeProperty.isRunning` 도 Java처럼 **메서드**가 되었습니다
217
+ > (`prop.isAutoStart()`).
218
+
219
+ ## 개발자 가이드 문서
220
+
221
+ **공개 API 756개 전부에 한국어 docstring이 붙어 있습니다.** 편집기에서 함수 위에
222
+ 마우스를 올리거나 `help()`로 파라미터 타입·기본값·허용값·예외를 바로 확인할 수 있습니다.
223
+
224
+ ```python
225
+ help(qmgr.access_queue)
226
+ help(ILAdminQmgr.getStatSeries)
227
+ ```
228
+
229
+ 값 객체(`ILQueueProperty` 등)는 필드 목록이 클래스 docstring에 정리되어 있습니다.
230
+ `getX()` / `setX()` 접근자는 필드 이름에서 자동으로 만들어지므로, 필드 목록이 곧
231
+ 접근자 목록입니다.
232
+
233
+ ```python
234
+ help(ILQueueProperty) # 필드 이름 / 타입 / 기본값 / 의미
235
+ ```
@@ -0,0 +1,189 @@
1
+ # jetstream-api
2
+
3
+ Python으로 작성된 ILink 클라이언트 API입니다.
4
+
5
+ ## 시스템 요구 사항
6
+ 시스템에 python 13 이상, pip가 설치되어 있어야 합니다.
7
+
8
+ ## 설치 방법
9
+ pip install jetstream-api
10
+
11
+ ## 0.2.0 신규 - pub/sub 토픽
12
+
13
+ 큐에 더해 **pub/sub 토픽**을 지원합니다. 발행된 메시지는 retention 정책이 지울 때까지 보존되어
14
+ 모든 구독자에게 각자의 커서로 전달됩니다(팬아웃). 큐와 달리 소비해도 사라지지 않습니다.
15
+
16
+ > 엔진 v7.1.1 rev 3265 이상이 필요합니다.
17
+
18
+ ### 구독
19
+
20
+ ```python
21
+ from ilink.qmgr import ILQmgr
22
+ from ilink.topic import ILTopic, ILSubscribeOptions
23
+
24
+ qmgr = ILQmgr()
25
+ qmgr.connect("127.0.0.1", 19999, "order-svc", True)
26
+
27
+ topic = qmgr.access_topic("ORDER.EVENT")
28
+ sub = topic.subscribe("settlement", ILSubscribeOptions()
29
+ .start_mode(ILTopic.START_EARLIEST)
30
+ .commit_mode(ILTopic.COMMIT_MANUAL))
31
+
32
+ for msg in sub.read_batch(100, 3000):
33
+ print(msg.get_offset(), msg.get_key(), msg.get_data_string())
34
+ sub.commit(msg)
35
+ ```
36
+
37
+ 콜백(push)으로 받을 수도 있습니다.
38
+
39
+ ```python
40
+ sub.listen(lambda m: print(m.get_data_string()),
41
+ lambda e: print("error:", e))
42
+ ...
43
+ sub.stop_listening()
44
+ ```
45
+
46
+ ### 발행
47
+
48
+ 발행은 producer 단일 경로입니다. 동기 발행은 `send().get()`을 씁니다.
49
+
50
+ ```python
51
+ from ilink.producer import ILProducerConfig, ILProducerRecord
52
+
53
+ prod = qmgr.create_producer(ILProducerConfig())
54
+ meta = prod.send(ILProducerRecord("ORDER.EVENT", "k1", b"payload",
55
+ properties={"trace-id": "abc"})).get()
56
+ print(meta.get_partition(), meta.get_offset())
57
+ prod.close()
58
+ ```
59
+
60
+ ### 와일드카드(패턴) 구독
61
+
62
+ 패턴에 맞는 여러 토픽을 한꺼번에 구독합니다.
63
+
64
+ ```python
65
+ pat = qmgr.access_pattern("ORDER.*")
66
+ print(pat.resolve()) # 지금 매칭되는 토픽 (구독 안 함)
67
+
68
+ ps = pat.subscribe("audit")
69
+ m = ps.read(3000)
70
+ print(m.get_topic_name(), m.get_data_string())
71
+ ```
72
+
73
+ **`*`는 구분자 `.`를 포함해 매칭합니다.** `ORDER.*`는 `ORDER.KR`뿐 아니라 `ORDER.KR.SUB`도 잡습니다.
74
+ **정규식이 아니라 글로브입니다.** `.`은 리터럴이라 `ORDER.*`는 `ORDERING`을 잡지 않습니다.
75
+
76
+ ### 토픽 관리
77
+
78
+ 토픽 생성/삭제/속성변경은 관리 표면 전용입니다.
79
+
80
+ ```python
81
+ from ilink.admin import ILAdminService
82
+
83
+ svc = ILAdminService(); svc.connect("127.0.0.1", 9998)
84
+ adm = svc.accessAdminQmgr("QMGR1")
85
+ adm.createTopic("ORDER.EVENT", "partitions=3")
86
+ print(adm.getTopicList())
87
+ ```
88
+
89
+ ## 0.2.0 신규 - 클러스터(HA) 페일오버
90
+
91
+ 클러스터 큐 관리자에 접속하면 후보 주소를 캐싱해 두었다가, 리더가 바뀌어도 따라갑니다.
92
+
93
+ ```python
94
+ qmgr.set_auto_reconnect(True) # auto-commit 세션에서만 동작
95
+ print(qmgr.get_cluster_addresses())
96
+ qmgr.reconnect() # 새 리더를 찾아 재접속
97
+ ```
98
+
99
+ > `set_auto_reconnect`는 **transacted 세션에서는 동작하지 않습니다.** 미커밋 트랜잭션이
100
+ > 재접속으로 유실되므로, 예외를 받고 앱이 트랜잭션을 처음부터 재수행해야 합니다
101
+ > (`reconnect()` 직접 호출은 가능합니다). auto-commit 세션도 응답 유실 시점의 재시도로
102
+ > **중복 put이 발생할 수 있습니다.**
103
+
104
+ ## 0.3.0 신규 - 허브-스포크 연결 전환 헬퍼
105
+
106
+ 허브에 접속해 스포크를 찾고 연결을 전환하는 세 단계를 한 번에 처리하는
107
+ `connectToSpoke()`가 추가되었습니다. Java API에도 같은 이름으로 있습니다.
108
+
109
+ ```python
110
+ from ilink.admin import ILAdminService
111
+
112
+ for name in ("S48", "S85"):
113
+ svc = ILAdminService.connectToSpoke("10.10.1.95", 9998, "ADMIN", name)
114
+ try:
115
+ print(name, [q.getName() for q in svc.getQmgrList()])
116
+ finally:
117
+ svc.disconnect()
118
+
119
+ # 키를 이미 알고 있으면 목록 조회를 건너뛴다 (키는 설정 파일에 저장되어 재기동해도 유지)
120
+ svc = ILAdminService.connectToSpokeByKey("10.10.1.95", 9998, "ADMIN", spoke_key)
121
+ ```
122
+
123
+ > 연결 전환 후 그 연결은 **해당 스포크에 직접 접속한 것으로 에뮬레이션**됩니다.
124
+ > 따라서 전환은 연결당 한 번뿐이고, 다른 스포크로 가려면 새 연결이 필요합니다.
125
+ > `connectToSpoke()`가 그 반복을 담당합니다. 실패하면 스스로 연결을 닫으므로
126
+ > 소켓이 새지 않습니다.
127
+
128
+ TCP 연결 방향이 **스포크 → 허브** 한 방향뿐이라 스포크 쪽에 인바운드 포트를 열지 않고도
129
+ 관리할 수 있습니다. 실측상 릴레이 오버헤드는 없었습니다(`getQmgrList()` 중앙값
130
+ 릴레이 18.3ms vs 허브 직결 18.4ms).
131
+
132
+ ## 0.2.1 신규 - Java API 옵션 표면 일치
133
+
134
+ 발행/구독 옵션이 Java API와 **같은 이름의 빌더**로 정리되었습니다. 기존 snake 표기
135
+ (`start_mode` / `commit_mode` / `linger_ms` ...)도 그대로 쓸 수 있습니다.
136
+
137
+ ```python
138
+ from ilink.producer import ILProducerConfig
139
+
140
+ cfg = (ILProducerConfig()
141
+ .acks(1).lingerMs(5).batchSize(32768)
142
+ .maxRequestSize(1048576) # 레코드 1건 상한 - 넘으면 send()가 거부
143
+ .bufferMemory(33554432) # 미전송 누적 상한
144
+ .retries(3).retryBackoffMs(100)
145
+ .deliveryTimeoutMs(120000) # 재시도를 포함한 완결 시한
146
+ .enableIdempotence(True)) # PID/시퀀스 중복 제거 (acks=1 필요)
147
+
148
+ prod = qmgr.create_producer(cfg)
149
+ print(prod.get_producer_id(), prod.is_connected())
150
+ ```
151
+
152
+ 구독 옵션에 리밸런스 리스너/prefetch/수동 파티션이 추가되었고, 파티션을 직접 고르는
153
+ `assign()`이 생겼습니다.
154
+
155
+ ```python
156
+ sub = topic.subscribe("app1", ILSubscribeOptions()
157
+ .startMode(ILTopic.START_EARLIEST)
158
+ .commitMode(ILTopic.COMMIT_MANUAL)
159
+ .expiryMs(600000) # 멤버 유휴 만료 10분
160
+ .prefetch(100)
161
+ .listener(on_rebalance))
162
+
163
+ sub = topic.assign("app1", [0, 2], ILTopic.START_EARLIEST) # 수동 파티션 배정
164
+ ```
165
+
166
+ > **주의 (0.2.0에서 올라올 때)**: 옵션 값은 이제 **게터로 읽습니다.**
167
+ > `cfg.acks` / `opt.durable` 은 빌더 **메서드**이므로 값이 필요하면
168
+ > `cfg.get_acks()` / `opt.is_durable()` 을 쓰세요. `cfg.acks = 0` 같은 **직접 대입은
169
+ > 그대로 동작합니다.** 같은 이유로 `ILClusterProperty.isAutoStart` 와
170
+ > `ILSpokeProperty.isRunning` 도 Java처럼 **메서드**가 되었습니다
171
+ > (`prop.isAutoStart()`).
172
+
173
+ ## 개발자 가이드 문서
174
+
175
+ **공개 API 756개 전부에 한국어 docstring이 붙어 있습니다.** 편집기에서 함수 위에
176
+ 마우스를 올리거나 `help()`로 파라미터 타입·기본값·허용값·예외를 바로 확인할 수 있습니다.
177
+
178
+ ```python
179
+ help(qmgr.access_queue)
180
+ help(ILAdminQmgr.getStatSeries)
181
+ ```
182
+
183
+ 값 객체(`ILQueueProperty` 등)는 필드 목록이 클래스 docstring에 정리되어 있습니다.
184
+ `getX()` / `setX()` 접근자는 필드 이름에서 자동으로 만들어지므로, 필드 목록이 곧
185
+ 접근자 목록입니다.
186
+
187
+ ```python
188
+ help(ILQueueProperty) # 필드 이름 / 타입 / 기본값 / 의미
189
+ ```
@@ -1,90 +1,94 @@
1
- """iLink - Python client API for iLink M.O.M. (Message Oriented Middleware)."""
2
-
3
- __version__ = "0.1.5"
4
-
5
- # --- Admin / Service ---
6
- from .admin import ILAdminService, ILAdminQmgr, ILLogBrowser, ILQueueBrowser
7
-
8
- # --- Queue Manager & Queue ---
9
- from .qmgr import ILQmgr, ILQueue
10
-
11
- # --- Message ---
12
- from .msg import ILMsg, ILMsgUtil
13
-
14
- # --- Constants & Enums ---
15
- from .common import ILC, ILCC, ILRC, MatchOption
16
-
17
- # --- Properties ---
18
- from .properties import (
19
- DestItem,
20
- PartitionItem,
21
- ILQueueProperty,
22
- ILChannelProperty,
23
- ILChannelType,
24
- ILChannelStatus,
25
- ILChannelDirection,
26
- ILChannelSecurity,
27
- ILChannelBalanceMode,
28
- ILQmgrProperty,
29
- ILSessionProperty,
30
- ILServiceProperty,
31
- ILSpokeProperty,
32
- ILAccessRuleProperty,
33
- ILSecureFileProperty,
34
- ILQueueRealTimeInfo,
35
- ILQueueFlow,
36
- )
37
-
38
- # --- Exceptions ---
39
- from .exception import (
40
- ILException,
41
- ILNoMsgException,
42
- ILTimeoutException,
43
- ILOperationException,
44
- ILSessionException,
45
- ILMsgTypeException,
46
- )
47
-
48
- __all__ = [
49
- # Admin
50
- "ILAdminService",
51
- "ILAdminQmgr",
52
- "ILLogBrowser",
53
- "ILQueueBrowser",
54
- # QMgr / Queue
55
- "ILQmgr",
56
- "ILQueue",
57
- # Message
58
- "ILMsg",
59
- "ILMsgUtil",
60
- # Constants
61
- "ILC",
62
- "ILCC",
63
- "ILRC",
64
- "MatchOption",
65
- # Properties
66
- "DestItem",
67
- "PartitionItem",
68
- "ILQueueProperty",
69
- "ILChannelProperty",
70
- "ILChannelType",
71
- "ILChannelStatus",
72
- "ILChannelDirection",
73
- "ILChannelSecurity",
74
- "ILChannelBalanceMode",
75
- "ILQmgrProperty",
76
- "ILSessionProperty",
77
- "ILServiceProperty",
78
- "ILSpokeProperty",
79
- "ILAccessRuleProperty",
80
- "ILSecureFileProperty",
81
- "ILQueueRealTimeInfo",
82
- "ILQueueFlow",
83
- # Exceptions
84
- "ILException",
85
- "ILNoMsgException",
86
- "ILTimeoutException",
87
- "ILOperationException",
88
- "ILSessionException",
89
- "ILMsgTypeException",
90
- ]
1
+ """iLink - Python client API for iLink M.O.M. (Message Oriented Middleware)."""
2
+
3
+ __version__ = "0.3.0"
4
+
5
+ # --- Admin / Service ---
6
+ from .admin import ILAdminService, ILAdminQmgr, ILLogBrowser, ILQueueBrowser
7
+
8
+ # --- Queue Manager & Queue ---
9
+ from .qmgr import ILQmgr, ILQueue
10
+
11
+ # --- Message ---
12
+ from .msg import ILMsg, ILMsgUtil
13
+
14
+ # --- Constants & Enums ---
15
+ from .common import ILC, ILCC, ILRC, MatchOption
16
+
17
+ # --- Properties ---
18
+ from .properties import (
19
+ DestItem,
20
+ PartitionItem,
21
+ ILQueueProperty,
22
+ ILChannelProperty,
23
+ ILChannelType,
24
+ ILChannelStatus,
25
+ ILChannelDirection,
26
+ ILChannelSecurity,
27
+ ILChannelBalanceMode,
28
+ ILClusterNode,
29
+ ILClusterProperty,
30
+ ILQmgrProperty,
31
+ ILSessionProperty,
32
+ ILServiceProperty,
33
+ ILSpokeProperty,
34
+ ILAccessRuleProperty,
35
+ ILSecureFileProperty,
36
+ ILQueueRealTimeInfo,
37
+ ILQueueFlow,
38
+ )
39
+
40
+ # --- Exceptions ---
41
+ from .exception import (
42
+ ILException,
43
+ ILNoMsgException,
44
+ ILTimeoutException,
45
+ ILOperationException,
46
+ ILSessionException,
47
+ ILMsgTypeException,
48
+ )
49
+
50
+ __all__ = [
51
+ # Admin
52
+ "ILAdminService",
53
+ "ILAdminQmgr",
54
+ "ILLogBrowser",
55
+ "ILQueueBrowser",
56
+ # QMgr / Queue
57
+ "ILQmgr",
58
+ "ILQueue",
59
+ # Message
60
+ "ILMsg",
61
+ "ILMsgUtil",
62
+ # Constants
63
+ "ILC",
64
+ "ILCC",
65
+ "ILRC",
66
+ "MatchOption",
67
+ # Properties
68
+ "DestItem",
69
+ "PartitionItem",
70
+ "ILQueueProperty",
71
+ "ILChannelProperty",
72
+ "ILChannelType",
73
+ "ILChannelStatus",
74
+ "ILChannelDirection",
75
+ "ILChannelSecurity",
76
+ "ILChannelBalanceMode",
77
+ "ILClusterNode",
78
+ "ILClusterProperty",
79
+ "ILQmgrProperty",
80
+ "ILSessionProperty",
81
+ "ILServiceProperty",
82
+ "ILSpokeProperty",
83
+ "ILAccessRuleProperty",
84
+ "ILSecureFileProperty",
85
+ "ILQueueRealTimeInfo",
86
+ "ILQueueFlow",
87
+ # Exceptions
88
+ "ILException",
89
+ "ILNoMsgException",
90
+ "ILTimeoutException",
91
+ "ILOperationException",
92
+ "ILSessionException",
93
+ "ILMsgTypeException",
94
+ ]