From af128813167afeaec74ad77f6770a867d57c67e6 Mon Sep 17 00:00:00 2001 From: "S. Andrew Sheppard" Date: Sat, 9 Jan 2016 20:51:25 -0600 Subject: [PATCH] remove chart module (see wq/django-rest-pandas#17) --- contrib/chart/__init__.py | 0 contrib/chart/serializers.py | 14 ------ contrib/chart/urls.py | 12 ----- contrib/chart/views.py | 32 ------------ setup.py | 3 +- tests/chart_app/__init__.py | 0 tests/chart_app/models.py | 14 ------ tests/chart_app/views.py | 35 ------------- tests/settings.py | 1 - tests/test_chart.py | 98 ------------------------------------ tests/urls.py | 9 ---- 11 files changed, 1 insertion(+), 217 deletions(-) delete mode 100644 contrib/chart/__init__.py delete mode 100644 contrib/chart/serializers.py delete mode 100644 contrib/chart/urls.py delete mode 100644 contrib/chart/views.py delete mode 100644 tests/chart_app/__init__.py delete mode 100644 tests/chart_app/models.py delete mode 100644 tests/chart_app/views.py delete mode 100644 tests/test_chart.py diff --git a/contrib/chart/__init__.py b/contrib/chart/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/contrib/chart/serializers.py b/contrib/chart/serializers.py deleted file mode 100644 index 3db40797..00000000 --- a/contrib/chart/serializers.py +++ /dev/null @@ -1,14 +0,0 @@ -from rest_framework import serializers - - -class ChartModelSerializer(serializers.ModelSerializer): - class Meta: - pandas_index = ["date"] - pandas_unstacked_header = ["series", "units", "parameter"] - - pandas_scatter_coord = ["units", "parameter"] - pandas_scatter_header = ["series"] - - pandas_boxplot_group = "series" - pandas_boxplot_date = "date" - pandas_boxplot_header = ["units", "parameter"] diff --git a/contrib/chart/urls.py b/contrib/chart/urls.py deleted file mode 100644 index 043364ca..00000000 --- a/contrib/chart/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.conf.urls import patterns, url -from rest_framework.urlpatterns import format_suffix_patterns - -ids = r'^(?P[^\.]+)' - - -def make_urls(views): - urls = [ - url(ids + r'/' + name + '$', cls.as_view()) - for name, cls in views.items() - ] - return format_suffix_patterns(patterns('', *urls)) diff --git a/contrib/chart/views.py b/contrib/chart/views.py deleted file mode 100644 index e0ec3dde..00000000 --- a/contrib/chart/views.py +++ /dev/null @@ -1,32 +0,0 @@ -from rest_pandas import ( - PandasView, PandasUnstackedSerializer, PandasScatterSerializer, - PandasBoxplotSerializer, -) -from wq.db.patterns.identify.filters import IdentifierFilterBackend -from .serializers import ChartModelSerializer - - -class ChartView(PandasView): - serializer_class = ChartModelSerializer - filter_backends = [IdentifierFilterBackend] - - -class TimeSeriesMixin(object): - """ - For use with chart.timeSeries() in wq/chart.js - """ - pandas_serializer_class = PandasUnstackedSerializer - - -class ScatterMixin(object): - """ - For use with chart.scatter() in wq/chart.js - """ - pandas_serializer_class = PandasScatterSerializer - - -class BoxPlotMixin(object): - """ - For use with chart.boxplot() in wq/chart.js - """ - pandas_serializer_class = PandasBoxplotSerializer diff --git a/setup.py b/setup.py index 16f84755..86f0db5d 100644 --- a/setup.py +++ b/setup.py @@ -126,8 +126,7 @@ def find_wq_packages(submodule): tests_require=[ 'psycopg2', 'wq.io>=0.5.1', - 'rest_pandas>=0.4.0', 'Pillow', - 'python-social-auth==0.2.7', + 'python-social-auth', ], ) diff --git a/tests/chart_app/__init__.py b/tests/chart_app/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/chart_app/models.py b/tests/chart_app/models.py deleted file mode 100644 index b99f3842..00000000 --- a/tests/chart_app/models.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.db import models -from wq.db.patterns import models as patterns - - -class Series(patterns.IdentifiedModel): - pass - - -class Value(models.Model): - series = models.ForeignKey(Series) - date = models.DateField() - parameter = models.CharField(max_length=20) - units = models.CharField(max_length=20) - value = models.FloatField() diff --git a/tests/chart_app/views.py b/tests/chart_app/views.py deleted file mode 100644 index 230f2212..00000000 --- a/tests/chart_app/views.py +++ /dev/null @@ -1,35 +0,0 @@ -from rest_framework import serializers -from wq.db.contrib.chart import views as chart -from wq.db.contrib.chart.serializers import ChartModelSerializer -from .models import Value - - -class ValueSerializer(ChartModelSerializer): - series = serializers.ReadOnlyField(source="series.slug") - - class Meta(ChartModelSerializer.Meta): - model = Value - fields = ['series', 'date', 'parameter', 'units', 'value'] - - -class ChartView(chart.ChartView): - serializer_class = ValueSerializer - queryset = Value.objects.all() - - def filter_by_series(self, qs, series): - return qs.filter(series_id__in=series) - - def filter_by_extra(self, qs, *extra): - return qs.filter(parameter__in=extra[0]) - - -class TimeSeriesView(chart.TimeSeriesMixin, ChartView): - pass - - -class ScatterView(chart.ScatterMixin, ChartView): - pass - - -class BoxPlotView(chart.BoxPlotMixin, ChartView): - pass diff --git a/tests/settings.py b/tests/settings.py index 05817d40..54129dad 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -21,7 +21,6 @@ 'tests.rest_app', 'tests.conflict_app', 'tests.patterns_app', - 'tests.chart_app', 'tests.files_app', ) diff --git a/tests/test_chart.py b/tests/test_chart.py deleted file mode 100644 index de39dea9..00000000 --- a/tests/test_chart.py +++ /dev/null @@ -1,98 +0,0 @@ -import unittest -from rest_framework.test import APITestCase -from rest_pandas.test import parse_csv -from tests.chart_app.models import Series, Value -try: - from matplotlib.cbook import boxplot_stats -except ImportError: - boxplot_stats = None - - -class ChartTestCase(APITestCase): - def setUp(self): - data = ( - ('2014-01-01', 'Series1', 'temp', 0.5), - ('2014-01-02', 'Series1', 'temp', 0.4), - ('2014-01-03', 'Series1', 'temp', 0.6), - ('2014-01-04', 'Series1', 'temp', 0.2), - ('2014-01-05', 'Series1', 'temp', 0.1), - - ('2014-01-01', 'Series2', 'temp', 0.4), - ('2014-01-02', 'Series2', 'temp', 0.3), - ('2014-01-03', 'Series2', 'temp', 0.6), - ('2014-01-04', 'Series2', 'temp', 0.7), - ('2014-01-05', 'Series2', 'temp', 0.2), - - ('2014-01-01', 'Series2', 'snow', 0.1), - ('2014-01-02', 'Series2', 'snow', 0.0), - ('2014-01-03', 'Series2', 'snow', 0.3), - ('2014-01-04', 'Series2', 'snow', 0.0), - ('2014-01-05', 'Series2', 'snow', 0.0), - ) - - for date, series, param, value in data: - Value.objects.create( - date=date, - series=Series.objects.find(series), - parameter=param, - units="-", - value=value, - ) - - def test_chart_timeseries(self): - response = self.client.get( - "/chart/series1/series2/temp/timeseries.csv" - ) - datasets = self.parse_csv(response) - self.assertEqual(len(datasets), 2) - for dataset in datasets: - self.assertEqual(dataset['parameter'], 'temp') - self.assertEqual(dataset['units'], '-') - self.assertEqual(len(dataset['data']), 5) - - if datasets[0]['series'] == "series1": - s1data = datasets[0] - else: - s1data = datasets[1] - - self.assertEqual(s1data['series'], "series1") - d0 = s1data['data'][0] - self.assertEqual(d0['date'], '2014-01-01') - self.assertEqual(d0['value'], 0.5) - - def test_chart_scatter(self): - response = self.client.get("/chart/series2/temp/snow/scatter.csv") - - datasets = self.parse_csv(response) - self.assertEqual(len(datasets), 1) - - dataset = datasets[0] - self.assertEqual(dataset['series'], 'series2') - self.assertEqual(len(dataset['data']), 5) - - d4 = dataset['data'][4] - self.assertEqual(d4['date'], '2014-01-05') - self.assertEqual(d4['temp-value'], 0.2) - self.assertEqual(d4['snow-value'], 0.0) - - @unittest.skipUnless(boxplot_stats, "test requires matplotlib 1.4+") - def test_chart_boxplot(self): - response = self.client.get("/chart/series1/temp/boxplot.csv") - - datasets = self.parse_csv(response) - self.assertEqual(len(datasets), 1) - - dataset = datasets[0] - self.assertEqual(dataset['series'], 'series1') - self.assertEqual(dataset['parameter'], 'temp') - self.assertEqual(dataset['units'], '-') - self.assertEqual(len(dataset['data']), 1) - - stats = dataset['data'][0] - self.assertEqual(stats['year'], '2014') - self.assertEqual(stats['value-whislo'], 0.1) - self.assertEqual(stats['value-mean'], 0.36) - self.assertEqual(stats['value-whishi'], 0.6) - - def parse_csv(self, response): - return parse_csv(response.content.decode('utf-8')) diff --git a/tests/urls.py b/tests/urls.py index 14058af0..d0323184 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,21 +1,12 @@ from django.conf.urls import patterns, include, url from wq.db import rest -from wq.db.contrib.chart.urls import make_urls -from tests.chart_app import views from tests.test_relate import create_reltype create_reltype() -chart_urls = make_urls({ - 'timeseries': views.TimeSeriesView, - 'scatter': views.ScatterView, - 'boxplot': views.BoxPlotView, -}) - rest.autodiscover() urlpatterns = patterns( '', url(r'^', include(rest.router.urls)), - url(r'^chart', include(chart_urls)), url(r'^search/', include('wq.db.contrib.search.urls')), )