cmdop 0.1.19__py3-none-any.whl → 0.1.20__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 CHANGED
@@ -124,7 +124,7 @@ from cmdop.logging import (
124
124
  get_log_dir,
125
125
  )
126
126
 
127
- __version__ = "0.1.19"
127
+ __version__ = "0.1.20"
128
128
 
129
129
  __all__ = [
130
130
  # Version
@@ -295,9 +295,27 @@ class AsyncBrowserSession(BaseSession):
295
295
  data = parse_json_result(result) or {}
296
296
  return data.get("success", False)
297
297
 
298
- async def wait_seconds(self, seconds: float) -> None:
299
- """Wait for specified seconds."""
300
- await asyncio.sleep(seconds)
298
+ async def wait(self, ms: int, jitter: float = 0.1) -> None:
299
+ """
300
+ Wait for specified milliseconds with optional jitter.
301
+
302
+ Args:
303
+ ms: Wait time in milliseconds
304
+ jitter: Random variation ±jitter (default 10%, so 1000ms becomes 900-1100ms)
305
+ """
306
+ import random
307
+ actual = (ms / 1000) * (1 + random.uniform(-jitter, jitter))
308
+ await asyncio.sleep(actual)
309
+
310
+ async def wait_seconds(self, seconds: float, jitter: float = 0.1) -> None:
311
+ """
312
+ Wait for specified seconds with optional jitter.
313
+
314
+ Args:
315
+ seconds: Base wait time in seconds
316
+ jitter: Random variation ±jitter (default 10%, so 1.0s becomes 0.9-1.1s)
317
+ """
318
+ await self.wait(int(seconds * 1000), jitter)
301
319
 
302
320
  async def wait_random(self, min_sec: float = 0.5, max_sec: float = 1.5) -> None:
303
321
  """Wait for random time between min and max seconds."""
@@ -494,9 +494,27 @@ class BrowserSession(BaseSession):
494
494
  data = parse_json_result(result) or {}
495
495
  return data.get("success", False)
496
496
 
497
- def wait_seconds(self, seconds: float) -> None:
498
- """Wait for specified seconds."""
499
- time.sleep(seconds)
497
+ def wait(self, ms: int, jitter: float = 0.1) -> None:
498
+ """
499
+ Wait for specified milliseconds with optional jitter.
500
+
501
+ Args:
502
+ ms: Wait time in milliseconds
503
+ jitter: Random variation ±jitter (default 10%, so 1000ms becomes 900-1100ms)
504
+ """
505
+ import random
506
+ actual = (ms / 1000) * (1 + random.uniform(-jitter, jitter))
507
+ time.sleep(actual)
508
+
509
+ def wait_seconds(self, seconds: float, jitter: float = 0.1) -> None:
510
+ """
511
+ Wait for specified seconds with optional jitter.
512
+
513
+ Args:
514
+ seconds: Base wait time in seconds
515
+ jitter: Random variation ±jitter (default 10%, so 1.0s becomes 0.9-1.1s)
516
+ """
517
+ self.wait(int(seconds * 1000), jitter)
500
518
 
501
519
  def wait_random(self, min_sec: float = 0.5, max_sec: float = 1.5) -> None:
502
520
  """Wait for random time between min and max seconds."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cmdop
3
- Version: 0.1.19
3
+ Version: 0.1.20
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
@@ -1,4 +1,4 @@
1
- cmdop/__init__.py,sha256=GIMSV8jpM2MhQN21a6h0vhllsJHdMOFrBWR4Oj2oW94,5200
1
+ cmdop/__init__.py,sha256=KXYlejW7fNSgFT8NJkPTT-tWtMNxNBqy-YWeahE7zxY,5200
2
2
  cmdop/client.py,sha256=NzCBMIAj2vnVzwU1OUttW_kpgJh5aRtmixOwa9HUUUg,14924
3
3
  cmdop/config.py,sha256=vpw1aGCyS4NKlZyzVur81Lt06QmN3FnscZji0bypUi0,4398
4
4
  cmdop/discovery.py,sha256=HNxSOa5tSuG7ppfFs21XdviW5ucjpRswVPguhX5j8Dg,7479
@@ -171,7 +171,7 @@ cmdop/services/browser/models.py,sha256=qJ3da8hPvQn7Vtiqg3xg49G-GioidQGPPuLk2c_I
171
171
  cmdop/services/browser/parsing.py,sha256=0hQAy-0ZwJqtmhEqHO3EEdVB3iYmyhXRdouN_dCbig8,3820
172
172
  cmdop/services/browser/aio/__init__.py,sha256=7DI4Q0LZaAdu3fl8D1SaZ8E3LCGpTw97lqca1pOi5Kk,241
173
173
  cmdop/services/browser/aio/service.py,sha256=PTGBJtiS7xxU_4ApGqbyBQqGxqIPFlLcgJgU9GmCSk4,15071
174
- cmdop/services/browser/aio/session.py,sha256=zE6e2fztQL3LgoAm43z_sgbJ98QNoVTswfnvq9TDzCQ,12198
174
+ cmdop/services/browser/aio/session.py,sha256=2MuRXNM4wlc_6B-Xe8_DjyHFX8x7UaOmfic4T5jLHXI,12847
175
175
  cmdop/services/browser/base/__init__.py,sha256=mgG4y324zSDy-13uQiTg6rlFpaQFLc67ynbykRZuMms,227
176
176
  cmdop/services/browser/base/service.py,sha256=w8foDUGZcD4HyF5eyLZUFxbx_fctAFsYRovvsksi3l4,1584
177
177
  cmdop/services/browser/base/session.py,sha256=5-UiBxG3t5TtATih41JaPR9PdmIKfeICTM1RbhRdBok,3773
@@ -182,7 +182,7 @@ cmdop/services/browser/js/interaction.py,sha256=zdCy1l833k_a470qm3Q9QLKQrbSQ5tYg
182
182
  cmdop/services/browser/js/scroll.py,sha256=yiOMAaR8ac8jCiWgNCVIt1pUGxdvktMUtzv-AVAE-2Q,7823
183
183
  cmdop/services/browser/sync/__init__.py,sha256=sFePvIsWqhaeCU9fw_ZyOITeeEHvZx4Gtcp8W3KBKG0,222
184
184
  cmdop/services/browser/sync/service.py,sha256=HGLjGdAmmiljyub2q5KSkNSD2zB8tsk4n92vJT18mCs,15364
185
- cmdop/services/browser/sync/session.py,sha256=AnKNS-tjo5SNIC7DsQ6H6FNMG_C28_Uxd2R4J1z-v4Y,19047
185
+ cmdop/services/browser/sync/session.py,sha256=CsINEF971Y91Zg9hFmEol7jTWp3TaiNKpSL2CXMZXAg,19684
186
186
  cmdop/streaming/__init__.py,sha256=kG9UlJRqv8ndcwKMzWUddPlZT61pFO_Uf_c08A_8TxA,877
187
187
  cmdop/streaming/base.py,sha256=r7Q2QlRxgULzs9vlSGcOC_fwAQ_cF3Z3M7WsPQtxG5I,2990
188
188
  cmdop/streaming/handlers.py,sha256=FDEhADmCEFRbifvr9dU1X3C-K_96noz89Bl3tuDa_rQ,2616
@@ -193,7 +193,7 @@ cmdop/transport/base.py,sha256=2pkV8i9epgp_21dyReCfX47abRUrnALm0W5BXb-Fuz0,5571
193
193
  cmdop/transport/discovery.py,sha256=rcGAuVrR1l6jwcP0dqZxVhX1NsFK7sRHygFMCLmmUbA,10673
194
194
  cmdop/transport/local.py,sha256=ob6tWVxSdKwblHSMK8CkgjyuSdQoAeWgy5OAUd5ZNuE,7411
195
195
  cmdop/transport/remote.py,sha256=FNVqus9wOv7LlxKarXjLmSyvJiHwhvPbNDOPv1IQkmE,4329
196
- cmdop-0.1.19.dist-info/METADATA,sha256=SCm7Flcv1Y_LYvoRvU-Kz3aOgxPnZCPF5CE-HcZK-z0,7019
197
- cmdop-0.1.19.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
198
- cmdop-0.1.19.dist-info/licenses/LICENSE,sha256=6hyzbI1QVXW6B-XT7PaQ6UG9lns11Y_nnap8uUKGUqo,1062
199
- cmdop-0.1.19.dist-info/RECORD,,
196
+ cmdop-0.1.20.dist-info/METADATA,sha256=M2-UmMdH309qO_sQ5xBDohYrydjedT8YDUbX9JeZgfA,7019
197
+ cmdop-0.1.20.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
198
+ cmdop-0.1.20.dist-info/licenses/LICENSE,sha256=6hyzbI1QVXW6B-XT7PaQ6UG9lns11Y_nnap8uUKGUqo,1062
199
+ cmdop-0.1.20.dist-info/RECORD,,
File without changes