Skip to content

Commit 72c3335

Browse files
committed
Embedders widget - field for a custom server URL
1 parent 2166dfd commit 72c3335

File tree

3 files changed

+62
-11
lines changed

3 files changed

+62
-11
lines changed

orangecontrib/imageanalytics/http2_client.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ class Http2Client(object):
3131

3232
def __init__(self, server_url):
3333
self._server_url = getenv('ORANGE_EMBEDDING_API_URL', server_url)
34-
self._server_connection = self._connect_to_server()
34+
try:
35+
self._server_connection = self._connect_to_server()
36+
except:
37+
raise ConnectionError
3538
self._max_concurrent_streams = self._read_max_concurrent_streams()
3639

3740
def reconnect_to_server(self):

orangecontrib/imageanalytics/widgets/owimageembedding.py

+39-10
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
from AnyQt.QtWidgets import QLayout, QPushButton, QStyle
1212

1313
from Orange.data import Table
14-
from Orange.widgets.gui import hBox
14+
from Orange.widgets.gui import hBox, lineEdit, checkBox
1515
from Orange.widgets.gui import widgetBox, widgetLabel, comboBox, auto_commit
1616
from Orange.widgets.settings import Setting
1717
from Orange.widgets.utils import concurrent as qconcurrent
1818
from Orange.widgets.utils.itemmodels import VariableListModel
19-
from Orange.widgets.widget import OWWidget, Default
19+
from Orange.widgets.widget import OWWidget, Default, Msg
2020

2121
from orangecontrib.imageanalytics.image_embedder import ImageEmbedder
2222
from orangecontrib.imageanalytics.image_embedder import MODELS as EMBEDDERS_INFO
@@ -46,10 +46,21 @@ class OWImageEmbedding(OWWidget):
4646
(_Output.SKIPPED_IMAGES, Table)
4747
]
4848

49+
class Error(OWWidget.Error):
50+
cant_connect = Msg(
51+
"Not connected. Check internet connection or URL.")
52+
53+
class Info(OWWidget.Information):
54+
connected_info = Msg("Connected to server")
55+
4956
cb_image_attr_current_id = Setting(default=0)
5057
cb_embedder_current_id = Setting(default=0)
5158

5259
_NO_DATA_INFO_TEXT = "No data on input."
60+
SERVER_URL_DEFAULT = "api.garaza.io:443"
61+
62+
custom_server = Setting(default=False)
63+
server_url = Setting(default="")
5364

5465
def __init__(self):
5566
super().__init__()
@@ -105,6 +116,15 @@ def _setup_layout(self):
105116
EMBEDDERS_INFO[current_embedder]['description']
106117
)
107118

119+
advanced_box = widgetBox(self.controlArea, 'Advanced settings')
120+
self.use_custom_server_cb = checkBox(
121+
advanced_box, self, 'custom_server', "User custom server",
122+
callback=self.changed_server_url)
123+
self.server_url_box = lineEdit(
124+
advanced_box, self, 'server_url', label="Server URL: ",
125+
tooltip='The url of the server for calculating image embeddings',
126+
orientation=Qt.Horizontal, callback=self.changed_server_url)
127+
108128
self.auto_commit_widget = auto_commit(
109129
widget=self.controlArea,
110130
master=self,
@@ -124,11 +144,16 @@ def _setup_layout(self):
124144

125145
def _init_server_connection(self):
126146
self.setBlocking(False)
127-
self._image_embedder = ImageEmbedder(
128-
model=self.embedders[self.cb_embedder_current_id],
129-
layer='penultimate'
130-
)
147+
url = self.server_url if self.custom_server else self.SERVER_URL_DEFAULT
148+
try:
149+
self._image_embedder = ImageEmbedder(
150+
model=self.embedders[self.cb_embedder_current_id],
151+
layer='penultimate', server_url=url
152+
)
153+
except ConnectionError:
154+
self._image_embedder = None
131155
self._set_server_info(
156+
self._image_embedder is not None and
132157
self._image_embedder.is_connected_to_server()
133158
)
134159

@@ -165,6 +190,10 @@ def set_data(self, data):
165190
def _cb_image_attr_changed(self):
166191
self.commit()
167192

193+
def changed_server_url(self):
194+
self._init_server_connection()
195+
self.server_url_box.setReadOnly(not self.custom_server)
196+
168197
def _cb_embedder_changed(self):
169198
current_embedder = self.embedders[self.cb_embedder_current_id]
170199
self._image_embedder = ImageEmbedder(
@@ -320,12 +349,12 @@ def _send_output_signals(self, embeddings):
320349
len(self._input_data), num_skipped))
321350

322351
def _set_server_info(self, connected):
323-
self.clear_messages()
352+
self.Error.clear()
353+
self.Info.clear()
324354
if connected:
325-
self.connection_info.setText("Connected to server.")
355+
self.Info.connected_info()
326356
else:
327-
self.connection_info.setText("No connection with server.")
328-
self.warning("Click Apply to try again.")
357+
self.Error.cant_connect()
329358

330359
def onDeleteWidget(self):
331360
self.cancel()

orangecontrib/imageanalytics/widgets/tests/test_owimageembedding.py

+19
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,22 @@ def test_none_data(self):
4040
table = Table("iris")[:0]
4141
self.send_signal("Images", table)
4242
self.send_signal("Images", None)
43+
44+
def test_url_changed(self):
45+
"""
46+
This test set if the urls are changed correctly
47+
The test may fail if default url will be changed
48+
"""
49+
w = self.widget
50+
51+
w.use_custom_server_cb.setChecked(False)
52+
self.assertEqual(w._image_embedder._server_url, w.SERVER_URL_DEFAULT)
53+
54+
w.use_custom_server_cb.setChecked(True)
55+
w.server_url_box.setText("")
56+
w.changed_server_url()
57+
58+
w.use_custom_server_cb.setChecked(True)
59+
w.server_url_box.setText(w.SERVER_URL_DEFAULT)
60+
w.changed_server_url()
61+
self.assertEqual(w._image_embedder._server_url, w.SERVER_URL_DEFAULT)

0 commit comments

Comments
 (0)