pybiolib 1.2.878__tar.gz → 1.2.888__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 (147) hide show
  1. {pybiolib-1.2.878 → pybiolib-1.2.888}/PKG-INFO +1 -1
  2. pybiolib-1.2.888/biolib/_internal/errors.py +5 -0
  3. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/push_application.py +20 -8
  4. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/push.py +14 -8
  5. {pybiolib-1.2.878 → pybiolib-1.2.888}/pyproject.toml +1 -1
  6. {pybiolib-1.2.878 → pybiolib-1.2.888}/LICENSE +0 -0
  7. {pybiolib-1.2.878 → pybiolib-1.2.888}/PYPI_README.md +0 -0
  8. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/__init__.py +0 -0
  9. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_data_record/data_record.py +0 -0
  10. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/__init__.py +0 -0
  11. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/add_copilot_prompts.py +0 -0
  12. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/data_record/__init__.py +0 -0
  13. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/data_record/data_record.py +0 -0
  14. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/data_record/push_data.py +0 -0
  15. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
  16. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/file_utils.py +0 -0
  17. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/fuse_mount/__init__.py +0 -0
  18. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
  19. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/http_client.py +0 -0
  20. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/lfs/__init__.py +0 -0
  21. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/lfs/cache.py +0 -0
  22. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/libs/__init__.py +0 -0
  23. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/libs/fusepy/__init__.py +0 -0
  24. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/instructions/general-app-knowledge.instructions.md +0 -0
  25. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/instructions/style-general.instructions.md +0 -0
  26. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/instructions/style-python.instructions.md +0 -0
  27. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/instructions/style-react-ts.instructions.md +0 -0
  28. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/prompts/biolib_app_inputs.prompt.md +0 -0
  29. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/.github/prompts/biolib_run_apps.prompt.md +0 -0
  30. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/llm_instructions/__init__.py +0 -0
  31. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/runtime.py +0 -0
  32. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/__init__.py +0 -0
  33. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/.biolib/config.yml +0 -0
  34. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/.github/workflows/biolib.yml +0 -0
  35. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/.gitignore +0 -0
  36. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/Dockerfile +0 -0
  37. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/requirements.txt +0 -0
  38. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/run.py +0 -0
  39. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/init_template/run.sh +0 -0
  40. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/templates/templates.py +0 -0
  41. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/tree_utils.py +0 -0
  42. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/__init__.py +0 -0
  43. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/app.py +0 -0
  44. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/data_record.py +0 -0
  45. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/experiment.py +0 -0
  46. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/file_node.py +0 -0
  47. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/push.py +0 -0
  48. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/resource.py +0 -0
  49. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/resource_permission.py +0 -0
  50. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/resource_version.py +0 -0
  51. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/result.py +0 -0
  52. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/types/typing.py +0 -0
  53. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/utils/__init__.py +0 -0
  54. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_internal/utils/multinode.py +0 -0
  55. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_runtime/runtime.py +0 -0
  56. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/_session/session.py +0 -0
  57. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/api/__init__.py +0 -0
  58. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/api/client.py +0 -0
  59. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/app/__init__.py +0 -0
  60. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/app/app.py +0 -0
  61. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/app/search_apps.py +0 -0
  62. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/__init__.py +0 -0
  63. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/api_client.py +0 -0
  64. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/app_types.py +0 -0
  65. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/auth.py +0 -0
  66. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/biolib_app_api.py +0 -0
  67. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/biolib_job_api.py +0 -0
  68. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/common_types.py +0 -0
  69. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/job_types.py +0 -0
  70. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/lfs_types.py +0 -0
  71. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_api_client/user_state.py +0 -0
  72. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/__init__.py +0 -0
  73. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
  74. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/file_in_container.py +0 -0
  75. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/module_input.py +0 -0
  76. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/module_output_v2.py +0 -0
  77. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
  78. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
  79. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/saved_job.py +0 -0
  80. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
  81. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/system_exception.py +0 -0
  82. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/system_status_update.py +0 -0
  83. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_binary_format/utils.py +0 -0
  84. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_docker_client/__init__.py +0 -0
  85. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_download_container.py +0 -0
  86. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_errors.py +0 -0
  87. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/biolib_logging.py +0 -0
  88. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/__init__.py +0 -0
  89. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/auth.py +0 -0
  90. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/data_record.py +0 -0
  91. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/download_container.py +0 -0
  92. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/init.py +0 -0
  93. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/lfs.py +0 -0
  94. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/run.py +0 -0
  95. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/runtime.py +0 -0
  96. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/sdk.py +0 -0
  97. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/cli/start.py +0 -0
  98. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/.gitignore +0 -0
  99. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/__init__.py +0 -0
  100. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/cloud_utils/__init__.py +0 -0
  101. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
  102. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/__init__.py +0 -0
  103. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/cache_state.py +0 -0
  104. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/cache_types.py +0 -0
  105. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
  106. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
  107. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/executors/docker_executor.py +0 -0
  108. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
  109. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
  110. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/executors/types.py +0 -0
  111. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
  112. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
  113. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/job_storage.py +0 -0
  114. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/job_worker.py +0 -0
  115. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/large_file_system.py +0 -0
  116. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/mappings.py +0 -0
  117. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
  118. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/job_worker/utils.py +0 -0
  119. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/remote_host_proxy.py +0 -0
  120. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/socker_listener_thread.py +0 -0
  121. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/socket_sender_thread.py +0 -0
  122. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/utils.py +0 -0
  123. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/__init__.py +0 -0
  124. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
  125. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/webserver.py +0 -0
  126. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/webserver_types.py +0 -0
  127. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/webserver_utils.py +0 -0
  128. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/compute_node/webserver/worker_thread.py +0 -0
  129. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/experiments/__init__.py +0 -0
  130. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/experiments/experiment.py +0 -0
  131. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/jobs/__init__.py +0 -0
  132. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/jobs/job.py +0 -0
  133. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/jobs/job_result.py +0 -0
  134. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/jobs/types.py +0 -0
  135. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/py.typed +0 -0
  136. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/runtime/__init__.py +0 -0
  137. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/sdk/__init__.py +0 -0
  138. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/tables.py +0 -0
  139. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/typing_utils.py +0 -0
  140. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/user/__init__.py +0 -0
  141. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/user/sign_in.py +0 -0
  142. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/__init__.py +0 -0
  143. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/app_uri.py +0 -0
  144. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/cache_state.py +0 -0
  145. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/multipart_uploader.py +0 -0
  146. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/seq_util.py +0 -0
  147. {pybiolib-1.2.878 → pybiolib-1.2.888}/biolib/utils/zip/remote_zip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pybiolib
