def param_rdb_download(request):
    form = DataParamForm(request.GET)
    if form.is_valid():
        _logger.info(
            "requested data download for %s with params %s"
            % (form.cleaned_data["site_list"], form.cleaned_data["params"])
        )

        beginDate = form.cleaned_data["timeseries_start"]
        endDate = form.cleaned_data["timeseries_end"]
        gage = form.cleaned_data["site_list"]
        p = form.cleaned_data["params"][0]

        station_list = stage_queries.station_list([gage])
        pt = Plottable(station_list[0], p, beginDate, endDate)
        data_seq = pt.sequence()

        # fifth parameter to create_metadata_header is list of Station objects
        station_list = stage_queries.station_list([gage])
        query_metadata_list = create_metadata_header(
            GENERAL_MESSAGE, EDEN_CONTACT, END_OF_HEADER, form.cleaned_data, station_list, water_level=False
        )

        response = HttpResponse(content_type="text/csv")
        stage_data.write_rdb(data_seq, response, metadata=query_metadata_list)

        return response
    else:
        return HttpResponseBadRequest(",".join(form.errors))
    def test_ambiguous_station_name(self):
        "Test for the one station name that produces two separate station records"
        names = ["S150_T"]
        ss = stage_queries.station_list(names)

        self.assertEqual(len(names), len(ss))
        self.assertEquals(names, [s.station_name_web for s in ss])
    def test_peculiar_station_names(self):
        "Test for peculiar station names"
        names = ['C111_wetland_east_of_FIU_LTER_TSPH5', 'S343A_H']
        ss = stage_queries.station_list(names)

        self.assertEqual(len(names), len(ss))
        self.assertEquals(names, [s.station_name_web for s in ss])
Example #4
0
    def test_peculiar_station_names(self):
        "Test for peculiar station names"
        names = ['C111_wetland_east_of_FIU_LTER_TSPH5', 'S343A_H']
        ss = stage_queries.station_list(names)

        self.assertEqual(len(names), len(ss))
        self.assertEquals(names, [s.station_name_web for s in ss])
Example #5
0
    def test_ambiguous_station_name(self):
        "Test for the one station name that produces two separate station records"
        names = ["S150_T"]
        ss = stage_queries.station_list(names)

        self.assertEqual(len(names), len(ss))
        self.assertEquals(names, [s.station_name_web for s in ss])
    def test_duplicate_station_names(self):
        "Test that duplicate station names are collapsed, but otherwise order is preserved"
        names = ["G-3567", "CH1", "RG3", "ANGEL", "BARW4", "TSH", "W2", "W15", "W2", "Upstream_Taylor_River", "TSH", "CH1"]
        ss = stage_queries.station_list(names)

        names_dedup = ["G-3567", "CH1", "RG3", "ANGEL", "BARW4", "TSH", "W2", "W15", "Upstream_Taylor_River"]
        # self.assertEqual(len(names) - 3, len(ss))
        self.assertEquals(names_dedup, [s.station_name_web for s in ss])
Example #7
0
def param_page(request):
    template_name = 'eve_params.html'
    param_form = DataParamForm()

    if "clear_form" in request.REQUEST:
        return redirect(param_page)

    has_data = False
    # be careful about initial get with no parameters,
    # so we don't clobber the initial values
    if request.method == 'GET' and request.GET:
        param_form = DataParamForm(request.GET)
        has_data = True
    elif request.method == 'POST':
        param_form = DataParamForm(request.POST)
        has_data = True

    if has_data:
        if param_form.is_valid():
            # Avoid the troublesome Nones.
            plot_params = {}
            for k, v in param_form.cleaned_data.items():
                if v:
                    plot_params[k] = v

            kwargs = {
                'beginDate': param_form.cleaned_data['timeseries_start'],
                'endDate': param_form.cleaned_data['timeseries_end']
            }

            plottables = []
            station_list = stage_queries.station_list(
                [param_form.cleaned_data['site_list']])
            for s in station_list:
                for p in param_form.cleaned_data['params']:
                    pt = Plottable(s, p, **kwargs)
                    plottables.append(pt)

            render_params = {
                'param_form': param_form,
                'plottables': plottables,
                'EDEN_URL': settings.EDEN_URL,
            }
            return render(request, template_name, render_params)

        else:
            # error in input
            return render(request,
                          template_name, {
                              'param_form': param_form,
                              'EDEN_URL': settings.EDEN_URL
                          },
                          status=400)

    return render(request, template_name, {
        'param_form': param_form,
        'EDEN_URL': settings.EDEN_URL
    })
