Merge branch 'bbmaster' of ssh://git.cy55.de/home/git/cybertools into bbmaster

This commit is contained in:
hplattner 2012-07-09 08:24:28 +02:00
commit 26487b5598
6 changed files with 40 additions and 11 deletions

View file

@ -43,9 +43,11 @@ class BaseRow(object):
class Row(BaseRow): class Row(BaseRow):
attributeHandlers = {} attributeHandlers = {}
cssClass = u''
def getRawValue(self, attr): def getRawValue(self, attr):
return self.attributeHandlers.get(attr, self.getContextAttr)(self, attr) return self.attributeHandlers.get(
attr, self.getContextAttr)(self, attr)
@staticmethod @staticmethod
def getContextAttr(obj, attr): def getContextAttr(obj, attr):

View file

@ -49,9 +49,9 @@ Field types
>>> from cybertools.composer.schema.interfaces import fieldTypes >>> from cybertools.composer.schema.interfaces import fieldTypes
>>> sorted(t.token for t in fieldTypes) >>> sorted(t.token for t in fieldTypes)
['checkbox', 'checkboxes', 'date', 'display', 'dropdown', 'email', 'explanation', ['checkbox', 'checkboxes', 'date', 'decimal', 'display', 'dropdown',
'fileupload', 'heading', 'html', 'list', 'number', 'password', 'radiobuttons', 'email', 'explanation', 'fileupload', 'heading', 'html', 'list', 'number',
'spacer', 'textarea', 'textline'] 'password', 'radiobuttons', 'spacer', 'textarea', 'textline']
>>> from zope.schema.vocabulary import SimpleVocabulary >>> from zope.schema.vocabulary import SimpleVocabulary
>>> textFieldTypes = SimpleVocabulary([t for t in fieldTypes if t.token in >>> textFieldTypes = SimpleVocabulary([t for t in fieldTypes if t.token in

View file

@ -18,8 +18,6 @@
""" """
Schema factory stuff. Schema factory stuff.
$Id$
""" """
from zope.component import adapts from zope.component import adapts
@ -41,7 +39,7 @@ class Email(schema.TextLine):
schema.Field.__typeInfo__ = ('textline',) schema.Field.__typeInfo__ = ('textline',)
schema.Password.__typeInfo__ = ('password',) schema.Password.__typeInfo__ = ('password',)
schema.Int.__typeInfo__ = ('number',) schema.Int.__typeInfo__ = ('number',)
schema.Float.__typeInfo__ = ('number',) schema.Float.__typeInfo__ = ('decimal',)
schema.Choice.__typeInfo__ = ('dropdown',) schema.Choice.__typeInfo__ = ('dropdown',)
@ -56,13 +54,13 @@ class SchemaFactory(object):
fieldMapping = { fieldMapping = {
#schema.TextLine: ('textline',), #schema.TextLine: ('textline',),
#schema.ASCIILine: ('textline',), #schema.ASCIILine: ('textline',),
schema.Password: ('password',), #schema.Password: ('password',),
schema.Text: ('textarea',), schema.Text: ('textarea',),
schema.ASCII: ('textarea',), schema.ASCII: ('textarea',),
schema.Date: ('date',), schema.Date: ('date',),
schema.Datetime: ('date',), schema.Datetime: ('date',),
schema.Int: ('number',), #schema.Int: ('number',),
schema.Float: ('number',), #schema.Float: ('decimal',),
schema.Bool: ('checkbox',), schema.Bool: ('checkbox',),
schema.List: ('list',), schema.List: ('list',),
#schema.Choice: ('dropdown',), #schema.Choice: ('dropdown',),

View file

@ -24,6 +24,7 @@ from datetime import datetime
from logging import getLogger from logging import getLogger
from time import strptime, strftime from time import strptime, strftime
from zope.app.form.browser.interfaces import ITerms from zope.app.form.browser.interfaces import ITerms
from zope.i18n.locales import locales
from zope.interface import implements from zope.interface import implements
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.component import adapts from zope.component import adapts
@ -262,6 +263,32 @@ class NumberFieldInstance(FieldInstance):
self.setError('invalid_number') self.setError('invalid_number')
class DecimalFieldInstance(NumberFieldInstance):
format = 'decimal'
def marshall(self, value):
return self.display(value, pattern=u'0.00;-0.00')
def display(self, value, pattern=u'#,##0.00;-#,##0.00'):
if value is None:
return ''
view = self.clientInstance.view
langInfo = view and getattr(view, 'languageInfo', None) or None
if langInfo:
locale = locales.getLocale(langInfo.language)
fmt = locale.numbers.getFormatter(self.format)
return fmt.format(value, pattern=pattern)
return '%.2f' % value
def unmarshall(self, value):
if not value:
return None
if ',' in value:
value = value.replace(',', '.')
return float(value)
class DateFieldInstance(NumberFieldInstance): class DateFieldInstance(NumberFieldInstance):
def marshall(self, value): def marshall(self, value):

View file

@ -114,7 +114,7 @@ class GridFieldInstance(ListFieldInstance):
def unmarshallRow(self, row): def unmarshallRow(self, row):
item = {} item = {}
for fi in self.columnFieldInstances: for fi in self.columnFieldInstances:
value = fi.unmarshall(row[fi.name]) value = fi.unmarshall(row.get(fi.name) or u'')
if isinstance(value, basestring): if isinstance(value, basestring):
value = value.strip() value = value.strip()
if fi.default is not None: if fi.default is not None:

View file

@ -98,6 +98,8 @@ fieldTypes = SimpleVocabulary((
FieldType('html', 'html', u'HTML Text'), FieldType('html', 'html', u'HTML Text'),
FieldType('number', 'number', u'Number', FieldType('number', 'number', u'Number',
inputRenderer='input_textline', instanceName='number'), inputRenderer='input_textline', instanceName='number'),
FieldType('decimal', 'decimal', u'Decimal',
inputRenderer='input_textline', instanceName='decimal'),
FieldType('date', 'date', u'Date', instanceName='date'), FieldType('date', 'date', u'Date', instanceName='date'),
FieldType('email', 'email', u'E-Mail Address', FieldType('email', 'email', u'E-Mail Address',
displayRenderer='display_email', inputRenderer='input_textline', displayRenderer='display_email', inputRenderer='input_textline',