3
- Version: 1.2.878
3
+ Version: 1.2.888
4
4
  Summary: BioLib Python Client
5
5
  License: MIT
6
6
  Keywords: biolib
@@ -0,0 +1,5 @@
1
+ from biolib.biolib_errors import BioLibError
2
+
3
+
4
+ class AuthenticationError(BioLibError):
5
+ """Raised when authentication is required but user is not signed in."""
@@ -12,6 +12,7 @@ from biolib._internal.data_record.push_data import (
12
12
  push_data_path,
13
13
  validate_data_path_and_get_files_and_size_of_directory,
14
14
  )
15
+ from biolib._internal.errors import AuthenticationError
15
16
  from biolib._internal.file_utils import get_files_and_size_of_directory, get_iterable_zip_stream
16
17
  from biolib._internal.types.push import PushResponseDict
17
18
  from biolib.biolib_api_client import BiolibApiClient
@@ -195,7 +196,10 @@ def push_application(
195
196
  parsed_uri = parse_app_uri(app_uri)
196
197
  app_name = parsed_uri['app_name']
197
198
 
198
- app_uri_to_fetch = f"@{parsed_uri['resource_name_prefix']}/{parsed_uri['account_handle_normalized']}/{app_name}"
199
+ app_uri_prefix = (
200
+ f"@{parsed_uri['resource_name_prefix']}/" if parsed_uri['resource_name_prefix'] != 'biolib.com' else ''
201
+ )
202
+ app_uri_to_fetch = f"{app_uri_prefix}{parsed_uri['account_handle_normalized']}/{app_name}"
199
203
 
200
204
  version = parsed_uri['version']
201
205
  semantic_version = f"{version['major']}.{version['minor']}.{version['patch']}" if version else None
@@ -204,13 +208,21 @@ def push_application(
204
208
 
205
209
  api_client = BiolibApiClient.get()
206
210
  if not api_client.is_signed_in:
207
- # TODO: Create an exception class for expected errors like this that does not print stacktrace
208
-
209
- raise Exception(
210
- 'You must be authenticated to push an application.\n'
211
- 'Please set the environment variable "BIOLIB_TOKEN=[your_deploy_token]"\n'
212
- f'You can get a deploy key at: {api_client.base_url}/{app_uri_to_fetch}/settings/keys/'
213
- ) from None
211
+ github_repository = os.getenv('GITHUB_REPOSITORY')
212
+ if github_repository and not api_client.resource_deploy_key:
213
+ github_secrets_url = f'https://github.com/{github_repository}/settings/secrets/actions/new'
214
+ raise AuthenticationError(
215
+ 'You must be authenticated to push an application.\n'
216
+ 'Please set the environment variable "BIOLIB_TOKEN=[your_deploy_token]"\n'
217
+ f'You can get a deploy key at: {api_client.base_url}/{app_uri_to_fetch}/settings/keys/\n'
218
+ f'Then add it to your GitHub repository at: {github_secrets_url}'
219
+ )
220
+ else:
221
+ raise AuthenticationError(
222
+ 'You must be authenticated to push an application.\n'
223
+ 'Please set the environment variable "BIOLIB_TOKEN=[your_deploy_token]"\n'
224
+ f'You can get a deploy key at: {api_client.base_url}/{app_uri_to_fetch}/settings/keys/'
225
+ )
214
226
 
215
227
  # prepare zip file
216
228
  config_yml_path = app_path_absolute.joinpath('.biolib/config.yml')
@@ -1,8 +1,10 @@
1
1
  import logging
2
+ import sys
2
3
  from typing import Optional
3
4
 
4
5
  import click
5
6
 
7
+ from biolib._internal.errors import AuthenticationError
6
8
  from biolib._internal.push_application import push_application
7
9
  from biolib.biolib_logging import logger, logger_no_user_data
8
10
 
@@ -34,11 +36,15 @@ def push(uri, path: str, copy_images_from_version: Optional[str], dev: bool, pre
34
36
  elif pre_release:
35
37
  set_as_active = False
36
38
  set_as_published = True
37
- push_application(
38
- app_path=path,
39
- app_uri=uri,
40
- app_version_to_copy_images_from=copy_images_from_version,
41
- set_as_active=set_as_active,
42
- set_as_published=set_as_published,
43
- dry_run=dry_run,
44
- )
39
+ try:
40
+ push_application(
41
+ app_path=path,
42
+ app_uri=uri,
43
+ app_version_to_copy_images_from=copy_images_from_version,
44
+ set_as_active=set_as_active,
45
+ set_as_published=set_as_published,
46
+ dry_run=dry_run,
47
+ )
48
+ except AuthenticationError as error:
49
+ print(error.message, file=sys.stderr)
50
+ exit(1)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pybiolib"
3
- version = "1.2.878"
3
+ version = "1.2.888"
4
4
  description = "BioLib Python Client"
5
5
  readme = "PYPI_README.md"
6
6
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes