Skip to content

Commit f093441

Browse files
authored
Feature/Chore: improve server flags (#80)
* feat: add silent flag and wrap all messages with that * feat: pass silent flag to all ways of invoking the server * fix: add missing parameter to enable execution * feat: send global config along with request * fix: add settings to the post api request * fix: removes double json parsing * chore: cleanup print statements * fix: formatting
1 parent cc70096 commit f093441

File tree

3 files changed

+60
-15
lines changed

3 files changed

+60
-15
lines changed

src/server/package/src/model_explorer/apis.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def visualize(
6868
reuse_server_host: str = DEFAULT_HOST,
6969
reuse_server_port: Union[int, None] = None,
7070
enable_execution: bool = True,
71+
silent: bool = False,
7172
) -> None:
7273
"""Starts the ME local server and visualizes the models by the given paths.
7374
@@ -83,6 +84,7 @@ def visualize(
8384
reuse_server_host: the host of the server to reuse. Default to localhost.
8485
reuse_server_port: the port of the server to reuse. If unspecified, it will
8586
try to find a running server from port 8080 to 8099.
87+
silent: If the server should be silent and only output error messages.
8688
"""
8789
# Construct config.
8890
cur_config = config()
@@ -108,6 +110,7 @@ def visualize(
108110
colab_height=colab_height,
109111
extensions=extensions,
110112
enable_execution=enable_execution,
113+
silent=silent,
111114
)
112115

113116

@@ -124,6 +127,7 @@ def visualize_pytorch(
124127
reuse_server_host: str = DEFAULT_HOST,
125128
reuse_server_port: Union[int, None] = None,
126129
enable_execution: bool = True,
130+
silent: bool = False,
127131
) -> None:
128132
"""Visualizes a pytorch model.
129133
@@ -141,6 +145,7 @@ def visualize_pytorch(
141145
reuse_server_host: the host of the server to reuse. Default to localhost.
142146
reuse_server_port: the port of the server to reuse. If unspecified, it will
143147
try to find a running server from port 8080 to 8099.
148+
silent: If the server should be silent and only output error messages.
144149
"""
145150
# Construct config.
146151
cur_config = config()
@@ -163,6 +168,7 @@ def visualize_pytorch(
163168
colab_height=colab_height,
164169
extensions=extensions,
165170
enable_execution=enable_execution,
171+
silent=silent,
166172
)
167173

168174

@@ -175,6 +181,7 @@ def visualize_from_config(
175181
no_open_in_browser: bool = False,
176182
colab_height=DEFAULT_COLAB_HEIGHT,
177183
enable_execution: bool = True,
184+
silent: bool = False,
178185
) -> None:
179186
"""Visualizes with a config.
180187
@@ -187,6 +194,7 @@ def visualize_from_config(
187194
won't be present if it is None.
188195
no_open_in_browser: Don't open the web app in browser after server starts.
189196
colab_height: The height of the embedded iFrame when running in colab.
197+
silent: If the server should be silent and only output error messages.
190198
"""
191199
# Start server.
192200
server.start(
@@ -198,6 +206,7 @@ def visualize_from_config(
198206
no_open_in_browser=no_open_in_browser,
199207
colab_height=colab_height,
200208
enable_execution=enable_execution,
209+
silent=silent,
201210
)
202211

203212

src/server/package/src/model_explorer/cmdline.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@
7070
'to 8099'
7171
),
7272
)
73+
parser.add_argument(
74+
'--silent',
75+
action='store_false',
76+
help='The server should be silent and only display error messages',
77+
)
7378
args = parser.parse_args()
7479

7580

@@ -108,4 +113,6 @@ def main():
108113
cors_host=args.cors_host,
109114
no_open_in_browser=args.no_open_in_browser,
110115
skip_health_check=args.skip_health_check,
116+
enable_execution=True,
117+
silent=args.silent,
111118
)

src/server/package/src/model_explorer/server.py

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ def _is_internal_colab() -> bool:
179179

180180

