synapse-sdk 1.0.0a29__tar.gz → 1.0.0a31__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.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/.gitignore +3 -0
- {synapse_sdk-1.0.0a29/synapse_sdk.egg-info → synapse_sdk-1.0.0a31}/PKG-INFO +3 -1
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/pyproject.toml +3 -1
- synapse_sdk-1.0.0a31/requirements.test.txt +1 -0
- synapse_sdk-1.0.0a31/requirements.txt +11 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/plugin/__init__.py +2 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/integration.py +4 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/ml.py +4 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/base.py +29 -3
- synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/export/actions/export.py +82 -0
- synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/export/actions/utils.py +5 -0
- synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/export/templates/config.yaml +3 -0
- synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/export/templates/plugin/export.py +126 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/actions/train.py +1 -1
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +3 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/pydantic/__init__.py +0 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/__init__.py +20 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/providers/__init__.py +42 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/providers/gcp.py +13 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/providers/s3.py +43 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/providers/sftp.py +16 -0
- synapse_sdk-1.0.0a31/synapse_sdk/utils/storage/registry.py +11 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31/synapse_sdk.egg-info}/PKG-INFO +3 -1
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk.egg-info/SOURCES.txt +15 -2
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk.egg-info/requires.txt +2 -0
- synapse_sdk-1.0.0a31/tests/__init__.py +0 -0
- synapse_sdk-1.0.0a31/tests/utils/__init__.py +0 -0
- synapse_sdk-1.0.0a31/tests/utils/test_debug.py +6 -0
- synapse_sdk-1.0.0a29/requirements.txt +0 -10
- synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/export/actions/export.py +0 -10
- synapse_sdk-1.0.0a29/synapse_sdk/utils/storage.py +0 -91
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/.github/workflows/lint.yml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/.github/workflows/pypi-publish.yml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/LICENSE +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/README.md +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/locale/en/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/locale/en/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/locale/ko/LC_MESSAGES/messages.mo +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/locale/ko/LC_MESSAGES/messages.po +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/setup.cfg +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/create.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/dataclass.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/default.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/delete.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/list.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/read.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/update.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/alias/utils.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/plugin/create.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/plugin/publish.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/cli/plugin/run.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/agent/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/agent/core.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/agent/ray.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/agent/service.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/annotation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/core.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/backend/dataset.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/exceptions.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/ray/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/ray/core.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/ray/serve.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/clients/utils.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/i18n.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/loggers.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/base.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/decorators.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/import → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/export/templates/plugin}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/import/actions → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/import}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/neural_net → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/import/actions}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/import/actions/import.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/neural_net/actions → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/neural_net}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/neural_net/base → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/neural_net/actions}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/neural_net/templates/plugin → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/neural_net/base}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/post_annotation → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/neural_net/templates/plugin}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/post_annotation/actions → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/post_annotation}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/post_annotation/templates/plugin → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/post_annotation/actions}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/pre_annotation → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/post_annotation/templates/plugin}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/pre_annotation/actions → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/pre_annotation}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/pre_annotation/templates/plugin → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/pre_annotation/actions}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/smart_tool → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/pre_annotation/templates/plugin}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/registry.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/smart_tool/actions → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/smart_tool}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/categories/smart_tool/templates/plugin → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/smart_tool/actions}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin → synapse_sdk-1.0.0a31/synapse_sdk/plugins/categories/smart_tool/templates}/plugin/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/categories/templates.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/enums.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/exceptions.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/models.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/shared → synapse_sdk-1.0.0a31/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/upload.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/plugins/utils.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/utils → synapse_sdk-1.0.0a31/synapse_sdk/shared}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/shared/enums.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/types.py +0 -0
- {synapse_sdk-1.0.0a29/synapse_sdk/utils/pydantic → synapse_sdk-1.0.0a31/synapse_sdk/utils}/__init__.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/debug.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/file.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/module_loading.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/network.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/pydantic/config.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/pydantic/errors.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/pydantic/validators.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk/utils/string.py +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk.egg-info/dependency_links.txt +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk.egg-info/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a29 → synapse_sdk-1.0.0a31}/synapse_sdk.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: synapse-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0a31
|
|
4
4
|
Summary: synapse sdk
|
|
5
5
|
Author-email: datamaker <developer@datamaker.io>
|
|
6
6
|
License: MIT
|
|
@@ -17,6 +17,8 @@ Requires-Dist: python-dotenv
|
|
|
17
17
|
Requires-Dist: pyyaml
|
|
18
18
|
Requires-Dist: pydantic
|
|
19
19
|
Requires-Dist: pyjwt
|
|
20
|
+
Requires-Dist: universal-pathlib
|
|
21
|
+
Requires-Dist: fsspec[gcs,s3,sftp]
|
|
20
22
|
Provides-Extra: all
|
|
21
23
|
Requires-Dist: ray[all]; extra == "all"
|
|
22
24
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pytest
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import sys
|
|
2
3
|
|
|
3
4
|
import click
|
|
4
5
|
from dotenv import load_dotenv
|
|
@@ -12,6 +13,7 @@ from .run import run
|
|
|
12
13
|
|
|
13
14
|
load_dotenv_default_alias()
|
|
14
15
|
load_dotenv(os.path.join(os.getcwd(), '.env'), override=True)
|
|
16
|
+
sys.path.append(os.getcwd())
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
@click.group(context_settings={'obj': {}, 'auto_envvar_prefix': 'SYNAPSE_PLUGIN'})
|
|
@@ -77,3 +77,7 @@ class IntegrationClientMixin(BaseClient):
|
|
|
77
77
|
def list_serve_applications(self, params=None, list_all=False):
|
|
78
78
|
path = 'serve_applications/'
|
|
79
79
|
return self._list(path, params=params, list_all=list_all)
|
|
80
|
+
|
|
81
|
+
def get_storage(self, pk):
|
|
82
|
+
path = f'storages/{pk}/'
|
|
83
|
+
return self._get(path)
|
|
@@ -22,3 +22,7 @@ class MLClientMixin(BaseClient):
|
|
|
22
22
|
path = 'ground_truth_events/'
|
|
23
23
|
url_conversion = get_default_url_conversion(url_conversion, files_fields=['files'])
|
|
24
24
|
return self._list(path, params=params, url_conversion=url_conversion, list_all=list_all)
|
|
25
|
+
|
|
26
|
+
def get_ground_truth_version(self, pk):
|
|
27
|
+
path = f'ground_truth_dataset_versions/{pk}/'
|
|
28
|
+
return self._get(path)
|
|
@@ -25,16 +25,38 @@ class BaseClient:
|
|
|
25
25
|
def _get_headers(self):
|
|
26
26
|
return {}
|
|
27
27
|
|
|
28
|
-
def _request(self, method, path, **kwargs):
|
|
28
|
+
def _request(self, method: str, path: str, **kwargs) -> dict | str:
|
|
29
|
+
"""Request handler for all HTTP methods.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
method (str): HTTP method to use.
|
|
33
|
+
path (str): URL path to request.
|
|
34
|
+
**kwargs: Additional keyword arguments to pass to the request.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
dict | str: JSON response or text response.
|
|
38
|
+
"""
|
|
29
39
|
url = self._get_url(path)
|
|
30
40
|
headers = self._get_headers()
|
|
31
41
|
headers.update(kwargs.pop('headers', {}))
|
|
32
42
|
|
|
43
|
+
# List to store opened files to close after request
|
|
44
|
+
opened_files = []
|
|
45
|
+
|
|
33
46
|
if method in ['post', 'put', 'patch']:
|
|
47
|
+
# If files are included in the request, open them as binary files
|
|
34
48
|
if kwargs.get('files') is not None:
|
|
35
49
|
for name, file in kwargs['files'].items():
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
# If file is a path string, bind it as a Path object and open
|
|
51
|
+
if isinstance(file, str):
|
|
52
|
+
opened_file = Path(file).open(mode='rb')
|
|
53
|
+
kwargs['files'][name] = opened_file
|
|
54
|
+
opened_files.append(opened_file)
|
|
55
|
+
# If file is a Path object, open it directly
|
|
56
|
+
elif isinstance(file, Path):
|
|
57
|
+
opened_file = file.open(mode='rb')
|
|
58
|
+
kwargs['files'][name] = opened_file
|
|
59
|
+
opened_files.append(opened_file)
|
|
38
60
|
if 'data' in kwargs:
|
|
39
61
|
for name, value in kwargs['data'].items():
|
|
40
62
|
if isinstance(value, dict):
|
|
@@ -53,6 +75,10 @@ class BaseClient:
|
|
|
53
75
|
except requests.ConnectionError:
|
|
54
76
|
raise ClientError(408, f'{self.name} is not responding')
|
|
55
77
|
|
|
78
|
+
# Close all opened files
|
|
79
|
+
for opened_file in opened_files:
|
|
80
|
+
opened_file.close()
|
|
81
|
+
|
|
56
82
|
return self._post_response(response)
|
|
57
83
|
|
|
58
84
|
def _post_response(self, response):
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from pydantic import BaseModel, field_validator
|
|
2
|
+
from pydantic_core import PydanticCustomError
|
|
3
|
+
|
|
4
|
+
from synapse_sdk.clients.exceptions import ClientError
|
|
5
|
+
from synapse_sdk.i18n import gettext as _
|
|
6
|
+
from synapse_sdk.plugins.categories.base import Action
|
|
7
|
+
from synapse_sdk.plugins.categories.decorators import register_action
|
|
8
|
+
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
9
|
+
from synapse_sdk.utils.storage import get_pathlib
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ExportParams(BaseModel):
|
|
13
|
+
storage: int
|
|
14
|
+
save_original_file: bool = True
|
|
15
|
+
path: str
|
|
16
|
+
ground_truth_dataset_version: int
|
|
17
|
+
filter: dict
|
|
18
|
+
|
|
19
|
+
@field_validator('storage')
|
|
20
|
+
@staticmethod
|
|
21
|
+
def check_storage_exists(value, info):
|
|
22
|
+
action = info.context['action']
|
|
23
|
+
client = action.client
|
|
24
|
+
try:
|
|
25
|
+
client.get_storage(value)
|
|
26
|
+
except ClientError:
|
|
27
|
+
raise PydanticCustomError('client_error', _('Unable to get storage from Synapse backend.'))
|
|
28
|
+
return value
|
|
29
|
+
|
|
30
|
+
@field_validator('ground_truth_dataset_version')
|
|
31
|
+
@staticmethod
|
|
32
|
+
def check_ground_truth_dataset_version_exists(value, info):
|
|
33
|
+
action = info.context['action']
|
|
34
|
+
client = action.client
|
|
35
|
+
try:
|
|
36
|
+
client.get_ground_truth_version(value)
|
|
37
|
+
except ClientError:
|
|
38
|
+
raise PydanticCustomError('client_error', _('Unable to get Ground Truth dataset version.'))
|
|
39
|
+
return value
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@register_action
|
|
43
|
+
class ExportAction(Action):
|
|
44
|
+
name = 'export'
|
|
45
|
+
category = PluginCategory.EXPORT
|
|
46
|
+
method = RunMethod.JOB
|
|
47
|
+
params_model = ExportParams
|
|
48
|
+
progress_categories = {
|
|
49
|
+
'dataset_conversion': {
|
|
50
|
+
'proportion': 100,
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
def get_dataset(self, results):
|
|
55
|
+
"""Get dataset for export."""
|
|
56
|
+
for result in results:
|
|
57
|
+
yield {
|
|
58
|
+
'data': result['data'],
|
|
59
|
+
'files': result['data_unit']['files'],
|
|
60
|
+
'id': result['ground_truth'],
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
def get_filtered_results(self):
|
|
64
|
+
"""Get filtered ground truth events."""
|
|
65
|
+
self.params['filter']['ground_truth_dataset_versions'] = self.params['ground_truth_dataset_version']
|
|
66
|
+
filters = {'expand': 'data', **self.params['filter']}
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
gt_dataset_events_list = self.client.list_ground_truth_events(params=filters, list_all=True)
|
|
70
|
+
results = gt_dataset_events_list[0]
|
|
71
|
+
count = gt_dataset_events_list[1]
|
|
72
|
+
except ClientError:
|
|
73
|
+
raise PydanticCustomError('client_error', _('Unable to get Ground Truth dataset.'))
|
|
74
|
+
return results, count
|
|
75
|
+
|
|
76
|
+
def start(self):
|
|
77
|
+
self.params['results'], self.params['count'] = self.get_filtered_results()
|
|
78
|
+
dataset = self.get_dataset(self.params['results'])
|
|
79
|
+
|
|
80
|
+
storage = self.client.get_storage(self.params['storage'])
|
|
81
|
+
pathlib_cwd = get_pathlib(storage, self.params['path'])
|
|
82
|
+
return self.entrypoint(self.run, dataset, pathlib_cwd, **self.params)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
import requests
|
|
4
|
+
|
|
5
|
+
from synapse_sdk.plugins.categories.export.actions.utils import get_original_file_path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def export(run, input_dataset, path_root, **params):
|
|
9
|
+
"""Executes the export task.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
run : Execution object
|
|
13
|
+
input_dataset (generator):
|
|
14
|
+
- data (dict): dm_schema_data information.
|
|
15
|
+
- files (dict): File information. Includes file URL, original file path, metadata, etc.
|
|
16
|
+
- id (int): ground_truth ID
|
|
17
|
+
path_root : Save path
|
|
18
|
+
**params: Additional parameters
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
dict: Result
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
path_root.mkdir(parents=True, exist_ok=True)
|
|
25
|
+
run.log_message('Starting export process.')
|
|
26
|
+
|
|
27
|
+
# results: Contains all information fetched through the list API.
|
|
28
|
+
results = params.get('results', [])
|
|
29
|
+
|
|
30
|
+
save_original_file = params.get('save_original_file')
|
|
31
|
+
errors_json_file_list = []
|
|
32
|
+
errors_original_file_list = []
|
|
33
|
+
|
|
34
|
+
# Path to save JSON files
|
|
35
|
+
json_output_path = path_root / 'json'
|
|
36
|
+
json_output_path.mkdir(parents=True, exist_ok=True)
|
|
37
|
+
|
|
38
|
+
# Path to save original files
|
|
39
|
+
origin_files_output_path = path_root / 'origin_files'
|
|
40
|
+
origin_files_output_path.mkdir(parents=True, exist_ok=True)
|
|
41
|
+
|
|
42
|
+
total = len(results)
|
|
43
|
+
for no, input_data in enumerate(input_dataset):
|
|
44
|
+
run.set_progress(no, total, category='dataset_conversion')
|
|
45
|
+
preprocessed_data = before_convert(input_data)
|
|
46
|
+
converted_data = convert_data(preprocessed_data)
|
|
47
|
+
final_data = after_convert(converted_data)
|
|
48
|
+
|
|
49
|
+
# Call if original file extraction is needed
|
|
50
|
+
if save_original_file:
|
|
51
|
+
save_original_file(final_data, origin_files_output_path, errors_original_file_list)
|
|
52
|
+
|
|
53
|
+
# Extract data as JSON files
|
|
54
|
+
save_as_json(final_data, json_output_path, errors_json_file_list)
|
|
55
|
+
|
|
56
|
+
run.log_message('Saving converted dataset.')
|
|
57
|
+
run.end_log()
|
|
58
|
+
|
|
59
|
+
# Save error list files
|
|
60
|
+
if len(errors_json_file_list) > 0 or len(errors_original_file_list) > 0:
|
|
61
|
+
export_error_file = {'json_file_name': errors_json_file_list, 'origin_file_name': errors_original_file_list}
|
|
62
|
+
with (path_root / 'error_file_list.json').open('w', encoding='utf-8') as f:
|
|
63
|
+
json.dump(export_error_file, f, indent=4, ensure_ascii=False)
|
|
64
|
+
|
|
65
|
+
return {'export_path': path_root}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def convert_data(data):
|
|
69
|
+
"""Converts the data."""
|
|
70
|
+
return data
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def before_convert(data):
|
|
74
|
+
"""Preprocesses the data before conversion."""
|
|
75
|
+
return data
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def after_convert(data):
|
|
79
|
+
"""Post-processes the data after conversion."""
|
|
80
|
+
return data
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def save_original_file(result, base_path, error_file_list):
|
|
84
|
+
"""Saves the original file.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
result (dict): Result data
|
|
88
|
+
base_path (Path): Save path
|
|
89
|
+
error_file_list (list): List of error files
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
base_path (str): Save path
|
|
93
|
+
"""
|
|
94
|
+
file_url = next(iter(result['files'].values()))['url']
|
|
95
|
+
file_name = get_original_file_path(result['files']).name
|
|
96
|
+
response = requests.get(file_url)
|
|
97
|
+
try:
|
|
98
|
+
with (base_path / file_name).open('wb') as file:
|
|
99
|
+
file.write(response.content)
|
|
100
|
+
except Exception as e:
|
|
101
|
+
error_file_list.append([file_name, str(e)])
|
|
102
|
+
|
|
103
|
+
return base_path
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def save_as_json(result, base_path, error_file_list):
|
|
107
|
+
"""Saves the data as a JSON file.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
result (dict): Result data
|
|
111
|
+
base_path (Path): Save path
|
|
112
|
+
error_file_list (list): List of error files
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
base_path (str): Save path
|
|
116
|
+
"""
|
|
117
|
+
# Default save file name: original file name
|
|
118
|
+
file_name = get_original_file_path(result['files']).stem
|
|
119
|
+
json_data = result['data']
|
|
120
|
+
try:
|
|
121
|
+
with (base_path / f'{file_name}.json').open('w', encoding='utf-8') as f:
|
|
122
|
+
json.dump(json_data, f, indent=4, ensure_ascii=False)
|
|
123
|
+
except Exception as e:
|
|
124
|
+
error_file_list.append([f'{file_name}.json', str(e)])
|
|
125
|
+
|
|
126
|
+
return base_path
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from urllib.parse import urlparse
|
|
2
|
+
|
|
3
|
+
from synapse_sdk.i18n import gettext as _
|
|
4
|
+
from synapse_sdk.utils.storage.registry import STORAGE_PROVIDERS
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_storage(connection_param: str | dict):
|
|
8
|
+
storage_scheme = None
|
|
9
|
+
if isinstance(connection_param, dict):
|
|
10
|
+
storage_scheme = connection_param['provider']
|
|
11
|
+
else:
|
|
12
|
+
storage_scheme = urlparse(connection_param).scheme
|
|
13
|
+
|
|
14
|
+
assert storage_scheme in STORAGE_PROVIDERS.keys(), _('지원하지 않는 저장소입니다.')
|
|
15
|
+
return STORAGE_PROVIDERS[storage_scheme](connection_param)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_pathlib(storage_config, path_root):
|
|
19
|
+
storage_class = get_storage(storage_config)
|
|
20
|
+
return storage_class.get_pathlib(path_root)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from urllib.parse import parse_qs, urlparse
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class BaseStorage:
|
|
5
|
+
url = None
|
|
6
|
+
options = None
|
|
7
|
+
OPTION_CASTS = {}
|
|
8
|
+
|
|
9
|
+
def __init__(self, connection_params: str | dict):
|
|
10
|
+
self.url = None
|
|
11
|
+
|
|
12
|
+
if isinstance(connection_params, dict):
|
|
13
|
+
self.query_params = connection_params['configuration']
|
|
14
|
+
else:
|
|
15
|
+
self.url = urlparse(connection_params)
|
|
16
|
+
self.query_params = self.url_querystring_to_dict()
|
|
17
|
+
|
|
18
|
+
def url_querystring_to_dict(self):
|
|
19
|
+
query_string = self.url.query
|
|
20
|
+
|
|
21
|
+
query_dict = parse_qs(query_string)
|
|
22
|
+
|
|
23
|
+
for key, value in query_dict.items():
|
|
24
|
+
if len(value) == 1:
|
|
25
|
+
query_dict[key] = value[0]
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
key: self.OPTION_CASTS[key](value) if key in self.OPTION_CASTS else value
|
|
29
|
+
for key, value in query_dict.items()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
def upload(self, source, target):
|
|
33
|
+
raise NotImplementedError
|
|
34
|
+
|
|
35
|
+
def exists(self, target):
|
|
36
|
+
raise NotImplementedError
|
|
37
|
+
|
|
38
|
+
def get_url(self, target):
|
|
39
|
+
raise NotImplementedError
|
|
40
|
+
|
|
41
|
+
def get_pathlib(self, path):
|
|
42
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from upath import UPath
|
|
2
|
+
|
|
3
|
+
from synapse_sdk.utils.storage.providers import BaseStorage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GCPStorage(BaseStorage):
|
|
7
|
+
def __init__(self, url):
|
|
8
|
+
super().__init__(url)
|
|
9
|
+
|
|
10
|
+
self.upath = UPath(f'gs://{self.query_params["bucket_name"]}', token=self.query_params['credentials'])
|
|
11
|
+
|
|
12
|
+
def get_pathlib(self, path):
|
|
13
|
+
return self.upath.joinuri(path)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from upath import UPath
|
|
2
|
+
|
|
3
|
+
from synapse_sdk.utils.storage.providers import BaseStorage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class S3Storage(BaseStorage):
|
|
7
|
+
ENDPOINT_URL = 'https://s3.amazonaws.com'
|
|
8
|
+
DEFAULT_REGION = 'us-east-1'
|
|
9
|
+
|
|
10
|
+
def __init__(self, url):
|
|
11
|
+
super().__init__(url)
|
|
12
|
+
|
|
13
|
+
self.upath = self._get_upath()
|
|
14
|
+
|
|
15
|
+
def _get_upath(self):
|
|
16
|
+
upath_kwargs = {
|
|
17
|
+
'key': self.query_params['access_key'],
|
|
18
|
+
'secret': self.query_params['secret_key'],
|
|
19
|
+
'client_kwargs': {'region_name': self.query_params.get('region_name')},
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if self.query_params.get('endpoint_url'):
|
|
23
|
+
upath_kwargs['endpoint_url'] = self.query_params['endpoint_url']
|
|
24
|
+
|
|
25
|
+
return UPath(
|
|
26
|
+
f's3://{self.query_params["bucket_name"]}',
|
|
27
|
+
**upath_kwargs,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def upload(self, source, target):
|
|
31
|
+
with open(source, 'rb') as file:
|
|
32
|
+
self.upath.write_text(file.read(), target)
|
|
33
|
+
|
|
34
|
+
return self.get_url(target)
|
|
35
|
+
|
|
36
|
+
def exists(self, target):
|
|
37
|
+
return self.upath.exists(target)
|
|
38
|
+
|
|
39
|
+
def get_url(self, target):
|
|
40
|
+
return str(self.upath.joinuri(target))
|
|
41
|
+
|
|
42
|
+
def get_pathlib(self, path):
|
|
43
|
+
return self.upath.joinuri(path)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from upath import UPath
|
|
2
|
+
|
|
3
|
+
from synapse_sdk.utils.storage.providers import BaseStorage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SFTPStorage(BaseStorage):
|
|
7
|
+
def get_pathlib(self, path):
|
|
8
|
+
credentials = self.query_params['params']
|
|
9
|
+
host = self.query_params['host']
|
|
10
|
+
root_path = self.query_params['root_path']
|
|
11
|
+
|
|
12
|
+
username = credentials['username']
|
|
13
|
+
password = credentials['password']
|
|
14
|
+
if path == '/':
|
|
15
|
+
path = ''
|
|
16
|
+
return UPath(f'sftp://{host}', username=username, password=password) / root_path / path
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from synapse_sdk.utils.storage.providers.gcp import GCPStorage
|
|
2
|
+
from synapse_sdk.utils.storage.providers.s3 import S3Storage
|
|
3
|
+
from synapse_sdk.utils.storage.providers.sftp import SFTPStorage
|
|
4
|
+
|
|
5
|
+
STORAGE_PROVIDERS = {
|
|
6
|
+
's3': S3Storage,
|
|
7
|
+
'amazon_s3': S3Storage,
|
|
8
|
+
'minio': S3Storage,
|
|
9
|
+
'gcp': GCPStorage,
|
|
10
|
+
'sftp': SFTPStorage,
|
|
11
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: synapse-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0a31
|
|
4
4
|
Summary: synapse sdk
|
|
5
5
|
Author-email: datamaker <developer@datamaker.io>
|
|
6
6
|
License: MIT
|
|
@@ -17,6 +17,8 @@ Requires-Dist: python-dotenv
|
|
|
17
17
|
Requires-Dist: pyyaml
|
|
18
18
|
Requires-Dist: pydantic
|
|
19
19
|
Requires-Dist: pyjwt
|
|
20
|
+
Requires-Dist: universal-pathlib
|
|
21
|
+
Requires-Dist: fsspec[gcs,s3,sftp]
|
|
20
22
|
Provides-Extra: all
|
|
21
23
|
Requires-Dist: ray[all]; extra == "all"
|
|
22
24
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
LICENSE
|
|
4
4
|
README.md
|
|
5
5
|
pyproject.toml
|
|
6
|
+
requirements.test.txt
|
|
6
7
|
requirements.txt
|
|
7
8
|
.github/workflows/lint.yml
|
|
8
9
|
.github/workflows/pypi-publish.yml
|
|
@@ -73,6 +74,10 @@ synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py
|
|
|
73
74
|
synapse_sdk/plugins/categories/export/__init__.py
|
|
74
75
|
synapse_sdk/plugins/categories/export/actions/__init__.py
|
|
75
76
|
synapse_sdk/plugins/categories/export/actions/export.py
|
|
77
|
+
synapse_sdk/plugins/categories/export/actions/utils.py
|
|
78
|
+
synapse_sdk/plugins/categories/export/templates/config.yaml
|
|
79
|
+
synapse_sdk/plugins/categories/export/templates/plugin/__init__.py
|
|
80
|
+
synapse_sdk/plugins/categories/export/templates/plugin/export.py
|
|
76
81
|
synapse_sdk/plugins/categories/import/__init__.py
|
|
77
82
|
synapse_sdk/plugins/categories/import/actions/__init__.py
|
|
78
83
|
synapse_sdk/plugins/categories/import/actions/import.py
|
|
@@ -124,9 +129,17 @@ synapse_sdk/utils/debug.py
|
|
|
124
129
|
synapse_sdk/utils/file.py
|
|
125
130
|
synapse_sdk/utils/module_loading.py
|
|
126
131
|
synapse_sdk/utils/network.py
|
|
127
|
-
synapse_sdk/utils/storage.py
|
|
128
132
|
synapse_sdk/utils/string.py
|
|
129
133
|
synapse_sdk/utils/pydantic/__init__.py
|
|
130
134
|
synapse_sdk/utils/pydantic/config.py
|
|
131
135
|
synapse_sdk/utils/pydantic/errors.py
|
|
132
|
-
synapse_sdk/utils/pydantic/validators.py
|
|
136
|
+
synapse_sdk/utils/pydantic/validators.py
|
|
137
|
+
synapse_sdk/utils/storage/__init__.py
|
|
138
|
+
synapse_sdk/utils/storage/registry.py
|
|
139
|
+
synapse_sdk/utils/storage/providers/__init__.py
|
|
140
|
+
synapse_sdk/utils/storage/providers/gcp.py
|
|
141
|
+
synapse_sdk/utils/storage/providers/s3.py
|
|
142
|
+
synapse_sdk/utils/storage/providers/sftp.py
|
|
143
|
+
tests/__init__.py
|
|
144
|
+
tests/utils/__init__.py
|
|
145
|
+
tests/utils/test_debug.py
|
|
File without changes
|
|
File without changes
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from synapse_sdk.plugins.categories.base import Action
|
|
2
|
-
from synapse_sdk.plugins.categories.decorators import register_action
|
|
3
|
-
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@register_action
|
|
7
|
-
class ExportAction(Action):
|
|
8
|
-
name = 'export'
|
|
9
|
-
category = PluginCategory.EXPORT
|
|
10
|
-
method = RunMethod.JOB
|