Example #8
0
    def test_duplicate_station_names(self):
        "Test that duplicate station names are collapsed, but otherwise order is preserved"
        names = [
            "G-3567", "CH1", "RG3", "ANGEL", "BARW4", "TSH", "W2", "W15", "W2",
            "Upstream_Taylor_River", "TSH", "CH1"
        ]
        ss = stage_queries.station_list(names)

        names_dedup = [
            "G-3567", "CH1", "RG3", "ANGEL", "BARW4", "TSH", "W2", "W15",
            "Upstream_Taylor_River"
        ]
        # self.assertEqual(len(names) - 3, len(ss))
        self.assertEquals(names_dedup, [s.station_name_web for s in ss])
Example #9
0
def param_rdb_download(request):
    form = DataParamForm(request.GET)
    if form.is_valid():
        _logger.info("requested data download for %s with params %s" % (form.cleaned_data['site_list'], form.cleaned_data['params']))

        beginDate = form.cleaned_data["timeseries_start"]
        endDate = form.cleaned_data["timeseries_end"]
        gage = form.cleaned_data['site_list']
        p = form.cleaned_data['params'][0]

        station_list = stage_queries.station_list([gage])
        pt = Plottable(station_list[0], p, beginDate, endDate)
        data_seq = pt.sequence()

        # fifth parameter to create_metadata_header is list of Station objects
        station_list = stage_queries.station_list([gage])
        query_metadata_list = create_metadata_header(GENERAL_MESSAGE, EDEN_CONTACT, END_OF_HEADER, form.cleaned_data, station_list, water_level=False)

        response = HttpResponse(content_type='text/csv')
        stage_data.write_rdb(data_seq, response, metadata=query_metadata_list)

        return response
    else:
        return HttpResponseBadRequest(",".join(form.errors))
Example #10
0
def param_page(request):
    template_name = 'eve_params.html'
    param_form = DataParamForm()

    if "clear_form" in request.REQUEST:
        return redirect(param_page)

    has_data = False
    # be careful about initial get with no parameters,
    # so we don't clobber the initial values
    if request.method == 'GET' and request.GET :
        param_form = DataParamForm(request.GET)
        has_data = True
    elif request.method == 'POST':
        param_form = DataParamForm(request.POST)
        has_data = True

    if has_data:
        if param_form.is_valid():
            # Avoid the troublesome Nones.
            plot_params = {}
            for k, v in param_form.cleaned_data.items():
                if v:
                    plot_params[k] = v

            kwargs = {
                      'beginDate' : param_form.cleaned_data['timeseries_start'],
                      'endDate'   : param_form.cleaned_data['timeseries_end']
                      }

            plottables = []
            station_list = stage_queries.station_list([param_form.cleaned_data['site_list']])
            for s in station_list:
                for p in param_form.cleaned_data['params']:
                    pt = Plottable(s, p, **kwargs)
                    plottables.append(pt)

            render_params = {'param_form': param_form,
                             'plottables': plottables,
                             'EDEN_URL': settings.EDEN_URL,
                             }
            return render (request, template_name, render_params)

        else:
            # error in input
            return render(request, template_name, {'param_form': param_form, 'EDEN_URL': settings.EDEN_URL }, status=400)

    return render (request, template_name, {'param_form': param_form, 'EDEN_URL': settings.EDEN_URL })
Example #11
0
def _plot_simple(gage, p, beginDate=None, endDate=None, format='png', show_logo=True):
    station_list = stage_queries.station_list([gage])
    pt = Plottable(station_list[0], p, beginDate, endDate)
    data_seq = pt.sequence()


    if show_logo:
        title = pt.title()
    else:
        title = None

    if not format in _mime_types:
        return HttpResponseBadRequest("Unknown image format: " + format)

    response = HttpResponse(content_type=_mime_types[format])
    hydrograph.png_simple(data_seq, response, beginDate=beginDate, endDate=endDate,
                          format=format, show_logo=show_logo, title=title, y_label=pt.label_y())
    return response
    def test_station_data(self):
        # Marker_52 has no station datum, BARW4 does
        names = ['Marker_52'  # no station datum
                 , 'BARW4'  # full data
                 , 'New_River_at_Sunday_Bay'  # station_datum but no vertical_conversion
                 # convert_to_navd_88 is non-null
                 ]
        ss = stage_queries.station_list(names)
        marker_52 = ss[0]
        barw4 = ss[1]
        new_river = ss[2]

        self.assertIsNone(marker_52.vertical_conversion)
        self.assertIsNotNone(barw4.vertical_conversion)
        self.assertIsNone(new_river.vertical_conversion)

        self.assertIsNone(marker_52.convert_to_navd88_feet)
        self.assertIsNotNone(barw4.convert_to_navd88_feet)
        self.assertIsNotNone(new_river.convert_to_navd88_feet)
