cmdop 0.1.21__py3-none-any.whl → 0.1.23__py3-none-any.whl
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.
- cmdop/__init__.py +1 -1
- cmdop/_generated/rpc_messages/browser_pb2.py +135 -85
- cmdop/_generated/rpc_messages/browser_pb2.pyi +270 -2
- cmdop/_generated/rpc_messages_pb2.pyi +25 -0
- cmdop/_generated/service_pb2.py +2 -2
- cmdop/_generated/service_pb2_grpc.py +345 -0
- cmdop/client.py +2 -8
- cmdop/services/browser/__init__.py +44 -31
- cmdop/services/browser/capabilities/__init__.py +17 -0
- cmdop/services/browser/capabilities/_base.py +28 -0
- cmdop/services/browser/capabilities/_helpers.py +16 -0
- cmdop/services/browser/capabilities/dom.py +76 -0
- cmdop/services/browser/capabilities/fetch.py +45 -0
- cmdop/services/browser/capabilities/input.py +49 -0
- cmdop/services/browser/capabilities/network.py +245 -0
- cmdop/services/browser/capabilities/scroll.py +147 -0
- cmdop/services/browser/capabilities/timing.py +66 -0
- cmdop/services/browser/js/__init__.py +6 -4
- cmdop/services/browser/js/interaction.py +34 -0
- cmdop/services/browser/models.py +103 -0
- cmdop/services/browser/service/__init__.py +5 -0
- cmdop/services/browser/service/aio.py +30 -0
- cmdop/services/browser/{sync/service.py → service/sync.py} +206 -6
- cmdop/services/browser/session.py +194 -0
- {cmdop-0.1.21.dist-info → cmdop-0.1.23.dist-info}/METADATA +107 -59
- {cmdop-0.1.21.dist-info → cmdop-0.1.23.dist-info}/RECORD +29 -24
- cmdop/services/browser/aio/__init__.py +0 -6
- cmdop/services/browser/aio/service.py +0 -420
- cmdop/services/browser/aio/session.py +0 -407
- cmdop/services/browser/base/__init__.py +0 -6
- cmdop/services/browser/base/session.py +0 -124
- cmdop/services/browser/sync/__init__.py +0 -6
- cmdop/services/browser/sync/session.py +0 -644
- /cmdop/services/browser/{base/service.py → service/_helpers.py} +0 -0
- {cmdop-0.1.21.dist-info → cmdop-0.1.23.dist-info}/WHEEL +0 -0
- {cmdop-0.1.21.dist-info → cmdop-0.1.23.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmdop
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.23
|
|
4
4
|
Summary: Python SDK for CMDOP agent interaction
|
|
5
5
|
Project-URL: Homepage, https://cmdop.com
|
|
6
6
|
Project-URL: Documentation, https://cmdop.com
|
|
@@ -145,91 +145,139 @@ health: Health = result.output # Typed!
|
|
|
145
145
|
|
|
146
146
|
## Browser
|
|
147
147
|
|
|
148
|
+
Capability-based API for browser automation.
|
|
149
|
+
|
|
148
150
|
```python
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
from cmdop.services.browser.models import WaitUntil
|
|
152
|
+
|
|
153
|
+
with client.browser.create_session() as s:
|
|
154
|
+
s.navigate("https://shop.com/products", wait_until=WaitUntil.NETWORKIDLE)
|
|
155
|
+
s.dom.close_modal() # Close popups
|
|
152
156
|
|
|
153
157
|
# BeautifulSoup parsing
|
|
154
|
-
soup =
|
|
158
|
+
soup = s.dom.soup() # SoupWrapper with chainable API
|
|
155
159
|
for item in soup.select(".product"):
|
|
156
160
|
title = item.select_one("h2").text()
|
|
157
161
|
price = item.attr("data-price")
|
|
158
162
|
|
|
159
163
|
# Scrolling with random delays
|
|
160
164
|
for _ in range(10):
|
|
161
|
-
soup =
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
b.wait_random(0.8, 1.5) # Random delay
|
|
165
|
+
soup = s.dom.soup(".listings")
|
|
166
|
+
s.scroll.js("down", 700)
|
|
167
|
+
s.timing.random(0.8, 1.5)
|
|
165
168
|
|
|
166
|
-
# Click with cursor movement
|
|
167
|
-
|
|
169
|
+
# Click with cursor movement
|
|
170
|
+
s.click("button.buy", move_cursor=True)
|
|
168
171
|
|
|
169
172
|
# Click all "See more" buttons
|
|
170
|
-
|
|
173
|
+
s.input.click_all("See more")
|
|
171
174
|
|
|
172
|
-
#
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
# Mouse operations
|
|
176
|
+
s.input.mouse_move(500, 300)
|
|
177
|
+
s.input.hover(".tooltip-trigger")
|
|
175
178
|
|
|
176
179
|
# JS fetch (bypass CORS, inherit cookies)
|
|
177
|
-
data =
|
|
180
|
+
data = s.fetch.json("/api/items")
|
|
178
181
|
```
|
|
179
182
|
|
|
183
|
+
### Core Methods (on session)
|
|
184
|
+
|
|
180
185
|
| Method | Description |
|
|
181
186
|
|--------|-------------|
|
|
182
|
-
| `navigate(url)` | Go to URL |
|
|
183
|
-
| `click(selector, move_cursor)` | Click element
|
|
184
|
-
| `click_all_by_text(text, role)` | Click all matching elements |
|
|
187
|
+
| `navigate(url, wait_until)` | Go to URL (wait_until: LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT) |
|
|
188
|
+
| `click(selector, move_cursor)` | Click element |
|
|
185
189
|
| `type(selector, text)` | Type text |
|
|
186
|
-
| `wait_for(selector
|
|
187
|
-
| `
|
|
188
|
-
| `wait_random(min, max)` | Random sleep |
|
|
189
|
-
| `extract(selector, attr)` | Get text/attr |
|
|
190
|
-
| `get_html(selector)` | Get HTML |
|
|
191
|
-
| `soup(selector)` | → SoupWrapper |
|
|
192
|
-
| `parse_html(html)` | → BeautifulSoup |
|
|
193
|
-
| `fetch_json(url)` | JS fetch → dict |
|
|
194
|
-
| `fetch_all(urls)` | Parallel fetch |
|
|
195
|
-
| `execute_js(code)` | Run async JS |
|
|
190
|
+
| `wait_for(selector)` | Wait for element |
|
|
191
|
+
| `execute_script(js)` | Run JavaScript |
|
|
196
192
|
| `screenshot()` | PNG bytes |
|
|
197
|
-
| `
|
|
198
|
-
| `
|
|
199
|
-
| `
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
193
|
+
| `get_state()` | URL + title |
|
|
194
|
+
| `get_page_info()` | Full page info |
|
|
195
|
+
| `get/set_cookies()` | Cookie management |
|
|
196
|
+
|
|
197
|
+
### Capabilities
|
|
198
|
+
|
|
199
|
+
**`session.scroll`** - Scrolling
|
|
200
|
+
| Method | Description |
|
|
201
|
+
|--------|-------------|
|
|
202
|
+
| `js(dir, amount)` | JS scroll (works on complex sites) |
|
|
203
|
+
| `native(dir, amount)` | Browser API scroll |
|
|
204
|
+
| `to_bottom()` | Scroll to page bottom |
|
|
205
|
+
| `to_element(selector)` | Scroll element into view |
|
|
206
|
+
| `info()` | Get scroll position |
|
|
207
|
+
| `infinite(extract_fn)` | Smart infinite scroll with extraction |
|
|
208
|
+
|
|
209
|
+
**`session.input`** - Input operations
|
|
210
|
+
| Method | Description |
|
|
211
|
+
|--------|-------------|
|
|
212
|
+
| `click_js(selector)` | JS click (reliable) |
|
|
213
|
+
| `click_all(text, role)` | Click all matching elements |
|
|
214
|
+
| `key(key, selector)` | Press keyboard key |
|
|
215
|
+
| `hover(selector)` | Hover over element (native) |
|
|
216
|
+
| `hover_js(selector)` | Hover via JS |
|
|
217
|
+
| `mouse_move(x, y)` | Move cursor to coordinates |
|
|
218
|
+
|
|
219
|
+
**`session.timing`** - Delays
|
|
220
|
+
| Method | Description |
|
|
221
|
+
|--------|-------------|
|
|
222
|
+
| `wait(ms)` | Wait milliseconds |
|
|
223
|
+
| `seconds(n)` | Wait seconds |
|
|
224
|
+
| `random(min, max)` | Random delay |
|
|
225
|
+
| `timeout(fn, sec, cleanup)` | Run with timeout |
|
|
226
|
+
|
|
227
|
+
**`session.dom`** - DOM operations
|
|
228
|
+
| Method | Description |
|
|
229
|
+
|--------|-------------|
|
|
230
|
+
| `html(selector)` | Get HTML |
|
|
231
|
+
| `text(selector)` | Get text content |
|
|
232
|
+
| `soup(selector)` | → SoupWrapper |
|
|
233
|
+
| `parse(html)` | → BeautifulSoup |
|
|
234
|
+
| `extract(selector, attr)` | Get text/attr list |
|
|
203
235
|
| `select(selector, value)` | Dropdown select |
|
|
204
236
|
| `close_modal()` | Close dialogs |
|
|
205
|
-
| `press_key(key, selector)` | Press keyboard key |
|
|
206
|
-
| `get/set_cookies()` | Cookie management |
|
|
207
|
-
| `with_timeout(fn, sec, cleanup)` | Run with timeout, skip if hangs |
|
|
208
237
|
|
|
209
|
-
|
|
238
|
+
**`session.fetch`** - HTTP from browser context
|
|
239
|
+
| Method | Description |
|
|
240
|
+
|--------|-------------|
|
|
241
|
+
| `json(url)` | Fetch JSON |
|
|
242
|
+
| `all(requests)` | Parallel fetch |
|
|
243
|
+
| `execute(js_code)` | Custom JS fetch code |
|
|
244
|
+
|
|
245
|
+
**`session.network`** - Network capture (v2.19.0)
|
|
246
|
+
| Method | Description |
|
|
247
|
+
|--------|-------------|
|
|
248
|
+
| `enable(max_exchanges)` | Start capturing HTTP traffic |
|
|
249
|
+
| `disable()` | Stop capturing |
|
|
250
|
+
| `get_all()` | Get all captured exchanges |
|
|
251
|
+
| `filter(url_pattern, methods, status_codes)` | Filter exchanges |
|
|
252
|
+
| `last(url_pattern)` | Get most recent matching exchange |
|
|
253
|
+
| `api_calls(url_pattern)` | Get XHR/Fetch calls matching pattern |
|
|
254
|
+
| `last_json(url_pattern)` | Get JSON body from last matching response |
|
|
255
|
+
| `wait_for(url_pattern, timeout_ms)` | Wait for matching request |
|
|
256
|
+
| `stats()` | Capture statistics |
|
|
257
|
+
| `export_har()` | Export to HAR format |
|
|
258
|
+
| `clear()` | Clear captured data |
|
|
259
|
+
|
|
210
260
|
```python
|
|
211
|
-
#
|
|
212
|
-
|
|
213
|
-
lambda: process_item(browser, item),
|
|
214
|
-
timeout_sec=60,
|
|
215
|
-
on_timeout=lambda: browser.press_key('Escape'),
|
|
216
|
-
)
|
|
217
|
-
if not ok:
|
|
218
|
-
print("Skipped - timed out")
|
|
261
|
+
# Example: Intercept API responses
|
|
262
|
+
from cmdop.services.browser.models import WaitUntil
|
|
219
263
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
timeout_sec=60,
|
|
224
|
-
on_timeout=lambda: browser.press_key('Escape'),
|
|
225
|
-
)
|
|
226
|
-
```
|
|
264
|
+
with client.browser.create_session() as s:
|
|
265
|
+
s.network.enable()
|
|
266
|
+
s.navigate("https://app.example.com", wait_until=WaitUntil.NETWORKIDLE)
|
|
227
267
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
268
|
+
# Get last API response
|
|
269
|
+
api = s.network.last("/api/data")
|
|
270
|
+
data = api.json_body()
|
|
271
|
+
|
|
272
|
+
# Filter by criteria
|
|
273
|
+
posts = s.network.filter(
|
|
274
|
+
url_pattern="/api/posts",
|
|
275
|
+
methods=["GET"],
|
|
276
|
+
status_codes=[200],
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
s.network.disable()
|
|
280
|
+
```
|
|
233
281
|
|
|
234
282
|
## SDKBaseModel
|
|
235
283
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
cmdop/__init__.py,sha256=
|
|
2
|
-
cmdop/client.py,sha256=
|
|
1
|
+
cmdop/__init__.py,sha256=eqEIR3w99NYHsoGF6FioESxTgQhB2yWiARNYWbmNdkk,5200
|
|
2
|
+
cmdop/client.py,sha256=nTotStZPBfYN3TrHH-OlEJMSVAXskYMQRkocsFmyaBY,14601
|
|
3
3
|
cmdop/config.py,sha256=vpw1aGCyS4NKlZyzVur81Lt06QmN3FnscZji0bypUi0,4398
|
|
4
4
|
cmdop/discovery.py,sha256=HNxSOa5tSuG7ppfFs21XdviW5ucjpRswVPguhX5j8Dg,7479
|
|
5
5
|
cmdop/exceptions.py,sha256=-ubepNXXpasXDmlKhl3k0MhWRsI6Oj46Ic_jH4VUw-g,10314
|
|
@@ -24,11 +24,11 @@ cmdop/_generated/file_rpc_pb2_grpc.py,sha256=HddeBZYoBOUkx4yPq2qdpwv2QmQouSbwCkf
|
|
|
24
24
|
cmdop/_generated/message_pool.py,sha256=ncIr4Z2KeinOVGyzmR-Drc76DZnDTwWl4-bQYcIl8uM,97
|
|
25
25
|
cmdop/_generated/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
cmdop/_generated/rpc_messages_pb2.py,sha256=X3iog1k2vUDna-hBpEXy0E9-D05mkDWlmBSy0L_yhmQ,2734
|
|
27
|
-
cmdop/_generated/rpc_messages_pb2.pyi,sha256=
|
|
27
|
+
cmdop/_generated/rpc_messages_pb2.pyi,sha256=ddIPYj1axgsGwSc0KO1lTnCknJexEqeRz3VEwsLzG0E,10507
|
|
28
28
|
cmdop/_generated/rpc_messages_pb2_grpc.py,sha256=WHRqOkW1r_9wP5Sd1Bc20jDVErtDN_xHvhsv8r8xyss,892
|
|
29
|
-
cmdop/_generated/service_pb2.py,sha256=
|
|
29
|
+
cmdop/_generated/service_pb2.py,sha256=WRgcxz-wh7RWXTXcBTgw85V5uAgsc68UGaD0gAGwAxE,13315
|
|
30
30
|
cmdop/_generated/service_pb2.pyi,sha256=-q-RU8TbkwpnKuBQGIhEsjGXj8ltD87sdzgC3B6zKYY,1649
|
|
31
|
-
cmdop/_generated/service_pb2_grpc.py,sha256=
|
|
31
|
+
cmdop/_generated/service_pb2_grpc.py,sha256=ulLybECN-LLMMYlUG3XJw7Fmfz8PD0jRWwVHmhlYPjs,124703
|
|
32
32
|
cmdop/_generated/tunnel_pb2.py,sha256=oF5qOSw_9faeXtVFELfEw1dq3TtPOUWl1v6DzUqguGo,3928
|
|
33
33
|
cmdop/_generated/tunnel_pb2.pyi,sha256=ipcoNwnTLY16IfA95SbTP7REypE65ZVpf6akF7h4FCw,4925
|
|
34
34
|
cmdop/_generated/tunnel_pb2_grpc.py,sha256=yutTebujge5cHC3h84FKWSdvGBuPVYOkRDy0UGtHZ6c,886
|
|
@@ -80,8 +80,8 @@ cmdop/_generated/rpc_messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
80
80
|
cmdop/_generated/rpc_messages/agent_pb2.py,sha256=1KCs4kwuuTwZm9Y8ql7t6Jjsutuepbq85E6DGVDWa84,3393
|
|
81
81
|
cmdop/_generated/rpc_messages/agent_pb2.pyi,sha256=F7gy0PQlJ4cRQCli7U4v5A87-Lsw2_x0nV4hFXG1qj0,3866
|
|
82
82
|
cmdop/_generated/rpc_messages/agent_pb2_grpc.py,sha256=ABbaG1eMcaWPZKdPoom2F-IjjVqjYNMDOjMp8X6QLHE,898
|
|
83
|
-
cmdop/_generated/rpc_messages/browser_pb2.py,sha256=
|
|
84
|
-
cmdop/_generated/rpc_messages/browser_pb2.pyi,sha256=
|
|
83
|
+
cmdop/_generated/rpc_messages/browser_pb2.py,sha256=2yuoDnRYtAq34NOg4xFPVo0jz0Tr1ulatT8Qe6Ibty8,24851
|
|
84
|
+
cmdop/_generated/rpc_messages/browser_pb2.pyi,sha256=HXQxtegycSDNrHXaxCnMKqukb2Na4dJTCUAg413c31k,37988
|
|
85
85
|
cmdop/_generated/rpc_messages/browser_pb2_grpc.py,sha256=P8F8QYLT_kedGq7AXj37Us2hFQOaevdfYMHl0tTdY48,900
|
|
86
86
|
cmdop/_generated/rpc_messages/device_pb2.py,sha256=nKj7axhR-FVSQoQUd4ENXpc5PU_UCjSlExajLIoeZY8,2435
|
|
87
87
|
cmdop/_generated/rpc_messages/device_pb2.pyi,sha256=u5oLfTHuOSpYwMiVe2tw0vVQLLFvYgK3lxw-Vky1ZkA,1974
|
|
@@ -166,23 +166,28 @@ cmdop/services/base.py,sha256=BCYIUME5gfpDHAief30sQNVzrlAgHx6QGZ6AbLHQx5w,3087
|
|
|
166
166
|
cmdop/services/extract.py,sha256=zwzikEKH4T4OnrprmJg3wqBWQJr-DYsSZgJGK_2yIHU,11119
|
|
167
167
|
cmdop/services/files.py,sha256=RGhfo7tW6diuUWC_EQQ-Y9zO1btm6mBTji0SWWa0fdo,12548
|
|
168
168
|
cmdop/services/terminal.py,sha256=9SSWBexe2rWgMd-hGBEs9mcax3l7x_U84VHZpMC4xK8,17512
|
|
169
|
-
cmdop/services/browser/__init__.py,sha256=
|
|
170
|
-
cmdop/services/browser/models.py,sha256=
|
|
169
|
+
cmdop/services/browser/__init__.py,sha256=31Ofu9RCYTAedPKLvnor8J7oGDgTjbqJ58OkxxHYwdk,1270
|
|
170
|
+
cmdop/services/browser/models.py,sha256=9MpNFgSgZDIznmTmsCUByEN31t_iQ6kAza1BsPSsuJs,5320
|
|
171
171
|
cmdop/services/browser/parsing.py,sha256=0hQAy-0ZwJqtmhEqHO3EEdVB3iYmyhXRdouN_dCbig8,3820
|
|
172
|
-
cmdop/services/browser/
|
|
173
|
-
cmdop/services/browser/
|
|
174
|
-
cmdop/services/browser/
|
|
175
|
-
cmdop/services/browser/
|
|
176
|
-
cmdop/services/browser/
|
|
177
|
-
cmdop/services/browser/
|
|
178
|
-
cmdop/services/browser/
|
|
172
|
+
cmdop/services/browser/session.py,sha256=atSDDrTdkVJ6OrTiz8OaifegedZvbkUZUpfxGKUrDw8,6403
|
|
173
|
+
cmdop/services/browser/capabilities/__init__.py,sha256=UFmqG3XB2xm0MI2jRmsSXyvFyREPbfJnXLzgaragpbU,398
|
|
174
|
+
cmdop/services/browser/capabilities/_base.py,sha256=mW0jKa2CyvK-8cjenv5JYvuCKiO3rpt5F7WtWFXBitA,749
|
|
175
|
+
cmdop/services/browser/capabilities/_helpers.py,sha256=jXqYbeDocAHec2GwF2_BNnJ78vTyUnHteQoS-RSG00k,488
|
|
176
|
+
cmdop/services/browser/capabilities/dom.py,sha256=DuXfildga23wGBNJWtNzx-t2Cq553HC48o9KAWAlyC0,2612
|
|
177
|
+
cmdop/services/browser/capabilities/fetch.py,sha256=IpUrcUAOEanrN4TrB-JVtn3TtJ8GdkyN5qbTbpBWvLc,1310
|
|
178
|
+
cmdop/services/browser/capabilities/input.py,sha256=uYmWGqturMDent44Us80oT_nk4kFNGyPJ0P5I35ulew,1749
|
|
179
|
+
cmdop/services/browser/capabilities/network.py,sha256=tZV4Oh_J5zUjEe9GBLQBDXEVh9EVTecPbyjE7lIUrd0,7775
|
|
180
|
+
cmdop/services/browser/capabilities/scroll.py,sha256=sh0VuOPOv81BZg80-n8TABOj5RpshJT12qJwm4F_OY0,4808
|
|
181
|
+
cmdop/services/browser/capabilities/timing.py,sha256=NH34G_4Kfukh6JCdhLRGoouA-uNTbx9ly7ybP9Kh558,1868
|
|
182
|
+
cmdop/services/browser/js/__init__.py,sha256=gTiZguikKfztDtggZTux2FqhT8YTjyHCzQR4TEnT7z4,1177
|
|
179
183
|
cmdop/services/browser/js/core.py,sha256=QXCCX_al5tMgz7aCwMqhIs1aRe_IdG8teOJniaumA5Q,995
|
|
180
184
|
cmdop/services/browser/js/fetch.py,sha256=WPy_H4LLkneSx06wpfnx4Sx_0Okf2ENXi6bveCd9ZCg,2188
|
|
181
|
-
cmdop/services/browser/js/interaction.py,sha256=
|
|
185
|
+
cmdop/services/browser/js/interaction.py,sha256=qNcs9XwjXZPJfbg8BPeqw5hXya_xTQsHv1T7VWdQ7qY,6620
|
|
182
186
|
cmdop/services/browser/js/scroll.py,sha256=yiOMAaR8ac8jCiWgNCVIt1pUGxdvktMUtzv-AVAE-2Q,7823
|
|
183
|
-
cmdop/services/browser/
|
|
184
|
-
cmdop/services/browser/
|
|
185
|
-
cmdop/services/browser/
|
|
187
|
+
cmdop/services/browser/service/__init__.py,sha256=AZH_r2FsxLfJGCVBaaAPw3dTGaUlgIFdlYd_RR8KxSg,100
|
|
188
|
+
cmdop/services/browser/service/_helpers.py,sha256=w8foDUGZcD4HyF5eyLZUFxbx_fctAFsYRovvsksi3l4,1584
|
|
189
|
+
cmdop/services/browser/service/aio.py,sha256=0E2D4igQb3YzAakdXsRMt8PEd0rFxI2gXfimwq_6nzk,767
|
|
190
|
+
cmdop/services/browser/service/sync.py,sha256=40CIqdUAR-ZVFfQJVgUWVgGq3j7mgcpGs1SRe8zXjmI,23096
|
|
186
191
|
cmdop/streaming/__init__.py,sha256=kG9UlJRqv8ndcwKMzWUddPlZT61pFO_Uf_c08A_8TxA,877
|
|
187
192
|
cmdop/streaming/base.py,sha256=r7Q2QlRxgULzs9vlSGcOC_fwAQ_cF3Z3M7WsPQtxG5I,2990
|
|
188
193
|
cmdop/streaming/handlers.py,sha256=FDEhADmCEFRbifvr9dU1X3C-K_96noz89Bl3tuDa_rQ,2616
|
|
@@ -193,7 +198,7 @@ cmdop/transport/base.py,sha256=2pkV8i9epgp_21dyReCfX47abRUrnALm0W5BXb-Fuz0,5571
|
|
|
193
198
|
cmdop/transport/discovery.py,sha256=rcGAuVrR1l6jwcP0dqZxVhX1NsFK7sRHygFMCLmmUbA,10673
|
|
194
199
|
cmdop/transport/local.py,sha256=ob6tWVxSdKwblHSMK8CkgjyuSdQoAeWgy5OAUd5ZNuE,7411
|
|
195
200
|
cmdop/transport/remote.py,sha256=FNVqus9wOv7LlxKarXjLmSyvJiHwhvPbNDOPv1IQkmE,4329
|
|
196
|
-
cmdop-0.1.
|
|
197
|
-
cmdop-0.1.
|
|
198
|
-
cmdop-0.1.
|
|
199
|
-
cmdop-0.1.
|
|
201
|
+
cmdop-0.1.23.dist-info/METADATA,sha256=3BVnbTuAgOy-U2nU1g7gpiE1n1E81AZjepAvHM1N0hA,8929
|
|
202
|
+
cmdop-0.1.23.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
203
|
+
cmdop-0.1.23.dist-info/licenses/LICENSE,sha256=6hyzbI1QVXW6B-XT7PaQ6UG9lns11Y_nnap8uUKGUqo,1062
|
|
204
|
+
cmdop-0.1.23.dist-info/RECORD,,
|