Commit 9162d08f authored by Christos Stavrakakis's avatar Christos Stavrakakis
Browse files

cyclades: Add SeparatedValuesList field

Add custom field for storing a list of values in DB. The values
are stored as a TextField separated by a delimiter.
parent 522fb634
# Copyright 2013 GRNET S.A. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# The views and conclusions contained in the software and documentation are
# those of the authors and should not be interpreted as representing official
# policies, either expressed or implied, of GRNET S.A.
from django.db import models
from south.modelsinspector import add_introspection_rules
class SeparatedValuesField(models.TextField):
description = ("Stores list of values as a TextField,"
" separated by a delimiter.")
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
self.delimiter = kwargs.pop('delimiter', ',')
super(SeparatedValuesField, self).__init__(*args, **kwargs)
def to_python(self, value):
if not value:
return
if isinstance(value, list):
return value
return value.split(self.delimiter)
def get_db_prep_value(self, value):
if not value:
return
assert(isinstance(value, list) or isinstance(value, tuple))
return self.delimiter.join([unicode(s) for s in value])
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_db_prep_value(value)
add_introspection_rules([
(
[SeparatedValuesField], # Class(es) these apply to
[], # Positional arguments (not used)
{ # Keyword argument
"delimiter": ["delimiter", {"default": ","}],
},
),
], ["^synnefo\.db\.fields\.SeparatedValuesField"])
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment