1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15- from Queue import Queue
1615from _sqlite3 import OperationalError
16+ import Queue
1717import os
1818from threading import Thread
1919
20- from robotide .publish import RideLogException
20+ from robotide .publish import RideLogException , RideLogMessage
2121from robotide .spec .librarydatabase import LibraryDatabase
2222from robotide .spec .libraryfetcher import get_import_result
2323from robotide .spec .xmlreaders import get_path , SpecInitializer
@@ -28,7 +28,7 @@ class LibraryManager(Thread):
2828 def __init__ (self , database_name , spec_initializer = None ):
2929 self ._database_name = database_name
3030 self ._database = None
31- self ._messages = Queue ()
31+ self ._messages = Queue . Queue ()
3232 self ._spec_initializer = spec_initializer or SpecInitializer ()
3333 Thread .__init__ (self )
3434 self .setDaemon (True )
@@ -91,17 +91,20 @@ def _handle_insert_keywords_message(self, message):
9191 _ , library_name , library_args , result_queue = message
9292 keywords = self ._fetch_keywords (library_name , library_args )
9393 self ._insert (library_name , library_args , keywords ,
94- result_queue .put )
94+ lambda res : result_queue .put ( res , timeout = 3 ) )
9595
9696 def _insert (self , library_name , library_args , keywords , callback ):
97- self ._database .insert_library_keywords (library_name , library_args , keywords or [])
97+ self ._database .insert_library_keywords (
98+ library_name , library_args , keywords or [])
9899 self ._call (callback , keywords )
99100
100- def _update_database_and_call_callback_if_needed (self , library_key , keywords , callback ):
101+ def _update_database_and_call_callback_if_needed (
102+ self , library_key , keywords , callback ):
101103 db_keywords = self ._database .fetch_library_keywords (* library_key )
102104 try :
103105 if not db_keywords or self ._keywords_differ (keywords , db_keywords ):
104- self ._insert (library_key [0 ], library_key [1 ], keywords , callback )
106+ self ._insert (
107+ library_key [0 ], library_key [1 ], keywords , callback )
105108 else :
106109 self ._database .update_library_timestamp (* library_key )
107110 except OperationalError :
@@ -115,18 +118,25 @@ def _call(self, callback, *args):
115118 RideLogException (message = msg , exception = err , level = 'WARN' ).publish ()
116119
117120 def fetch_keywords (self , library_name , library_args , callback ):
118- self ._messages .put (('fetch' , library_name , library_args , callback ))
121+ self ._messages .put (('fetch' , library_name , library_args , callback ),
122+ timeout = 3 )
119123
120124 def get_and_insert_keywords (self , library_name , library_args ):
121- result_queue = Queue (maxsize = 1 )
122- self ._messages .put (('insert' , library_name , library_args , result_queue ))
123- return result_queue .get ()
125+ result_queue = Queue .Queue (maxsize = 1 )
126+ self ._messages .put (
127+ ('insert' , library_name , library_args , result_queue ), timeout = 3 )
128+ try :
129+ return result_queue .get (timeout = 5 )
130+ except Queue .Empty as e :
131+ RideLogMessage ('Failed to read keywords from library db: {}'
132+ .format (unicode (e ))).publish ()
133+ return []
124134
125135 def create_database (self ):
126- self ._messages .put (('create' ,))
136+ self ._messages .put (('create' ,), timeout = 3 )
127137
128138 def stop (self ):
129- self ._messages .put (False )
139+ self ._messages .put (False , timeout = 3 )
130140
131141 def _keywords_differ (self , keywords1 , keywords2 ):
132142 if keywords1 != keywords2 and None in (keywords1 , keywords2 ):
0 commit comments