11
11
from AnyQt .QtWidgets import QLayout , QPushButton , QStyle
12
12
13
13
from Orange .data import Table
14
- from Orange .widgets .gui import hBox
14
+ from Orange .widgets .gui import hBox , lineEdit , checkBox
15
15
from Orange .widgets .gui import widgetBox , widgetLabel , comboBox , auto_commit
16
16
from Orange .widgets .settings import Setting
17
17
from Orange .widgets .utils import concurrent as qconcurrent
18
18
from Orange .widgets .utils .itemmodels import VariableListModel
19
- from Orange .widgets .widget import OWWidget , Default
19
+ from Orange .widgets .widget import OWWidget , Default , Msg
20
20
21
21
from orangecontrib .imageanalytics .image_embedder import ImageEmbedder
22
22
from orangecontrib .imageanalytics .image_embedder import MODELS as EMBEDDERS_INFO
@@ -46,10 +46,21 @@ class OWImageEmbedding(OWWidget):
46
46
(_Output .SKIPPED_IMAGES , Table )
47
47
]
48
48
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
+
49
56
cb_image_attr_current_id = Setting (default = 0 )
50
57
cb_embedder_current_id = Setting (default = 0 )
51
58
52
59
_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 = "" )
53
64
54
65
def __init__ (self ):
55
66
super ().__init__ ()
@@ -105,6 +116,15 @@ def _setup_layout(self):
105
116
EMBEDDERS_INFO [current_embedder ]['description' ]
106
117
)
107
118
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
+
108
128
self .auto_commit_widget = auto_commit (
109
129
widget = self .controlArea ,
110
130
master = self ,
@@ -124,11 +144,16 @@ def _setup_layout(self):
124
144
125
145
def _init_server_connection (self ):
126
146
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
131
155
self ._set_server_info (
156
+ self ._image_embedder is not None and
132
157
self ._image_embedder .is_connected_to_server ()
133
158
)
134
159
@@ -165,6 +190,10 @@ def set_data(self, data):
165
190
def _cb_image_attr_changed (self ):
166
191
self .commit ()
167
192
193
+ def changed_server_url (self ):
194
+ self ._init_server_connection ()
195
+ self .server_url_box .setReadOnly (not self .custom_server )
196
+
168
197
def _cb_embedder_changed (self ):
169
198
current_embedder = self .embedders [self .cb_embedder_current_id ]
170
199
self ._image_embedder = ImageEmbedder (
@@ -320,12 +349,12 @@ def _send_output_signals(self, embeddings):
320
349
len (self ._input_data ), num_skipped ))
321
350
322
351
def _set_server_info (self , connected ):
323
- self .clear_messages ()
352
+ self .Error .clear ()
353
+ self .Info .clear ()
324
354
if connected :
325
- self .connection_info . setText ( "Connected to server." )
355
+ self .Info . connected_info ( )
326
356
else :
327
- self .connection_info .setText ("No connection with server." )
328
- self .warning ("Click Apply to try again." )
357
+ self .Error .cant_connect ()
329
358
330
359
def onDeleteWidget (self ):
331
360
self .cancel ()
0 commit comments