synapse-sdk 1.0.0a96__py3-none-any.whl → 1.0.0b1__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.
- synapse_sdk/cli/__init__.py +139 -84
- synapse_sdk/cli/code_server.py +169 -0
- synapse_sdk/cli/config.py +105 -4
- synapse_sdk/cli/devtools.py +54 -34
- synapse_sdk/clients/base.py +3 -4
- synapse_sdk/devtools/server.py +24 -791
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/plugins/categories/upload/actions/upload.py +2 -1
- synapse_sdk/utils/converters/dm/__init__.py +0 -1
- synapse_sdk/utils/converters/pascal/from_dm.py +32 -10
- synapse_sdk/utils/storage/providers/file_system.py +15 -13
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/METADATA +4 -6
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/RECORD +35 -46
- synapse_sdk/devtools/models.py +0 -55
- synapse_sdk/devtools/utils.py +0 -52
- synapse_sdk/devtools/web/.gitignore +0 -2
- synapse_sdk/devtools/web/README.md +0 -34
- synapse_sdk/devtools/web/dist/index.html +0 -17
- synapse_sdk/devtools/web/index.html +0 -16
- synapse_sdk/devtools/web/jsconfig.json +0 -15
- synapse_sdk/devtools/web/package-lock.json +0 -2609
- synapse_sdk/devtools/web/package.json +0 -27
- synapse_sdk/devtools/web/pnpm-lock.yaml +0 -1055
- synapse_sdk/devtools/web/src/App.jsx +0 -14
- synapse_sdk/devtools/web/src/App.module.css +0 -33
- synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
- synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -42
- synapse_sdk/devtools/web/src/components/Layout.jsx +0 -12
- synapse_sdk/devtools/web/src/components/LogViewer.jsx +0 -280
- synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -150
- synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +0 -128
- synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -245
- synapse_sdk/devtools/web/src/components/icons.jsx +0 -325
- synapse_sdk/devtools/web/src/index.css +0 -470
- synapse_sdk/devtools/web/src/index.jsx +0 -15
- synapse_sdk/devtools/web/src/logo.svg +0 -1
- synapse_sdk/devtools/web/src/router.jsx +0 -34
- synapse_sdk/devtools/web/src/utils/api.js +0 -442
- synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -241
- synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -224
- synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -197
- synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -310
- synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -914
- synapse_sdk/devtools/web/vite.config.js +0 -13
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/WHEEL +0 -0
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""Unified UI components for consistent styling across the application."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Callable, Optional
|
|
4
|
+
|
|
5
|
+
import streamlit as st
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def render_action_button(
|
|
9
|
+
label: str,
|
|
10
|
+
key: str,
|
|
11
|
+
type: str = 'secondary',
|
|
12
|
+
icon: Optional[str] = None,
|
|
13
|
+
on_click: Optional[Callable] = None,
|
|
14
|
+
args: Optional[tuple] = None,
|
|
15
|
+
disabled: bool = False,
|
|
16
|
+
use_container_width: bool = False,
|
|
17
|
+
help: Optional[str] = None,
|
|
18
|
+
) -> bool:
|
|
19
|
+
"""Render a styled action button with consistent appearance."""
|
|
20
|
+
button_types = {
|
|
21
|
+
'primary': 'primary',
|
|
22
|
+
'secondary': 'secondary',
|
|
23
|
+
'danger': 'secondary', # Streamlit doesn't have danger, use CSS
|
|
24
|
+
'success': 'secondary',
|
|
25
|
+
'minimal': 'secondary',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# Add icon to label if provided
|
|
29
|
+
if icon:
|
|
30
|
+
display_label = f'{icon} {label}'
|
|
31
|
+
else:
|
|
32
|
+
display_label = label
|
|
33
|
+
|
|
34
|
+
# Create button with appropriate styling
|
|
35
|
+
clicked = st.button(
|
|
36
|
+
display_label,
|
|
37
|
+
key=key,
|
|
38
|
+
type=button_types.get(type, 'secondary'),
|
|
39
|
+
on_click=on_click,
|
|
40
|
+
args=args,
|
|
41
|
+
disabled=disabled,
|
|
42
|
+
use_container_width=use_container_width,
|
|
43
|
+
help=help,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Apply custom CSS for special button types
|
|
47
|
+
if type == 'danger':
|
|
48
|
+
st.markdown(
|
|
49
|
+
f"""
|
|
50
|
+
<style>
|
|
51
|
+
button[kind="secondary"][key="{key}"] {{
|
|
52
|
+
background-color: #fff;
|
|
53
|
+
color: #dc3545;
|
|
54
|
+
border-color: #dc3545;
|
|
55
|
+
}}
|
|
56
|
+
button[kind="secondary"][key="{key}"]:hover {{
|
|
57
|
+
background-color: #dc3545;
|
|
58
|
+
color: white;
|
|
59
|
+
}}
|
|
60
|
+
</style>
|
|
61
|
+
""",
|
|
62
|
+
unsafe_allow_html=True,
|
|
63
|
+
)
|
|
64
|
+
elif type == 'success':
|
|
65
|
+
st.markdown(
|
|
66
|
+
f"""
|
|
67
|
+
<style>
|
|
68
|
+
button[kind="secondary"][key="{key}"] {{
|
|
69
|
+
background-color: #fff;
|
|
70
|
+
color: #28a745;
|
|
71
|
+
border-color: #28a745;
|
|
72
|
+
}}
|
|
73
|
+
button[kind="secondary"][key="{key}"]:hover {{
|
|
74
|
+
background-color: #28a745;
|
|
75
|
+
color: white;
|
|
76
|
+
}}
|
|
77
|
+
</style>
|
|
78
|
+
""",
|
|
79
|
+
unsafe_allow_html=True,
|
|
80
|
+
)
|
|
81
|
+
elif type == 'minimal':
|
|
82
|
+
st.markdown(
|
|
83
|
+
f"""
|
|
84
|
+
<style>
|
|
85
|
+
button[kind="secondary"][key="{key}"] {{
|
|
86
|
+
background-color: transparent;
|
|
87
|
+
border: none;
|
|
88
|
+
color: #007bff;
|
|
89
|
+
padding: 4px 8px;
|
|
90
|
+
}}
|
|
91
|
+
button[kind="secondary"][key="{key}"]:hover {{
|
|
92
|
+
background-color: #f8f9fa;
|
|
93
|
+
text-decoration: underline;
|
|
94
|
+
}}
|
|
95
|
+
</style>
|
|
96
|
+
""",
|
|
97
|
+
unsafe_allow_html=True,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return clicked
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def render_section_header(title: str, subtitle: Optional[str] = None):
|
|
104
|
+
"""Render a consistent section header."""
|
|
105
|
+
subtitle_html = (
|
|
106
|
+
f'<p style="margin-top: 0.25rem; color: #6c757d; font-size: 14px;">{subtitle}</p>' if subtitle else ''
|
|
107
|
+
)
|
|
108
|
+
st.markdown(
|
|
109
|
+
f'<div style="margin-bottom: 1.5rem;">'
|
|
110
|
+
f'<h3 style="margin: 0; font-weight: 600; color: #1a1a1a;">{title}</h3>'
|
|
111
|
+
f'{subtitle_html}'
|
|
112
|
+
f'</div>',
|
|
113
|
+
unsafe_allow_html=True,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def render_info_card(title: str, content: str, type: str = 'info', icon: Optional[str] = None):
|
|
118
|
+
"""Render an information card with consistent styling."""
|
|
119
|
+
colors = {
|
|
120
|
+
'info': {'bg': '#d1ecf1', 'border': '#bee5eb', 'text': '#0c5460'},
|
|
121
|
+
'success': {'bg': '#d4edda', 'border': '#c3e6cb', 'text': '#155724'},
|
|
122
|
+
'warning': {'bg': '#fff3cd', 'border': '#ffeaa7', 'text': '#856404'},
|
|
123
|
+
'error': {'bg': '#f8d7da', 'border': '#f5c6cb', 'text': '#721c24'},
|
|
124
|
+
'neutral': {'bg': '#f8f9fa', 'border': '#dee2e6', 'text': '#495057'},
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
color_scheme = colors.get(type, colors['info'])
|
|
128
|
+
icon_html = f'<span style="margin-right: 8px;">{icon}</span>' if icon else ''
|
|
129
|
+
|
|
130
|
+
st.markdown(
|
|
131
|
+
f'<div style="'
|
|
132
|
+
f' background-color: {color_scheme["bg"]};'
|
|
133
|
+
f' border: 1px solid {color_scheme["border"]};'
|
|
134
|
+
f' border-radius: 6px;'
|
|
135
|
+
f' padding: 12px 16px;'
|
|
136
|
+
f' margin: 12px 0;'
|
|
137
|
+
f'">'
|
|
138
|
+
f'<div style="color: {color_scheme["text"]}; font-weight: 500; margin-bottom: 4px;">'
|
|
139
|
+
f'{icon_html}{title}'
|
|
140
|
+
f'</div>'
|
|
141
|
+
f'<div style="color: {color_scheme["text"]}; font-size: 14px;">{content}</div>'
|
|
142
|
+
f'</div>',
|
|
143
|
+
unsafe_allow_html=True,
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def render_metric_card(label: str, value: Any, delta: Optional[str] = None, delta_color: str = 'normal'):
|
|
148
|
+
"""Render a metric card with consistent styling."""
|
|
149
|
+
delta_html = ''
|
|
150
|
+
if delta:
|
|
151
|
+
color = {'normal': '#28a745', 'inverse': '#dc3545', 'off': '#6c757d'}.get(delta_color, '#28a745')
|
|
152
|
+
delta_html = f'<div style="color: {color}; font-size: 12px; margin-top: 4px;">{delta}</div>'
|
|
153
|
+
|
|
154
|
+
st.markdown(
|
|
155
|
+
f'<div style="'
|
|
156
|
+
f' background-color: #fff;'
|
|
157
|
+
f' border: 1px solid #e0e0e0;'
|
|
158
|
+
f' border-radius: 8px;'
|
|
159
|
+
f' padding: 16px;'
|
|
160
|
+
f' margin: 8px 0;'
|
|
161
|
+
f'">'
|
|
162
|
+
f'<div style="color: #6c757d; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px;">' # noqa: E501
|
|
163
|
+
f'{label}'
|
|
164
|
+
f'</div>'
|
|
165
|
+
f'<div style="color: #212529; font-size: 24px; font-weight: 600; margin-top: 4px;">'
|
|
166
|
+
f'{value}'
|
|
167
|
+
f'</div>'
|
|
168
|
+
f'{delta_html}'
|
|
169
|
+
f'</div>',
|
|
170
|
+
unsafe_allow_html=True,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def render_key_value_pair(key: str, value: Any, monospace_value: bool = False, inline: bool = True):
|
|
175
|
+
"""Render a key-value pair with consistent styling."""
|
|
176
|
+
value_style = 'font-family: monospace;' if monospace_value else ''
|
|
177
|
+
|
|
178
|
+
if inline:
|
|
179
|
+
st.markdown(
|
|
180
|
+
f'<div style="margin-bottom: 8px; font-size: 14px;">'
|
|
181
|
+
f'<span style="color: #495057; font-weight: 500;">{key}:</span> '
|
|
182
|
+
f'<span style="color: #212529; {value_style}">{value}</span>'
|
|
183
|
+
f'</div>',
|
|
184
|
+
unsafe_allow_html=True,
|
|
185
|
+
)
|
|
186
|
+
else:
|
|
187
|
+
st.markdown(
|
|
188
|
+
f'<div style="margin-bottom: 12px;">'
|
|
189
|
+
f'<div style="color: #495057; font-weight: 500; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;">' # noqa: E501
|
|
190
|
+
f'{key}'
|
|
191
|
+
f'</div>'
|
|
192
|
+
f'<div style="color: #212529; font-size: 14px; {value_style}">{value}</div>'
|
|
193
|
+
f'</div>',
|
|
194
|
+
unsafe_allow_html=True,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def render_divider(margin: str = '1.5rem'):
|
|
199
|
+
"""Render a consistent divider."""
|
|
200
|
+
st.markdown(
|
|
201
|
+
f'<hr style="margin: {margin} 0; border: none; border-top: 1px solid #e0e0e0;">', unsafe_allow_html=True
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def render_table_header(columns: list, column_widths: list = None):
|
|
206
|
+
"""Render a consistent table header."""
|
|
207
|
+
if not column_widths:
|
|
208
|
+
column_widths = [1] * len(columns)
|
|
209
|
+
|
|
210
|
+
header_cols = st.columns(column_widths)
|
|
211
|
+
for i, header in enumerate(columns):
|
|
212
|
+
with header_cols[i]:
|
|
213
|
+
st.markdown(
|
|
214
|
+
f'<div style="'
|
|
215
|
+
f' color: #495057;'
|
|
216
|
+
f' font-size: 12px;'
|
|
217
|
+
f' font-weight: 600;'
|
|
218
|
+
f' text-transform: uppercase;'
|
|
219
|
+
f' letter-spacing: 0.5px;'
|
|
220
|
+
f' padding: 8px 0;'
|
|
221
|
+
f' border-bottom: 2px solid #dee2e6;'
|
|
222
|
+
f'">{header}</div>',
|
|
223
|
+
unsafe_allow_html=True,
|
|
224
|
+
)
|
|
225
|
+
return header_cols
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def render_empty_state(
|
|
229
|
+
message: str,
|
|
230
|
+
icon: Optional[str] = None,
|
|
231
|
+
action_label: Optional[str] = None,
|
|
232
|
+
action_callback: Optional[Callable] = None,
|
|
233
|
+
):
|
|
234
|
+
"""Render an empty state message with optional action."""
|
|
235
|
+
icon_html = f'<div style="font-size: 48px; margin-bottom: 16px;">{icon}</div>' if icon else ''
|
|
236
|
+
|
|
237
|
+
st.markdown(
|
|
238
|
+
f'<div style="'
|
|
239
|
+
f' text-align: center;'
|
|
240
|
+
f' padding: 48px 24px;'
|
|
241
|
+
f' background-color: #f8f9fa;'
|
|
242
|
+
f' border-radius: 8px;'
|
|
243
|
+
f' margin: 24px 0;'
|
|
244
|
+
f'">'
|
|
245
|
+
f'{icon_html}'
|
|
246
|
+
f'<div style="color: #6c757d; font-size: 16px;">{message}</div>'
|
|
247
|
+
f'</div>',
|
|
248
|
+
unsafe_allow_html=True,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
if action_label and action_callback:
|
|
252
|
+
col1, col2, col3 = st.columns([1, 1, 1])
|
|
253
|
+
with col2:
|
|
254
|
+
if st.button(action_label, key='empty_state_action', type='primary'):
|
|
255
|
+
action_callback()
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def render_progress_bar(progress: float, label: Optional[str] = None, show_percentage: bool = True):
|
|
259
|
+
"""Render a custom progress bar with consistent styling."""
|
|
260
|
+
percentage = int(progress * 100)
|
|
261
|
+
|
|
262
|
+
label_html = f'<div style="font-size: 12px; color: #6c757d; margin-bottom: 4px;">{label}</div>' if label else ''
|
|
263
|
+
percentage_html = (
|
|
264
|
+
f'<span style="font-size: 12px; color: #495057; margin-left: 8px;">{percentage}%</span>'
|
|
265
|
+
if show_percentage
|
|
266
|
+
else ''
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
st.markdown(
|
|
270
|
+
f'{label_html}'
|
|
271
|
+
f'<div style="display: flex; align-items: center;">'
|
|
272
|
+
f'<div style="'
|
|
273
|
+
f' flex: 1;'
|
|
274
|
+
f' height: 8px;'
|
|
275
|
+
f' background-color: #e9ecef;'
|
|
276
|
+
f' border-radius: 4px;'
|
|
277
|
+
f' overflow: hidden;'
|
|
278
|
+
f'">'
|
|
279
|
+
f'<div style="'
|
|
280
|
+
f' width: {percentage}%;'
|
|
281
|
+
f' height: 100%;'
|
|
282
|
+
f' background: linear-gradient(90deg, #007bff 0%, #0056b3 100%);'
|
|
283
|
+
f' transition: width 0.3s ease;'
|
|
284
|
+
f'"></div>'
|
|
285
|
+
f'</div>'
|
|
286
|
+
f'{percentage_html}'
|
|
287
|
+
f'</div>',
|
|
288
|
+
unsafe_allow_html=True,
|
|
289
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Streamlit-based Synapse DevTools Application.
|
|
2
|
+
|
|
3
|
+
This module imports from the modularized structure.
|
|
4
|
+
The main application logic is now in streamlit_app/app.py
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from synapse_sdk.devtools.streamlit_app import main
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
main()
|
|
@@ -207,7 +207,8 @@ class UploadParams(BaseModel):
|
|
|
207
207
|
storage (int): The storage of the action.
|
|
208
208
|
collection (int): The collection of the action.
|
|
209
209
|
project (int | None): The project of the action.
|
|
210
|
-
excel_metadata_path (str | None): Path to excel file containing metadata.
|
|
210
|
+
excel_metadata_path (str | None): Path to excel file containing metadata.
|
|
211
|
+
Defaults to 'meta.xlsx' or 'meta.xls' in the path directory.
|
|
211
212
|
"""
|
|
212
213
|
|
|
213
214
|
name: Annotated[str, AfterValidator(non_blank)]
|
|
@@ -27,7 +27,9 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
27
27
|
return img_path
|
|
28
28
|
return None
|
|
29
29
|
|
|
30
|
-
def build_pascal_xml(
|
|
30
|
+
def build_pascal_xml(
|
|
31
|
+
self, img_filename: str, img_size: tuple, objects: List[dict], has_segmentation: bool = None
|
|
32
|
+
) -> ET.ElementTree:
|
|
31
33
|
"""Build a Pascal VOC XML tree from image filename, size, and objects."""
|
|
32
34
|
folder = 'Images'
|
|
33
35
|
width, height, depth = img_size
|
|
@@ -41,7 +43,12 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
41
43
|
ET.SubElement(size, 'width').text = str(width)
|
|
42
44
|
ET.SubElement(size, 'height').text = str(height)
|
|
43
45
|
ET.SubElement(size, 'depth').text = str(depth)
|
|
44
|
-
|
|
46
|
+
|
|
47
|
+
# Set segmented to 1 if there are any segmentation objects, 0 otherwise
|
|
48
|
+
if has_segmentation is None:
|
|
49
|
+
has_segmentation = any(obj.get('has_segmentation', False) for obj in objects)
|
|
50
|
+
ET.SubElement(annotation, 'segmented').text = '1' if has_segmentation else '0'
|
|
51
|
+
|
|
45
52
|
for obj in objects:
|
|
46
53
|
obj_elem = ET.SubElement(annotation, 'object')
|
|
47
54
|
ET.SubElement(obj_elem, 'name').text = obj['name']
|
|
@@ -58,6 +65,8 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
58
65
|
def parse_dm_annotations(self, annotation: dict):
|
|
59
66
|
"""Parse DM annotations and convert to Pascal VOC format."""
|
|
60
67
|
objects = []
|
|
68
|
+
has_segmentation = 'segmentation' in annotation
|
|
69
|
+
|
|
61
70
|
# Only include bounding_box (Pascal VOC does not support polyline/keypoint by default)
|
|
62
71
|
if 'bounding_box' in annotation:
|
|
63
72
|
for box in annotation['bounding_box']:
|
|
@@ -67,10 +76,18 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
67
76
|
ymin = int(round(y))
|
|
68
77
|
xmax = int(round(x + w))
|
|
69
78
|
ymax = int(round(y + h))
|
|
70
|
-
objects.append({
|
|
79
|
+
objects.append({
|
|
80
|
+
'name': class_name,
|
|
81
|
+
'xmin': xmin,
|
|
82
|
+
'ymin': ymin,
|
|
83
|
+
'xmax': xmax,
|
|
84
|
+
'ymax': ymax,
|
|
85
|
+
'has_segmentation': has_segmentation,
|
|
86
|
+
})
|
|
71
87
|
self.class_names.add(class_name)
|
|
88
|
+
|
|
72
89
|
# polyline, keypoint 등은 무시
|
|
73
|
-
return objects
|
|
90
|
+
return objects, has_segmentation
|
|
74
91
|
|
|
75
92
|
def _convert_split_dir(self, split_dir: str, split_name: str):
|
|
76
93
|
"""Convert a split dir (train/valid/test) to list of (xml_tree, xml_filename, img_src, img_name)."""
|
|
@@ -89,8 +106,10 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
89
106
|
with Image.open(img_path) as img:
|
|
90
107
|
width, height = img.size
|
|
91
108
|
depth = len(img.getbands())
|
|
92
|
-
objects = self.parse_dm_annotations(img_ann)
|
|
93
|
-
xml_tree = self.build_pascal_xml(
|
|
109
|
+
objects, has_segmentation = self.parse_dm_annotations(img_ann)
|
|
110
|
+
xml_tree = self.build_pascal_xml(
|
|
111
|
+
os.path.basename(img_path), (width, height, depth), objects, has_segmentation
|
|
112
|
+
)
|
|
94
113
|
xml_filename = base + '.xml'
|
|
95
114
|
results.append((xml_tree, xml_filename, img_path, os.path.basename(img_path)))
|
|
96
115
|
return results
|
|
@@ -112,8 +131,10 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
112
131
|
with Image.open(img_path) as img:
|
|
113
132
|
width, height = img.size
|
|
114
133
|
depth = len(img.getbands())
|
|
115
|
-
objects = self.parse_dm_annotations(img_ann)
|
|
116
|
-
xml_tree = self.build_pascal_xml(
|
|
134
|
+
objects, has_segmentation = self.parse_dm_annotations(img_ann)
|
|
135
|
+
xml_tree = self.build_pascal_xml(
|
|
136
|
+
os.path.basename(img_path), (width, height, depth), objects, has_segmentation
|
|
137
|
+
)
|
|
117
138
|
xml_filename = base + '.xml'
|
|
118
139
|
results.append((xml_tree, xml_filename, img_path, os.path.basename(img_path)))
|
|
119
140
|
return results
|
|
@@ -202,12 +223,13 @@ class FromDMToPascalConverter(FromDMConverter):
|
|
|
202
223
|
# Process annotations from the first (and only) image in data
|
|
203
224
|
if 'images' in data and len(data['images']) > 0:
|
|
204
225
|
img_ann = data['images'][0]
|
|
205
|
-
objects = self.parse_dm_annotations(img_ann)
|
|
226
|
+
objects, has_segmentation = self.parse_dm_annotations(img_ann)
|
|
206
227
|
else:
|
|
207
228
|
objects = []
|
|
229
|
+
has_segmentation = False
|
|
208
230
|
|
|
209
231
|
# Build Pascal VOC XML
|
|
210
|
-
xml_tree = self.build_pascal_xml(img_filename, (width, height, depth), objects)
|
|
232
|
+
xml_tree = self.build_pascal_xml(img_filename, (width, height, depth), objects, has_segmentation)
|
|
211
233
|
xml_filename = os.path.splitext(img_filename)[0] + '.xml'
|
|
212
234
|
|
|
213
235
|
# Convert XML tree to string for easy viewing
|
|
@@ -23,10 +23,23 @@ class FileSystemStorage(BaseStorage):
|
|
|
23
23
|
>>> storage = FileSystemStorage(config)
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
def __init__(self,
|
|
27
|
-
super().__init__(
|
|
26
|
+
def __init__(self, connection_params: str | dict):
|
|
27
|
+
super().__init__(connection_params)
|
|
28
28
|
self.base_path = Path(self.query_params['location'])
|
|
29
29
|
|
|
30
|
+
def get_pathlib(self, path):
|
|
31
|
+
"""Get the path as a pathlib object.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
path (str): The path to convert.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
pathlib.Path: The converted path.
|
|
38
|
+
"""
|
|
39
|
+
if path == '/' or path == '':
|
|
40
|
+
return self.base_path
|
|
41
|
+
return self.base_path / path
|
|
42
|
+
|
|
30
43
|
def upload(self, source, target):
|
|
31
44
|
"""Upload a file from source to target location.
|
|
32
45
|
|
|
@@ -72,17 +85,6 @@ class FileSystemStorage(BaseStorage):
|
|
|
72
85
|
target_path = self.base_path / target
|
|
73
86
|
return f'file://{target_path.absolute()}'
|
|
74
87
|
|
|
75
|
-
def get_pathlib(self, path):
|
|
76
|
-
"""Get the path as a pathlib object.
|
|
77
|
-
|
|
78
|
-
Args:
|
|
79
|
-
path (str): The path to convert.
|
|
80
|
-
|
|
81
|
-
Returns:
|
|
82
|
-
pathlib.Path: The converted path.
|
|
83
|
-
"""
|
|
84
|
-
return self.base_path / path
|
|
85
|
-
|
|
86
88
|
def get_path_file_count(self, pathlib_obj):
|
|
87
89
|
"""Get the file count in the path.
|
|
88
90
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synapse-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0b1
|
|
4
4
|
Summary: synapse sdk
|
|
5
5
|
Author-email: datamaker <developer@datamaker.io>
|
|
6
6
|
License: MIT
|
|
@@ -27,11 +27,9 @@ Requires-Dist: ray[all]==2.44.1; extra == "all"
|
|
|
27
27
|
Requires-Dist: python-nmap; extra == "all"
|
|
28
28
|
Requires-Dist: hyperopt; extra == "all"
|
|
29
29
|
Requires-Dist: bayesian-optimization==1.4.3; extra == "all"
|
|
30
|
-
Provides-Extra:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist: websockets>=15.0.1; extra == "dashboard"
|
|
34
|
-
Requires-Dist: aiofiles>=24.1.0; extra == "dashboard"
|
|
30
|
+
Provides-Extra: devtools
|
|
31
|
+
Requires-Dist: streamlit>=1.29.0; extra == "devtools"
|
|
32
|
+
Requires-Dist: streamlit-ace>=0.1.1; extra == "devtools"
|
|
35
33
|
Provides-Extra: test
|
|
36
34
|
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
37
35
|
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
|
@@ -6,9 +6,10 @@ 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=xK48h3ZaDDZLaF-qsdnv1-6-4vw_cYlgpSCKHYUQw1g,6549
|
|
8
8
|
synapse_sdk/types.py,sha256=khzn8KpgxFdn1SrpbcuX84m_Md1Mz_HIoUoPq8uok40,698
|
|
9
|
-
synapse_sdk/cli/__init__.py,sha256=
|
|
10
|
-
synapse_sdk/cli/
|
|
11
|
-
synapse_sdk/cli/
|
|
9
|
+
synapse_sdk/cli/__init__.py,sha256=tdOwJRf6qggHqFrXBTwvhUbkG0KZmJ_xDlDdDv7Wn8M,11663
|
|
10
|
+
synapse_sdk/cli/code_server.py,sha256=vp5i0p8BO-bA3XrbqBtb95S0kGhQZwzmPJj42YTX72s,7042
|
|
11
|
+
synapse_sdk/cli/config.py,sha256=2WVKeAdcDeiwRb4JnNEOeZoAVlTHrY2jx4NAUiAZO2c,16156
|
|
12
|
+
synapse_sdk/cli/devtools.py,sha256=hi06utdLllptlUy3HhPfmfRqjc9bdiVGezY0U5s_0pY,2617
|
|
12
13
|
synapse_sdk/cli/alias/__init__.py,sha256=jDy8N_KupVy7n_jKKWhjQOj76-mR-uoVvMoyzObUkuI,405
|
|
13
14
|
synapse_sdk/cli/alias/create.py,sha256=P9uX_dbafSdpO4UM4A4l6fyu88I3plaUPnIk72z5-wQ,1132
|
|
14
15
|
synapse_sdk/cli/alias/dataclass.py,sha256=avVaUvBmtdVkM9GD_MilCXk0kVQSbh2p5s5XEqL4kMs,1498
|
|
@@ -23,7 +24,7 @@ synapse_sdk/cli/plugin/create.py,sha256=HpYTpohV1NbSrULaVUlc4jWLWznPrx7glgydTM3s
|
|
|
23
24
|
synapse_sdk/cli/plugin/publish.py,sha256=wok85WnfXzb4j6Aix7gRWM3kXW3E2eC31Q3bsDrn-vw,1547
|
|
24
25
|
synapse_sdk/cli/plugin/run.py,sha256=xz5LRm3zh8Y9DMjw5FFRFVRWSCWtYfZJskfCmrPikaQ,2598
|
|
25
26
|
synapse_sdk/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
synapse_sdk/clients/base.py,sha256=
|
|
27
|
+
synapse_sdk/clients/base.py,sha256=2-aCbWx0LcFGXXgd9nkWtaaSroRJybjRAHAT4qCjhv0,12889
|
|
27
28
|
synapse_sdk/clients/exceptions.py,sha256=ylv7x10eOp4aA3a48jwonnvqvkiYwzJYXjkVkRTAjwk,220
|
|
28
29
|
synapse_sdk/clients/utils.py,sha256=8pPJTdzHiRPSbZMoQYHAgR2BAMO6u_R_jMV6a2p34iQ,392
|
|
29
30
|
synapse_sdk/clients/agent/__init__.py,sha256=FqYbtzMJdzRfuU2SA-Yxdc0JKmVP1wxH6OlUNmB4lH8,2230
|
|
@@ -45,9 +46,8 @@ synapse_sdk/clients/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
|
45
46
|
synapse_sdk/clients/validators/collections.py,sha256=LtnwvutsScubOUcZ2reGHLCzseXxtNIdnH2nv098aUU,1195
|
|
46
47
|
synapse_sdk/devtools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
48
|
synapse_sdk/devtools/config.py,sha256=ODAfnXD4TBZQM2dxL7pcHlx6JfkZo15Kwf1MEenbics,2509
|
|
48
|
-
synapse_sdk/devtools/
|
|
49
|
-
synapse_sdk/devtools/
|
|
50
|
-
synapse_sdk/devtools/utils.py,sha256=-f3ZxnRpYg6suNQIL-m4n1DhvLdQEbS4e9Mk9tQ8crE,1706
|
|
49
|
+
synapse_sdk/devtools/server.py,sha256=tj-9ICg1bSECvDD1yUZnLeiH7qpUcwrJ6jaD9C1Ba_8,1454
|
|
50
|
+
synapse_sdk/devtools/streamlit_app.py,sha256=fa17_8NUDCClWp8ESLkPEUD5CTo6bisTFEVXniyUhY8,256
|
|
51
51
|
synapse_sdk/devtools/docs/.gitignore,sha256=fCv2uiY7oUmiiFhHqfcYbg169Y-q4-AfLmmnRl98_sw,233
|
|
52
52
|
synapse_sdk/devtools/docs/README.md,sha256=yBzWf0K1ef4oymFXDaHo0nYWEgMQJqsOyrkNhIOPQrY,774
|
|
53
53
|
synapse_sdk/devtools/docs/docusaurus.config.ts,sha256=zH1dxP4hmKsYWTo1OYMBIeE0Cj5dC8KChVtkORNQB5E,3129
|
|
@@ -76,35 +76,24 @@ synapse_sdk/devtools/docs/static/img/logo.png,sha256=JQWNUU1U4D7Rsta3EJAe9jK-BgF
|
|
|
76
76
|
synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg,sha256=XWOoH_PdXqJm6ZFW-OM_dswC3w8E4aRIckBmNwRmC38,31486
|
|
77
77
|
synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg,sha256=Hywde83UIZyYadlLRcBS4oVkZOkcPgcE2ZtHFNMsxmg,36002
|
|
78
78
|
synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg,sha256=CXBNiO-Elke_LuAqTLGxtBPwAN4Fmo15QBkjjvLF5Kc,11887
|
|
79
|
-
synapse_sdk/devtools/
|
|
80
|
-
synapse_sdk/devtools/
|
|
81
|
-
synapse_sdk/devtools/
|
|
82
|
-
synapse_sdk/devtools/
|
|
83
|
-
synapse_sdk/devtools/
|
|
84
|
-
synapse_sdk/devtools/
|
|
85
|
-
synapse_sdk/devtools/
|
|
86
|
-
synapse_sdk/devtools/
|
|
87
|
-
synapse_sdk/devtools/
|
|
88
|
-
synapse_sdk/devtools/
|
|
89
|
-
synapse_sdk/devtools/
|
|
90
|
-
synapse_sdk/devtools/
|
|
91
|
-
synapse_sdk/devtools/
|
|
92
|
-
synapse_sdk/devtools/
|
|
93
|
-
synapse_sdk/devtools/
|
|
94
|
-
synapse_sdk/devtools/
|
|
95
|
-
synapse_sdk/devtools/
|
|
96
|
-
synapse_sdk/devtools/
|
|
97
|
-
synapse_sdk/devtools/web/src/components/LogViewer.jsx,sha256=3rdszzAocjxSyiyyBaOS9WYdepO76-Xo0fqnYJ7YmwY,8840
|
|
98
|
-
synapse_sdk/devtools/web/src/components/MessageViewer.jsx,sha256=maCiK1D3P-Y5UJaaq_rIfU481GTmB9pFiPygMk2EK3I,5029
|
|
99
|
-
synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx,sha256=IW2PiUOiJuLW1HrBoFjAfFdKYKK8eodimdgL3Za7dmk,3993
|
|
100
|
-
synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx,sha256=vBH36S9Wcjy-3rTw9gtJE-Q-R_6IJ8qDpDDeRNlMW6I,8234
|
|
101
|
-
synapse_sdk/devtools/web/src/components/icons.jsx,sha256=PWLGyluP0sudc0Qlc7jcbCcEMXocaX_oFULvRVMepKc,7690
|
|
102
|
-
synapse_sdk/devtools/web/src/utils/api.js,sha256=dPVeAnYpQGVE83xcPILL1p7cW9gOYADACPMl-xYe9M4,10861
|
|
103
|
-
synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx,sha256=wMXIkRkiykWZZrMGZ8bymmzpoN6miHN7RUqL5eLt9P4,9640
|
|
104
|
-
synapse_sdk/devtools/web/src/views/ApplicationsView.jsx,sha256=LKfIWGf7isXc6_Fxaxei_8gM5bbQ_zWkGrfw8Qe5vpI,9081
|
|
105
|
-
synapse_sdk/devtools/web/src/views/HomeView.jsx,sha256=ri2Rq_RzEzfYqNRKna1cI2pWHcvGoWRSS1oZXxGDAGc,8038
|
|
106
|
-
synapse_sdk/devtools/web/src/views/JobDetailView.jsx,sha256=QyVgFMdzHgTQKA7IiEjDtMHjRAAo3ERpe7QBQsWgb7M,11830
|
|
107
|
-
synapse_sdk/devtools/web/src/views/PluginView.jsx,sha256=_-V8elSiEtsvKECeROtQopSY8f5JUIypZhY-vD3XorE,39357
|
|
79
|
+
synapse_sdk/devtools/streamlit_app/__init__.py,sha256=7oO_5ppKNH3QI_HLkryaVpsNb_AIQkx0TqFr_RrFYNY,123
|
|
80
|
+
synapse_sdk/devtools/streamlit_app/app.py,sha256=-R0f1y9lLL3mdFKkQJigXzdDoYTK0U7EedJduJz8d4k,4281
|
|
81
|
+
synapse_sdk/devtools/streamlit_app/services/__init__.py,sha256=z5ki6N2cPzxK2XT8zhwGFi8RBkAeD1hNlPa9i6uqArk,228
|
|
82
|
+
synapse_sdk/devtools/streamlit_app/services/job_service.py,sha256=h2KGq2kaOE5na-2zQBGZOwp4su6abtqzx9ma_Bz0to8,11036
|
|
83
|
+
synapse_sdk/devtools/streamlit_app/services/plugin_service.py,sha256=MNTMvzoy4zo3qCrTb5QMghWmzvGgWMEGt1-qXdbxk24,8589
|
|
84
|
+
synapse_sdk/devtools/streamlit_app/services/serve_service.py,sha256=LynDK7X1bFfcfJoYfomiNNcmu5rowbWhsuTcOZLTeVM,4643
|
|
85
|
+
synapse_sdk/devtools/streamlit_app/ui/__init__.py,sha256=YtjnoUTjSrlq_sfzCCesvbpYf_fELvSMBG-Qp-z9zJk,311
|
|
86
|
+
synapse_sdk/devtools/streamlit_app/ui/config_tab.py,sha256=3R-IR6KROdqs-zSSaR067q7BmZ7FHIJcbGtt3kHT7Yw,3358
|
|
87
|
+
synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py,sha256=qTIHTiD9Kxaf7Fzerd3PNCO6ffofAz7fmhXe5H-IXls,2415
|
|
88
|
+
synapse_sdk/devtools/streamlit_app/ui/http_tab.py,sha256=sNbceVIqtrZ4bkTvigwkGEFCdJ4gJ3ChLxafjq2sNpI,4516
|
|
89
|
+
synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py,sha256=nhmFrYDMocyAxJlEtC6SuDKPUserkZF0UFwdhFGm4Ko,22369
|
|
90
|
+
synapse_sdk/devtools/streamlit_app/ui/serve_tab.py,sha256=aF4QF3EIztZO9xDwj-9oy1QKm6qO0FvVw6BHHHvsXaE,14723
|
|
91
|
+
synapse_sdk/devtools/streamlit_app/ui/status_bar.py,sha256=wnsgKuMiTSgPbaDxJ4E4hWgI8Y9mldoCUNs9plI0H54,4619
|
|
92
|
+
synapse_sdk/devtools/streamlit_app/utils/__init__.py,sha256=o5S4h5p1s3EnMWxX_5D-NZUK94JVRNWa-bxodKr4b0s,944
|
|
93
|
+
synapse_sdk/devtools/streamlit_app/utils/json_viewer.py,sha256=W1OH27fq3dazrENBCzQP2_3zMYSdDtS7-V5s1sn6slc,7211
|
|
94
|
+
synapse_sdk/devtools/streamlit_app/utils/log_formatter.py,sha256=fQZoEGP-FK9Sgoqh0Z-o1zX_MHpiXVZXLu_4WMcvYNQ,1292
|
|
95
|
+
synapse_sdk/devtools/streamlit_app/utils/styles.py,sha256=ivVBlHzJll9uVZX25Sdbu5Hq40SOmaRamrCqY9A9aFY,5147
|
|
96
|
+
synapse_sdk/devtools/streamlit_app/utils/ui_components.py,sha256=ciSyNEhPYNU6KqnfgDI9RZr1tGFZeiOJ9qBDhlXqmUY,9557
|
|
108
97
|
synapse_sdk/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
98
|
synapse_sdk/plugins/enums.py,sha256=ibixwqA3sCNSriG1jAtL54JQc_Zwo3MufwYUqGhVncc,523
|
|
110
99
|
synapse_sdk/plugins/exceptions.py,sha256=Qs7qODp_RRLO9y2otU2T4ryj5LFwIZODvSIXkAh91u0,691
|
|
@@ -165,7 +154,7 @@ synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py,sha256=47
|
|
|
165
154
|
synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py,sha256=eevNg0nOcYFR4z_L_R-sCvVOYoLWSAH1jwDkAf3YCjY,320
|
|
166
155
|
synapse_sdk/plugins/categories/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
167
156
|
synapse_sdk/plugins/categories/upload/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
|
-
synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=
|
|
157
|
+
synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=7oV8kcJ_JTkHtRHHf0e1s3dka_CKf2engMkIioLTdek,38291
|
|
169
158
|
synapse_sdk/plugins/categories/upload/templates/config.yaml,sha256=6_dRa0_J2aS8NSUfO4MKbPxZcdPS2FpJzzp51edYAZc,281
|
|
170
159
|
synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
160
|
synapse_sdk/plugins/categories/upload/templates/plugin/upload.py,sha256=IZU4sdSMSLKPCtlNqF7DP2howTdYR6hr74HCUZsGdPk,1559
|
|
@@ -200,11 +189,11 @@ synapse_sdk/utils/converters/__init__.py,sha256=xQi_n7xS9BNyDiolsxH2jw1CtD6avxMP
|
|
|
200
189
|
synapse_sdk/utils/converters/coco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
190
|
synapse_sdk/utils/converters/coco/from_dm.py,sha256=NncrAmOZgfWlOt24ROlk35aLrMBQo9_4Jj9KZbOz4TM,11365
|
|
202
191
|
synapse_sdk/utils/converters/coco/to_dm.py,sha256=SOzzACYlK0vJE6SIpmFwMUV1ZbdmsQ_t5mceG0SQahE,9105
|
|
203
|
-
synapse_sdk/utils/converters/dm/__init__.py,sha256=
|
|
192
|
+
synapse_sdk/utils/converters/dm/__init__.py,sha256=st_c4sM_Gnb7k9bEQwetKBO8VZojupwCzeb7xDp3jqI,1961
|
|
204
193
|
synapse_sdk/utils/converters/dm/from_v1.py,sha256=4BG_NA_7YdW5rI1F8LCFg39M-IJZVfRgi2b9FBxTAmw,26059
|
|
205
194
|
synapse_sdk/utils/converters/dm/to_v1.py,sha256=A123zAR_dLqEW83BgAl5_J1ACstjZWTHivlW5qvOu_E,13432
|
|
206
195
|
synapse_sdk/utils/converters/pascal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
|
-
synapse_sdk/utils/converters/pascal/from_dm.py,sha256=
|
|
196
|
+
synapse_sdk/utils/converters/pascal/from_dm.py,sha256=kyVl1TBsPY-zWNusMNX5kjKD3VUu-HO71-HJ_b0NNec,11119
|
|
208
197
|
synapse_sdk/utils/converters/pascal/to_dm.py,sha256=bQNUepahOCot4J23LCPOlFOhIZJ8cAK-pge23eJZETM,8614
|
|
209
198
|
synapse_sdk/utils/converters/yolo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
199
|
synapse_sdk/utils/converters/yolo/from_dm.py,sha256=-JDCQLk4g1_FIVoOwZ1Tcs2kWFkhXRCAPVLKLXz6sLU,16180
|
|
@@ -216,14 +205,14 @@ synapse_sdk/utils/pydantic/validators.py,sha256=G47P8ObPhsePmd_QZDK8EdPnik2CbaYz
|
|
|
216
205
|
synapse_sdk/utils/storage/__init__.py,sha256=HmZHqvoV-EogV2bE-Sw5XQRlrNuf3gfNL9irAJeRYsA,2195
|
|
217
206
|
synapse_sdk/utils/storage/registry.py,sha256=-VNIM7wERubomcyXMuAlPPRKyy87kVpkRAsdlBRp2ig,589
|
|
218
207
|
synapse_sdk/utils/storage/providers/__init__.py,sha256=crxrRzXXfBAmyR4nZS2RZvlLnr4IP1S-6eYeX_bSnLI,6412
|
|
219
|
-
synapse_sdk/utils/storage/providers/file_system.py,sha256=
|
|
208
|
+
synapse_sdk/utils/storage/providers/file_system.py,sha256=kJJmVPOsDpRwZQ-Sh4VvOP1cfknJ2tiqPp6WnB93iqM,3329
|
|
220
209
|
synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_ncGITZrL0u5wEA,363
|
|
221
210
|
synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
|
|
222
211
|
synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
|
|
223
212
|
synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
|
|
224
|
-
synapse_sdk-1.0.
|
|
225
|
-
synapse_sdk-1.0.
|
|
226
|
-
synapse_sdk-1.0.
|
|
227
|
-
synapse_sdk-1.0.
|
|
228
|
-
synapse_sdk-1.0.
|
|
229
|
-
synapse_sdk-1.0.
|
|
213
|
+
synapse_sdk-1.0.0b1.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
|
|
214
|
+
synapse_sdk-1.0.0b1.dist-info/METADATA,sha256=3I_xE3UvzmLYm991d1sHvOhIeFTiSbrR5wTNQLKvIqE,3718
|
|
215
|
+
synapse_sdk-1.0.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
216
|
+
synapse_sdk-1.0.0b1.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
|
|
217
|
+
synapse_sdk-1.0.0b1.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
|
|
218
|
+
synapse_sdk-1.0.0b1.dist-info/RECORD,,
|