[gedit-plugins/translate] Yandex fixes



commit 6913632f3d869904f92c000a4c5c4a03f55fb968
Author: Jordi Mas <jmas softcatala org>
Date:   Sat Jul 22 14:25:02 2017 +0200

    Yandex fixes

 plugins/translate/tests/testapertium.py          |    4 +-
 plugins/translate/tests/testyandex.py            |   45 ++++++++++++++++++++++
 plugins/translate/translate/__init__.py          |   16 +++++++-
 plugins/translate/translate/preferences.py       |    8 ++--
 plugins/translate/translate/services/apertium.py |    2 +-
 plugins/translate/translate/services/service.py  |    2 +-
 6 files changed, 67 insertions(+), 10 deletions(-)
---
diff --git a/plugins/translate/tests/testapertium.py b/plugins/translate/tests/testapertium.py
index ea4f448..25b882b 100644
--- a/plugins/translate/tests/testapertium.py
+++ b/plugins/translate/tests/testapertium.py
@@ -23,7 +23,7 @@ from services.apertium import Apertium
 from unittest.mock import patch, MagicMock
 
 
-class TestPagination(unittest.TestCase):
+class TestApertium(unittest.TestCase):
 
     @patch('urllib.request.urlopen')
     def test_translate_text(self, mock_urlopen):
@@ -32,7 +32,7 @@ class TestPagination(unittest.TestCase):
         cm.read.return_value = bytes('{"responseData": {"translatedText": "Hauries d\'haver-hi rebut una 
c\u00f2pia"}, "responseDetails": null, "responseStatus": 200}', 'utf-8')
         cm.__enter__.return_value = cm
         mock_urlopen.return_value = cm
-    
+
         apertium = Apertium(False)
         translated = apertium.translate_text('You should have received a copy', 'eng|cat')
         self.assertEqual('Hauries d\'haver-hi rebut una còpia', translated)
diff --git a/plugins/translate/tests/testyandex.py b/plugins/translate/tests/testyandex.py
new file mode 100644
index 0000000..39e8e5c
--- /dev/null
+++ b/plugins/translate/tests/testyandex.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2017 Jordi Mas i Hernandez <jmas softcatala org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+import unittest
+from services.yandex import Yandex
+from unittest.mock import patch, MagicMock
+
+
+class TestYandex(unittest.TestCase):
+
+    @patch('urllib.request.urlopen')
+    def test_translate_text(self, mock_urlopen):
+        cm = MagicMock()
+        cm.getcode.return_value = 200
+        cm.read.return_value = bytes('{"code":200,"lang":"ca-en","text":["Hello friends"]}', 'utf-8')
+        cm.__enter__.return_value = cm
+        mock_urlopen.return_value = cm
+
+        yandex = Yandex()
+        yandex.set_api_key('our_key')
+        translated = yandex.translate_text('Hola amics', 'ca|en')
+        self.assertEqual('Hello friends', translated)
+        url = 
"https://translate.yandex.net/api/v1.5/tr.json/translate?lang=ca-en&format=plain&key=our_key&text=Hola+amics";
+        mock_urlopen.assert_called_with(url)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/plugins/translate/translate/__init__.py b/plugins/translate/translate/__init__.py
index e3bc169..5885203 100644
--- a/plugins/translate/translate/__init__.py
+++ b/plugins/translate/translate/__init__.py
@@ -23,6 +23,7 @@ gi.require_version('GtkSource', '3.0')
 gi.require_version('PeasGtk', '1.0')
 
 from gi.repository import GObject, Gio, Gtk, Gedit, PeasGtk
+from .services.services import Services
 from .services.apertium import Apertium
 from .translateview import TranslateView
 from .preferences import Preferences
@@ -103,6 +104,8 @@ class TranslateViewActivatable(GObject.Object, Gedit.ViewActivatable):
     TRANSLATE_KEY_BASE = 'org.gnome.gedit.plugins.translate'
     OUTPUT_TO_DOCUMENT = 'output-to-document'
     LANGUAGE_PAIR = 'language-pair'
+    SERVICE = 'service'
+    API_KEY = 'api-key'
 
     view = GObject.Property(type=Gedit.View)
 
@@ -157,13 +160,22 @@ class TranslateViewActivatable(GObject.Object, Gedit.ViewActivatable):
 
         return start is not None and end is not None
 
+    def _get_translation_service(self):
+        service_id = self._settings.get_uint(self.SERVICE)
+        service = Services.get(service_id)
+        if service.has_api_key() is True:
+            key = self._settings.get_string(self.API_KEY)
+            service.set_api_key(key)
+
+        return service
+
     def translate_text(self, document, start, end):
         doc = self.view.get_buffer()
         text = doc.get_text(start, end, False)
         language_pair = self._settings.get_string(self.LANGUAGE_PAIR)
       
-        apertium = Apertium()
-        translated = apertium.translate_text(text, language_pair)
+        service = self._get_translation_service()
+        translated = service.translate_text(text, language_pair)
 
         if self._settings.get_boolean(self.OUTPUT_TO_DOCUMENT):
             doc.insert(start, translated)
diff --git a/plugins/translate/translate/preferences.py b/plugins/translate/translate/preferences.py
index 8247441..4da4f22 100644
--- a/plugins/translate/translate/preferences.py
+++ b/plugins/translate/translate/preferences.py
@@ -61,10 +61,6 @@ class Preferences(object):
             self._apikey = None
             return
 
-        self._apikey.connect('changed', self._changed_apikey)
-        key = self._settings.get_string(self.API_KEY)
-        self._apikey.set_text(key)
-
     def _update_api_key_ui(self, show):
         apibox = self._ui.get_object('api_box')
 
@@ -73,6 +69,10 @@ class Preferences(object):
             self._apilabel = Gtk.Label("API Key")
             self._apikey= Gtk.Entry(expand=True)
 
+            self._apikey.connect('changed', self._changed_apikey)
+            key = self._settings.get_string(self.API_KEY)
+            self._apikey.set_text(key)
+
             apibox.add(self._apilabel)
             apibox.add(self._apikey)
             apibox.show_all()
diff --git a/plugins/translate/translate/services/apertium.py 
b/plugins/translate/translate/services/apertium.py
index c7e4ab5..a75b92a 100644
--- a/plugins/translate/translate/services/apertium.py
+++ b/plugins/translate/translate/services/apertium.py
@@ -48,7 +48,7 @@ class Apertium(Service):
     def has_api_key(self):
         return False
     
-    def set_api_key(self):
+    def set_api_key(self, key):
         pass
 
     def get_language_names(self):
diff --git a/plugins/translate/translate/services/service.py b/plugins/translate/translate/services/service.py
index 7617b1a..27ad804 100644
--- a/plugins/translate/translate/services/service.py
+++ b/plugins/translate/translate/services/service.py
@@ -38,6 +38,6 @@ class Service(metaclass=ABCMeta):
         pass
     
     @abstractmethod    
-    def set_api_key(self):
+    def set_api_key(self, key):
         pass
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]