synapse-sdk 1.0.0a25__tar.gz → 1.0.0a27__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.

Files changed (138) hide show
  1. {synapse_sdk-1.0.0a25/synapse_sdk.egg-info → synapse_sdk-1.0.0a27}/PKG-INFO +2 -2
  2. synapse_sdk-1.0.0a27/synapse_sdk/cli/__init__.py +13 -0
  3. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/__init__.py +22 -0
  4. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/create.py +36 -0
  5. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/dataclass.py +31 -0
  6. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/default.py +16 -0
  7. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/delete.py +15 -0
  8. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/list.py +19 -0
  9. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/read.py +15 -0
  10. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/update.py +17 -0
  11. synapse_sdk-1.0.0a27/synapse_sdk/cli/alias/utils.py +54 -0
  12. synapse_sdk-1.0.0a27/synapse_sdk/cli/plugin/__init__.py +31 -0
  13. synapse_sdk-1.0.0a25/synapse_sdk/cli/create_plugin.py → synapse_sdk-1.0.0a27/synapse_sdk/cli/plugin/create.py +2 -2
  14. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/dataset.py +1 -2
  15. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/base.py +4 -3
  16. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/base.py +8 -4
  17. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/models.py +5 -1
  18. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
  19. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/file.py +7 -4
  20. synapse_sdk-1.0.0a27/synapse_sdk/utils/network.py +16 -0
  21. synapse_sdk-1.0.0a27/synapse_sdk/utils/pydantic/__init__.py +0 -0
  22. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27/synapse_sdk.egg-info}/PKG-INFO +2 -2
  23. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk.egg-info/SOURCES.txt +14 -7
  24. synapse_sdk-1.0.0a25/synapse_sdk/cli/__init__.py +0 -11
  25. synapse_sdk-1.0.0a25/synapse_sdk/plugins/__init__.py +0 -13
  26. synapse_sdk-1.0.0a25/synapse_sdk/plugins/cli/__init__.py +0 -21
  27. synapse_sdk-1.0.0a25/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
  28. synapse_sdk-1.0.0a25/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
  29. synapse_sdk-1.0.0a25/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
  30. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/.github/workflows/lint.yml +0 -0
  31. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/.github/workflows/pypi-publish.yml +0 -0
  32. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/.gitignore +0 -0
  33. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/.pre-commit-config.yaml +0 -0
  34. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/LICENSE +0 -0
  35. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/README.md +0 -0
  36. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/locale/en/LC_MESSAGES/messages.mo +0 -0
  37. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/locale/en/LC_MESSAGES/messages.po +0 -0
  38. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  39. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/locale/ko/LC_MESSAGES/messages.po +0 -0
  40. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/pyproject.toml +0 -0
  41. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/requirements.txt +0 -0
  42. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/setup.cfg +0 -0
  43. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/__init__.py +0 -0
  44. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/cli → synapse_sdk-1.0.0a27/synapse_sdk/cli/plugin}/publish.py +0 -0
  45. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/cli → synapse_sdk-1.0.0a27/synapse_sdk/cli/plugin}/run.py +0 -0
  46. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/__init__.py +0 -0
  47. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/agent/__init__.py +0 -0
  48. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/agent/core.py +0 -0
  49. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/agent/ray.py +0 -0
  50. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/agent/service.py +0 -0
  51. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/__init__.py +0 -0
  52. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/annotation.py +0 -0
  53. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/core.py +0 -0
  54. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/integration.py +0 -0
  55. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/backend/ml.py +0 -0
  56. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/exceptions.py +0 -0
  57. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/ray/__init__.py +0 -0
  58. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/ray/core.py +0 -0
  59. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/ray/serve.py +0 -0
  60. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/clients/utils.py +0 -0
  61. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/i18n.py +0 -0
  62. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/loggers.py +0 -0
  63. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories → synapse_sdk-1.0.0a27/synapse_sdk/plugins}/__init__.py +0 -0
  64. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/data_validation → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories}/__init__.py +0 -0
  65. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/data_validation/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/data_validation}/__init__.py +0 -0
  66. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/data_validation/templates/plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/data_validation/actions}/__init__.py +0 -0
  67. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  68. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  69. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/export → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/data_validation/templates/plugin}/__init__.py +0 -0
  70. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  71. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/decorators.py +0 -0
  72. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/export/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/export}/__init__.py +0 -0
  73. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/import → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/export/actions}/__init__.py +0 -0
  74. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  75. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/import/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/import}/__init__.py +0 -0
  76. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/neural_net → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/import/actions}/__init__.py +0 -0
  77. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/import/actions/import.py +0 -0
  78. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/neural_net/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/neural_net}/__init__.py +0 -0
  79. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/neural_net/base → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/neural_net/actions}/__init__.py +0 -0
  80. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  81. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  82. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  83. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  84. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/neural_net/templates/plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/neural_net/base}/__init__.py +0 -0
  85. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  86. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  87. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/post_annotation → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/neural_net/templates/plugin}/__init__.py +0 -0
  88. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  89. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  90. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  91. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/post_annotation/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/post_annotation}/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/post_annotation/templates/plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/post_annotation/actions}/__init__.py +0 -0
  93. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  94. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  95. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/pre_annotation → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/post_annotation/templates/plugin}/__init__.py +0 -0
  96. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  97. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/pre_annotation/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/pre_annotation}/__init__.py +0 -0
  98. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/pre_annotation/templates/plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/pre_annotation/actions}/__init__.py +0 -0
  99. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  100. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  101. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/smart_tool → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/pre_annotation/templates/plugin}/__init__.py +0 -0
  102. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  103. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/registry.py +0 -0
  104. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/smart_tool/actions → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/smart_tool}/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/categories/smart_tool/templates/plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/smart_tool/actions}/__init__.py +0 -0
  106. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  107. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  108. {synapse_sdk-1.0.0a25/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin → synapse_sdk-1.0.0a27/synapse_sdk/plugins/categories/smart_tool/templates}/plugin/__init__.py +0 -0
  109. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  110. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/categories/templates.py +0 -0
  111. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/enums.py +0 -0
  112. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/exceptions.py +0 -0
  113. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  114. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  115. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  116. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  117. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  118. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  119. {synapse_sdk-1.0.0a25/synapse_sdk/shared → synapse_sdk-1.0.0a27/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin}/__init__.py +0 -0
  120. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  121. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  122. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/upload.py +0 -0
  123. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/plugins/utils.py +0 -0
  124. {synapse_sdk-1.0.0a25/synapse_sdk/utils → synapse_sdk-1.0.0a27/synapse_sdk/shared}/__init__.py +0 -0
  125. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/shared/enums.py +0 -0
  126. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/types.py +0 -0
  127. {synapse_sdk-1.0.0a25/synapse_sdk/utils/pydantic → synapse_sdk-1.0.0a27/synapse_sdk/utils}/__init__.py +0 -0
  128. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/debug.py +0 -0
  129. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/module_loading.py +0 -0
  130. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/pydantic/config.py +0 -0
  131. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/pydantic/errors.py +0 -0
  132. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/pydantic/validators.py +0 -0
  133. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/storage.py +0 -0
  134. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk/utils/string.py +0 -0
  135. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  136. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk.egg-info/entry_points.txt +0 -0
  137. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk.egg-info/requires.txt +0 -0
  138. {synapse_sdk-1.0.0a25 → synapse_sdk-1.0.0a27}/synapse_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a25
