def setUp(self):
     self.mock_workspace_item = None
     self.adapter = WorkspaceItemAdapterFewsUnblobbed(
         self.mock_workspace_item,
         layer_arguments={"filterkey": 1, "parameterkey": 1},
         perform_existence_verification=False,
     )
     self._timeseries = self.adapter._timeseries
     self.adapter._timeseries = self.mock_timeseries
     f = Filter(id=1, fews_id="default", name="default", issubfilter=False, isendnode=True)
     f.save()
def fews_filters(ignore_cache=False):
    """
    Return fews filter tree.

    Exclude filters from settings.FEWS_UNBLOBBED_EXCLUDE_FILTERS.
    """
    filters = cache.get(FILTER_CACHE_KEY)
    # Filters is a list of dicts (keys: 'data', 'id', 'children')
    # In data, there's a key 'fews_id'
    if filters is None or ignore_cache:
        filters = Filter.dump_bulk()  # Optional: parent

        # Filter out some root filters: get settings.
        try:
            exclude_filters = settings.FEWS_UNBLOBBED_EXCLUDE_FILTERS
            logger.info('Excluding filters: %r.' % exclude_filters)
        except AttributeError:
            exclude_filters = ['ZZL_Meteo', 'ZZL_ZUIV_RUW', ]
            logger.warning(
                'No setting FEWS_UNBLOBBED_EXCLUDE_FILTERS.'
                'By default ZZL_Meteo and ZZL_ZUIV_RUW are excluded.')
        # ^^^ Who on earth added these hardcoded items in the basic app?
        # a) settings.get(..., some_default) works fine.
        # b) Hardcoded settings for zzl? Just add them in the settings.py,
        #    then, if you're reading from it anyway!

        # Filter the filters.
        filters = filter_exclude(filters, exclude_filters)

        cache.set(FILTER_CACHE_KEY, filters, 8 * 60 * 60)  # 8 hours
    return filters
    def setUp(self):
        self.filter1 = Filter(id=1, fews_id="filter1", issubfilter=False, isendnode=False)
        self.filter2 = Filter(id=2, fews_id="filter2", issubfilter=False, isendnode=False)
        self.filter3 = Filter(id=3, fews_id="filter3", issubfilter=False, isendnode=False)
        self.location1 = Location(lkey=1, id="location1", x=0, y=0, z=0, longitude=0, latitude=0)
        self.location2 = Location(lkey=2, id="location2", x=0, y=0, z=0, longitude=0, latitude=0)
        self.location3 = Location(lkey=3, id="location3", x=0, y=0, z=0, longitude=0, latitude=0)
        self.parameter1 = Parameter(pkey=1, id="parameter1")
        self.parameter2 = Parameter(pkey=2, id="parameter2")
        self.parameter3 = Parameter(pkey=3, id="parameter3")

        self.filter1.save()
        self.filter2.save()
        self.filter3.save()
        self.location1.save()
        self.location2.save()
        self.location3.save()
        self.parameter1.save()
        self.parameter2.save()
        self.parameter3.save()
 def test_representation(self):
     filter_ = Filter()
     self.assertEquals(repr(filter_), "<Filter:  (id=)>")
     filter_.name = "Sample filter"
     filter_.fews_id = "1234"
     self.assertEquals(repr(filter_), "<Filter: Sample filter (id=1234)>")
