Esempio n. 1
0
        def request_to_server(self, word):
            from wordnik import Wordnik
            bar_id = self.statusbar.get_context_id('statusbar')
            gtk.gdk.threads_enter()
            self.statusbar.push(bar_id, 'Request to server...')
            gtk.gdk.threads_leave()
            try:
                w = Wordnik(api_key='dd675e8c15076cfab74220264da05468a5f14d1e46b5f63cc')
                definitions = w.word_get_definitions(word)
                examples = w.word_get_examples(word)
                related = w.word_get_related(word)
            except:
                definitions = False
                examples = False
                related = False


            if definitions:
                # colect name for all partOfSpeech in definitions
                p_o_s = []
                for i in definitions:
                    if not(i['partOfSpeech'] in p_o_s):
                        p_o_s.append(i['partOfSpeech'])
                p_o_s.sort()

                # write definitions
                my_iter = self.buffer.get_start_iter()
                for p in p_o_s:
                    tmp = p.capitalize() + '\n'
                    self.buffer.insert_with_tags_by_name(my_iter, tmp, 'header')
                    for d in definitions:
                        if d['partOfSpeech']==p:
                            self.buffer.insert(my_iter, d['text'])
                            self.buffer.insert(my_iter, '\n\n') 


            if examples:
                # write examples
                my_iter = self.buffer_2.get_start_iter() 
                for p in examples['examples']:
                    title = p['title'] + '\n'
                    text = p['text'] + '\n'
                    self.buffer_2.insert_with_tags_by_name(my_iter, title, 'title')
                    self.buffer_2.insert(my_iter, text)
                    self.buffer_2.insert(my_iter, '\n\n')

                # highlighting words in examples
                search_str =  word
                start_iter =  self.buffer_2.get_start_iter()
                s = True
                while s:
                    found = start_iter.forward_search(search_str, 0, None)
                    if found:
                        match_start, match_end = found # add this line to get match_start and match_end
                        self.buffer_2.apply_tag_by_name('highlight', match_start, match_end)
                        start_iter =  match_end
                    else:
                        s = False

            if related:
                # write related
                my_iter = self.buffer_3.get_start_iter()
                for p in related[0]['words']:
                    text = p + '\n\n'
                    self.buffer_3.insert(my_iter, text)


            gtk.gdk.threads_enter()
            self.statusbar.pop(bar_id)
            if (definitions and examples and related):
                self.statusbar.push(bar_id, 'Request successfully completed.')
            else:
                self.statusbar.push(bar_id, 'Request Error. Try again later.')
            gtk.gdk.threads_leave()