Enhance attribute values encoding and decoding

This commit is contained in:
Mikaël Ates 2011-09-26 22:29:15 +02:00
parent 55d6e8d25f
commit e5a7a5367b
4 changed files with 36 additions and 26 deletions

View File

@ -1004,10 +1004,10 @@ def handle_operand(predicate, p_id, name, d):
a = AssertionData()
a.save()
a.set_attribute_data(data)
except:
except Exception, err:
raise Exception(\
'Unable to create assertion data of predicate %s' \
% str(p_id))
'Unable to create assertion data of predicate %s due to %s' \
% (str(p_id), str(err)))
return a

View File

@ -110,9 +110,7 @@ def get_all_attributes(user, definitions=None, **kwargs):
attr = {}
attr['name'] = key
attr['values'] = [\
a.decode('utf-8'). \
encode('ascii', 'ignore') \
for a in dic[key]]
a.decode('utf-8') for a in dic[key]]
attr['namespace'] = 'X500'
data.append(attr)
except ldap.LDAPError, err:

View File

@ -103,8 +103,10 @@ class AttributeData:
expiration_date=None):
self.definition = definition
self.values = list()
for value in values:
self.values.append(value)
if values:
for value in values:
if convert_from_string(definition, value):
self.values.append(value.encode('utf-8'))
if isinstance(source, AttributeSource):
self.source_id = source.id
else:
@ -148,7 +150,9 @@ class AttributeData:
return self.expiration_date
def get_values(self):
return self.values
if self.values:
return [value.decode('utf-8') for value in self.values]
return list()
def get_converted_values(self):
return [convert_from_string(self.definition, value) for value in self.values]
@ -163,20 +167,24 @@ class AttributeData:
return self.source_id
def add_value(self, value):
try:
self.values.append(value)
self.save()
return 0
except:
return -1
if value and convert_from_string(self.definition, value):
try:
self.values.append(value.encode('utf-8'))
self.save()
return 0
except:
return -1
return -1
def remove_value(self, value):
try:
self.values.remove(value)
self.save()
return 0
except:
return -1
if value:
try:
self.values.remove(value.encode('utf-8'))
self.save()
return 0
except:
return -1
return -1
def does_expire(self):
if self.expiration_date:
@ -185,8 +193,11 @@ class AttributeData:
return 0
def __unicode__(self):
s = "%s with values %s" % (self.get_definition(),
[v for v in self.get_values()])
s = "AttributeData"
values = self.get_values()
if values:
s += " %s with values %s" % (self.get_definition(),
[v for v in values])
source = self.get_source()
if source:
s += " from %s" % str(source)
@ -213,6 +224,7 @@ class UserAttributeProfile(models.Model):
self.data = dumps(l)
except:
return -1
self.save()
return 0
def remove_data(self, position):
@ -372,7 +384,6 @@ class UserAttributeProfile(models.Model):
The source with name %s providing attributes %s \
is unknown of the system' \
% (str(source_name), str(dictionnary[source_name])))
self.save()
return 0
def load_greedy(self):

View File

@ -2,7 +2,8 @@
DEFAULT_CHARSET = 'utf-8'
import os, sys
import os
import sys
DEBUG = True
USE_DEBUG_TOOLBAR = True
@ -142,7 +143,7 @@ def getlogger():
logger.setLevel(logging.DEBUG)
#Hack to disable too verbose database debug logs
logging.getLogger('django.db.backends').setLevel(logging.ERROR)
logging.getLogger('django.db.backends').setLevel(logging.ERROR)
formatter = \
logging.Formatter(\