예제 #1
0
def update_benefits(request, instance):
    conv = instance.eco_benefits_conversion or _get_default_conversions()

    valid_fields = ('currency_symbol', 'electricity_kwh_to_currency',
                    'natural_gas_kbtu_to_currency', 'h20_gal_to_currency',
                    'co2_lb_to_currency', 'o3_lb_to_currency',
                    'nox_lb_to_currency', 'pm10_lb_to_currency',
                    'sox_lb_to_currency', 'voc_lb_to_currency')

    valid_fields = [
        "benefitCurrencyConversion." + field for field in valid_fields
    ]

    updated_values = json_from_request(request)

    for field, value in updated_values.iteritems():
        if field in valid_fields:
            field_part = dotted_split(field, 2)[1]
            setattr(conv, field_part, value)
        else:
            raise Exception(
                'invalid field specified %s for benefit conversion' % field)

    try:
        conv.save()
    except ValidationError as e:
        raise ValidationError(
            package_field_errors('benefitCurrencyConversion', e))

    instance.eco_benefits_conversion = conv
    instance.update_eco_rev()
    instance.save()

    return {'ok': True}
예제 #2
0
def green_infrastructure(request, instance):
    json_data = json_from_request(request)
    new_data = {}
    increment_universal_rev = False
    for identifier, value in json_data.iteritems():
        model, field_name = dotted_split(identifier, 2, maxsplit=1)
        if field_name.startswith('config.map_feature_types') or \
           field_name.startswith('config.map_feature_config'):
            if not instance.feature_enabled('green_infrastructure'):
                raise PermissionDenied("The Green Infrastructure module is "
                                       "not enabled for this tree map")
            increment_universal_rev = True
        if field_name.startswith('config.map_feature_types'):
            __, __, mft_name = dotted_split(field_name, 3, maxsplit=2)
            if value:
                instance.add_map_feature_types([mft_name])
            else:
                instance.remove_map_feature_types([mft_name])
        else:
            new_data[identifier] = value

    error_dict = {}
    _validate_and_set_individual_values(new_data, instance, error_dict)
    _cross_validate_values(new_data, instance, error_dict)
    if error_dict:
        raise ValidationError(package_field_errors('instance',
                              ValidationError(error_dict)))
    if increment_universal_rev:
        instance.update_universal_rev()
    instance.save()
    return {'ok': True}
def green_infrastructure(request, instance):
    json_data = json_from_request(request)
    new_data = {}
    increment_universal_rev = False
    for identifier, value in json_data.iteritems():
        model, field_name = dotted_split(identifier, 2, maxsplit=1)
        if field_name.startswith('config.map_feature_types') or \
           field_name.startswith('config.map_feature_config'):
            if not instance.feature_enabled('green_infrastructure'):
                raise PermissionDenied("The Green Infrastructure module is "
                                       "not enabled for this tree map")
            increment_universal_rev = True
        if field_name.startswith('config.map_feature_types'):
            __, __, mft_name = dotted_split(field_name, 3, maxsplit=2)
            if value:
                instance.add_map_feature_types([mft_name])
            else:
                instance.remove_map_feature_types([mft_name])
        else:
            new_data[identifier] = value

    error_dict = {}
    _validate_and_set_individual_values(new_data, instance, error_dict)
    _cross_validate_values(new_data, instance, error_dict)
    if error_dict:
        raise ValidationError(
            package_field_errors('instance', ValidationError(error_dict)))
    if increment_universal_rev:
        instance.update_universal_rev()
    instance.save()
    return {'ok': True}
예제 #4
0
    def save_and_return_errors(thing, user):
        try:
            if isinstance(thing, Convertible):
                thing.convert_to_database_units()

            thing.save_with_user(user)
            return {}
        except ValidationError as e:
            return package_field_errors(thing._model_name, e)
예제 #5
0
    def save_and_return_errors(thing, user):
        try:
            if isinstance(thing, Convertible):
                thing.convert_to_database_units()

            thing.save_with_user(user)
            return {}
        except ValidationError as e:
            return package_field_errors(thing._model_name, e)
예제 #6
0
def update_user(request, user):
    new_values = json_from_request(request) or {}
    for key in new_values:
        try:
            model, field = dotted_split(key, 2, cls=ValueError)
            if model != 'user':
                raise ValidationError(
                    'All fields should be prefixed with "user."')
            if field not in USER_PROFILE_FIELDS:
                raise ValidationError(field + ' is not an updatable field')
        except ValueError:
            raise ValidationError('All fields should be prefixed with "user."')
        setattr(user, field, new_values[key])
    try:
        user.save()
        return {"ok": True}
    except ValidationError as ve:
        raise ValidationError(package_field_errors('user', ve))
예제 #7
0
def update_user(request, user):
    new_values = json_from_request(request) or {}
    for key in new_values:
        try:
            model, field = dotted_split(key, 2, cls=ValueError)
            if model != 'user':
                raise ValidationError(
                    'All fields should be prefixed with "user."')
            if field not in USER_PROFILE_FIELDS:
                raise ValidationError(field + ' is not an updatable field')
        except ValueError:
            raise ValidationError('All fields should be prefixed with "user."')
        setattr(user, field, new_values[key])
    try:
        user.save()
        return {"ok": True}
    except ValidationError as ve:
        raise ValidationError(package_field_errors('user', ve))
예제 #8
0
def update_benefits(request, instance):
    conv = instance.eco_benefits_conversion or _get_default_conversions()

    valid_fields = ('currency_symbol',
                    'electricity_kwh_to_currency',
                    'natural_gas_kbtu_to_currency',
                    'h20_gal_to_currency',
                    'co2_lb_to_currency',
                    'o3_lb_to_currency',
                    'nox_lb_to_currency',
                    'pm10_lb_to_currency',
                    'sox_lb_to_currency',
                    'voc_lb_to_currency')

    valid_fields = ["benefitCurrencyConversion." + field
                    for field in valid_fields]

    updated_values = json_from_request(request)

    for field, value in updated_values.iteritems():
        if field in valid_fields:
            field_part = dotted_split(field, 2)[1]
            setattr(conv, field_part, value)
        else:
            raise Exception(
                'invalid field specified %s for benefit conversion' % field)

    try:
        conv.save()
    except ValidationError as e:
        raise ValidationError(
            package_field_errors('benefitCurrencyConversion', e))

    instance.eco_benefits_conversion = conv
    instance.update_eco_rev()
    instance.save()

    return {'ok': True}
예제 #9
0
        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

    raise ValidationError(package_field_errors('instance', validation_error))


def add_udf_notification(instance, udf_name):
    notifications = set(instance.config.get('udf_notifications', []))
    instance.config['udf_notifications'] = list(notifications | {udf_name})
    instance.save()


def remove_udf_notification(instance, udf_name):
    notifications = set(instance.config.get('udf_notifications', []))
    instance.config['udf_notifications'] = list(notifications - {udf_name})
    instance.save()
예제 #10
0
                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

    raise ValidationError(package_field_errors('instance', validation_error))


def add_udf_notification(instance, udf_name):
    notifications = set(instance.config.get('udf_notifications', []))
    instance.config['udf_notifications'] = list(notifications | {udf_name})
    instance.save()


def remove_udf_notification(instance, udf_name):
    notifications = set(instance.config.get('udf_notifications', []))
    instance.config['udf_notifications'] = list(notifications - {udf_name})
    instance.save()