Example #13
0
def param_data_download(request):

    form = DataParamForm(request.GET)
    if form.is_valid():
        _logger.info("requested plot data for %s with params %s" % (form.cleaned_data['site_list'], form.cleaned_data['params']))

        beginDate = form.cleaned_data["timeseries_start"]
        endDate = form.cleaned_data["timeseries_end"]
        gage = form.cleaned_data['site_list']
        p = form.cleaned_data['params'][0]

        station_list = stage_queries.station_list([gage])
        pt = Plottable(station_list[0], p, beginDate, endDate)

        data_seq = pt.sequence()

        response = HttpResponse(content_type='text/csv')
        stage_data.write_csv(data_seq, response)

        return response
    else:
        return HttpResponseBadRequest(",".join(form.errors))
Example #14
0
    def test_station_data(self):
        # Marker_52 has no station datum, BARW4 does
        names = [
            'Marker_52'  # no station datum
            ,
            'BARW4'  # full data
            ,
            'New_River_at_Sunday_Bay'  # station_datum but no vertical_conversion
            # convert_to_navd_88 is non-null
        ]
        ss = stage_queries.station_list(names)
        marker_52 = ss[0]
        barw4 = ss[1]
        new_river = ss[2]

        self.assertIsNone(marker_52.vertical_conversion)
        self.assertIsNotNone(barw4.vertical_conversion)
        self.assertIsNone(new_river.vertical_conversion)

        self.assertIsNone(marker_52.convert_to_navd88_feet)
        self.assertIsNotNone(barw4.convert_to_navd88_feet)
        self.assertIsNotNone(new_river.convert_to_navd88_feet)
def _plot_simple(gage, p, beginDate=None, endDate=None, format="png", show_logo=True):
    station_list = stage_queries.station_list([gage])
    pt = Plottable(station_list[0], p, beginDate, endDate)
    data_seq = pt.sequence()

    if show_logo:
        title = pt.title()

    if not format in _mime_types:
        return HttpResponseBadRequest("Unknown image format: " + format)

    response = HttpResponse(content_type=_mime_types[format])
    hydrograph.png_simple(
        data_seq,
        response,
        beginDate=beginDate,
        endDate=endDate,
        format=format,
        show_logo=show_logo,
        title=title,
        y_label=pt.label_y(),
    )
    return response
def param_data_download(request):

    form = DataParamForm(request.GET)
    if form.is_valid():
        _logger.info(
            "requested plot data for %s with params %s" % (form.cleaned_data["site_list"], form.cleaned_data["params"])
        )

        beginDate = form.cleaned_data["timeseries_start"]
        endDate = form.cleaned_data["timeseries_end"]
        gage = form.cleaned_data["site_list"]
        p = form.cleaned_data["params"][0]

        station_list = stage_queries.station_list([gage])
        pt = Plottable(station_list[0], p, beginDate, endDate)

        data_seq = pt.sequence()

        response = HttpResponse(content_type="text/csv")
        stage_data.write_csv(data_seq, response)

        return response
    else:
        return HttpResponseBadRequest(",".join(form.errors))