3
+ Version: 1.0.0a27
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -0,0 +1,13 @@
1
+ import click
2
+
3
+ from .alias import alias
4
+ from .plugin import plugin
5
+
6
+
7
+ @click.group()
8
+ def cli():
9
+ pass
10
+
11
+
12
+ cli.add_command(plugin)
13
+ cli.add_command(alias)
@@ -0,0 +1,22 @@
1
+ import click
2
+
3
+ from .create import create
4
+ from .default import default
5
+ from .delete import delete
6
+ from .list import list as list_cli
7
+ from .read import read
8
+ from .update import update
9
+
10
+
11
+ @click.group()
12
+ def alias():
13
+ """Manage aliases"""
14
+ pass
15
+
16
+
17
+ alias.add_command(list_cli)
18
+ alias.add_command(create)
19
+ alias.add_command(read)
20
+ alias.add_command(update)
21
+ alias.add_command(delete)
22
+ alias.add_command(default)
@@ -0,0 +1,36 @@
1
+ import click
2
+
3
+ from .dataclass import ENV_VARS
4
+ from .utils import CONFIG_DIR, DEFAULT_FILE, ensure_config_dir, save_alias_field, set_default_alias
5
+
6
+
7
+ @click.command()
8
+ def create():
9
+ """Create a new alias."""
10
+ ensure_config_dir()
11
+ name = click.prompt('Enter alias name (eg. prod, test)', type=str)
12
+ alias_file = CONFIG_DIR / f'{name}.env'
13
+ if alias_file.exists():
14
+ click.echo(f"Alias '{name}' already exists.")
15
+ return
16
+ if alias_file.name == DEFAULT_FILE.name:
17
+ click.echo(f"Invalid alias name '{name}'.")
18
+ return
19
+
20
+ alias_data = {}
21
+
22
+ for key, value in ENV_VARS.items():
23
+ prompt_kwargs = {'text': value.name, 'type': value.type, 'show_default': value.show_default}
24
+ if bool(value.default):
25
+ prompt_kwargs['default'] = alias_data[value.default]
26
+
27
+ alias_data[key] = click.prompt(**prompt_kwargs)
28
+
29
+ for key, value in alias_data.items():
30
+ save_alias_field(name, key, value)
31
+
32
+ # Set the default alias if it is the first alias created
33
+ if not DEFAULT_FILE.exists():
34
+ set_default_alias(name)
35
+
36
+ click.echo(f"Alias '{name}' created.")
@@ -0,0 +1,31 @@
1
+ from dataclasses import dataclass
2
+ from typing import Union
3
+
4
+
5
+ @dataclass
6
+ class EnvVar:
7
+ name: str
8
+ type = str
9
+ default: Union[str, None] = None
10
+ show_default: bool = True
11
+
12
+
13
+ ENV_VARS = {
14
+ 'RAY_ADDRESS': EnvVar('RAY_ADDRESS'),
15
+ 'RAY_DASHBOARD_ADDRESS': EnvVar('RAY_DASHBOARD_ADDRESS'),
16
+ 'RAY_SERVE_ADDRESS': EnvVar('RAY_SERVE_ADDRESS'),
17
+ 'SYNAPSE_PLUGIN_STORAGE': EnvVar('SYNAPSE_PLUGIN_STORAGE', default='', show_default=False),
18
+ 'SYNAPSE_DEBUG_PLUGIN_PATH': EnvVar('SYNAPSE_DEBUG_PLUGIN_PATH', default='', show_default=False),
19
+ 'SYNAPSE_DEBUG_MODULES': EnvVar('SYNAPSE_DEBUG_MODULES', default='', show_default=False),
20
+ 'SYNAPSE_PLUGIN_PUBLISH_HOST': EnvVar('SYNAPSE_PLUGIN_PUBLISH_HOST'),
21
+ 'SYNAPSE_PLUGIN_PUBLISH_USER_TOKEN': EnvVar('SYNAPSE_PLUGIN_PUBLISH_USER_TOKEN'),
22
+ 'SYNAPSE_PLUGIN_PUBLISH_TENANT': EnvVar('SYNAPSE_PLUGIN_PUBLISH_TENANT'),
23
+ 'SYNAPSE_PLUGIN_RUN_HOST': EnvVar('SYNAPSE_PLUGIN_RUN_HOST', default='SYNAPSE_PLUGIN_PUBLISH_HOST'),
24
+ 'SYNAPSE_PLUGIN_RUN_AGENT': EnvVar('SYNAPSE_PLUGIN_RUN_AGENT', default='', show_default=False),
25
+ 'SYNAPSE_PLUGIN_RUN_AGENT_TOKEN': EnvVar('SYNAPSE_PLUGIN_RUN_AGENT_TOKEN'),
26
+ 'SYNAPSE_PLUGIN_RUN_AGENT_HOST': EnvVar('SYNAPSE_PLUGIN_RUN_AGENT_HOST'),
27
+ 'SYNAPSE_PLUGIN_RUN_USER_TOKEN': EnvVar(
28
+ 'SYNAPSE_PLUGIN_RUN_USER_TOKEN', default='SYNAPSE_PLUGIN_PUBLISH_USER_TOKEN'
29
+ ),
30
+ 'SYNAPSE_PLUGIN_RUN_TENANT': EnvVar('SYNAPSE_PLUGIN_RUN_TENANT', default='SYNAPSE_PLUGIN_PUBLISH_TENANT'),
31
+ }
@@ -0,0 +1,16 @@
1
+ import click
2
+
3
+ from .utils import load_alias, set_default_alias
4
+
5
+
6
+ @click.command()
7
+ @click.argument('name', required=True)
8
+ def default(name):
9
+ """Set an alias as the default."""
10
+ alias_data = load_alias(name)
11
+ if not alias_data:
12
+ click.echo(f"Alias '{name}' does not exist.")
13
+ return
14
+
15
+ set_default_alias(name)
16
+ click.echo(f"Alias '{name}' is now the default.")
@@ -0,0 +1,15 @@
1
+ import click
2
+
3
+ from .utils import delete_alias_file, load_alias
4
+
5
+
6
+ @click.command()
7
+ @click.argument('name', required=True)
8
+ def delete(name):
9
+ """Delete an alias."""
10
+ alias_data = load_alias(name)
11
+ if not alias_data:
12
+ click.echo(f"Alias '{name}' does not exist.")
13
+ return
14
+ delete_alias_file(name)
15
+ click.echo(f"Alias '{name}' deleted.")
@@ -0,0 +1,19 @@
1
+ import click
2
+
3
+ from .utils import CONFIG_DIR, DEFAULT_FILE, ensure_config_dir, get_default_alias
4
+
5
+
6
+ @click.command()
7
+ def list():
8
+ """List all aliases."""
9
+ ensure_config_dir()
10
+ aliases = [f.stem for f in CONFIG_DIR.glob('*') if f.is_file() and f.stem != DEFAULT_FILE.stem]
11
+ default_alias = get_default_alias()
12
+ if not aliases:
13
+ click.echo('No aliases found.')
14
+ return
15
+ for alias_name in aliases:
16
+ if alias_name == default_alias:
17
+ click.echo(f'{alias_name} (default)')
18
+ else:
19
+ click.echo(alias_name)
@@ -0,0 +1,15 @@
1
+ import click
2
+
3
+ from .utils import load_alias
4
+
5
+
6
+ @click.command()
7
+ @click.argument('name', required=True)
8
+ def read(name):
9
+ """Read an alias."""
10
+ alias_data = load_alias(name)
11
+ if not alias_data:
12
+ click.echo(f"Alias '{name}' does not exist.")
13
+ return
14
+ for key, value in alias_data.items():
15
+ click.echo(f'{key}: {value}')
@@ -0,0 +1,17 @@
1
+ import click
2
+
3
+ from .utils import load_alias, save_alias_field
4
+
5
+
6
+ @click.command()
7
+ @click.argument('name', required=True)
8
+ @click.argument('field', required=True)
9
+ @click.argument('value', required=True)
10
+ def update(name, field, value):
11
+ """Update a specific field in an alias."""
12
+ alias_data = load_alias(name)
13
+ if not alias_data:
14
+ click.echo(f"Alias '{name}' does not exist.")
15
+ return
16
+ save_alias_field(name, field.upper(), value)
17
+ click.echo(f"Alias '{name}' updated. Field '{field}' is now '{value}'.")
@@ -0,0 +1,54 @@
1
+ from pathlib import Path
2
+
3
+ from dotenv import dotenv_values, set_key, unset_key
4
+
5
+ CONFIG_DIR = Path.home() / '.config' / 'synapse_alias'
6
+ DEFAULT_FILE = CONFIG_DIR / '__default__'
7
+
8
+
9
+ def ensure_config_dir():
10
+ CONFIG_DIR.mkdir(parents=True, exist_ok=True)
11
+
12
+
13
+ def load_alias(alias_name):
14
+ ensure_config_dir()
15
+ alias_file = CONFIG_DIR / alias_name
16
+ if not alias_file.exists():
17
+ return None
18
+ return dotenv_values(alias_file)
19
+
20
+
21
+ # Save or update a field in an alias .env file
22
+ def save_alias_field(alias_name, key, value):
23
+ ensure_config_dir()
24
+ alias_file = CONFIG_DIR / alias_name
25
+ set_key(alias_file, key, value)
26
+
27
+
28
+ # Delete a field from an alias .env file
29
+ def delete_alias_field(alias_name, key):
30
+ ensure_config_dir()
31
+ alias_file = CONFIG_DIR / alias_name
32
+ unset_key(alias_file, key)
33
+
34
+
35
+ # Delete an alias .env file
36
+ def delete_alias_file(alias_name):
37
+ ensure_config_dir()
38
+ alias_file = CONFIG_DIR / alias_name
39
+ if alias_file.exists():
40
+ alias_file.unlink()
41
+
42
+
43
+ def get_default_alias():
44
+ if DEFAULT_FILE.exists():
45
+ default_data = dotenv_values(DEFAULT_FILE)
46
+ return default_data.get('DEFAULT_ALIAS')
47
+ return None
48
+
49
+
50
+ # Set the default alias
51
+ def set_default_alias(alias_name):
52
+ ensure_config_dir()
53
+ with open(DEFAULT_FILE, 'w') as f:
54
+ f.write(f'DEFAULT_ALIAS={alias_name}\n')
@@ -0,0 +1,31 @@
1
+ import os
2
+
3
+ import click
4
+ from dotenv import load_dotenv
5
+
6
+ from synapse_sdk.cli.alias.utils import CONFIG_DIR, get_default_alias
7
+ from synapse_sdk.i18n import gettext as _
8
+
9
+ from .create import create
10
+ from .publish import publish
11
+ from .run import run
12
+
13
+ load_dotenv(CONFIG_DIR / get_default_alias())
14
+ load_dotenv(os.path.join(os.getcwd(), '.env'), override=True)
15
+
16
+
17
+ @click.group(context_settings={'obj': {}, 'auto_envvar_prefix': 'SYNAPSE_PLUGIN'})
18
+ @click.option('--debug/--no-debug', default=False)
19
+ @click.pass_context
20
+ def plugin(ctx, debug):
21
+ """Manage Synapse plugins."""
22
+ ctx.ensure_object(dict)
23
+ ctx.obj['DEBUG'] = debug
24
+
25
+ if debug:
26
+ click.echo(_('Debug mode is "on"'))
27
+
28
+
29
+ plugin.add_command(create)
30
+ plugin.add_command(publish)
31
+ plugin.add_command(run)
@@ -5,6 +5,6 @@ from cookiecutter.main import cookiecutter
5
5
 
