synapse-sdk 1.0.0a25__py3-none-any.whl → 1.0.0a27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (32) hide show
  1. synapse_sdk/cli/__init__.py +4 -2
  2. synapse_sdk/cli/alias/__init__.py +22 -0
  3. synapse_sdk/cli/alias/create.py +36 -0
  4. synapse_sdk/cli/alias/dataclass.py +31 -0
  5. synapse_sdk/cli/alias/default.py +16 -0
  6. synapse_sdk/cli/alias/delete.py +15 -0
  7. synapse_sdk/cli/alias/list.py +19 -0
  8. synapse_sdk/cli/alias/read.py +15 -0
  9. synapse_sdk/cli/alias/update.py +17 -0
  10. synapse_sdk/cli/alias/utils.py +54 -0
  11. synapse_sdk/cli/plugin/__init__.py +31 -0
  12. synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
  13. synapse_sdk/clients/backend/dataset.py +1 -2
  14. synapse_sdk/clients/base.py +4 -3
  15. synapse_sdk/plugins/__init__.py +0 -13
  16. synapse_sdk/plugins/categories/base.py +8 -4
  17. synapse_sdk/plugins/models.py +5 -1
  18. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
  19. synapse_sdk/utils/file.py +7 -4
  20. synapse_sdk/utils/network.py +16 -0
  21. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/METADATA +2 -2
  22. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/RECORD +28 -21
  23. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/WHEEL +1 -1
  24. synapse_sdk/plugins/cli/__init__.py +0 -21
  25. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
  26. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
  27. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
  28. /synapse_sdk/{plugins/cli → cli/plugin}/publish.py +0 -0
  29. /synapse_sdk/{plugins/cli → cli/plugin}/run.py +0 -0
  30. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/LICENSE +0 -0
  31. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/entry_points.txt +0 -0
  32. {synapse_sdk-1.0.0a25.dist-info → synapse_sdk-1.0.0a27.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  import click
2
2
 
3
- from synapse_sdk.cli.create_plugin import create_plugin
3
+ from .alias import alias
4
+ from .plugin import plugin
4
5
 
5
6
 
6
7
  @click.group()
@@ -8,4 +9,5 @@ def cli():
8
9
  pass
9
10
 
10
11
 
11
- cli.add_command(create_plugin)
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:
@@ -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']
@@ -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
synapse_sdk/utils/file.py CHANGED
@@ -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
@@ -6,10 +6,22 @@ synapse_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  synapse_sdk/i18n.py,sha256=VXMR-Zm_1hTAg9iPk3YZNNq-T1Bhx1J2fEtRT6kyYbg,766
7
7
  synapse_sdk/loggers.py,sha256=RsDDOiOeUCih1XOkWQJseYdYCX_wt50AZJRe6aPf96Q,4004
8
8
  synapse_sdk/types.py,sha256=khzn8KpgxFdn1SrpbcuX84m_Md1Mz_HIoUoPq8uok40,698
9
- synapse_sdk/cli/__init__.py,sha256=WmYGW1qZEXXIGJe3SGr8QjOStY4svuZKK1Lp_aPvtPs,140
10
- synapse_sdk/cli/create_plugin.py,sha256=egbW_92WwxfHz50Gy4znX5Bf5fxDdQj3GFyd0l3Y3SY,228
9
+ synapse_sdk/cli/__init__.py,sha256=P-_FXCqb_nTVdQznuHop6kDXF_JuncZpeAmgHiGoILQ,152
10
+ synapse_sdk/cli/alias/__init__.py,sha256=jDy8N_KupVy7n_jKKWhjQOj76-mR-uoVvMoyzObUkuI,405
11
+ synapse_sdk/cli/alias/create.py,sha256=P9uX_dbafSdpO4UM4A4l6fyu88I3plaUPnIk72z5-wQ,1132
12
+ synapse_sdk/cli/alias/dataclass.py,sha256=avVaUvBmtdVkM9GD_MilCXk0kVQSbh2p5s5XEqL4kMs,1498
13
+ synapse_sdk/cli/alias/default.py,sha256=kcVTxtZQZu59aXNUbkjTp_10cygvFjDRUyIRgspau7Q,388
14
+ synapse_sdk/cli/alias/delete.py,sha256=V2_5j9IyXIxEO82PL3JJAF7WHrn-LwFe_PyfPJTF588,363
15
+ synapse_sdk/cli/alias/list.py,sha256=fsKe5MVyl9ki3bwEwDj1nWAWfnNKOmkLO3bbbHOfsL4,564
16
+ synapse_sdk/cli/alias/read.py,sha256=gkcSO6zAqvqHMduKIajvzftEgYphp4pIVjsIShgPoHk,349
17
+ synapse_sdk/cli/alias/update.py,sha256=LOpkpe6ZP_HcOOwC5RkJHVxQuNcQHGnyN98tABjz754,531
18
+ synapse_sdk/cli/alias/utils.py,sha256=CyavTlSw7ezkx2LpX2UG9ZJ64oBKQT0pvjRoSX0dtuQ,1346
19
+ synapse_sdk/cli/plugin/__init__.py,sha256=A88y2w42BWwwyQoH5KBSNn8r9sJjGg5-cG7gkP25X4M,766
20
+ synapse_sdk/cli/plugin/create.py,sha256=HpYTpohV1NbSrULaVUlc4jWLWznPrx7glgydTM3sS5E,218
21
+ synapse_sdk/cli/plugin/publish.py,sha256=sIl1wiuSC3lAUpE3rOF4UDKDy2G5EVLlelMjk2aT05g,1221
22
+ synapse_sdk/cli/plugin/run.py,sha256=xz5LRm3zh8Y9DMjw5FFRFVRWSCWtYfZJskfCmrPikaQ,2598
11
23
  synapse_sdk/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- synapse_sdk/clients/base.py,sha256=Yo_WUHNQ2NgNe3sBav0cM_armOdBz34o7fn3lbtrHO0,3462
24
+ synapse_sdk/clients/base.py,sha256=q5jIsL2ygRq8ivLWH42E3njvx4RexjsjALZqhtGxbxM,3511
13
25
  synapse_sdk/clients/exceptions.py,sha256=ylv7x10eOp4aA3a48jwonnvqvkiYwzJYXjkVkRTAjwk,220
14
26
  synapse_sdk/clients/utils.py,sha256=8pPJTdzHiRPSbZMoQYHAgR2BAMO6u_R_jMV6a2p34iQ,392
15
27
  synapse_sdk/clients/agent/__init__.py,sha256=Pz8_iTbIbnb7ywGJ3feqoZVmO2I3mEbwpWsISIxh0BU,1968
@@ -19,20 +31,20 @@ synapse_sdk/clients/agent/service.py,sha256=s7KuPK_DB1nr2VHrigttV1WyFonaGHNrPvU8
19
31
  synapse_sdk/clients/backend/__init__.py,sha256=aozhPhvRTPHz1P90wxEay07B-Ct4vj_yTw5H9_PJEBE,1105
20
32
  synapse_sdk/clients/backend/annotation.py,sha256=eZc5EidgR_RfMGwvv1r1_mLkPdRd8e52c4zuuMjMX34,979
21
33
  synapse_sdk/clients/backend/core.py,sha256=5XAOdo6JZ0drfk-FMPJ96SeTd9oja-VnTwzGXdvK7Bg,1027
22
- synapse_sdk/clients/backend/dataset.py,sha256=a_svyCKgzF7N99l8V4u4wXD8JxiGuLW9z2EBinnz7b8,1738
34
+ synapse_sdk/clients/backend/dataset.py,sha256=w7izflbTjHKysiDl7ia7MAO391_dzN2ofK40A7QwtBQ,1721
23
35
  synapse_sdk/clients/backend/integration.py,sha256=Jg_8fEmbrgYXfZZcG8cDtLxR6ugPmnbNhPDyRu_Uib0,2160
24
36
  synapse_sdk/clients/backend/ml.py,sha256=jlkqS9pI0S0Ubq4pWVeaaaPk-E0J-cZg5zkSX7GuQ_o,1063
25
37
  synapse_sdk/clients/ray/__init__.py,sha256=9ZSPXVVxlJ8Wp8ku7l021ENtPjVrGgQDgqifkkVAXgM,187
26
38
  synapse_sdk/clients/ray/core.py,sha256=a4wyCocAma2HAm-BHlbZnoVbpfdR-Aad2FM0z6vPFvw,731
27
39
  synapse_sdk/clients/ray/serve.py,sha256=rbCpXZYWf0oP8XJ9faa9QFNPYU7h8dltIG8xn9ZconY,907
28
- synapse_sdk/plugins/__init__.py,sha256=9vsbYhxah4_ofTaG0x0qLFID_raHNkO57Y8A31Ws-lU,222
40
+ synapse_sdk/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
41
  synapse_sdk/plugins/enums.py,sha256=s59P6Oz2WAK9IX-kLVhNOvNKYJifKlWBhPpZbc9-ttE,486
30
42
  synapse_sdk/plugins/exceptions.py,sha256=Qs7qODp_RRLO9y2otU2T4ryj5LFwIZODvSIXkAh91u0,691
31
- synapse_sdk/plugins/models.py,sha256=S0oC2DXTqO9qH1BTNKVYRflGKSMU_8LpKVmCIEpJxVA,3562
43
+ synapse_sdk/plugins/models.py,sha256=JFaU1aqzminwWasNKuRBYd5hrBTRHDOZkl2nqZ1l0IM,3687
32
44
  synapse_sdk/plugins/upload.py,sha256=VJOotYMayylOH0lNoAGeGHRkLdhP7jnC_A0rFQMvQpQ,3228
33
45
  synapse_sdk/plugins/utils.py,sha256=4_K6jIl0WrsXOEhFp94faMOriSsddOhIiaXcawYYUUA,3300
34
46
  synapse_sdk/plugins/categories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- synapse_sdk/plugins/categories/base.py,sha256=3EkcKGqLwpRzeeH8sH-gJ0AgB-Zhh1UrNR9CrxEOwLo,8317
47
+ synapse_sdk/plugins/categories/base.py,sha256=_bNB_TeCN1hIKeDLxb3Cj9UAGO8BLju97__pLN625A8,8500
36
48
  synapse_sdk/plugins/categories/decorators.py,sha256=Gw6T-UHwpCKrSt596X-g2sZbY_Z1zbbogowClj7Pr5Q,518
37
49
  synapse_sdk/plugins/categories/registry.py,sha256=KdQR8SUlLT-3kgYzDNWawS1uJnAhrcw2j4zFaTpilRs,636
38
50
  synapse_sdk/plugins/categories/templates.py,sha256=FF5FerhkZMeW1YcKLY5cylC0SkWSYdJODA_Qcm4OGYQ,887
@@ -79,19 +91,13 @@ synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py,sha256=fHiqA8ntm
79
91
  synapse_sdk/plugins/categories/smart_tool/templates/config.yaml,sha256=7bvb4M1PLaoTOVDYF05L7yb8ix4rZOrAnEuZ-thMsyo,206
80
92
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
93
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py,sha256=eevNg0nOcYFR4z_L_R-sCvVOYoLWSAH1jwDkAf3YCjY,320
82
- synapse_sdk/plugins/cli/__init__.py,sha256=LPtUO0jqkhKq6xR1grpse7da2R6OoT_BeDyCNyUY0T4,380
83
- synapse_sdk/plugins/cli/publish.py,sha256=sIl1wiuSC3lAUpE3rOF4UDKDy2G5EVLlelMjk2aT05g,1221
84
- synapse_sdk/plugins/cli/run.py,sha256=xz5LRm3zh8Y9DMjw5FFRFVRWSCWtYfZJskfCmrPikaQ,2598
85
94
  synapse_sdk/plugins/templates/cookiecutter.json,sha256=NxOWk9A_v1pO0Ny4IYT9Cj5iiJ16--cIQrGC67QdR0I,396
86
95
  synapse_sdk/plugins/templates/hooks/post_gen_project.py,sha256=jqlYkY1O2TxIR-Vh3gnwILYy8k-D39Xx66d2KNQVMCs,147
87
96
  synapse_sdk/plugins/templates/hooks/pre_prompt.py,sha256=aOAMM623s0sKFGjTZaotAOYFvsNMxeii4tPyhOAFKVE,539
88
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env,sha256=YlAG5YKwFEiwKm5NUbPsqvOJ9FJKoN0lbT3sxymBJpE,551
89
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist,sha256=YlAG5YKwFEiwKm5NUbPsqvOJ9FJKoN0lbT3sxymBJpE,551
90
97
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore,sha256=RvBmUbwmzgv0vYzYk2aQ0HpvKyPj6sCpBqsrthCuA4s,243
91
98
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml,sha256=p0yZwCUC8tYS1B0GPkjKiXYoRY9EZlq_ejFP98hB50g,154
92
99
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md,sha256=ETBZv_2Ocgzn4Fe3o5Y842mZiz00ABuAalrXpNVnWU0,56
93
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml,sha256=CRfKjPJ6K2UlYbcHMSAYUGzn2TGmV7kDbZmKHwNuq3w,210
94
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py,sha256=fPFaIPBwskS84YvnmDGERXn3wC5z_yV_f4NbisVvBfQ,79
100
+ synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml,sha256=tbX80vu-c_FyRJgPQXp8WoxJ2XhTYF8c1qv7SdHwddY,230
95
101
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml,sha256=Usgd80tHZAD1Ug5MAjPfETUZxtKKgZW-xovFEAEbQDo,317
96
102
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt,sha256=F5UwinpTLQFfyakFGTFxgBOo4H-EKD9d4e77WKOPHhk,17
97
103
  synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -99,17 +105,18 @@ synapse_sdk/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
99
105
  synapse_sdk/shared/enums.py,sha256=WMZPag9deVF7VCXaQkLk7ly_uX1KwbNzRx9TdvgaeFE,138
100
106
  synapse_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
107
  synapse_sdk/utils/debug.py,sha256=F7JlUwYjTFZAMRbBqKm6hxOIz-_IXYA8lBInOS4jbS4,100
102
- synapse_sdk/utils/file.py,sha256=HgSFZ5O_pYCumLH0Qft6C_NVz-H-ECaUfNcs3sTs43g,5443
108
+ synapse_sdk/utils/file.py,sha256=eF1GDxjPaq2QOiKKCHSzgCkBRYSBSwP4rKOAApAQR3E,5661
103
109
  synapse_sdk/utils/module_loading.py,sha256=chHpU-BZjtYaTBD_q0T7LcKWtqKvYBS4L0lPlKkoMQ8,1020
110
+ synapse_sdk/utils/network.py,sha256=wg-oFM0gKK5REqIUO8d-x9yXJfqbnkSbbF0_qyxpwz4,412
104
111
  synapse_sdk/utils/storage.py,sha256=a8OVbd38ATr0El4G4kuV07lr_tJZrpIJBSy4GHb0qZ8,2581
105
112
  synapse_sdk/utils/string.py,sha256=rEwuZ9SAaZLcQ8TYiwNKr1h2u4CfnrQx7SUL8NWmChg,216
106
113
  synapse_sdk/utils/pydantic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
114
  synapse_sdk/utils/pydantic/config.py,sha256=1vYOcUI35GslfD1rrqhFkNXXJOXt4IDqOPSx9VWGfNE,123
108
115
  synapse_sdk/utils/pydantic/errors.py,sha256=0v0T12eQBr1KrFiEOBu6KMaPK4aPEGEC6etPJGoR5b4,1061
109
116
  synapse_sdk/utils/pydantic/validators.py,sha256=G47P8ObPhsePmd_QZDK8EdPnik2CbaYzr_N4Z6En8dc,193
110
- synapse_sdk-1.0.0a25.dist-info/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
111
- synapse_sdk-1.0.0a25.dist-info/METADATA,sha256=U7zm1tGFEUpAF4cjcsjPSXf1-RGR0GTD6cDyCeFA918,1070
112
- synapse_sdk-1.0.0a25.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
113
- synapse_sdk-1.0.0a25.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
114
- synapse_sdk-1.0.0a25.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
115
- synapse_sdk-1.0.0a25.dist-info/RECORD,,
117
+ synapse_sdk-1.0.0a27.dist-info/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
118
+ synapse_sdk-1.0.0a27.dist-info/METADATA,sha256=HIpc3MxfEPZqeCjtiNM4S5pCicSkJA5xvS7QQ57kAzQ,1070
119
+ synapse_sdk-1.0.0a27.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
120
+ synapse_sdk-1.0.0a27.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
121
+ synapse_sdk-1.0.0a27.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
122
+ synapse_sdk-1.0.0a27.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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