parsek-cdp 0.1.1__tar.gz → 0.1.2__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 (247) hide show
  1. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/PKG-INFO +1 -1
  2. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/browser.py +31 -3
  3. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/feature.py +5 -1
  4. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/frame.py +29 -5
  5. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/target.py +11 -3
  6. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/__init__.py +1 -3
  7. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/PKG-INFO +1 -1
  8. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/pyproject.toml +1 -1
  9. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/LICENSE +0 -0
  10. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/README.md +0 -0
  11. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/__init__.py +0 -0
  12. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/_logging.py +0 -0
  13. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/__init__.py +0 -0
  14. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/__init__.py +0 -0
  15. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/events.py +0 -0
  16. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/functions.py +0 -0
  17. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/types.py +0 -0
  18. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/__init__.py +0 -0
  19. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/events.py +0 -0
  20. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/functions.py +0 -0
  21. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/types.py +0 -0
  22. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/__init__.py +0 -0
  23. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/events.py +0 -0
  24. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/functions.py +0 -0
  25. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/types.py +0 -0
  26. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/__init__.py +0 -0
  27. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/events.py +0 -0
  28. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/functions.py +0 -0
  29. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/types.py +0 -0
  30. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/__init__.py +0 -0
  31. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/events.py +0 -0
  32. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/functions.py +0 -0
  33. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/types.py +0 -0
  34. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/__init__.py +0 -0
  35. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/events.py +0 -0
  36. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/functions.py +0 -0
  37. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/types.py +0 -0
  38. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/__init__.py +0 -0
  39. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/events.py +0 -0
  40. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/functions.py +0 -0
  41. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/types.py +0 -0
  42. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/__init__.py +0 -0
  43. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/events.py +0 -0
  44. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/functions.py +0 -0
  45. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/types.py +0 -0
  46. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/__init__.py +0 -0
  47. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/events.py +0 -0
  48. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/functions.py +0 -0
  49. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/types.py +0 -0
  50. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/__init__.py +0 -0
  51. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/events.py +0 -0
  52. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/functions.py +0 -0
  53. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/types.py +0 -0
  54. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/__init__.py +0 -0
  55. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/events.py +0 -0
  56. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/functions.py +0 -0
  57. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/types.py +0 -0
  58. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/__init__.py +0 -0
  59. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/events.py +0 -0
  60. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/functions.py +0 -0
  61. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/types.py +0 -0
  62. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/__init__.py +0 -0
  63. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/events.py +0 -0
  64. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/functions.py +0 -0
  65. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/types.py +0 -0
  66. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/__init__.py +0 -0
  67. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/events.py +0 -0
  68. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/functions.py +0 -0
  69. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/types.py +0 -0
  70. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/__init__.py +0 -0
  71. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/events.py +0 -0
  72. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/functions.py +0 -0
  73. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/types.py +0 -0
  74. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/__init__.py +0 -0
  75. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/events.py +0 -0
  76. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/functions.py +0 -0
  77. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/types.py +0 -0
  78. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/__init__.py +0 -0
  79. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/events.py +0 -0
  80. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/functions.py +0 -0
  81. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/types.py +0 -0
  82. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/__init__.py +0 -0
  83. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/events.py +0 -0
  84. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/functions.py +0 -0
  85. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/types.py +0 -0
  86. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/__init__.py +0 -0
  87. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/events.py +0 -0
  88. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/functions.py +0 -0
  89. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/types.py +0 -0
  90. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/__init__.py +0 -0
  91. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/events.py +0 -0
  92. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/functions.py +0 -0
  93. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/types.py +0 -0
  94. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/__init__.py +0 -0
  95. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/events.py +0 -0
  96. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/functions.py +0 -0
  97. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/types.py +0 -0
  98. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/__init__.py +0 -0
  99. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/events.py +0 -0
  100. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/functions.py +0 -0
  101. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/types.py +0 -0
  102. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/__init__.py +0 -0
  103. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/events.py +0 -0
  104. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/functions.py +0 -0
  105. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/types.py +0 -0
  106. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/__init__.py +0 -0
  107. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/events.py +0 -0
  108. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/functions.py +0 -0
  109. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/types.py +0 -0
  110. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/__init__.py +0 -0
  111. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/events.py +0 -0
  112. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/functions.py +0 -0
  113. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/types.py +0 -0
  114. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/__init__.py +0 -0
  115. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/events.py +0 -0
  116. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/functions.py +0 -0
  117. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/types.py +0 -0
  118. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/__init__.py +0 -0
  119. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/events.py +0 -0
  120. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/functions.py +0 -0
  121. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/types.py +0 -0
  122. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/__init__.py +0 -0
  123. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/events.py +0 -0
  124. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/functions.py +0 -0
  125. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/types.py +0 -0
  126. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/__init__.py +0 -0
  127. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/events.py +0 -0
  128. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/functions.py +0 -0
  129. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/types.py +0 -0
  130. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/__init__.py +0 -0
  131. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/events.py +0 -0
  132. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/functions.py +0 -0
  133. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/types.py +0 -0
  134. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/__init__.py +0 -0
  135. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/events.py +0 -0
  136. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/functions.py +0 -0
  137. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/types.py +0 -0
  138. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/__init__.py +0 -0
  139. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/events.py +0 -0
  140. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/functions.py +0 -0
  141. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/types.py +0 -0
  142. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/__init__.py +0 -0
  143. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/events.py +0 -0
  144. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/functions.py +0 -0
  145. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/types.py +0 -0
  146. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/__init__.py +0 -0
  147. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/events.py +0 -0
  148. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/functions.py +0 -0
  149. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/types.py +0 -0
  150. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/__init__.py +0 -0
  151. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/datatype.py +0 -0
  152. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/event.py +0 -0
  153. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/namespace.py +0 -0
  154. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/__init__.py +0 -0
  155. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/events.py +0 -0
  156. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/functions.py +0 -0
  157. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/types.py +0 -0
  158. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/__init__.py +0 -0
  159. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/events.py +0 -0
  160. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/functions.py +0 -0
  161. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/types.py +0 -0
  162. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/__init__.py +0 -0
  163. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/events.py +0 -0
  164. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/functions.py +0 -0
  165. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/types.py +0 -0
  166. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/__init__.py +0 -0
  167. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/events.py +0 -0
  168. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/functions.py +0 -0
  169. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/types.py +0 -0
  170. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/__init__.py +0 -0
  171. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/events.py +0 -0
  172. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/functions.py +0 -0
  173. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/types.py +0 -0
  174. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/__init__.py +0 -0
  175. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/events.py +0 -0
  176. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/functions.py +0 -0
  177. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/types.py +0 -0
  178. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/__init__.py +0 -0
  179. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/events.py +0 -0
  180. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/functions.py +0 -0
  181. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/types.py +0 -0
  182. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/__init__.py +0 -0
  183. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/events.py +0 -0
  184. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/functions.py +0 -0
  185. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/types.py +0 -0
  186. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/__init__.py +0 -0
  187. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/events.py +0 -0
  188. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/functions.py +0 -0
  189. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/types.py +0 -0
  190. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/__init__.py +0 -0
  191. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/events.py +0 -0
  192. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/functions.py +0 -0
  193. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/types.py +0 -0
  194. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/__init__.py +0 -0
  195. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/events.py +0 -0
  196. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/functions.py +0 -0
  197. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/types.py +0 -0
  198. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/__init__.py +0 -0
  199. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/events.py +0 -0
  200. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/functions.py +0 -0
  201. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/types.py +0 -0
  202. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/__init__.py +0 -0
  203. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/events.py +0 -0
  204. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/functions.py +0 -0
  205. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/types.py +0 -0
  206. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/__init__.py +0 -0
  207. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/events.py +0 -0
  208. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/functions.py +0 -0
  209. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/types.py +0 -0
  210. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/__init__.py +0 -0
  211. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/events.py +0 -0
  212. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/functions.py +0 -0
  213. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/types.py +0 -0
  214. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/__init__.py +0 -0
  215. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/events.py +0 -0
  216. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/functions.py +0 -0
  217. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/types.py +0 -0
  218. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/__init__.py +0 -0
  219. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/events.py +0 -0
  220. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/functions.py +0 -0
  221. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/types.py +0 -0
  222. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/__init__.py +0 -0
  223. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/events.py +0 -0
  224. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/functions.py +0 -0
  225. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/types.py +0 -0
  226. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/__init__.py +0 -0
  227. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/events.py +0 -0
  228. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/functions.py +0 -0
  229. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/types.py +0 -0
  230. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/__init__.py +0 -0
  231. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/browser_context.py +0 -0
  232. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/element.py +0 -0
  233. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/pagable.py +0 -0
  234. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/page.py +0 -0
  235. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/__init__.py +0 -0
  236. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/events.py +0 -0
  237. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/types.py +0 -0
  238. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/generate.py +0 -0
  239. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/__init__.py +0 -0
  240. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/events.py +0 -0
  241. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/types.py +0 -0
  242. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/py.typed +0 -0
  243. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/SOURCES.txt +0 -0
  244. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/dependency_links.txt +0 -0
  245. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/requires.txt +0 -0
  246. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/top_level.txt +0 -0
  247. {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: parsek-cdp
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Chrome DevTools Protocol client — generated protocol layer + async runtime (client scope).
5
5
  Author: xa1era
6
6
  License-Expression: Apache-2.0
@@ -3,10 +3,12 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import dataclasses
6
7
  import json
7
8
  import urllib.parse
8
9
  import urllib.request
9
- from typing import ClassVar, List, Optional
10
+ from dataclasses import dataclass, field
11
+ from typing import Any, ClassVar, Dict, List, Optional
10
12
 
11
13
  from ..cdp import CDP
12
14
  from ..cdp import Target as TargetDomain
@@ -23,6 +25,32 @@ from .target import (
23
25
  )
24
26
 
25
27
 
28
+ @dataclass
29
+ class LaunchOptions:
30
+ """How to start the browser.
31
+
32
+ Plain internal config, not a CDP wire type -- ``to_json``/``from_json`` are
33
+ hand-rolled here (rather than via :class:`DataType`, whose ``__FIELDS__``
34
+ machinery is driven by protocol codegen and fills any field absent from the
35
+ payload with ``None``, clobbering these fields' non-``None`` defaults).
36
+ """
37
+
38
+ executable: Optional[str] = None # autodetect if None
39
+ headless: bool = True
40
+ port: int = 0
41
+ user_data_dir: Optional[str] = None
42
+ extra_args: List[str] = field(default_factory=list)
43
+ use_default_args: bool = True
44
+
45
+ def to_json(self) -> Dict[str, Any]:
46
+ return dataclasses.asdict(self)
47
+
48
+ @classmethod
49
+ def from_json(cls, data: Dict[str, Any]) -> "LaunchOptions":
50
+ allowed = {f.name for f in dataclasses.fields(cls)}
51
+ return cls(**{k: v for k, v in data.items() if k in allowed})
52
+
53
+
26
54
  class Browser[T: Page](Target, PagableTarget[T]):
27
55
  """The browser endpoint.
28
56
 
@@ -109,7 +137,7 @@ class Browser[T: Page](Target, PagableTarget[T]):
109
137
  *,
110
138
  features: Optional[tuple] = None,
111
139
  page_class: Optional[type] = None,
112
- **launch,
140
+ launch_options: LaunchOptions = LaunchOptions(),
113
141
  ) -> "Browser[T]":
114
142
  """Create a browser on a parsek-cdp-server and return it, connected.
115
143
 
@@ -133,7 +161,7 @@ class Browser[T: Page](Target, PagableTarget[T]):
133
161
  )
