pybiolib 0.2.951__py3-none-any.whl → 1.2.1890__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.
Files changed (262) hide show
  1. biolib/__init__.py +357 -11
  2. biolib/_data_record/data_record.py +380 -0
  3. biolib/_index/__init__.py +0 -0
  4. biolib/_index/index.py +55 -0
  5. biolib/_index/query_result.py +103 -0
  6. biolib/_internal/__init__.py +0 -0
  7. biolib/_internal/add_copilot_prompts.py +58 -0
  8. biolib/_internal/add_gui_files.py +81 -0
  9. biolib/_internal/data_record/__init__.py +1 -0
  10. biolib/_internal/data_record/data_record.py +85 -0
  11. biolib/_internal/data_record/push_data.py +116 -0
  12. biolib/_internal/data_record/remote_storage_endpoint.py +43 -0
  13. biolib/_internal/errors.py +5 -0
  14. biolib/_internal/file_utils.py +125 -0
  15. biolib/_internal/fuse_mount/__init__.py +1 -0
  16. biolib/_internal/fuse_mount/experiment_fuse_mount.py +209 -0
  17. biolib/_internal/http_client.py +159 -0
  18. biolib/_internal/lfs/__init__.py +1 -0
  19. biolib/_internal/lfs/cache.py +51 -0
  20. biolib/_internal/libs/__init__.py +1 -0
  21. biolib/_internal/libs/fusepy/__init__.py +1257 -0
  22. biolib/_internal/push_application.py +488 -0
  23. biolib/_internal/runtime.py +22 -0
  24. biolib/_internal/string_utils.py +13 -0
  25. biolib/_internal/templates/__init__.py +1 -0
  26. biolib/_internal/templates/copilot_template/.github/instructions/general-app-knowledge.instructions.md +10 -0
  27. biolib/_internal/templates/copilot_template/.github/instructions/style-general.instructions.md +20 -0
  28. biolib/_internal/templates/copilot_template/.github/instructions/style-python.instructions.md +16 -0
  29. biolib/_internal/templates/copilot_template/.github/instructions/style-react-ts.instructions.md +47 -0
  30. biolib/_internal/templates/copilot_template/.github/prompts/biolib_app_inputs.prompt.md +11 -0
  31. biolib/_internal/templates/copilot_template/.github/prompts/biolib_onboard_repo.prompt.md +19 -0
  32. biolib/_internal/templates/copilot_template/.github/prompts/biolib_run_apps.prompt.md +12 -0
  33. biolib/_internal/templates/dashboard_template/.biolib/config.yml +5 -0
  34. biolib/_internal/templates/github_workflow_template/.github/workflows/biolib.yml +21 -0
  35. biolib/_internal/templates/gitignore_template/.gitignore +10 -0
  36. biolib/_internal/templates/gui_template/.yarnrc.yml +1 -0
  37. biolib/_internal/templates/gui_template/App.tsx +53 -0
  38. biolib/_internal/templates/gui_template/Dockerfile +27 -0
  39. biolib/_internal/templates/gui_template/biolib-sdk.ts +82 -0
  40. biolib/_internal/templates/gui_template/dev-data/output.json +7 -0
  41. biolib/_internal/templates/gui_template/index.css +5 -0
  42. biolib/_internal/templates/gui_template/index.html +13 -0
  43. biolib/_internal/templates/gui_template/index.tsx +10 -0
  44. biolib/_internal/templates/gui_template/package.json +27 -0
  45. biolib/_internal/templates/gui_template/tsconfig.json +24 -0
  46. biolib/_internal/templates/gui_template/vite-plugin-dev-data.ts +50 -0
  47. biolib/_internal/templates/gui_template/vite.config.mts +10 -0
  48. biolib/_internal/templates/init_template/.biolib/config.yml +19 -0
  49. biolib/_internal/templates/init_template/Dockerfile +14 -0
  50. biolib/_internal/templates/init_template/requirements.txt +1 -0
  51. biolib/_internal/templates/init_template/run.py +12 -0
  52. biolib/_internal/templates/init_template/run.sh +4 -0
  53. biolib/_internal/templates/templates.py +25 -0
  54. biolib/_internal/tree_utils.py +106 -0
  55. biolib/_internal/utils/__init__.py +65 -0
  56. biolib/_internal/utils/auth.py +46 -0
  57. biolib/_internal/utils/job_url.py +33 -0
  58. biolib/_internal/utils/multinode.py +263 -0
  59. biolib/_runtime/runtime.py +157 -0
  60. biolib/_session/session.py +44 -0
  61. biolib/_shared/__init__.py +0 -0
  62. biolib/_shared/types/__init__.py +74 -0
  63. biolib/_shared/types/account.py +12 -0
  64. biolib/_shared/types/account_member.py +8 -0
  65. biolib/_shared/types/app.py +9 -0
  66. biolib/_shared/types/data_record.py +40 -0
  67. biolib/_shared/types/experiment.py +32 -0
  68. biolib/_shared/types/file_node.py +17 -0
  69. biolib/_shared/types/push.py +6 -0
  70. biolib/_shared/types/resource.py +37 -0
  71. biolib/_shared/types/resource_deploy_key.py +11 -0
  72. biolib/_shared/types/resource_permission.py +14 -0
  73. biolib/_shared/types/resource_version.py +19 -0
  74. biolib/_shared/types/result.py +14 -0
  75. biolib/_shared/types/typing.py +10 -0
  76. biolib/_shared/types/user.py +19 -0
  77. biolib/_shared/utils/__init__.py +7 -0
  78. biolib/_shared/utils/resource_uri.py +75 -0
  79. biolib/api/__init__.py +6 -0
  80. biolib/api/client.py +168 -0
  81. biolib/app/app.py +252 -49
  82. biolib/app/search_apps.py +45 -0
  83. biolib/biolib_api_client/api_client.py +126 -31
  84. biolib/biolib_api_client/app_types.py +24 -4
  85. biolib/biolib_api_client/auth.py +31 -8
  86. biolib/biolib_api_client/biolib_app_api.py +147 -52
  87. biolib/biolib_api_client/biolib_job_api.py +161 -141
  88. biolib/biolib_api_client/job_types.py +21 -5
  89. biolib/biolib_api_client/lfs_types.py +7 -23
  90. biolib/biolib_api_client/user_state.py +56 -0
  91. biolib/biolib_binary_format/__init__.py +1 -4
  92. biolib/biolib_binary_format/file_in_container.py +105 -0
  93. biolib/biolib_binary_format/module_input.py +24 -7
  94. biolib/biolib_binary_format/module_output_v2.py +149 -0
  95. biolib/biolib_binary_format/remote_endpoints.py +34 -0
  96. biolib/biolib_binary_format/remote_stream_seeker.py +59 -0
  97. biolib/biolib_binary_format/saved_job.py +3 -2
  98. biolib/biolib_binary_format/{attestation_document.py → stdout_and_stderr.py} +8 -8
  99. biolib/biolib_binary_format/system_status_update.py +3 -2
  100. biolib/biolib_binary_format/utils.py +175 -0
  101. biolib/biolib_docker_client/__init__.py +11 -2
  102. biolib/biolib_errors.py +36 -0
  103. biolib/biolib_logging.py +27 -10
  104. biolib/cli/__init__.py +38 -0
  105. biolib/cli/auth.py +46 -0
  106. biolib/cli/data_record.py +164 -0
  107. biolib/cli/index.py +32 -0
  108. biolib/cli/init.py +421 -0
  109. biolib/cli/lfs.py +101 -0
  110. biolib/cli/push.py +50 -0
  111. biolib/cli/run.py +63 -0
  112. biolib/cli/runtime.py +14 -0
  113. biolib/cli/sdk.py +16 -0
  114. biolib/cli/start.py +56 -0
  115. biolib/compute_node/cloud_utils/cloud_utils.py +110 -161
  116. biolib/compute_node/job_worker/cache_state.py +66 -88
  117. biolib/compute_node/job_worker/cache_types.py +1 -6
  118. biolib/compute_node/job_worker/docker_image_cache.py +112 -37
  119. biolib/compute_node/job_worker/executors/__init__.py +0 -3
  120. biolib/compute_node/job_worker/executors/docker_executor.py +532 -199
  121. biolib/compute_node/job_worker/executors/docker_types.py +9 -1
  122. biolib/compute_node/job_worker/executors/types.py +19 -9
  123. biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +30 -0
  124. biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +3 -5
  125. biolib/compute_node/job_worker/job_storage.py +108 -0
  126. biolib/compute_node/job_worker/job_worker.py +397 -212
  127. biolib/compute_node/job_worker/large_file_system.py +87 -38
  128. biolib/compute_node/job_worker/network_alloc.py +99 -0
  129. biolib/compute_node/job_worker/network_buffer.py +240 -0
  130. biolib/compute_node/job_worker/utilization_reporter_thread.py +197 -0
  131. biolib/compute_node/job_worker/utils.py +9 -24
  132. biolib/compute_node/remote_host_proxy.py +400 -98
  133. biolib/compute_node/utils.py +31 -9
  134. biolib/compute_node/webserver/compute_node_results_proxy.py +189 -0
  135. biolib/compute_node/webserver/proxy_utils.py +28 -0
  136. biolib/compute_node/webserver/webserver.py +130 -44
  137. biolib/compute_node/webserver/webserver_types.py +2 -6
  138. biolib/compute_node/webserver/webserver_utils.py +77 -12
  139. biolib/compute_node/webserver/worker_thread.py +183 -42
  140. biolib/experiments/__init__.py +0 -0
  141. biolib/experiments/experiment.py +356 -0
  142. biolib/jobs/__init__.py +1 -0
  143. biolib/jobs/job.py +741 -0
  144. biolib/jobs/job_result.py +185 -0
  145. biolib/jobs/types.py +50 -0
  146. biolib/py.typed +0 -0
  147. biolib/runtime/__init__.py +14 -0
  148. biolib/sdk/__init__.py +91 -0
  149. biolib/tables.py +34 -0
  150. biolib/typing_utils.py +2 -7
  151. biolib/user/__init__.py +1 -0
  152. biolib/user/sign_in.py +54 -0
  153. biolib/utils/__init__.py +162 -0
  154. biolib/utils/cache_state.py +94 -0
  155. biolib/utils/multipart_uploader.py +194 -0
  156. biolib/utils/seq_util.py +150 -0
  157. biolib/utils/zip/remote_zip.py +640 -0
  158. pybiolib-1.2.1890.dist-info/METADATA +41 -0
  159. pybiolib-1.2.1890.dist-info/RECORD +177 -0
  160. {pybiolib-0.2.951.dist-info → pybiolib-1.2.1890.dist-info}/WHEEL +1 -1
  161. pybiolib-1.2.1890.dist-info/entry_points.txt +2 -0
  162. README.md +0 -17
  163. biolib/app/app_result.py +0 -68
  164. biolib/app/utils.py +0 -62
  165. biolib/biolib-js/0-biolib.worker.js +0 -1
  166. biolib/biolib-js/1-biolib.worker.js +0 -1
  167. biolib/biolib-js/2-biolib.worker.js +0 -1
  168. biolib/biolib-js/3-biolib.worker.js +0 -1
  169. biolib/biolib-js/4-biolib.worker.js +0 -1
  170. biolib/biolib-js/5-biolib.worker.js +0 -1
  171. biolib/biolib-js/6-biolib.worker.js +0 -1
  172. biolib/biolib-js/index.html +0 -10
  173. biolib/biolib-js/main-biolib.js +0 -1
  174. biolib/biolib_api_client/biolib_account_api.py +0 -21
  175. biolib/biolib_api_client/biolib_large_file_system_api.py +0 -108
  176. biolib/biolib_binary_format/aes_encrypted_package.py +0 -42
  177. biolib/biolib_binary_format/module_output.py +0 -58
  178. biolib/biolib_binary_format/rsa_encrypted_aes_package.py +0 -57
  179. biolib/biolib_push.py +0 -114
  180. biolib/cli.py +0 -203
  181. biolib/cli_utils.py +0 -273
  182. biolib/compute_node/cloud_utils/enclave_parent_types.py +0 -7
  183. biolib/compute_node/enclave/__init__.py +0 -2
  184. biolib/compute_node/enclave/enclave_remote_hosts.py +0 -53
  185. biolib/compute_node/enclave/nitro_secure_module_utils.py +0 -64
  186. biolib/compute_node/job_worker/executors/base_executor.py +0 -18
  187. biolib/compute_node/job_worker/executors/pyppeteer_executor.py +0 -173
  188. biolib/compute_node/job_worker/executors/remote/__init__.py +0 -1
  189. biolib/compute_node/job_worker/executors/remote/nitro_enclave_utils.py +0 -81
  190. biolib/compute_node/job_worker/executors/remote/remote_executor.py +0 -51
  191. biolib/lfs.py +0 -196
  192. biolib/pyppeteer/.circleci/config.yml +0 -100
  193. biolib/pyppeteer/.coveragerc +0 -3
  194. biolib/pyppeteer/.gitignore +0 -89
  195. biolib/pyppeteer/.pre-commit-config.yaml +0 -28
  196. biolib/pyppeteer/CHANGES.md +0 -253
  197. biolib/pyppeteer/CONTRIBUTING.md +0 -26
  198. biolib/pyppeteer/LICENSE +0 -12
  199. biolib/pyppeteer/README.md +0 -137
  200. biolib/pyppeteer/docs/Makefile +0 -177
  201. biolib/pyppeteer/docs/_static/custom.css +0 -28
  202. biolib/pyppeteer/docs/_templates/layout.html +0 -10
  203. biolib/pyppeteer/docs/changes.md +0 -1
  204. biolib/pyppeteer/docs/conf.py +0 -299
  205. biolib/pyppeteer/docs/index.md +0 -21
  206. biolib/pyppeteer/docs/make.bat +0 -242
  207. biolib/pyppeteer/docs/reference.md +0 -211
  208. biolib/pyppeteer/docs/server.py +0 -60
  209. biolib/pyppeteer/poetry.lock +0 -1699
  210. biolib/pyppeteer/pyppeteer/__init__.py +0 -135
  211. biolib/pyppeteer/pyppeteer/accessibility.py +0 -286
  212. biolib/pyppeteer/pyppeteer/browser.py +0 -401
  213. biolib/pyppeteer/pyppeteer/browser_fetcher.py +0 -194
  214. biolib/pyppeteer/pyppeteer/command.py +0 -22
  215. biolib/pyppeteer/pyppeteer/connection/__init__.py +0 -242
  216. biolib/pyppeteer/pyppeteer/connection/cdpsession.py +0 -101
  217. biolib/pyppeteer/pyppeteer/coverage.py +0 -346
  218. biolib/pyppeteer/pyppeteer/device_descriptors.py +0 -787
  219. biolib/pyppeteer/pyppeteer/dialog.py +0 -79
  220. biolib/pyppeteer/pyppeteer/domworld.py +0 -597
  221. biolib/pyppeteer/pyppeteer/emulation_manager.py +0 -53
  222. biolib/pyppeteer/pyppeteer/errors.py +0 -48
  223. biolib/pyppeteer/pyppeteer/events.py +0 -63
  224. biolib/pyppeteer/pyppeteer/execution_context.py +0 -156
  225. biolib/pyppeteer/pyppeteer/frame/__init__.py +0 -299
  226. biolib/pyppeteer/pyppeteer/frame/frame_manager.py +0 -306
  227. biolib/pyppeteer/pyppeteer/helpers.py +0 -245
  228. biolib/pyppeteer/pyppeteer/input.py +0 -371
  229. biolib/pyppeteer/pyppeteer/jshandle.py +0 -598
  230. biolib/pyppeteer/pyppeteer/launcher.py +0 -683
  231. biolib/pyppeteer/pyppeteer/lifecycle_watcher.py +0 -169
  232. biolib/pyppeteer/pyppeteer/models/__init__.py +0 -103
  233. biolib/pyppeteer/pyppeteer/models/_protocol.py +0 -12460
  234. biolib/pyppeteer/pyppeteer/multimap.py +0 -82
  235. biolib/pyppeteer/pyppeteer/network_manager.py +0 -678
  236. biolib/pyppeteer/pyppeteer/options.py +0 -8
  237. biolib/pyppeteer/pyppeteer/page.py +0 -1728
  238. biolib/pyppeteer/pyppeteer/pipe_transport.py +0 -59
  239. biolib/pyppeteer/pyppeteer/target.py +0 -147
  240. biolib/pyppeteer/pyppeteer/task_queue.py +0 -24
  241. biolib/pyppeteer/pyppeteer/timeout_settings.py +0 -36
  242. biolib/pyppeteer/pyppeteer/tracing.py +0 -93
  243. biolib/pyppeteer/pyppeteer/us_keyboard_layout.py +0 -305
  244. biolib/pyppeteer/pyppeteer/util.py +0 -18
  245. biolib/pyppeteer/pyppeteer/websocket_transport.py +0 -47
  246. biolib/pyppeteer/pyppeteer/worker.py +0 -101
  247. biolib/pyppeteer/pyproject.toml +0 -97
  248. biolib/pyppeteer/spell.txt +0 -137
  249. biolib/pyppeteer/tox.ini +0 -72
  250. biolib/pyppeteer/utils/generate_protocol_types.py +0 -603
  251. biolib/start_cli.py +0 -7
  252. biolib/utils.py +0 -47
  253. biolib/validators/validate_app_version.py +0 -183
  254. biolib/validators/validate_argument.py +0 -134
  255. biolib/validators/validate_module.py +0 -323
  256. biolib/validators/validate_zip_file.py +0 -40
  257. biolib/validators/validator_utils.py +0 -103
  258. pybiolib-0.2.951.dist-info/LICENSE +0 -21
  259. pybiolib-0.2.951.dist-info/METADATA +0 -61
  260. pybiolib-0.2.951.dist-info/RECORD +0 -153
  261. pybiolib-0.2.951.dist-info/entry_points.txt +0 -3
  262. /LICENSE → /pybiolib-1.2.1890.dist-info/licenses/LICENSE +0 -0
