from gettext import gettext as _
 import deskbar.interfaces.Module
 import deskbar.interfaces.Match
 from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction
 from deskbar.core.Utils import load_icon
    
 HANDLERS = ["HabrSuggestHandler"]
    
 class HabrSuggestHandler (deskbar.interfaces.Module):
    
     INFOS = {'icon': load_icon ("habr.png"),
              'name': _ ("Habrahabr.ru Suggest"),
              'description': _ ("As you type, Habr will offer suggestions."),
              'version': '1.0.0.0'}
    
     def __init __ (self):
         deskbar.interfaces.Module .__ init __ (self)
        
     def query (self, qstring):
         pass
HANDLERS = ["HabrSuggestHandler"] Specify to the applet which class in our module is mainINFOS = ... Add-on Descriptiondeskbar.interfaces.Module.__init__(self) Call the parent constructordef query(self, qstring): The function that will be called when you enter the desired one while the def query(self, qstring): is empty. from gettext import gettext as _
 import deskbar.interfaces.Module
 import deskbar.interfaces.Match
 from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction
 from deskbar.core.Utils import load_icon
 import urllib
 try:
     import simplejson
 except:
     pass
    
 HANDLERS = ["HabrSuggestHandler"]
    
 GOOGLE_SUGGEST_URL = "http://suggestqueries.google.com/complete/search"
 HABR_SEARCH_URL = "http://habrahabr.ru/search/"
 class HabrSuggestAction (ShowUrlAction):
     def __init __ (self, query):
         ShowUrlAction .__ init __ (self, query, GOOGLE_SEARCH_URL + '?' + Urllib.urlencode ({'q': query}))
        
     def get_verb (self):
         return _ ("Search <b> Habrahabr.ru </ b> for <i>% (name) s </ i>")
 class GoogleSuggestMatch (deskbar.interfaces.Match):
     def __init __ (self, query, ** args):
         deskbar.interfaces.Match .__ init__ (self, name = query, category = "web", icon = "habr.png", ** args)
         self._query = query
         self.add_action (HabrSuggestAction (query)) 
        
     def get_hash (self, text = None):
         return self._query
        
 class HabrSuggestHandler (deskbar.interfaces.Module):
    
     INFOS = {'icon': load_icon ("habr.png"),
              'name': _ ("Habrahabr.ru Suggest"),
              'description': _ ("As you type, Habr will offer suggestions."),
              'version': '1.0.0.0'}
    
     def __init __ (self):
         deskbar.interfaces.Module .__ init __ (self)
        
     def query (self, qstring):        
         args = {'output': 'firefox', 'qu': qstring, 'as_sitesearch': 'http://habrahabr.ru'}
         url = GOOGLE_SUGGEST_URL + '?'  + urllib.urlencode (args)
         result = simplejson.load (urllib.urlopen (url))
         if not 'Error' in result:
             matches = []
             # result looks like ["qstring", ["suggestion 1", "suggestion 2",]]
             for suggest in result [1]:
                 matches.append (GoogleSuggestMatch (suggest))
             self._emit_query_ready (qstring, matches)
        
     @staticmethod
     def has_requirements ():
         try:
             import simplejson
             return true
         except:
             HabrSuggestHandler.INSTRUCTIONS = _ ("Python module simplejson is not available")
             return false


Source: https://habr.com/ru/post/74413/
All Articles