134
162
  query = "&".join(f"feature={urllib.parse.quote(f.__name__)}" for f in feats)
135
163
  url = f"{server.rstrip('/')}/browsers" + (f"?{query}" if query else "")
136
- payload = json.dumps(launch).encode()
164
+ payload = json.dumps(launch_options.to_json()).encode()
137
165
  # Run the blocking HTTP POST off the event loop so it never stalls it
138
166
  # (notably when client and server share one loop in tests).
139
167
  info = await asyncio.to_thread(cls._post_json, url, payload)
@@ -43,6 +43,7 @@ import dataclasses
43
43
  import typing
44
44
  from enum import Enum
45
45
  from typing import (
46
+ TYPE_CHECKING,
46
47
  Any,
47
48
  Callable,
48
49
  ClassVar,
@@ -57,6 +58,9 @@ from typing import (
57
58
 
58
59
  from ..cdp.mixins.datatype import DataType, FieldMeta, register
59
60
 
61
+ if TYPE_CHECKING:
62
+ from .page import Page
63
+
60
64
  __all__ = ["Feature", "FeatureHost", "parsek_type", "on", "emit"]
61
65
 
62
66
  # python class -> its registered qualified protocol name, for nested-ref resolution.
@@ -177,7 +181,7 @@ class Feature:
177
181
  #: client passthrough.
178
182
  domains: tuple = ()
179
183
 
180
- def __init__(self, host: Any, *, role: str = "client") -> None:
184
+ def __init__(self, host: Page, *, role: str = "client") -> None:
181
185
  self.host = host
182
186
  self.role = role
183
187
  #: cdp method -> (event class, bound handler, emits class | None)
@@ -73,8 +73,19 @@ class Frame:
73
73
  self._dom_generation = 0
74
74
  self._head_elem = None
75
75
 
76
+ self._bind_frame_tracking()
76
77
  self._bind_dom_tracking()
77
78
 
79
+ def _bind_frame_tracking(self) -> None:
80
+ self.target.on(Page.FrameAttached, self._on_page_attach_frame)
81
+ self.target.on(Page.FrameNavigated, self._on_page_navigated_frame)
82
+ self.target.on(Page.FrameDetached, self._on_page_dettached_frame)
83
+
84
+ def _unbind_frame_tracking(self) -> None:
85
+ self.target.off(Page.FrameAttached, self._on_page_attach_frame)
86
+ self.target.off(Page.FrameNavigated, self._on_page_navigated_frame)
87
+ self.target.off(Page.FrameDetached, self._on_page_dettached_frame)
88
+
78
89
  def _bind_dom_tracking(self) -> None:
79
90
  """Track every event that invalidates this frame's ``nodeId`` map.
80
91
 
@@ -98,14 +109,15 @@ class Frame:
98
109
  self._dom_generation += 1
99
110
 
100
111
  def dispose(self) -> None:
101
- """Unregister this frame's (and its subtree's) DOM-tracking handlers.
112
+ """Unregister this frame's (and its subtree's) target-level handlers.
102
113
 
103
114
  Same-origin frames share one target, so the handlers bound in
104
- :meth:`_bind_dom_tracking` outlive the frame unless removed explicitly.
105
- Call this whenever a frame leaves the tree (see :meth:`detach_frame` /
106
- :meth:`refresh_frame`) so recreated frames don't pile up dead handlers on
107
- the target.
115
+ :meth:`_bind_dom_tracking` / :meth:`_bind_frame_tracking` outlive the
116
+ frame unless removed explicitly. Call this whenever a frame leaves the
117
+ tree (see :meth:`detach_frame` / :meth:`refresh_frame`) so recreated
118
+ frames don't pile up dead handlers on the target.
108
119
  """
120
+ self._unbind_frame_tracking()
109
121
  self._unbind_dom_tracking()
110
122
  for child in list(self._frames.values()):
111
123
  child.dispose()
@@ -336,6 +348,18 @@ class Frame:
336
348
  return visible, element
337
349
  return not visible, element
338
350
 
351
+ async def _on_page_attach_frame(self, event: Page.FrameAttached):
352
+ if event.parent_frame_id == self.id:
353
+ await self.refresh_frame()
354
+
355
+ def _on_page_navigated_frame(self, event: Page.FrameNavigated):
356
+ if event.frame.id == self.id:
357
+ self._frame = event.frame
358
+
359
+ def _on_page_dettached_frame(self, event: Page.FrameDetached):
360
+ if event.frame_id in self._frames:
361
+ self._frames.pop(event.frame_id, None)
362
+
339
363
  def attach_frame(self, frame: Frame):
340
364
  self._frames[frame.id] = frame
341
365
 
@@ -386,13 +386,13 @@ class Target(CDPConnection):
386
386
  ``parent_frame_id``; a popup under its ``opener_id``), rooting at this
