From 1a3b653d5d1196b3dbdc3422e358d802c6add849 Mon Sep 17 00:00:00 2001
From: James Graham <J.Graham@software.ac.uk>
Date: Sun, 2 Sep 2018 10:06:52 +0100
Subject: [PATCH] Add test and functionality to get data from BT HyperCat

---
 datasources/connectors/hypercat.py   | 10 +++++++++-
 datasources/tests/test_connectors.py | 17 +++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/datasources/connectors/hypercat.py b/datasources/connectors/hypercat.py
index bcc6856..ba37216 100644
--- a/datasources/connectors/hypercat.py
+++ b/datasources/connectors/hypercat.py
@@ -1,6 +1,7 @@
 import typing
 
 import requests
+import requests.auth
 
 from datasources.connectors.base import BaseDataConnector, DataConnectorContainsDatasets, DataConnectorHasMetadata
 
@@ -15,7 +16,14 @@ class HyperCat(DataConnectorContainsDatasets, DataConnectorHasMetadata, BaseData
     def get_data(self,
                  dataset: typing.Optional[str] = None,
                  query_params: typing.Optional[typing.Mapping[str, str]] = None):
-        super().get_data(dataset, query_params)
+        if dataset is None:
+            raise ValueError('When requesting data from a HyperCat catalogue you must provide a dataset href.')
+
+        location = dataset
+        r = requests.get(location,
+                         params=query_params,
+                         auth=requests.auth.HTTPBasicAuth(self.api_key, ''))
+        return r.text
 
     def get_datasets(self,
                      query_params: typing.Optional[typing.Mapping[str, str]] = None):
diff --git a/datasources/tests/test_connectors.py b/datasources/tests/test_connectors.py
index 11471d4..9453827 100644
--- a/datasources/tests/test_connectors.py
+++ b/datasources/tests/test_connectors.py
@@ -119,3 +119,20 @@ class ConnectorHyperCatTest(TestCase):
 
         self.assertIn('application/json',
                       result['urn:X-hypercat:rels:isContentType'])
+
+    def test_plugin_get_dataset_data(self):
+        """
+        Test that we can get data from a single dataset within the catalogue.
+        """
+        from decouple import config
+
+        api_key = config('HYPERCAT_BT_API_KEY')
+
+        dataset = self.dataset + '/datastreams/0'
+
+        connection = self.plugin(self.url,
+                                 api_key=api_key)
+        result = connection.get_data(dataset=dataset)
+
+        self.assertIsInstance(result, str)
+        self.assertGreaterEqual(len(result), 1)
-- 
GitLab