181181
def start(
182-
enable_execution: bool,
183182
host=DEFAULT_HOST,
184183
port=DEFAULT_PORT,
185184
config: Union[ModelExplorerConfig, None] = None,
@@ -188,6 +187,8 @@ def start(
188187
colab_height: int = DEFAULT_COLAB_HEIGHT,
189188
cors_host: Union[str, None] = None,
190189
skip_health_check: bool = False,
190+
enable_execution: bool = True,
191+
silent: bool = False,
191192
):
192193
"""Starts the local server that serves the web app.
193194
@@ -253,23 +254,28 @@ def start(
253254
cli.show_server_banner = lambda *x: None
254255

255256
# Print a info message when used in colab.
256-
if colab:
257+
if colab and not silent:
257258
print('ℹ️ Please re-run the cell in each new session')
258259
print()
259260

260261
# Load extensions.
261-
print('Loading extensions...')
262+
if not silent:
263+
print('Loading extensions...')
264+
262265
extension_manager = ExtensionManager(extensions)
263266
extension_manager.load_extensions()
264267
extension_metadata_list = extension_manager.get_extensions_metadata(
265268
enable_execution
266269
)
267270
num_extensions = len(extension_metadata_list)
268-
print(
269-
f'Loaded {num_extensions} extension{"" if num_extensions == 1 else "s"}:'
270-
)
271-
for extension in extension_metadata_list:
272-
print(f' - {extension["name"]}')
271+
272+
if not silent:
273+
print(
274+
'Loaded'
275+
f' {num_extensions} extension{"" if num_extensions == 1 else "s"}:'
276+
)
277+
for extension in extension_metadata_list:
278+
print(f' - {extension["name"]}')
273279

274280
@app.route('/api/v1/check_new_version')
275281
def check_new_version():
@@ -297,6 +303,15 @@ def upload_file():
297303
@app.route('/api/v1/send_command')
298304
def send_command():
299305
cmd_json = json.loads(request.args.get('json', '{}'))
306+
307+
# Initialize settings if it is not provided
308+
if 'settings' not in cmd_json:
309+
cmd_json['settings'] = {}
310+
311+
# Overwrite settings with globals
312+
cmd_json['settings']['enable_execution'] = enable_execution
313+
cmd_json['settings']['silent'] = silent
314+
300315
try:
301316
resp = extension_manager.run_cmd(cmd_json)
302317
return _make_json_response(resp)
@@ -309,7 +324,17 @@ def send_command():
309324
@app.route('/apipost/v1/send_command', methods=['POST'])
310325
def send_command_post():
311326
try:
312-
resp = extension_manager.run_cmd(request.json)
327+
cmd_json = request.json
328+
329+
# Initialize settings if it is not provided
330+
if 'settings' not in cmd_json:
331+
cmd_json['settings'] = {}
332+
333+
# Overwrite settings with globals
334+
cmd_json['settings']['enable_execution'] = enable_execution
335+
cmd_json['settings']['silent'] = silent
336+
337+
resp = extension_manager.run_cmd(cmd_json)
313338
return _make_json_response(resp)
314339
except Exception as err:
315340
traceback.print_exc()
@@ -459,21 +484,25 @@ def start_server():
459484

460485
if len(url_params) > 0:
461486
server_address = f'{server_address}/?{"&".join(url_params)}'
462-
print(
463-
f'\nStarting Model Explorer server at:\n{server_address}\n\nPress'
464-
' Ctrl+C to stop.'
465-
)
487+
488+
if not silent:
489+
print(
490+
f'\nStarting Model Explorer server at:\n{server_address}\n\nPress'
491+
' Ctrl+C to stop.'
492+
)
493+
466494
if not no_open_in_browser:
467495
webbrowser.open_new_tab(f'{server_address}')
468496

469497
# Check installed version vs published version.
470-
threading.Thread(target=lambda: _check_new_version()).start()
498+
threading.Thread(target=lambda: _check_new_version(not silent)).start()
471499

472500
try:
473501
while app_thread.is_alive():
474502
sleep(1)
475503
except KeyboardInterrupt:
476-
print('Stopping server...')
504+
if not silent:
505+
print('Stopping server...')
477506
pass
478507

479508
def embed_in_colab():

0 commit comments

Comments
 (0)