387
387
  target. Existing :class:`Target` objects are reused -- preserving their
388
388
  identity and any open websocket -- and targets gone from the snapshot are
389
- dropped. Returns this target's direct children.
389
+ dropped and closed. Returns this target's direct children.
390
390
  """
391
391
  infos = (await self.cdp.Target.get_targets()).target_infos
392
- self._rebuild_tree(infos)
392
+ await self._rebuild_tree(infos)
393
393
  return self.targets
394
394
 
395
- def _rebuild_tree(self, infos: list[TargetDomain.TargetInfo]) -> None:
395
+ async def _rebuild_tree(self, infos: list[TargetDomain.TargetInfo]) -> None:
396
396
  # ``getTargets`` is browser-wide, so group children by their parent and
397
397
  # then walk only the subtree rooted at *this* target -- a page must not
398
398
  # adopt unrelated top-level targets (other tabs, extensions, ...).
@@ -419,6 +419,7 @@ class Target(CDPConnection):
419
419
  self._targets = {}
420
420
 
421
421
  root_key = None if self.type_ == "browser" else self.id
422
+ attached: set[str] = set()
422
423
 
423
424
  def attach(parent: Target, key: Optional[str], seen: set[str]) -> None:
424
425
  for info in children_of.get(key, ()):
@@ -426,6 +427,7 @@ class Target(CDPConnection):
426
427
  if tid in seen: # guard against cyclic parent links
427
428
  continue
428
429
  seen.add(tid)
430
+ attached.add(tid)
429
431
  node = known.get(tid) or Target(info, parent)
430
432
  node._target = info
431
433
  node._parent = parent
@@ -434,6 +436,12 @@ class Target(CDPConnection):
434
436
 
435
437
  attach(self, root_key, set())
436
438
 
439
+ # Nodes gone from the fresh snapshot aren't reattached above -- close
440
+ # them explicitly so their websocket and receive loop don't leak.
441
+ for tid, node in known.items():
442
+ if tid not in attached:
443
+ await node.close()
444
+
437
445
  async def _on_target_created(self, event: TargetDomain.TargetCreated):
438
446
  info = event.target_info
439
447
  parent_id = info.opener_id or info.parent_frame_id
@@ -126,9 +126,7 @@ class RequestListener(Feature):
126
126
  old._completed.set()
127
127
  self._requests.clear()
128
128
  keep = data.request_id
129
- self._pending = (
130
- {keep: self._pending[keep]} if keep in self._pending else {}
131
- )
129
+ self._pending = {keep: self._pending[keep]} if keep in self._pending else {}
132
130
  self._resp = {keep: self._resp[keep]} if keep in self._resp else {}
133
131
  self._emitted = {keep} if keep in self._emitted else set()
134
132
  self._served_from_cache = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: parsek-cdp
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Chrome DevTools Protocol client — generated protocol layer + async runtime (client scope).
5
5
  Author: xa1era
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "parsek-cdp"
7
- version = "0.1.1"
7
+ version = "0.1.2"
8
8
  description = "Chrome DevTools Protocol client — generated protocol layer + async runtime (client scope)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
File without changes
File without changes