6
6
 
7
7
  @click.command()
8
- def create_plugin():
9
- project_root = Path(__file__).parent.parent
8
+ def create():
9
+ project_root = Path(__file__).parents[2]
10
10
  cookiecutter(str(project_root / 'plugins/templates'))
@@ -36,8 +36,7 @@ class DatasetClientMixin(BaseClient):
36
36
  tasks_data = []
37
37
  for data, data_unit in zip(batch, data_units):
38
38
  task_data = {'project': project_id, 'data_unit': data_unit['id']}
39
- if 'ground_truth' in data:
40
- task_data['ground_truth'] = data['ground_truth']
39
+ # TODO: 추후 import 시 Task data 저장 필요 시 해당 로직 추가 필요.
41
40
 
42
41
  tasks_data.append(task_data)
43
42
 
@@ -35,9 +35,10 @@ class BaseClient:
35
35
  for name, file in kwargs['files'].items():
36
36
  if isinstance(file, (str, Path)):
37
37
  kwargs['files'][name] = Path(str(file)).open(mode='rb')
38
- for name, value in kwargs['data'].items():
39
- if isinstance(value, dict):
40
- kwargs['data'][name] = json.dumps(value)
38
+ if 'data' in kwargs:
39
+ for name, value in kwargs['data'].items():
40
+ if isinstance(value, dict):
41
+ kwargs['data'][name] = json.dumps(value)
41
42
  else:
