syft-rds 0.1.1.dev1__tar.gz → 0.1.1.dev2__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 (81) hide show
  1. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/PKG-INFO +1 -1
  2. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/pyproject.toml +1 -1
  3. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/__init__.py +1 -1
  4. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/routers/job_router.py +43 -0
  5. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/.gitignore +0 -0
  6. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/LICENSE +0 -0
  7. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/README.md +0 -0
  8. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/adjectives.txt +0 -0
  9. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/css/fonts.css +0 -0
  10. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/css/model_repr.css +0 -0
  11. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/css/style.css +0 -0
  12. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/css/tabulator_pysyft.min.css +0 -0
  13. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/data_access_template.py.jinja +0 -0
  14. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/jinja/model_repr.jinja2 +0 -0
  15. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/jinja/model_repr_file_section.jinja2 +0 -0
  16. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/jinja/syft_exception.jinja2 +0 -0
  17. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/jinja/table.jinja2 +0 -0
  18. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/js/table.js +0 -0
  19. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/js/tabulator.min.js +0 -0
  20. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/nouns.txt +0 -0
  21. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/arrow.svg +0 -0
  22. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/clipboard.svg +0 -0
  23. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/copy.svg +0 -0
  24. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/folder.svg +0 -0
  25. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/info.svg +0 -0
  26. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/request.svg +0 -0
  27. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/search.svg +0 -0
  28. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/assets/svg/table.svg +0 -0
  29. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/cli.py +0 -0
  30. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/__init__.py +0 -0
  31. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/client_registry.py +0 -0
  32. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/connection.py +0 -0
  33. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/exceptions.py +0 -0
  34. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_store.py +0 -0
  35. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/__init__.py +0 -0
  36. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/base.py +0 -0
  37. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/dataset.py +0 -0
  38. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/jobs.py +0 -0
  39. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/runtime.py +0 -0
  40. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/local_stores/user_code.py +0 -0
  41. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_client.py +0 -0
  42. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/__init__.py +0 -0
  43. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/base.py +0 -0
  44. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/dataset.py +0 -0
  45. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/jobs.py +0 -0
  46. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/runtime.py +0 -0
  47. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/user_code.py +0 -0
  48. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rds_clients/utils.py +0 -0
  49. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/rpc.py +0 -0
  50. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/setup.py +0 -0
  51. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/client/utils.py +0 -0
  52. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/__init__.py +0 -0
  53. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/components.py +0 -0
  54. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/display.py +0 -0
  55. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/icons.py +0 -0
  56. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/table_utils.py +0 -0
  57. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/tabulator.py +0 -0
  58. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/jupyter_utils/types.py +0 -0
  59. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/models/__init__.py +0 -0
  60. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/models/base.py +0 -0
  61. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/models/formatter.py +0 -0
  62. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/models/html_format.py +0 -0
  63. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/models/models.py +0 -0
  64. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/orchestra.py +0 -0
  65. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/__init__.py +0 -0
  66. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/app.py +0 -0
  67. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/router.py +0 -0
  68. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/routers/runtime_router.py +0 -0
  69. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/routers/user_code_router.py +0 -0
  70. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/server/user_file_service.py +0 -0
  71. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/store/__init__.py +0 -0
  72. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/store/store.py +0 -0
  73. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/syft_runtime/README.md +0 -0
  74. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/syft_runtime/__init__.py +0 -0
  75. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/syft_runtime/main.py +0 -0
  76. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/name_generator.py +0 -0
  77. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/paths.py +0 -0
  78. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/render_code_template.py +0 -0
  79. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/resources.py +0 -0
  80. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/sanitize.py +0 -0
  81. {syft_rds-0.1.1.dev1 → syft_rds-0.1.1.dev2}/src/syft_rds/utils/zip_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: syft-rds
3
- Version: 0.1.1.dev1
3
+ Version: 0.1.1.dev2
4
4
  Summary: Doing remote data science with SyftBox
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.9
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "syft-rds"
3
- version = "0.1.1-dev.1"
3
+ version = "0.1.1-dev.2"
4
4
  description = "Doing remote data science with SyftBox"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -1,4 +1,4 @@
1
- __version__ = "0.1.1-dev.1"
1
+ __version__ = "0.1.1-dev.2"
2
2
 
3
3
  from syft_rds.utils.paths import RDS_NOTEBOOKS_PATH, RDS_REPO_PATH # noqa
4
4
  from syft_rds.jupyter_utils.display import display # noqa
@@ -4,6 +4,7 @@ from loguru import logger
4
4
  from syft_core import SyftBoxURL
5
5
  from syft_event import SyftEvents
6
6
  from syft_event.types import Request
7
+ import yaml
7
8
  from syft_rds.models.models import (
8
9
  Dataset,
9
10
  GetAllRequest,
@@ -140,6 +141,12 @@ def _handle_enclave_update(existing_item: Job, app: SyftEvents) -> None:
140
141
 
141
142
  enclave_data_dir = client.app_data("enclave") / "data" / existing_item.enclave
142
143
  enclave_data_dir.mkdir(parents=True, exist_ok=True)
144
+ add_permission_rule(
145
+ path=enclave_data_dir,
146
+ pattern="**",
147
+ read=[existing_item.enclave],
148
+ write=[],
149
+ )
143
150
 
144
151
  dataset_store: YAMLStore[Dataset] = app.state["dataset_store"]
145
152
  dataset: Dataset = dataset_store.get_one(name=existing_item.dataset_name)
@@ -167,3 +174,39 @@ def _handle_enclave_update(existing_item: Job, app: SyftEvents) -> None:
167
174
  public_key_path=enclave_public_key,
168
175
  output_file_path=output_file_path,
169
176
  )
177
+
178
+
179
+ # TODO: Move this to syft core
180
+ def add_permission_rule(path: str, pattern: str, read: list[str], write: list[str]):
181
+ """
182
+ Adds or updates a permission rule in syft.pub.yaml in the given path (must be a folder).
183
+ If a rule with the same pattern exists, update only missing read/write entries (no duplicates).
184
+ Raises ValueError if path is not a directory.
185
+ """
186
+ folder = Path(path)
187
+ if not folder.is_dir():
188
+ raise ValueError(f"Provided path '{path}' is not a directory.")
189
+ yaml_file = folder / "syft.pub.yaml"
190
+ rule = {"pattern": pattern, "access": {"read": read, "write": write}}
191
+ if yaml_file.exists():
192
+ with open(yaml_file, "r") as f:
193
+ data = yaml.safe_load(f) or {}
194
+ else:
195
+ data = {}
196
+ if "rules" not in data or not isinstance(data["rules"], list):
197
+ data["rules"] = []
198
+ # Check for existing pattern
199
+ for existing_rule in data["rules"]:
200
+ if existing_rule.get("pattern") == pattern:
201
+ # Update read and write lists, avoiding duplicates
202
+ existing_access = existing_rule.setdefault("access", {})
203
+ for key, new_values in [("read", read), ("write", write)]:
204
+ existing = set(existing_access.get(key, []))
205
+ updated = list(existing.union(new_values))
206
+ existing_access[key] = updated
207
+ break
208
+ else:
209
+ # No existing pattern, append new rule
210
+ data["rules"].append(rule)
211
+ with open(yaml_file, "w") as f:
212
+ yaml.safe_dump(data, f, sort_keys=False)
File without changes
File without changes
File without changes