src/cm/models.py
changeset 511 54d72b4da009
parent 504 b2e0186daa5b
child 512 3764ea0fa1bc
equal deleted inserted replaced
510:8bde4b6584eb 511:54d72b4da009
    24 from tagging.fields import TagField
    24 from tagging.fields import TagField
    25 import pickle
    25 import pickle
    26 from django.db import connection
    26 from django.db import connection
    27 from datetime import datetime
    27 from datetime import datetime
    28 
    28 
    29 # default conf values
       
    30 DEFAULT_CONF = {
       
    31                 'workspace_name' : 'Workspace',
       
    32                 'site_url' : settings.SITE_URL,
       
    33                 'email_from' : settings.DEFAULT_FROM_EMAIL,
       
    34                 }
       
    35 
       
    36 from cm.role_models import change_role_model
       
    37 
       
    38 class ConfigurationManager(models.Manager):
       
    39     def set_workspace_name(self, workspace_name):
       
    40         if workspace_name:
       
    41             self.set_key('workspace_name', workspace_name)
       
    42 
       
    43     def get_key(self, key, default_value=None):
       
    44         try:
       
    45             return self.get(key=key).value
       
    46         except Configuration.DoesNotExist:
       
    47             return DEFAULT_CONF.get(key, default_value)
       
    48 
       
    49     def del_key(self, key):
       
    50         try:
       
    51             self.get(key=key).delete()
       
    52         except Configuration.DoesNotExist:
       
    53             return None
       
    54         
       
    55     def set_key(self, key, value):
       
    56         conf, created = self.get_or_create(key=key)
       
    57         if created or conf.value != value:
       
    58             conf.value = value
       
    59             conf.save()
       
    60             if key == 'workspace_role_model':
       
    61                 change_role_model(value)
       
    62 
       
    63     def __getitem__(self, key):
       
    64         if not key.startswith('f_'):
       
    65             return self.get_key(key, None)
       
    66         else:
       
    67             return getattr(self,key)()
       
    68     
       
    69     def f_get_logo_url(self):
       
    70         key = self.get_key('workspace_logo_file_key', None)
       
    71         if key:
       
    72             attach = Attachment.objects.get(key=key)
       
    73             return attach.data.url
       
    74         else:
       
    75             return None 
       
    76     
       
    77 import base64
       
    78 
       
    79 class Configuration(models.Model):
       
    80     key = models.TextField(blank=False) # , unique=True cannot be added: creates error on mysql (?)
       
    81     raw_value = models.TextField(blank=False)
       
    82     
       
    83     def get_value(self):
       
    84         return pickle.loads(base64.b64decode(self.raw_value.encode('utf8')))
       
    85         
       
    86     def set_value(self, value):        
       
    87         self.raw_value = base64.b64encode(pickle.dumps(value, 0)).encode('utf8')
       
    88                 
       
    89     value = property(get_value, set_value)
       
    90                 
       
    91     objects = ConfigurationManager()
       
    92     
       
    93     def __unicode__(self):
       
    94         return '%s: %s' % (self.key, self.value)    
       
    95     
       
    96 ApplicationConfiguration = Configuration.objects     
       
    97 
       
    98 class TextManager(Manager):
    29 class TextManager(Manager):
    99     def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs):
    30     def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs):
   100         content = on_content_receive(content, format)
    31         content = on_content_receive(content, format)
   101         text = self.create(name=name, email=email, user=user, state=state)
    32         text = self.create(name=name, email=email, user=user, state=state)
   102         text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user)
    33         text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user)
   416     def remove_scope(self):
   347     def remove_scope(self):
   417         self.start_wrapper = self.end_wrapper = self.start_offset = self.end_offset = -1
   348         self.start_wrapper = self.end_wrapper = self.start_offset = self.end_offset = -1
   418         self.save()
   349         self.save()
   419         
   350         
   420 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files
   351 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files
       
   352 
       
   353 # default conf values
       
   354 DEFAULT_CONF = {
       
   355                 'workspace_name' : 'Workspace',
       
   356                 'site_url' : settings.SITE_URL,
       
   357                 'email_from' : settings.DEFAULT_FROM_EMAIL,
       
   358                 }
       
   359 
       
   360 from cm.role_models import change_role_model
       
   361 
       
   362 class ConfigurationManager(models.Manager):
       
   363     def set_workspace_name(self, workspace_name):
       
   364         if workspace_name:
       
   365             self.set_key('workspace_name', workspace_name)
       
   366 
       
   367     def get_key(self, key, default_value=None):
       
   368         try:
       
   369             return self.get(key=key).value
       
   370         except Configuration.DoesNotExist:
       
   371             return DEFAULT_CONF.get(key, default_value)
       
   372 
       
   373     def del_key(self, key):
       
   374         try:
       
   375             self.get(key=key).delete()
       
   376         except Configuration.DoesNotExist:
       
   377             return None
       
   378         
       
   379     def set_key(self, key, value):
       
   380         conf, created = self.get_or_create(key=key)
       
   381         if created or conf.value != value:
       
   382             conf.value = value
       
   383             conf.save()
       
   384             if key == 'workspace_role_model':
       
   385                 change_role_model(value)
       
   386 
       
   387     def __getitem__(self, key):
       
   388         if not key.startswith('f_'):
       
   389             return self.get_key(key, None)
       
   390         else:
       
   391             return getattr(self,key)()
       
   392     
       
   393     def f_get_logo_url(self):
       
   394         key = self.get_key('workspace_logo_file_key', None)
       
   395         if key:
       
   396             attach = Attachment.objects.get(key=key)
       
   397             return attach.data.url
       
   398         else:
       
   399             return None 
       
   400     
       
   401 import base64
       
   402 
       
   403 class Configuration(models.Model):
       
   404     key = models.TextField(blank=False) # , unique=True cannot be added: creates error on mysql (?)
       
   405     raw_value = models.TextField(blank=False)
       
   406     
       
   407     def get_value(self):
       
   408         return pickle.loads(base64.b64decode(self.raw_value.encode('utf8')))
       
   409         
       
   410     def set_value(self, value):        
       
   411         self.raw_value = base64.b64encode(pickle.dumps(value, 0)).encode('utf8')
       
   412                 
       
   413     value = property(get_value, set_value)
       
   414                 
       
   415     objects = ConfigurationManager()
       
   416     
       
   417     def __unicode__(self):
       
   418         return '%s: %s' % (self.key, self.value)    
       
   419     
       
   420 ApplicationConfiguration = Configuration.objects     
   421 
   421 
   422 class AttachmentManager(KeyManager):
   422 class AttachmentManager(KeyManager):
   423     def create_attachment(self, text_version, filename, data):
   423     def create_attachment(self, text_version, filename, data):
   424         attach = self.create(text_version=text_version)
   424         attach = self.create(text_version=text_version)
   425         ff = ContentFile(data)
   425         ff = ContentFile(data)