42
43
  headers['Content-Type'] = 'application/json'
43
44
  if 'data' in kwargs:
@@ -105,6 +105,10 @@ class Action:
105
105
  self.envs['SYNAPSE_DEBUG_MODULES'] = ','.join(debug_modules)
106
106
  return debug_modules
107
107
 
108
+ @property
109
+ def plugin_package_manager(self):
110
+ return self.plugin_config.get('package_manager', 'pip')
111
+
108
112
  def get_run(self):
109
113
  context = {
110
114
  'plugin_release': self.plugin_release,
@@ -119,13 +123,13 @@ class Action:
119
123
  return {env: os.environ[env] for env in self.REQUIRED_ENVS if env in os.environ}
120
124
 
121
125
  def get_runtime_env(self):
122
- runtime_env = {'pip': [], 'working_dir': self.plugin_url}
126
+ runtime_env = {self.plugin_package_manager: [], 'working_dir': self.plugin_url}
123
127
 
124
128
  if self.requirements:
125
- runtime_env['pip'] += self.requirements
129
+ runtime_env[self.plugin_package_manager] += self.requirements
126
130
 
127
131
  if self.debug:
128
- runtime_env['pip'] += self.debug_modules
132
+ runtime_env[self.plugin_package_manager] += self.debug_modules
129
133
 
130
134
  # 맨 마지막에 진행되어야 함
131
135
  runtime_env['env_vars'] = self.envs
@@ -206,7 +210,7 @@ class Action:
206
210
  client = self.get_job_client()
207
211
  return client.submit_job(
208
212
  submission_id=self.job_id,
209
- entrypoint=f'python main.py {cmd}',
213
+ entrypoint=f'synapse plugin {cmd}',
210
214
  runtime_env=self.get_runtime_env(),
211
215
  )
212
216
 
@@ -41,6 +41,10 @@ class PluginRelease:
41
41
  def name(self):
42
42
  return self.config['name']
43
43
 
44
+ @cached_property
45
+ def package_manager(self):
46
+ return self.config.get('package_manager', 'pip')
47
+
44
48
  @cached_property
45
49
  def checksum(self):
46
50
  return hash_text(self.code)
@@ -65,7 +69,7 @@ class PluginRelease:
65
69
 
66
70
  warm_up.options(
67
71
  runtime_env={
68
- 'pip': ['-r ${RAY_RUNTIME_ENV_CREATE_WORKING_DIR}/requirements.txt'],
72
+ self.package_manager: ['-r ${RAY_RUNTIME_ENV_CREATE_WORKING_DIR}/requirements.txt'],
69
73
  'working_dir': self.get_url(self.envs['SYNAPSE_PLUGIN_STORAGE']),
70
74
  },
71
75
  scheduling_strategy=strategy,
@@ -4,3 +4,4 @@ version: {{ cookiecutter.version }}
4
4
  readme: README.md
5
5
  description: {{ cookiecutter.description }}
6
6
  category: {{ cookiecutter.category }}
7
+ package_manager: pip
@@ -10,18 +10,20 @@ import aiohttp
10
10
  import requests
11
11
  import yaml
12
12
 
13
+ from synapse_sdk.utils.network import clean_url
13
14
  from synapse_sdk.utils.string import hash_text
14
15
 
15
16
 
16
17
  def download_file(url, path_download, name=None, coerce=None, use_cached=True):
17
18
  chunk_size = 1024 * 1024 * 50
19
+ cleaned_url = clean_url(url) # remove query params and fragment
18
20
 
19
21
  if name:
20
22
  use_cached = False
21
23
  else:
22
- name = hash_text(url)
24
+ name = hash_text(cleaned_url)
23
25
 
24
- name += Path(url).suffix
26
+ name += Path(cleaned_url).suffix
25
27
 
26
28
  path = Path(path_download) / name
27
29
 
@@ -73,13 +75,14 @@ def files_url_to_path_from_objs(objs, files_fields, coerce=None, is_list=False,
73
75
 
74
76
  async def adownload_file(url, path_download, name=None, coerce=None, use_cached=True):
75
77
  chunk_size = 1024 * 1024 * 50
78
+ cleaned_url = clean_url(url) # remove query params and fragment
76
79
 
77
80
  if name:
78
81
  use_cached = False
79
82
  else:
80
- name = hash_text(url)
83
+ name = hash_text(cleaned_url)
81
84
 
82
- name += Path(url).suffix
85
+ name += Path(cleaned_url).suffix
83
86
 
84
87
  path = Path(path_download) / name
85
88
 
@@ -0,0 +1,16 @@
1
+ from urllib.parse import urlparse, urlunparse
2
+
3
+
4
+ def clean_url(url, remove_query_params=True, remove_fragment=True):
5
+ parsed = urlparse(url)
6
+ query = '' if remove_query_params else parsed.query
7
+ fragment = '' if remove_fragment else parsed.fragment
8
+
9
+ return urlunparse((
10
+ parsed.scheme,
11
+ parsed.netloc,
12
+ parsed.path,
13
+ parsed.params,
14
+ query,
15
+ fragment,
16
+ ))
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a25
3
+ Version: 1.0.0a27
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -23,7 +23,19 @@ synapse_sdk/../locale/en/LC_MESSAGES/messages.po
23
23
  synapse_sdk/../locale/ko/LC_MESSAGES/messages.mo
24
24
  synapse_sdk/../locale/ko/LC_MESSAGES/messages.po
25
25
  synapse_sdk/cli/__init__.py
26
- synapse_sdk/cli/create_plugin.py
26
+ synapse_sdk/cli/alias/__init__.py
27
+ synapse_sdk/cli/alias/create.py
28
+ synapse_sdk/cli/alias/dataclass.py
29
+ synapse_sdk/cli/alias/default.py
30
+ synapse_sdk/cli/alias/delete.py
31
+ synapse_sdk/cli/alias/list.py
32
+ synapse_sdk/cli/alias/read.py
33
+ synapse_sdk/cli/alias/update.py
34
+ synapse_sdk/cli/alias/utils.py
35
+ synapse_sdk/cli/plugin/__init__.py
36
+ synapse_sdk/cli/plugin/create.py
37
+ synapse_sdk/cli/plugin/publish.py
38
+ synapse_sdk/cli/plugin/run.py
27
39
  synapse_sdk/clients/__init__.py
28
40
  synapse_sdk/clients/base.py
29
41
  synapse_sdk/clients/exceptions.py
@@ -95,19 +107,13 @@ synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py
95
107
  synapse_sdk/plugins/categories/smart_tool/templates/config.yaml
96
108
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py
97
109
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py
98
- synapse_sdk/plugins/cli/__init__.py
99
- synapse_sdk/plugins/cli/publish.py
100
- synapse_sdk/plugins/cli/run.py
101
110
  synapse_sdk/plugins/templates/cookiecutter.json
102
111
  synapse_sdk/plugins/templates/hooks/post_gen_project.py
103
112
  synapse_sdk/plugins/templates/hooks/pre_prompt.py
104
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env
105
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist
106
113
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore
107
114
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml
108
115
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md
109
116
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml
110
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py
111
117
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml
112
118
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt
113
119
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py
@@ -117,6 +123,7 @@ synapse_sdk/utils/__init__.py
117
123
  synapse_sdk/utils/debug.py
118
124
  synapse_sdk/utils/file.py
119
125
  synapse_sdk/utils/module_loading.py
126
+ synapse_sdk/utils/network.py
120
127
  synapse_sdk/utils/storage.py
121
128
  synapse_sdk/utils/string.py
122
129
  synapse_sdk/utils/pydantic/__init__.py
@@ -1,11 +0,0 @@
1
- import click
2
-
3
- from synapse_sdk.cli.create_plugin import create_plugin
4
-
5
-
6
- @click.group()
7
- def cli():
8
- pass
9
-
10
-
11
- cli.add_command(create_plugin)
@@ -1,13 +0,0 @@
1
- import os
2
-
3
- from dotenv import load_dotenv
4
-
5
- from synapse_sdk.plugins.cli import cli
6
-
7
-
8
- def init():
9
- load_dotenv(os.path.join(os.getcwd(), '.env'))
10
- cli(obj={}, auto_envvar_prefix='SYNAPSE_PLUGIN')
11
-
12
-
13
- __all__ = ['init']
@@ -1,21 +0,0 @@
1
- import click
2
-
3
- from synapse_sdk.i18n import gettext as _
4
-
5
- from .publish import publish
6
- from .run import run
7
-
8
-
9
- @click.group()
10
- @click.option('--debug/--no-debug', default=False)
11
- @click.pass_context
12
- def cli(ctx, debug):
13
- ctx.ensure_object(dict)
14
- ctx.obj['DEBUG'] = debug
15
-
16
- if debug:
17
- click.echo(_('Debug mode is "on"'))
18
-
19
-
20
- cli.add_command(run)
21
- cli.add_command(publish)
@@ -1,24 +0,0 @@
1
- # RAY 관련
2
- RAY_ADDRESS=
3
- RAY_DASHBOARD_ADDRESS=
4
- RAY_SERVE_ADDRESS=
5
-
6
- # 플러그인 관련
7
- SYNAPSE_PLUGIN_STORAGE=
8
-
9
- # 플러그인 디버그 관련
10
- SYNAPSE_DEBUG_PLUGIN_PATH=
11
- SYNAPSE_DEBUG_MODULES=
12
-
13
- # 플러그인 PUBLISH 관련
14
- SYNAPSE_PLUGIN_PUBLISH_HOST=https://synapse.datamaker.io
15
- SYNAPSE_PLUGIN_PUBLISH_USER_TOKEN=
16
- SYNAPSE_PLUGIN_PUBLISH_TENANT=
17
-
18
- # 플러그인 RUN 관련
19
- SYNAPSE_PLUGIN_RUN_HOST=
20
- SYNAPSE_PLUGIN_RUN_AGENT=
21
- SYNAPSE_PLUGIN_RUN_AGENT_HOST=
22
- SYNAPSE_PLUGIN_RUN_AGENT_TOKEN=
23
- SYNAPSE_PLUGIN_RUN_USER_TOKEN=
24
- SYNAPSE_PLUGIN_RUN_TENANT=
@@ -1,24 +0,0 @@
1
- # RAY 관련
2
- RAY_ADDRESS=
3
- RAY_DASHBOARD_ADDRESS=
4
- RAY_SERVE_ADDRESS=
5
-
6
- # 플러그인 관련
7
- SYNAPSE_PLUGIN_STORAGE=
8
-
9
- # 플러그인 디버그 관련
10
- SYNAPSE_DEBUG_PLUGIN_PATH=
11
- SYNAPSE_DEBUG_MODULES=
12
-
13
- # 플러그인 PUBLISH 관련
14
- SYNAPSE_PLUGIN_PUBLISH_HOST=https://synapse.datamaker.io
15
- SYNAPSE_PLUGIN_PUBLISH_USER_TOKEN=
16
- SYNAPSE_PLUGIN_PUBLISH_TENANT=
17
-
18
- # 플러그인 RUN 관련
19
- SYNAPSE_PLUGIN_RUN_HOST=
20
- SYNAPSE_PLUGIN_RUN_AGENT=
21
- SYNAPSE_PLUGIN_RUN_AGENT_HOST=
22
- SYNAPSE_PLUGIN_RUN_AGENT_TOKEN=
23
- SYNAPSE_PLUGIN_RUN_USER_TOKEN=
24
- SYNAPSE_PLUGIN_RUN_TENANT=
@@ -1,4 +0,0 @@
1
- from synapse_sdk import plugins
2
-
3
- if __name__ == '__main__':
4
- plugins.init()
File without changes
File without changes
File without changes