123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import base64
- from django.db import models
- try:
- import cPickle as pickle
- except ImportError:
- import pickle
- class SettingsGroup(models.Model):
- key = models.CharField(max_length=255, unique=True)
- name = models.CharField(max_length=255)
- description = models.TextField(null=True, blank=True)
- # Setting hydrate/dehydrate functions
- def hydrate_string(dry_value):
- return dry_value
- def dehydrate_string(wet_value):
- return wet_value
- def hydrate_bool(dry_value):
- return dry_value == 'True'
- def dehydrate_bool(wet_value):
- return 'True' if dry_value else 'False'
- def hydrate_int(dry_value):
- return int(dry_value)
- def dehydrate_int(wet_value):
- return unicode(wet_value)
- def hydrate_list(dry_value):
- return dry_value.split(',')
- def dehydrate_list(wet_value):
- return ','.join(wet_value)
- VALUE_HYDRATORS = {
- 'string': (hydrate_string, dehydrate_string),
- 'bool': (hydrate_bool, dehydrate_bool),
- 'int': (hydrate_int, dehydrate_int),
- 'list': (hydrate_list, dehydrate_list),
- }
- def hydrate_value(python_type, dry_value):
- value_hydrator = VALUE_HYDRATORS[python_type][0]
- return value_hydrator(dry_value)
- def dehydrate_value(python_type, wet_value):
- value_dehydrator = VALUE_HYDRATORS[python_type][1]
- return value_dehydrator(wet_value)
- class Setting(models.Model):
- group = models.ForeignKey('SettingsGroup')
- setting = models.CharField(max_length=255, unique=True)
- name = models.CharField(max_length=255)
- description = models.TextField(null=True, blank=True)
- legend = models.CharField(max_length=255, null=True, blank=True)
- order = models.IntegerField(default=0, db_index=True)
- dry_value = models.TextField(null=True, blank=True)
- default_value = models.TextField(null=True, blank=True)
- python_type = models.CharField(max_length=255)
- is_lazy = models.BooleanField(default=False)
- form_field = models.CharField(max_length=255)
- pickled_field_extra = models.TextField(null=True, blank=True)
- @property
- def value(self):
- return hydrate_value(self.python_type, self.dry_value)
- @value.setter
- def value(self, new_value):
- return dehydrate_value(self.python_type, self.new_value)
- @property
- def has_custom_value(self):
- return self.default_value and self.dry_value != self.default_value
- @property
- def field_extra(self):
- if self.pickled_field_extra:
- return pickle.loads(base64.decodestring(self.pickled_field_extra))
- else:
- return {}
- @field_extra.setter
- def field_extra(self, new_extra):
- pickled_extra = pickle.dumps(choices_cache, pickle.HIGHEST_PROTOCOL)
- self.pickled_field_extra = base64.encodestring(pickled_extra)
|