diff --git a/senpy/blueprints.py b/senpy/blueprints.py index 42e0c90..5122241 100644 --- a/senpy/blueprints.py +++ b/senpy/blueprints.py @@ -69,7 +69,7 @@ def encoded_url(url=None, base=None): if request.method == 'GET': url = request.full_path[1:] # Remove the first slash else: - hash(frozenset(request.form.params().items())) + hash(frozenset(request.parameters.items())) code = 'hash:{}'.format(hash) code = code or base64.urlsafe_b64encode(url.encode()).decode() diff --git a/senpy/gsitk_compat.py b/senpy/gsitk_compat.py index 3e9ec58..aef66da 100644 --- a/senpy/gsitk_compat.py +++ b/senpy/gsitk_compat.py @@ -15,9 +15,12 @@ try: from gsitk.datasets.datasets import DatasetManager from gsitk.evaluation.evaluation import Evaluation as Eval from sklearn.pipeline import Pipeline - GSITK_AVAILABLE = True + import pkg_resources + GSITK_VERSION = pkg_resources.get_distribution("gsitk").version.split() + GSITK_AVAILABLE = GSITK_VERSION > (0, 1, 9, 1) # Earlier versions have a bug modules = locals() except ImportError: - logger.warn(IMPORTMSG) + logger.warning(IMPORTMSG) GSITK_AVAILABLE = False + GSITK_VERSION = () DatasetManager = Eval = Pipeline = raise_exception diff --git a/tests/test_blueprints.py b/tests/test_blueprints.py index 5648ece..ebe523d 100644 --- a/tests/test_blueprints.py +++ b/tests/test_blueprints.py @@ -67,6 +67,20 @@ class BlueprintsTest(TestCase): logging.debug("Got response: %s", js) assert "@context" in js assert "entries" in js + assert len(js['analysis']) == 1 + + def test_analysis_post(self): + """ + The results for a POST request should be the same as for a GET request. + """ + resp = self.client.post("/api/", data={'i': 'My aloha mohame', + 'with_parameters': True}) + self.assertCode(resp, 200) + js = parse_resp(resp) + logging.debug("Got response: %s", js) + assert "@context" in js + assert "entries" in js + assert len(js['analysis']) == 1 def test_analysis_extra(self): """ diff --git a/tests/test_client.py b/tests/test_client.py index 710f894..88bea6e 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -24,6 +24,19 @@ class ModelsTest(TestCase): except Error: pass + def test_client_post(self): + endpoint = 'http://dummy/' + client = Client(endpoint) + with patch_requests('http://dummy/', Results()): + resp = client.analyse('hello') + assert isinstance(resp, Results) + with patch_requests('http://dummy/', Error('Nothing'), method='POST'): + try: + client.analyse(input='hello', method='POST', algorithm='NONEXISTENT') + raise Exception('Exceptions should be raised. This is not golang') + except Error: + pass + def test_plugins(self): endpoint = 'http://dummy/' client = Client(endpoint) diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 7aefebb..d967f0e 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -1,15 +1,15 @@ #!/bin/env python import os -import sys import pickle import shutil import tempfile -from unittest import TestCase +from unittest import TestCase, skipIf from senpy.models import Results, Entry, EmotionSet, Emotion, Plugins from senpy import plugins from senpy.plugins.conversion.emotion.centroids import CentroidConversion +from senpy.gsitk_compat import GSITK_AVAILABLE import pandas as pd @@ -346,13 +346,15 @@ class PluginsTest(TestCase): smart_metrics = results[0].metrics[0] assert abs(smart_metrics['accuracy'] - 1) < 0.01 + @skipIf(not GSITK_AVAILABLE, "GSITK is not available") def test_evaluation(self): - if sys.version_info < (3, 0): - with self.assertRaises(Exception) as context: - self._test_evaluation() - self.assertTrue('GSITK ' in str(context.exception)) - else: + self._test_evaluation() + + @skipIf(GSITK_AVAILABLE, "GSITK is available") + def test_evaluation_unavailable(self): + with self.assertRaises(Exception) as context: self._test_evaluation() + self.assertTrue('GSITK ' in str(context.exception)) def make_mini_test(fpath):