Example #17
0
def eden_page(request):
    """
    Allows a user to select a site,
    date in order to view a dygraph
    plot of results.
    """

    # TODO If URL does not end with /, redirect there for ease of form generation

    template_name = 'eve.html'
    query_form = TimeSeriesFilterForm()

    eden_url = settings.EDEN_URL

    has_data = False
    # be careful about initial get with no parameters,
    # so we don't clobber the initial values
    if request.method == 'GET' and request.GET:
        query_form = TimeSeriesFilterForm(request.GET)
        has_data = True
    elif request.method == 'POST':
        query_form = TimeSeriesFilterForm(request.POST)
        has_data = True

    if has_data:
        """
        if not query_form.has_changed():
            return render(request, template_name, {'query_form': query_form, })
        """
        if query_form.is_valid():

            # Avoid the troublesome Nones.
            plot_params = {}
            for k, v in query_form.cleaned_data.items():
                if v:
                    plot_params[k] = v

            plot_query_str = urllib.urlencode(plot_params, doseq=True)

            isIE = 'MSIE' in request.META['HTTP_USER_AGENT']

            gages = query_form.cleaned_data['site_list']
            colors = ColorRange(count=len(gages))

            if query_form.cleaned_data['timeseries_start']:
                str_tstart = '%s' % query_form.cleaned_data['timeseries_start']
            # elif isIE:
            #    str_tstart = min_date(gages)
            else:
                str_tstart = None

            if query_form.cleaned_data['timeseries_end']:
                str_tend = '%s' % query_form.cleaned_data['timeseries_end']
            # elif isIE:
            #     str_tstart = max_date(gages)
            else:
                str_tend = None

            _logger.debug("In page generation, colors = %s", list(colors))

            render_params = {
                'query_form': query_form,
                'plot_params': mark_safe(plot_query_str),
                'series_options': mark_safe(dygraph_series_options(gages)),
                'str_tstart': str_tstart,
                'gages': gages,
                'str_tend': str_tend,
                'colors': mark_safe(json.dumps(list(colors))),
                'color_list': list(colors),
                'DYGRAPH_RANGE_SELECTOR': settings.DYGRAPH_RANGE_SELECTOR,
                'EDEN_URL': eden_url,
            }
            if len(gages) == 1:
                station = stage_queries.station_list(gages)[0]
                render_params['ngvd29_series'] = '%s%s' % (
                    station.station_name_web, '_NGVD29')
                render_params['dry_elevation'] = station.dry_elevation or None
                render_params[
                    'ground_elevation'] = station.duration_elevation or None
                render_params[
                    'ngvd29_correction'] = station.vertical_conversion or 0.0
            else:
                render_params['dry_elevation'] = None
                render_params['ground_elevation'] = None
                render_params['ngvd29_correction'] = "null"

            return render(request, template_name, render_params)
        else:
            return render(request,
                          template_name, {
                              'query_form': query_form,
                              'EDEN_URL': eden_url
                          },
                          status=400)

    return render(request, template_name, {
        'query_form': query_form,
        'EDEN_URL': eden_url
    })
                                                  beginDate="2006-10-15",
                                                  endDate="2006-11-12")
    station = ss[0]
    ct = png_single_station(data,
                            "/tmp/hg6b.png",
                            station,
                            beginDate=dateutil.parser.parse("2006-10-15"),
                            endDate=dateutil.parser.parse("2006-11-12"),
                            show_logo=False)
    print "hg6b.png", ct

    gage = "EDEN_3"
    p = "rainfall"
    beginDate = datetime.date(2013, 01, 01)
    endDate = datetime.date(2013, 3, 1)
    station_list = stage_queries.station_list([gage])
    pt = Plottable(station_list[0], p, beginDate, endDate)

    data_seq = pt.sequence()

    show_logo = True

    # Let logo also drive title display
    if show_logo:
        title = pt.title()

    png_simple(data_seq,
               "/tmp/hg7.png",
               beginDate=beginDate,
               endDate=endDate,
               show_logo=show_logo,
import dj_eden_app.stage_queries as station_data
import dj_eden_app.views.data_views as data_views
try:
    from dj_eden_app.models import station_list
except ImportError:
    pass
import dj_eden_app.stage_queries as stage_queries

from decimal import Decimal
import unittest


gages = ['G-3567', '2A300']
stations = stage_queries.station_list(gages)

class TestStationData(unittest.TestCase):

    def check(self, q, data_cols, flag_cols):
        "Exercise a query and check the results"
        valid_flags = ['M', 'D', 'E', 'O']
        rs = q.execute()
        for r in rs:
            self.assertGreater(len(r), len(data_cols), len(flag_cols))
            for d in data_cols:
                if r[d] is not None:
                    self.assertIsInstance(r[d], Decimal)
            for f in flag_cols:
                self.assertIn(r[f], valid_flags)

    def test_hourly(self):
Example #20
0
import dj_eden_app.stage_queries as station_data
import dj_eden_app.views.data_views as data_views
try:
    from dj_eden_app.models import station_list
except ImportError:
    pass
import dj_eden_app.stage_queries as stage_queries

from decimal import Decimal
import unittest

gages = ['G-3567', '2A300']
stations = stage_queries.station_list(gages)


class TestStationData(unittest.TestCase):
    def check(self, q, data_cols, flag_cols):
        "Exercise a query and check the results"
        valid_flags = ['M', 'D', 'E', 'O']
        rs = q.execute()
        for r in rs:
            self.assertGreater(len(r), len(data_cols), len(flag_cols))
            for d in data_cols:
                if r[d] is not None:
                    self.assertIsInstance(r[d], Decimal)
            for f in flag_cols:
                self.assertIn(r[f], valid_flags)

    def test_hourly(self):

        q, dt = station_data.hourly_query(*stations)
Example #21
0
                    show_logo=default_show_logo)
    print "hg6a.png", ct

    data, ss = stage_queries.data_for_plot_hourly(['CV5NR'], beginDate="2006-10-15", endDate="2006-11-12")
    station = ss[0]
    ct = png_single_station(data, "/tmp/hg6b.png", station,
                    beginDate=dateutil.parser.parse("2006-10-15"),
                    endDate=dateutil.parser.parse("2006-11-12"),
                    show_logo=False)
    print "hg6b.png", ct

    gage = "EDEN_3"
    p = "rainfall"
    beginDate = datetime.date(2013, 01, 01)
    endDate = datetime.date(2013, 3, 1)
    station_list = stage_queries.station_list([gage])
    pt = Plottable(station_list[0], p, beginDate, endDate)

    data_seq = pt.sequence()

    show_logo = True

    # Let logo also drive title display
    if show_logo:
        title = pt.title()

    png_simple(data_seq, "/tmp/hg7.png", beginDate=beginDate, endDate=endDate,
                              show_logo=show_logo, title=title, y_label=pt.label_y())
    print "hg7.png"

    data_seq = pt.sequence()