class TestIconStyle(TestCase):
    """Based on tests in fewsjdbc"""

    def setUp(self):
        self.filter1 = Filter(id=1, fews_id="filter1", issubfilter=False, isendnode=False)
        self.filter2 = Filter(id=2, fews_id="filter2", issubfilter=False, isendnode=False)
        self.filter3 = Filter(id=3, fews_id="filter3", issubfilter=False, isendnode=False)
        self.location1 = Location(lkey=1, id="location1", x=0, y=0, z=0, longitude=0, latitude=0)
        self.location2 = Location(lkey=2, id="location2", x=0, y=0, z=0, longitude=0, latitude=0)
        self.location3 = Location(lkey=3, id="location3", x=0, y=0, z=0, longitude=0, latitude=0)
        self.parameter1 = Parameter(pkey=1, id="parameter1")
        self.parameter2 = Parameter(pkey=2, id="parameter2")
        self.parameter3 = Parameter(pkey=3, id="parameter3")

        self.filter1.save()
        self.filter2.save()
        self.filter3.save()
        self.location1.save()
        self.location2.save()
        self.location3.save()
        self.parameter1.save()
        self.parameter2.save()
        self.parameter3.save()

    # def test_styles(self):
    #     """See if styles() output correspond to database contents.
    #
    #     It seems that the database contains more IconStyles than the
    #     ones defined here. Strange??
    #     """
    #     IconStyle(fews_filter=None, fews_location=None, fews_parameter=None,
    #               icon='icon.png', mask='mask.png', color='ff00ff').save()
    #
    #     expected = {
    #         '::::':
    #         {'icon': 'icon.png', 'mask': ('mask.png', ),
    #          'color': (1.0, 0.0, 1.0, 1.0)}}
    #
    #     # You can see here that the database contains 10+ IconStyles...
    #     print IconStyle.objects.all()
    #     self.assertEqual(IconStyle._styles(), expected)
    #
    #
    # def test_styles(self):
    #     """See if styles_lookup() output correspond to database contents.
    #
    #     It seems that the database contains more IconStyles than the
    #     ones defined here. Strange??
    #     """
    #     IconStyle(fews_filter=None, fews_location=None, fews_parameter=None,
    #               icon='icon.png', mask='mask.png', color='ff00ff').save()
    #     IconStyle(fews_filter=self.filter1,
    #               fews_location=None, fews_parameter=None,
    #               icon='filter1.png', mask='mask.png', color='ff00ff').save()
    #
    #     expected = {
    #         '::::':
    #         {'icon': 'icon.png', 'mask': ('mask.png', ),
    #          'color': (1.0, 0.0, 1.0, 1.0)},
    #         '%d::::' % (self.filter1.pk):
    #         {'icon': 'filter1.png', 'mask': ('mask.png', ),
    #          'color': (1.0, 0.0, 1.0, 1.0)}}
    #
    #     # You can see here that the database contains 10+ IconStyles...
    #     print IconStyle.objects.all()
    #
    #     self.assertEqual(IconStyle._styles(), expected)

    def test_lookup(self):
        IconStyle(
            fews_filter=None, fews_location=None, fews_parameter=None, icon="icon.png", mask="mask.png", color="ff00ff"
        ).save()
        IconStyle(
            fews_filter=self.filter1,
            fews_location=None,
            fews_parameter=None,
            icon="filter1.png",
            mask="mask.png",
            color="ff00ff",
        ).save()
        IconStyle(
            fews_filter=None,
            fews_location=self.location1,
            fews_parameter=self.parameter1,
            icon="loc1par1.png",
            mask="mask.png",
            color="00ffff",
        ).save()
        IconStyle(
            fews_filter=None,
            fews_location=self.location1,
            fews_parameter=None,
            icon="loc1.png",
            mask="mask.png",
            color="00ffff",
        ).save()

        expected = {
            # Level0: fews_filter
            None: {
                # Level1: fews_location
                None: {
                    # Level2: fews_parameter
                    None: "::::"
                },
                self.location1.pk: {
                    # Level2: fews_parameter
                    None: "::%d::" % self.location1.pk,
                    self.parameter1.pk: "::%d::%d" % (self.location1.pk, self.parameter1.pk),
                },
            },
            self.filter1.pk: {
                # Level1: fews_location
                None: {
                    # Level2: fews_parameter
                    None: "%d::::"
                    % self.filter1.pk
                }
            },
        }

        self.assertEqual(IconStyle._lookup(), expected)

    def test_style(self):
        """See if style() output correspond to expected lookup.
        """
        IconStyle(
            fews_filter=None, fews_location=None, fews_parameter=None, icon="icon.png", mask="mask.png", color="ff00ff"
        ).save()
        IconStyle(
            fews_filter=self.filter1,
            fews_location=None,
            fews_parameter=None,
            icon="filter1.png",
            mask="mask.png",
            color="00ffff",
        ).save()
        IconStyle(
            fews_filter=None,
            fews_location=self.location1,
            fews_parameter=None,
            icon="par1.png",
            mask="mask.png",
            color="00ffff",
        ).save()
        IconStyle(
            fews_filter=self.filter1,
            fews_location=self.location1,
            fews_parameter=None,
            icon="loc1.png",
            mask="mask.png",
            color="00ffff",
        ).save()
        IconStyle(
            fews_filter=self.filter1,
            fews_location=self.location1,
            fews_parameter=self.parameter1,
            icon="par1.png",
            mask="mask.png",
            color="00ffff",
        ).save()
        IconStyle(
            fews_filter=None,
            fews_location=self.location1,
            fews_parameter=self.parameter1,
            icon="loc1par1.png",
            mask="mask.png",
            color="00ffff",
        ).save()

        expected1 = ("::::", {"icon": "icon.png", "mask": ("mask.png",), "color": (1.0, 0.0, 1.0, 1.0)})
        self.assertEqual(IconStyle.style(self.filter2, self.location2, self.parameter2), expected1)
        self.assertEqual(IconStyle.style(self.filter2, self.location2, self.parameter2, ignore_cache=True), expected1)

        # It seems that IconStyles defined in other tests are also
        # available here...

        # expected2 = (
        #     '%d::::' % self.filter1.pk,
        #     {'icon': 'filter1.png', 'mask': ('mask.png', ),
        #      'color': (0.0, 1.0, 1.0, 1.0)})
        # self.assertEqual(
        #     IconStyle.style(self.filter1, self.location2, self.parameter2),
        #     expected2)
        # self.assertEqual(
        #     IconStyle.style(self.filter1, self.location2, self.parameter2,
        #                     ignore_cache=True),
        #     expected2)

        # expected3 = (
        #     '%d::%d::' % (self.filter1.pk, self.location1.pk),
        #     {'icon': 'loc1.png', 'mask': ('mask.png', ),
        #      'color': (0.0, 1.0, 1.0, 1.0)})
        # self.assertEqual(
        #     IconStyle.style(self.filter1, self.location1, self.parameter2),
        #     expected3)

        # expected4 = (
        #     '%d::%d::%d' % (
        #         self.filter1.pk, self.location1.pk, self.parameter1.pk),
        #     {'icon': 'par1.png', 'mask': ('mask.png', ),
        #      'color': (0.0, 1.0, 1.0, 1.0)})
        # self.assertEqual(
        #     IconStyle.style(self.filter1, self.location1, self.parameter1),
        #     expected4)

        # expected5 = (
        #     '::%d::%d' % (self.location1.pk, self.parameter1.pk),
        #     {'icon': 'loc1par1.png', 'mask': ('mask.png', ),
        #      'color': (0.0, 1.0, 1.0, 1.0)})
        # self.assertEqual(
        #     IconStyle.style(self.filter2, self.location1, self.parameter1),
        #     expected5)

    def test_empty(self):
        """Do not crash when no iconstyles are available, just return default.
        """

        expected = (
            "::::",
            {"icon": "meetpuntPeil.png", "mask": ("meetpuntPeil_mask.png",), "color": (0.0, 0.5, 1.0, 1.0)},
        )

        self.assertEqual(IconStyle.style(self.filter2, self.location1, self.parameter1), expected)