@@ -1,59 +0,0 @@
1
- import logging
2
- from typing import Callable, Optional
3
-
4
- from pyppeteer import helpers
5
-
6
- logger = logging.getLogger(__name__)
7
-
8
-
9
- class PipeTransport:
10
- def __init__(
11
- self, pipeWrite, pipeRead,
12
- ):
13
- self._pipeWrite = pipeWrite
14
- self._pendingMessage = ''
15
- self.onmessage: Optional[Callable[[Optional[str], str], None]] = None
16
- self.onclose: Optional[Callable[[], None]] = None
17
-
18
- def _onclose() -> None:
19
- if self.onclose:
20
- self.onclose()
21
-
22
- self._eventListeners = [
23
- helpers.addEventListener(pipeRead, 'data', lambda buffer: self._dispatch(buffer)),
24
- helpers.addEventListener(pipeRead, 'close', _onclose),
25
- helpers.addEventListener(
26
- pipeRead, 'error', lambda e: logger.error(f'An exception occurred on pipe read: {e}')
27
- ),
28
- helpers.addEventListener(
29
- pipeWrite, 'error', lambda e: logger.error(f'An exception occurred on pipe read: {e}')
30
- ),
31
- ]
32
-
33
- def send(self, message: str) -> None:
34
- self._pipeWrite.write(message)
35
- self._pipeWrite.write('\0')
36
-
37
- def _dispatch(self, buffer: str) -> None:
38
- end = buffer.find('\0') # -1 means nothing found
39
- if end == -1:
40
- self._pendingMessage += buffer
41
- return
42
-
43
- message = self._pendingMessage + buffer
44
- if message and self.onmessage:
45
- self.onmessage(None, message)
46
-
47
- start = end + 1
48
- end = buffer.find('\0', start)
49
- while end != -1:
50
- if self.onmessage:
51
- self.onmessage(None, buffer)
52
- start = end + 1
53
- end = buffer.find('\0', start)
54
-
55
- self._pendingMessage = buffer
56
-
57
- def close(self) -> None:
58
- self._pipeWrite = None
59
- helpers.removeEventListeners(self._eventListeners)
@@ -1,147 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """Target module."""
5
-
6
- import asyncio
7
- from typing import TYPE_CHECKING, Awaitable, Callable, Dict, Optional
8
-
9
- from biolib.pyppeteer.pyppeteer.connection import CDPSession
10
- from biolib.pyppeteer.pyppeteer.events import Events
11
- from biolib.pyppeteer.pyppeteer.helpers import safe_future_set_result
12
- from biolib.pyppeteer.pyppeteer.models import Protocol
13
- from biolib.pyppeteer.pyppeteer.page import Page
14
- from biolib.pyppeteer.pyppeteer.task_queue import TaskQueue
15
- from biolib.pyppeteer.pyppeteer.worker import Worker
16
-
17
- if TYPE_CHECKING:
18
- from pyppeteer.browser import Browser, BrowserContext
19
-
20
-
21
- class Target:
22
- """Browser's target class."""
23
-
24
- def __init__(
25
- self,
26
- targetInfo: Dict,
27
- browserContext: 'BrowserContext',
28
- sessionFactory: Callable[[], Awaitable[CDPSession]],
29
- ignoreHTTPSErrors: bool,
30
- defaultViewport: Protocol.Page.Viewport,
31
- screenshotTaskQueue: TaskQueue,
32
- loop: asyncio.AbstractEventLoop,
33
- ) -> None:
34
- self._targetInfo = targetInfo
35
- self._browserContext = browserContext
36
- self._targetId = targetInfo.get('targetId', '')
37
- self._sessionFactory = sessionFactory
38
- self._ignoreHTTPSErrors = ignoreHTTPSErrors
39
- self._defaultViewport = defaultViewport
40
- self._screenshotTaskQueue = screenshotTaskQueue
41
- self._page: Optional[Page] = None
42
- self._workerFuture: Optional[Awaitable[Worker]] = None
43
- self.loop = loop
44
-
45
- self._initializedPromise = self.loop.create_future()
46
- self._isClosedPromise = self.loop.create_future()
47
- self._isInitialized = self._targetInfo['type'] != 'page' or self._targetInfo['url'] != ''
48
- if self._isInitialized:
49
- self._initializedCallback(True)
50
-
51
- def _initializedCallback(self, success: bool) -> None:
52
- if not success:
53
- return safe_future_set_result(self._initializedPromise, False)
54
- opener = self.opener
55
- if not opener or not opener._page or self.type != 'page':
56
- return self._initializedPromise.set_result(True)
57
- openerPage = opener._page
58
- if not openerPage.listeners(Events.Page.Popup):
59
- return self._initializedPromise.set_result(True)
60
- openerPage.emit(Events.Page.Popup, openerPage)
61
- return self._initializedPromise.set_result(True)
62
-
63
- def _closedCallback(self) -> None:
64
- self._isClosedPromise.set_result(None)
65
-
66
- async def createCDPSession(self) -> CDPSession:
67
- """Create a Chrome Devtools Protocol session attached to the target."""
68
- return await self._sessionFactory()
69
-
70
- async def page(self) -> Optional[Page]:
71
- """Get page of this target.
72
-
73
- If the target is not of type "page" or "background_page", return
74
- ``None``.
75
- """
76
- if self._page:
77
- return self._page
78
- if self._targetInfo['type'] in ['page', 'background_page']:
79
- session = await self._sessionFactory()
80
- self._page = await Page.create(
81
- client=session,
82
- target=self,
83
- ignoreHTTPSErrors=self._ignoreHTTPSErrors,
84
- defaultViewport=self._defaultViewport,
85
- screenshotTaskQueue=self._screenshotTaskQueue,
86
- )
87
- return self._page
88
-
89
- def worker(self) -> Optional[Awaitable[Worker]]:
90
- _type = self._targetInfo['type']
91
- if _type not in ['service_worker', 'shared_worker']:
92
- return None
93
- if not self._workerFuture:
94
-
95
- async def worker_fut_task() -> Worker:
96
- nonlocal self
97
- session = await self._sessionFactory()
98
- return Worker(session, self._targetInfo['url'], lambda *_: None, lambda *_: None)
99
-
100
- self._workerFuture = self.loop.create_task(worker_fut_task())
101
- return self._workerFuture
102
-
103
- @property
104
- def url(self) -> str:
105
- """Get url of this target."""
106
- return self._targetInfo['url']
107
-
108
- @property
109
- def type(self) -> str:
110
- """Get type of this target.
111
-
112
- Type can be ``'page'``, ``'background_page'``, ``'service_worker'``,
113
- ``'browser'``, or ``'other'``.
114
- """
115
- _type = self._targetInfo['type']
116
- if _type in ['page', 'background_page', 'service_worker', 'shared_worker', 'browser']:
117
- return _type
118
- return 'other'
119
-
120
- @property
121
- def browser(self) -> 'Browser':
122
- """Get the browser the target belongs to."""
123
- return self._browserContext.browser
124
-
125
- @property
126
- def browserContext(self) -> 'BrowserContext':
127
- """Return the browser context the target belongs to."""
128
- return self._browserContext
129
-
130
- @property
131
- def opener(self) -> Optional['Target']:
132
- """Get the target that opened this target.
133
-
134
- Top-level targets return ``None``.
135
- """
136
- openerId = self._targetInfo.get('openerId')
137
- if openerId is None:
138
- return None
139
- return self.browser._targets.get(openerId)
140
-
141
- def _targetInfoChanged(self, targetInfo: Dict) -> None:
142
- self._targetInfo = targetInfo
143
-
144
- if not self._isInitialized and (self._targetInfo['type'] != 'page' or self._targetInfo['url'] != ''):
145
- self._isInitialized = True
146
- self._initializedCallback(True)
147
- return
@@ -1,24 +0,0 @@
1
- import asyncio
2
- import logging
3
- from typing import Any, Awaitable
4
-
5
- logger = logging.getLogger(__name__)
6
-
7
-
8
- class TaskQueue:
9
- def __init__(self, loop: asyncio.AbstractEventLoop = None):
10
- self.loop = loop or asyncio.get_event_loop()
11
- fut = self.loop.create_future()
12
- fut.set_result(None)
13
- self._task_chain = fut
14
-
15
- def post_task(self, task: Awaitable[Any]) -> Awaitable[Any]:
16
- async def run_awaitable(prev) -> None:
17
- try:
18
- await prev
19
- return await task
20
- except Exception as e:
21
- logger.error(f'Exception while evaluating task queue: {e}')
22
-
23
- self._task_chain = self.loop.create_task(run_awaitable(self._task_chain))
24
- return self._task_chain
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- Timeout setting module
6
-
7
- puppeteer equivalent: TimeoutSettings.js
8
- """
9
-
10
- DEFAULT_TIMEOUT = 30_000 # 30 seconds
11
-
12
-
13
- class TimeoutSettings:
14
- def __init__(self):
15
- self._defaultTimeout = None
16
- self._defaultNavigationTimeout = None
17
-
18
- def setDefaultTimeout(self, timeout: float) -> None:
19
- self._defaultTimeout = timeout
20
-
21
- def setDefaultNavigationTimeout(self, timeout: float) -> None:
22
- self._defaultNavigationTimeout = timeout
23
-
24
- @property
25
- def navigationTimeout(self) -> float:
26
- if self._defaultNavigationTimeout:
27
- return self._defaultNavigationTimeout
28
- if self._defaultTimeout:
29
- return self._defaultTimeout
30
- return DEFAULT_TIMEOUT
31
-
32
- @property
33
- def timeout(self) -> float:
34
- if self._defaultTimeout:
35
- return self._defaultTimeout
36
- return DEFAULT_TIMEOUT
@@ -1,93 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """Tracing module."""
5
-
6
- from pathlib import Path
7
- from typing import Sequence, Union
8
-
9
- from biolib.pyppeteer.pyppeteer import helpers
10
- from biolib.pyppeteer.pyppeteer.connection import CDPSession
11
-
12
-
13
- class Tracing:
14
- """Tracing class.
15
-
16
- You can use :meth:`start` and :meth:`stop` to create a trace file which can
17
- be opened in Chrome DevTools or
18
- `timeline viewer <https://chromedevtools.github.io/timeline-viewer/>`_.
19
-
20
- .. code::
21
-
22
- await page.tracing.start({'path': 'trace.json'})
23
- await page.goto('https://www.google.com')
24
- await page.tracing.stop()
25
- """
26
-
27
- def __init__(self, client: CDPSession) -> None:
28
- self._client = client
29
- self._recording = False
30
- self._path = ''
31
-
32
- async def start(
33
- self, path: Union[Path, str] = '', screenshots: bool = False, categories: Sequence[str] = None
34
- ) -> None:
35
- """Start tracing.
36
-
37
- Only one trace can be active at a time per browser.
38
-
39
- This method accepts the following options:
40
-
41
- * ``path`` (str): A path to write the trace file to.
42
- * ``screenshots`` (bool): Capture screenshots in the trace.
43
- * ``categories`` (List[str]): Specify custom categories to use instead
44
- of default.
45
- """
46
- defaultCategories = [
47
- '-*',
48
- 'devtools.timeline',
49
- 'v8.execute',
50
- 'disabled-by-default-devtools.timeline',
51
- 'disabled-by-default-devtools.timeline.frame',
52
- 'toplevel',
53
- 'blink.console',
54
- 'blink.user_timing',
55
- 'latencyInfo',
56
- 'disabled-by-default-devtools.timeline.stack',
57
- 'disabled-by-default-v8.cpu_profiler',
58
- 'disabled-by-default-v8.cpu_profiler.hires',
59
- ]
60
-
61
- if not isinstance(categories, list):
62
- try:
63
- categories = list(categories)
64
- except TypeError:
65
- categories = defaultCategories
66
-
67
- if screenshots:
68
- categories.append('disabled-by-default-devtools.screenshot')
69
-
70
- self._path = path
71
- self._recording = True
72
- await self._client.send(
73
- 'Tracing.start', {'transferMode': 'ReturnAsStream', 'categories': ','.join(categories),}
74
- )
75
-
76
- async def stop(self) -> str:
77
- """Stop tracing.
78
-
79
- :return: trace data as string.
80
- """
81
- contentFuture = self._client.loop.create_future()
82
-
83
- async def complete_trace(event):
84
- nonlocal self, contentFuture
85
- result = await helpers.readProtocolStream(self._client, event['stream'], self._path)
86
- contentFuture.set_result(result)
87
-
88
- self._client.once(
89
- 'Tracing.tracingComplete', complete_trace,
90
- )
91
- await self._client.send('Tracing.end')
92
- self._recording = False
93
- return await contentFuture