Example #22
0
def eden_page(request):
    """
    Allows a user to select a site,
    date in order to view a dygraph
    plot of results.
    """

    # TODO If URL does not end with /, redirect there for ease of form generation

    template_name = 'eve.html'
    query_form = TimeSeriesFilterForm()

    eden_url = settings.EDEN_URL

    has_data = False
    # be careful about initial get with no parameters,
    # so we don't clobber the initial values
    if request.method == 'GET' and request.GET :
        query_form = TimeSeriesFilterForm(request.GET)
        has_data = True
    elif request.method == 'POST':
        query_form = TimeSeriesFilterForm(request.POST)
        has_data = True

    if has_data:
        """
        if not query_form.has_changed():
            return render(request, template_name, {'query_form': query_form, })
        """
        if query_form.is_valid():

            # Avoid the troublesome Nones.
            plot_params = {}
            for k, v in query_form.cleaned_data.items():
                if v:
                    plot_params[k] = v

            plot_query_str = urllib.urlencode(plot_params, doseq=True);

            if query_form.cleaned_data['timeseries_start']:
                str_tstart = '%s' % query_form.cleaned_data['timeseries_start']
            else:
                str_tstart = None

            if query_form.cleaned_data['timeseries_end']:
                str_tend = '%s' % query_form.cleaned_data['timeseries_end']
            else:
                str_tend = None

            gages = query_form.cleaned_data['site_list']
            colors = ColorRange(count=len(gages))

            _logger.debug("In page generation, colors = %s", list(colors))

            render_params = {'query_form': query_form,
                                                   'plot_params': mark_safe(plot_query_str),
                                                   'series_options': mark_safe(dygraph_series_options(gages)),
                                                   'str_tstart': str_tstart,
                                                   'gages':gages,
                                                   'str_tend': str_tend,
                                                   'colors': mark_safe(json.dumps(list(colors))),
                                                   'color_list': list(colors),
                                                   'DYGRAPH_RANGE_SELECTOR':settings.DYGRAPH_RANGE_SELECTOR,
                                                   'EDEN_URL': eden_url,
			}
            if len(gages) == 1:
                station = stage_queries.station_list(gages)[0]
                render_params['ngvd29_series'] = '%s%s' % (station.station_name_web, '_NGVD29')
                render_params['dry_elevation'] = station.dry_elevation or "null"
                render_params['ground_elevation'] = station.duration_elevation or "null"
                render_params['ngvd29_correction'] = station.vertical_conversion or 0.0
            else:
                render_params['dry_elevation'] = "null"
                render_params['ground_elevation'] = "null"
                render_params['ngvd29_correction'] = "null"

            return render(request, template_name, render_params)
        else:
            return render(request, template_name, {'query_form': query_form, 'EDEN_URL': eden_url}, status=400)

    return render(request, template_name, {'query_form': query_form, 'EDEN_URL': eden_url})