From 37df458f0b4ec5599b638383660fc39517500790 Mon Sep 17 00:00:00 2001 From: Diego Montes Date: Fri, 23 Mar 2018 13:27:14 +0000 Subject: [PATCH 1/5] Add monitoring missing dependency: pandas --- monitoring/setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/monitoring/setup.py b/monitoring/setup.py index 30f788d02755..ea6d250a5961 100644 --- a/monitoring/setup.py +++ b/monitoring/setup.py @@ -31,6 +31,7 @@ dependencies = [ 'google-cloud-core<0.29dev,>=0.28.0', 'google-api-core<2.0.0dev,>=0.1.1', + 'pandas>=0.22.0', ] extras = { } From c4bec63033fdc6fef60b7806759a4871420db7d6 Mon Sep 17 00:00:00 2001 From: Diego Montes Date: Fri, 23 Mar 2018 16:03:13 +0000 Subject: [PATCH 2/5] Monitoring: fix unit testings (pandas) --- monitoring/tests/unit/test__dataframe.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/monitoring/tests/unit/test__dataframe.py b/monitoring/tests/unit/test__dataframe.py index d516d070efaa..c0c710b3b8bb 100644 --- a/monitoring/tests/unit/test__dataframe.py +++ b/monitoring/tests/unit/test__dataframe.py @@ -12,13 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -try: - import pandas -except ImportError: - HAVE_PANDAS = False -else: - HAVE_PANDAS = True # pragma: NO COVER - +import pandas import unittest @@ -84,7 +78,6 @@ def P(timestamp, value): ) -@unittest.skipUnless(HAVE_PANDAS, 'No pandas') class Test__build_dataframe(unittest.TestCase): # pragma: NO COVER def _call_fut(self, *args, **kwargs): @@ -103,11 +96,11 @@ def test_empty_labels_illegal(self): def test_simple_label(self): iterable = generate_query_results() dataframe = self._call_fut(iterable, label='instance_name') + dataframe_columns_list = [i[0] for i in list(dataframe.columns)] self.assertEqual(dataframe.shape, DIMENSIONS) self.assertEqual(dataframe.values.tolist(), ARRAY) - - self.assertEqual(list(dataframe.columns), INSTANCE_NAMES) + self.assertEqual(dataframe_columns_list, INSTANCE_NAMES) self.assertIsNone(dataframe.columns.name) self.assertEqual(list(dataframe.index), parse_timestamps()) @@ -137,13 +130,12 @@ def test_multiple_labels_with_just_one(self): iterable = generate_query_results() dataframe = self._call_fut(iterable, labels=NAMES) + dataframe_columns_list = [i[0] for i in list(dataframe.columns)] self.assertEqual(dataframe.shape, DIMENSIONS) self.assertEqual(dataframe.values.tolist(), ARRAY) - - self.assertEqual(list(dataframe.columns), INSTANCE_IDS) + self.assertEqual(dataframe_columns_list, INSTANCE_IDS) self.assertEqual(dataframe.columns.names, NAMES) - self.assertEqual(dataframe.columns.name, NAME) self.assertEqual(list(dataframe.index), parse_timestamps()) self.assertIsNone(dataframe.index.name) @@ -192,7 +184,6 @@ def test_empty_table_multiple_labels_with_just_one(self): dataframe = self._call_fut([], labels=NAMES) self.assertEqual(dataframe.shape, (0, 0)) self.assertEqual(dataframe.columns.names, NAMES) - self.assertEqual(dataframe.columns.name, NAME) self.assertIsNone(dataframe.index.name) self.assertIsInstance(dataframe.index, pandas.DatetimeIndex) @@ -202,7 +193,6 @@ def test_empty_table_smart_labels(self): dataframe = self._call_fut([]) self.assertEqual(dataframe.shape, (0, 0)) self.assertEqual(dataframe.columns.names, NAMES) - self.assertEqual(dataframe.columns.name, NAME) self.assertIsNone(dataframe.index.name) self.assertIsInstance(dataframe.index, pandas.DatetimeIndex) From 796a3e13eb267c2b1d33dcb7799d0983f05e4823 Mon Sep 17 00:00:00 2001 From: Diego Montes Date: Mon, 9 Apr 2018 15:41:28 +0100 Subject: [PATCH 3/5] Move pandas to optional (plus doc) --- monitoring/setup.py | 2 +- monitoring/tests/unit/test__dataframe.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/monitoring/setup.py b/monitoring/setup.py index ea6d250a5961..bb28f557a433 100644 --- a/monitoring/setup.py +++ b/monitoring/setup.py @@ -31,9 +31,9 @@ dependencies = [ 'google-cloud-core<0.29dev,>=0.28.0', 'google-api-core<2.0.0dev,>=0.1.1', - 'pandas>=0.22.0', ] extras = { + 'optional': ['pandas>=0.22.0'], } diff --git a/monitoring/tests/unit/test__dataframe.py b/monitoring/tests/unit/test__dataframe.py index c0c710b3b8bb..1bada0e23a97 100644 --- a/monitoring/tests/unit/test__dataframe.py +++ b/monitoring/tests/unit/test__dataframe.py @@ -12,9 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -import pandas -import unittest +try: + import pandas +except ImportError: # pragma: NO COVER + HAVE_PANDAS = False +else: # pragma: NO COVER + HAVE_PANDAS = True +import unittest PROJECT = 'my-project' @@ -78,6 +83,7 @@ def P(timestamp, value): ) +@unittest.skipUnless(HAVE_PANDAS, 'No pandas') class Test__build_dataframe(unittest.TestCase): # pragma: NO COVER def _call_fut(self, *args, **kwargs): @@ -197,7 +203,8 @@ def test_empty_table_smart_labels(self): self.assertIsInstance(dataframe.index, pandas.DatetimeIndex) -class Test__sorted_resource_labels(unittest.TestCase): +@unittest.skipUnless(HAVE_PANDAS, 'No pandas') +class Test__sorted_resource_labels(unittest.TestCase): # pragma: NO COVER def _call_fut(self, labels): from google.cloud.monitoring._dataframe import _sorted_resource_labels From d60702c15807667c3237a7a28ae9e924d839c661 Mon Sep 17 00:00:00 2001 From: Diego Montes Date: Mon, 9 Apr 2018 22:24:36 +0100 Subject: [PATCH 4/5] Fix testing --- monitoring/tests/unit/test__dataframe.py | 1 - 1 file changed, 1 deletion(-) diff --git a/monitoring/tests/unit/test__dataframe.py b/monitoring/tests/unit/test__dataframe.py index 1bada0e23a97..5028c5d0def0 100644 --- a/monitoring/tests/unit/test__dataframe.py +++ b/monitoring/tests/unit/test__dataframe.py @@ -203,7 +203,6 @@ def test_empty_table_smart_labels(self): self.assertIsInstance(dataframe.index, pandas.DatetimeIndex) -@unittest.skipUnless(HAVE_PANDAS, 'No pandas') class Test__sorted_resource_labels(unittest.TestCase): # pragma: NO COVER def _call_fut(self, labels): From 08a600716ba159016c3c52cc27b77bb923ea53c6 Mon Sep 17 00:00:00 2001 From: Diego Montes Date: Mon, 9 Apr 2018 22:39:41 +0100 Subject: [PATCH 5/5] Rename optional dependency (and change doc). --- monitoring/README.rst | 12 ++++++++++++ monitoring/setup.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/monitoring/README.rst b/monitoring/README.rst index 405547e514f9..b7512bee6625 100644 --- a/monitoring/README.rst +++ b/monitoring/README.rst @@ -76,3 +76,15 @@ to connect to Stackdriver Monitoring using this Client Library. :target: https://pypi.org/project/google-cloud-monitoring/ .. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-monitoring.svg :target: https://pypi.org/project/google-cloud-monitoring/ + + +Optional Features/Packages +-------------------------- + +**Pandas:** + +Pandas is an optional dependency that is needed if *query.as_dataframe* is used. + +To install pandas package run: + + $ pip install --upgrade .[pandas] diff --git a/monitoring/setup.py b/monitoring/setup.py index bb28f557a433..5eb1411534da 100644 --- a/monitoring/setup.py +++ b/monitoring/setup.py @@ -33,7 +33,7 @@ 'google-api-core<2.0.0dev,>=0.1.1', ] extras = { - 'optional': ['pandas>=0.22.0'], + 'pandas': ['pandas>=0.22.0'], }