Ejemplo n.º 1
0
 def test_get_display_value_no_unit_conversion_when_same_units(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.test.unit_only.units', 'ft')
     val, display_val = get_display_value(
         self.instance, 'test', 'unit_only', 1)
     self.assertEqual(val, 1)
     self.assertEqual(display_val, '1.0')
Ejemplo n.º 2
0
 def test_get_display_value_conversion(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.test.both.units', 'in')
     val, display_val = get_display_value(
         self.instance, 'test', 'both', 1)
     self.assertAlmostEqual(val, 12)
     self.assertEqual(display_val, '12.000')
Ejemplo n.º 3
0
Archivo: units.py Proyecto: heath/OTM2
    def test_save_does_not_convert_diameter_when_units_same(self):
        set_attr_on_json_field(self.instance, "config.value_display.tree.diameter.units", "in")
        self.tree.diameter = 1
        self.tree.save_with_user(self.user)

        updated_tree = Tree.objects.get(pk=self.tree.pk)
        self.assertEqual(1, updated_tree.diameter)
Ejemplo n.º 4
0
Archivo: units.py Proyecto: heath/OTM2
    def test_save_does_not_convert_width_when_units_same(self):
        set_attr_on_json_field(self.instance, "config.value_display.plot.width.units", "ft")
        self.plot.width = 12
        self.plot.save_with_user(self.user)

        updated_plot = Plot.objects.get(pk=self.plot.pk)
        self.assertEqual(12, updated_plot.width)
Ejemplo n.º 5
0
 def test_uses_custom_units_and_digits(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.plot.length.units', 'm')
     set_attr_on_json_field(
         self.instance, 'config.value_display.plot.length.digits', '3')
     self.assert_plot_length_context_value(
         self.observer, 'field.display_value', '0.312 m')
Ejemplo n.º 6
0
 def test_get_display_value_conversion(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.test.both.units', 'in')
     val, display_val = get_display_value(
         self.instance, 'test', 'both', 1)
     self.assertAlmostEqual(val, 12)
     self.assertEqual(display_val, '12.000')
 def test_uses_custom_units_and_digits(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.plot.length.units', 'm')
     set_attr_on_json_field(
         self.instance, 'config.value_display.plot.length.digits', '3')
     self.assert_plot_length_context_value(
         self.observer, 'field.display_value', '0.312 m')
Ejemplo n.º 8
0
def _update_instance_fields(json_data, instance, validation_fn=None):
    error_dict = {}
    for identifier, value in json_data.iteritems():
        model, field_name = dotted_split(identifier, 2, maxsplit=1)

        obj = instance

        if validation_fn:
            errors = validation_fn(field_name, value, model)
            if errors is not None:
                error_dict[field_name] = errors

        if is_json_field_reference(field_name):
            set_attr_on_json_field(obj, field_name, value)
        else:
            setattr(obj, field_name, value)

    if error_dict:
        validation_error = ValidationError(error_dict)
    else:
        try:
            validate_is_public(instance)
            instance.save()
            return {'ok': True}
        except ValidationError, ve:
            validation_error = ve
Ejemplo n.º 9
0
def _update_instance_fields(json_data, instance, validation_fn=None,
                            should_update_universal_rev=False):
    error_dict = {}
    for identifier, value in json_data.iteritems():
        model, field_name = dotted_split(identifier, 2, maxsplit=1)

        obj = instance

        if validation_fn:
            errors = validation_fn(field_name, value, model)
            if errors is not None:
                error_dict[field_name] = errors

        if is_json_field_reference(field_name):
            set_attr_on_json_field(obj, field_name, value)
        else:
            setattr(obj, field_name, value)

    if error_dict:
        validation_error = ValidationError(error_dict)
    else:
        try:
            validate_is_public(instance)
            instance.save()
            if should_update_universal_rev:
                instance.update_universal_rev()
            return {'ok': True}
        except ValidationError, ve:
            validation_error = ve
Ejemplo n.º 10
0
def _validate_and_set_individual_values(json_data, instance, error_dict):
    errors = None
    INVALID_KEY_MESSAGE = _("An invalid key was sent in the request")
    for identifier, value in json_data.iteritems():
        if not '.' in identifier:
            error_dict[identifier] = [INVALID_KEY_MESSAGE]
        __, field_name = dotted_split(identifier, 2, maxsplit=1)

        if not identifier.startswith('instance.config.'):
            error_dict[field_name] = [INVALID_KEY_MESSAGE]
            continue

        if field_name == 'config.annual_rainfall_inches':
            errors = _annual_rainfall_validator(value)
            if errors is None:
                _set_annual_rainfall(value, instance)
        elif field_name.startswith('config.map_feature_config'):
            errors = _map_feature_config_validator(field_name, value,
                                                   instance)
            if errors is None:
                _set_map_feature_config(field_name, value, instance)
        elif field_name.startswith('config.terms'):
            errors = _terminology_validator(field_name, value, instance)
            if errors is None:
                set_attr_on_json_field(instance, field_name, value)
        else:
            errors = [INVALID_KEY_MESSAGE]

        if errors is not None:
            error_dict[field_name] = errors
Ejemplo n.º 11
0
def _validate_and_set_individual_values(json_data, instance, error_dict):
    errors = None
    INVALID_KEY_MESSAGE = _("An invalid key was sent in the request")
    for identifier, value in json_data.iteritems():
        if not '.' in identifier:
            error_dict[identifier] = [INVALID_KEY_MESSAGE]
        __, field_name = dotted_split(identifier, 2, maxsplit=1)

        if not identifier.startswith('instance.config.'):
            error_dict[field_name] = [INVALID_KEY_MESSAGE]
            continue

        if field_name == 'config.annual_rainfall_inches':
            errors = _annual_rainfall_validator(value)
            if errors is None:
                _set_annual_rainfall(value, instance)
        elif field_name.startswith('config.map_feature_config'):
            errors = _map_feature_config_validator(field_name, value, instance)
            if errors is None:
                _set_map_feature_config(field_name, value, instance)
        elif field_name.startswith('config.terms'):
            errors = _terminology_validator(field_name, value, instance)
            if errors is None:
                set_attr_on_json_field(instance, field_name, value)
        else:
            errors = [INVALID_KEY_MESSAGE]

        if errors is not None:
            error_dict[field_name] = errors
Ejemplo n.º 12
0
 def test_get_display_value_no_unit_conversion_when_same_units(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.test.unit_only.units', 'ft')
     val, display_val = get_display_value(
         self.instance, 'test', 'unit_only', 1)
     self.assertEqual(val, 1)
     self.assertEqual(display_val, '1.0')
Ejemplo n.º 13
0
    def test_save_converts_width_when_units_differ(self):
        set_attr_on_json_field(
            self.instance, 'config.value_display.plot.width.units', 'in')
        self.plot.width = 12
        self.plot.save_with_user(self.user)

        updated_plot = Plot.objects.get(pk=self.plot.pk)
        self.assertAlmostEqual(1, updated_plot.width)
Ejemplo n.º 14
0
    def test_save_converts_diameter_when_units_differ(self):
        set_attr_on_json_field(
            self.instance, 'config.value_display.tree.diameter.units', 'ft')
        self.tree.diameter = 1
        self.tree.save_with_user(self.user)

        updated_tree = Tree.objects.get(pk=self.tree.pk)
        self.assertAlmostEqual(12, updated_tree.diameter)
Ejemplo n.º 15
0
    def test_save_does_not_convert_width_when_units_same(self):
        set_attr_on_json_field(self.instance,
                               'config.value_display.plot.width.units', 'ft')
        self.plot.width = 12
        self.plot.save_with_user(self.user)

        updated_plot = Plot.objects.get(pk=self.plot.pk)
        self.assertEqual(12, updated_plot.width)
Ejemplo n.º 16
0
    def test_save_does_not_convert_diameter_when_units_same(self):
        set_attr_on_json_field(
            self.instance, 'config.value_display.tree.diameter.units', 'in')
        self.tree.diameter = 1
        self.tree.save_with_user(self.user)

        updated_tree = Tree.objects.get(pk=self.tree.pk)
        self.assertEqual(1, updated_tree.diameter)
Ejemplo n.º 17
0
    def test_save_converts_width_when_units_differ(self):
        set_attr_on_json_field(self.instance,
                               'config.value_display.plot.width.units', 'in')
        self.plot.convert_to_display_units()
        self.plot.width = 12
        self.plot.convert_to_database_units()
        self.plot.save_with_user(self.user)

        updated_plot = Plot.objects.get(pk=self.plot.pk)
        self.assertAlmostEqual(1, updated_plot.width)
Ejemplo n.º 18
0
    def test_save_converts_diameter_when_units_differ(self):
        set_attr_on_json_field(
            self.instance, 'config.value_display.tree.diameter.units', 'ft')
        self.tree.convert_to_display_units()
        self.tree.diameter = 1
        self.tree.convert_to_database_units()
        self.tree.save_with_user(self.user)

        updated_tree = Tree.objects.get(pk=self.tree.pk)
        self.assertAlmostEqual(12, updated_tree.diameter)
Ejemplo n.º 19
0
    def test_unit_conversion(self):
        set_attr_on_json_field(self.instance, "config.value_display.tree.diameter.units", "cm")
        set_attr_on_json_field(self.instance, "config.value_display.tree.height.units", "m")
        self.instance.save()

        csv = """
        | genus   | common name | max diameter | max height |
        | g1      | wowza       | 100          | 100        |
        """

        ieid = self.run_through_commit_views(csv)
        ie = SpeciesImportEvent.objects.get(pk=ieid)
        species = ie.speciesimportrow_set.all()[0].species

        self.assertEqual(species.max_diameter, 254)  # 100 in = 254 cm
        self.assertEqual(species.max_height, 30)  # 100 ft = 30.48 m (rounded)
Ejemplo n.º 20
0
    def test_diameter_units(self):
        p1, p2, p3, p4 = self.setup_diameter_test()

        filter = json.dumps({'tree.diameter': {'MAX': 9.0}})

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        self.assertEqual(ids, {p1.pk, p2.pk, p3.pk, p4.pk})

        set_attr_on_json_field(self.instance,
                               'config.value_display.tree.diameter.units',
                               'cm')
        self.instance.save()

        filter = json.dumps({'tree.diameter': {'MAX': 9.0}})

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        # The filter range equates to 0 to 3.54.
        self.assertEqual(ids, {p1.pk})

        # This is also testing the alternative range syntax
        filter = json.dumps({
            'tree.diameter': {
                'MIN': {
                    'VALUE': 10,
                    'EXCLUSIVE': True
                },
                'MAX': {
                    'VALUE': 15.3,
                    'EXCLUSIVE': True
                }
            }
        })

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        # The filter range equates to 3.93 to 6.02 inches
        self.assertEqual(ids, {p2.pk, p3.pk})
Ejemplo n.º 21
0
    def test_unit_conversion(self):
        set_attr_on_json_field(
            self.instance, 'config.value_display.tree.diameter.units', 'cm')
        set_attr_on_json_field(
            self.instance, 'config.value_display.tree.height.units', 'm')
        self.instance.save()

        csv = """
        | genus   | common name | max diameter | max height |
        | g1      | wowza       | 100          | 100        |
        """

        ieid = self.run_through_commit_views(csv)
        ie = SpeciesImportEvent.objects.get(pk=ieid)
        species = ie.speciesimportrow_set.all()[0].species

        self.assertEqual(species.max_diameter, 254)  # 100 in = 254 cm
        self.assertEqual(species.max_height, 30)  # 100 ft = 30.48 m (rounded)
Ejemplo n.º 22
0
    def test_water_barrel_specs(self):
        """
        Rename Rain Barrel to Water Barrel, and make sure that is
        what units returns.
        """
        instance = make_instance(url_name='test-waterbarrel')
        instance.add_map_feature_types(['RainBarrel'])
        set_attr_on_json_field(instance,
                               'config.terms.RainBarrel.singular',
                               'Water Barrel')
        specs = units(None, instance)

        value_specs = specs.get('value_specs')
        self.assertEqual(len(value_specs), 5)

        rain_barrel_spec = value_specs[3]

        self.assertEqual(rain_barrel_spec.get('title'), 'Water Barrel Fields')
Ejemplo n.º 23
0
    def test_diameter_units(self):
        p1, p2, p3, p4 = self.setup_diameter_test()

        filter = json.dumps({'tree.diameter': {'MAX': 9.0}})

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        self.assertEqual(ids, {p1.pk, p2.pk, p3.pk, p4.pk})

        set_attr_on_json_field(self.instance,
                               'config.value_display.tree.diameter.units',
                               'cm')
        self.instance.save()

        filter = json.dumps({'tree.diameter': {'MAX': 9.0}})

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        # The filter range equates to 0 to 3.54.
        self.assertEqual(ids, {p1.pk})

        # This is also testing the alternative range syntax
        filter = json.dumps({'tree.diameter':
                             {'MIN': {'VALUE': 10, 'EXCLUSIVE': True},
                              'MAX': {'VALUE': 15.3, 'EXCLUSIVE': True}}})

        plots = search.Filter(filter, '', self.instance)\
                      .get_objects(Plot)

        ids = {p.pk for p in plots}
        # The filter range equates to 3.93 to 6.02 inches
        self.assertEqual(ids, {p2.pk, p3.pk})
Ejemplo n.º 24
0
 def _assert_set(self, model, field_name, value):
     set_attr_on_json_field(model, field_name, value)
     self._assert_get(model, field_name, value)
Ejemplo n.º 25
0
 def _assert_set(self, model, field_name, value):
     set_attr_on_json_field(model, field_name, value)
     self._assert_get(model, field_name, value)
Ejemplo n.º 26
0
 def test_get_storage_value(self):
     set_attr_on_json_field(
         self.instance, 'config.value_display.test.unit_only.units', 'in')
     self.assertAlmostEqual(1, get_storage_value(self.instance, 'test',
                                                 'unit_only', 12))
Ejemplo n.º 27
0
Archivo: units.py Proyecto: heath/OTM2
 def test_get_display_value_no_unit_conversion_when_same_units(self):
     set_attr_on_json_field(self.instance, "config.value_display.test.unit_only.units", "ft")
     val, display_val = get_display_value(self.instance, "test", "unit_only", 1)
     self.assertEqual(val, 1)
     self.assertEqual(display_val, "1.0")
Ejemplo n.º 28
0
Archivo: units.py Proyecto: heath/OTM2
 def test_get_display_value_conversion(self):
     set_attr_on_json_field(self.instance, "config.value_display.test.both.units", "in")
     val, display_val = get_display_value(self.instance, "test", "both", 1)
     self.assertAlmostEqual(val, 12)
     self.assertEqual(display_val, "12.000")
Ejemplo n.º 29
0
Archivo: units.py Proyecto: heath/OTM2
 def test_get_storage_value(self):
     set_attr_on_json_field(self.instance, "config.value_display.test.unit_only.units", "in")
     self.assertAlmostEqual(1, get_storage_value(self.instance, "test", "unit_only", 12))
Ejemplo n.º 30
0
 def test_uses_custom_units_and_digits(self):
     set_attr_on_json_field(self.instance, "config.value_display.plot.length.units", "m")
     set_attr_on_json_field(self.instance, "config.value_display.plot.length.digits", "3")
     self.assert_plot_length_context_value(self.observer, "field.display_value", "0.312 m")
Ejemplo n.º 31
0
 def test_get_storage_value(self):
     set_attr_on_json_field(self.instance,
                            'config.value_display.test.unit_only.units',
                            'in')
     self.assertAlmostEqual(
         1, get_storage_value(self.instance, 'test', 'unit_only', 12))