Have everybody call the same return_attrib function

This commit is contained in:
Roberto Rosario
2011-02-07 01:17:01 -04:00
parent 07e2ca0e7f
commit fbd5f0f213
3 changed files with 31 additions and 43 deletions

View File

@@ -1,5 +1,3 @@
import types
from django import forms from django import forms
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@@ -7,21 +5,7 @@ from django.db import models
from django.conf import settings from django.conf import settings
def return_attrib(obj, attrib, arguments=None): from common.utils import return_attrib
try:
result = reduce(getattr, attrib.split("."), obj)
if isinstance(result, types.MethodType):
if arguments:
return result(**arguments)
else:
return result()
else:
return result
except Exception, err:
if settings.DEBUG:
return "Attribute error: %s; %s" % (attrib, err)
else:
pass
class DetailSelectMultiple(forms.widgets.SelectMultiple): class DetailSelectMultiple(forms.widgets.SelectMultiple):
@@ -76,7 +60,8 @@ class DetailForm(forms.ModelForm):
else: else:
self.fields[extra_field['field']]=forms.CharField( self.fields[extra_field['field']]=forms.CharField(
label=extra_field['label'], label=extra_field['label'],
initial=getattr(self.instance, extra_field['field'], None), #initial=getattr(self.instance, extra_field['field'], None),
initial=return_attrib(self.instance, extra_field['field'], None),
widget=PlainWidget) widget=PlainWidget)
for field_name, field in self.fields.items(): for field_name, field in self.fields.items():

View File

@@ -1,34 +1,11 @@
import types
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.conf import settings
from django.template.defaultfilters import stringfilter from django.template.defaultfilters import stringfilter
from django.template import Library, Node, Variable, VariableDoesNotExist from django.template import Library, Node, Variable, VariableDoesNotExist
from common.utils import return_attrib
register = Library() register = Library()
def return_attrib(obj, attrib, arguments={}):
try:
if isinstance(obj, types.DictType) or isinstance(obj, types.DictionaryType):
return obj[attrib]
elif isinstance(attrib, types.FunctionType):
return attrib(obj)
else:
result = reduce(getattr, attrib.split("."), obj)
if isinstance(result, types.MethodType):
if arguments:
return result(**arguments)
else:
return result()
else:
return result
except Exception, err:
if settings.DEBUG:
return "Error: %s; %s" % (attrib, err)
else:
pass
@register.filter @register.filter
def object_property(value, arg): def object_property(value, arg):
return return_attrib(value, arg) return return_attrib(value, arg)

View File

@@ -1,6 +1,10 @@
import types
from django.utils.http import urlquote as django_urlquote from django.utils.http import urlquote as django_urlquote
from django.utils.http import urlencode as django_urlencode from django.utils.http import urlencode as django_urlencode
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
from django.conf import settings
def urlquote(link=None, get={}): def urlquote(link=None, get={}):
u''' u'''
@@ -38,3 +42,25 @@ def urlquote(link=None, get={}):
return u'%s%s' % (link, django_urlencode(get, doseq=True)) return u'%s%s' % (link, django_urlencode(get, doseq=True))
else: else:
return django_urlquote(link) return django_urlquote(link)
def return_attrib(obj, attrib, arguments={}):
try:
if isinstance(obj, types.DictType) or isinstance(obj, types.DictionaryType):
return obj[attrib]
elif isinstance(attrib, types.FunctionType):
return attrib(obj)
else:
result = reduce(getattr, attrib.split("."), obj)
if isinstance(result, types.MethodType):
if arguments:
return result(**arguments)
else:
return result()
else:
return result
except Exception, err:
if settings.DEBUG:
return "Attribute error: %s; %s" % (attrib, err)
else:
pass