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}
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}
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)
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))
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}
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()
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()