X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/1123ad09c5b6b23721639c9a1454fd80999759ee..5aa13410812d3fc4b35c039bdc3f0a2edc5185a1:/src/api/fields.py?ds=sidebyside diff --git a/src/api/fields.py b/src/api/fields.py new file mode 100644 index 000000000..4bb44dcb9 --- /dev/null +++ b/src/api/fields.py @@ -0,0 +1,34 @@ +from rest_framework import serializers +from django.core.urlresolvers import reverse + + +class AbsoluteURLField(serializers.ReadOnlyField): + def __init__(self, view_name=None, view_args=None, source='get_absolute_url', *args, **kwargs): + if view_name is not None: + source = '*' + super(AbsoluteURLField, self).__init__(*args, source=source, **kwargs) + self.view_name = view_name + self.view_args = {} + if view_args: + for v in view_args: + fields = v.split(':', 1) + self.view_args[fields[0]] = fields[1] if len(fields)>1 else fields[0] + + def to_representation(self, value): + if self.view_name is not None: + kwargs = { + arg: getattr(value, field) + for (arg, field) in self.view_args.items() + } + value = reverse(self.view_name, kwargs=kwargs) + return self.context['request'].build_absolute_uri(value) + + +class LegacyMixin(object): + def to_representation(self, value): + value = super(LegacyMixin, self).to_representation(value) + non_null_fields = getattr(getattr(self, 'Meta', None), 'legacy_non_null_fields', []) + for field in non_null_fields: + if field in value and value[field] is None: + value[field] = '' + return value