extend composer.schema for better support of customized schema factories
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2390 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
f9418c1df6
commit
b3eaf1e58f
4 changed files with 34 additions and 19 deletions
|
@ -62,19 +62,18 @@ class SchemaFactory(object):
|
||||||
fields = []
|
fields = []
|
||||||
for fname in schema.getFieldNamesInOrder(interface):
|
for fname in schema.getFieldNamesInOrder(interface):
|
||||||
field = interface[fname]
|
field = interface[fname]
|
||||||
if field.__class__ in fieldMapping:
|
info = fieldMapping.get(field.__class__) or ('textline',)
|
||||||
info = fieldMapping[field.__class__]
|
voc = (getattr(field, 'vocabulary', ()) or
|
||||||
voc = (getattr(field, 'vocabulary', ()) or
|
getattr(field, 'vocabularyName', None))
|
||||||
getattr(field, 'vocabularyName', None))
|
f = Field(field.getName(),
|
||||||
f = Field(field.getName(),
|
fieldType=info[0],
|
||||||
fieldType=info[0],
|
required=field.required,
|
||||||
required=field.required,
|
default=field.default,
|
||||||
default=field.default,
|
default_method=getattr(field, 'default_method', None),
|
||||||
default_method=getattr(field, 'default_method', None),
|
vocabulary=voc,
|
||||||
vocabulary=voc,
|
title=field.title,
|
||||||
title=field.title,
|
description=field.description,
|
||||||
description=field.description,
|
readonly=field.readonly,
|
||||||
readonly=field.readonly,
|
nostore=getattr(field, 'nostore', False),)
|
||||||
nostore=getattr(field, 'nostore', False),)
|
fields.append(f)
|
||||||
fields.append(f)
|
|
||||||
return Schema(name=interface.__name__, *fields, **kw)
|
return Schema(name=interface.__name__, *fields, **kw)
|
||||||
|
|
|
@ -50,6 +50,12 @@ class Field(Component):
|
||||||
default = None
|
default = None
|
||||||
default_method = None
|
default_method = None
|
||||||
|
|
||||||
|
fieldTypeInfo = None
|
||||||
|
instance_name = None
|
||||||
|
display_renderer = None
|
||||||
|
display_format = None
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, name, title=None, fieldType='textline', **kw):
|
def __init__(self, name, title=None, fieldType='textline', **kw):
|
||||||
assert name
|
assert name
|
||||||
self.__name__ = name
|
self.__name__ = name
|
||||||
|
@ -80,6 +86,10 @@ class Field(Component):
|
||||||
def inputRenderer(self):
|
def inputRenderer(self):
|
||||||
return self.getFieldTypeInfo().inputRenderer
|
return self.getFieldTypeInfo().inputRenderer
|
||||||
|
|
||||||
|
@property
|
||||||
|
def displayRenderer(self):
|
||||||
|
return self.display_renderer or self.getFieldTypeInfo().displayRenderer
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def storeData(self):
|
def storeData(self):
|
||||||
return not self.nostore and self.getFieldTypeInfo().storeData
|
return not self.nostore and self.getFieldTypeInfo().storeData
|
||||||
|
@ -100,10 +110,10 @@ class Field(Component):
|
||||||
return [dict(token=t.token, title=t.title or t.value) for t in voc]
|
return [dict(token=t.token, title=t.title or t.value) for t in voc]
|
||||||
|
|
||||||
def getFieldTypeInfo(self):
|
def getFieldTypeInfo(self):
|
||||||
return fieldTypes.getTerm(self.fieldType)
|
return self.fieldTypeInfo or fieldTypes.getTerm(self.fieldType)
|
||||||
|
|
||||||
def getFieldInstance(self, clientInstance=None):
|
def getFieldInstance(self, clientInstance=None):
|
||||||
instanceName = self.getFieldTypeInfo().instanceName
|
instanceName = self.instance_name or self.getFieldTypeInfo().instanceName
|
||||||
fi = component.getAdapter(self, IFieldInstance, name=instanceName)
|
fi = component.getAdapter(self, IFieldInstance, name=instanceName)
|
||||||
fi.clientInstance = clientInstance
|
fi.clientInstance = clientInstance
|
||||||
return fi
|
return fi
|
||||||
|
@ -193,9 +203,10 @@ class DateFieldInstance(NumberFieldInstance):
|
||||||
return ''
|
return ''
|
||||||
view = self.clientInstance.view
|
view = self.clientInstance.view
|
||||||
langInfo = view and view.languageInfo or None
|
langInfo = view and view.languageInfo or None
|
||||||
|
format = self.context.display_format or ('dateTime', 'short')
|
||||||
if langInfo:
|
if langInfo:
|
||||||
locale = locales.getLocale(langInfo.language)
|
locale = locales.getLocale(langInfo.language)
|
||||||
fmt = locale.dates.getFormatter('dateTime', 'short')
|
fmt = locale.dates.getFormatter(*format)
|
||||||
return fmt.format(value)
|
return fmt.format(value)
|
||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ class FieldType(SimpleTerm):
|
||||||
self.name = value
|
self.name = value
|
||||||
self.fieldRenderer = 'field'
|
self.fieldRenderer = 'field'
|
||||||
self.inputRenderer = 'input_' + self.name
|
self.inputRenderer = 'input_' + self.name
|
||||||
|
self.displayRenderer = 'display_textline'
|
||||||
self.storeData = True
|
self.storeData = True
|
||||||
self.instanceName = ''
|
self.instanceName = ''
|
||||||
for k, v in kw.items():
|
for k, v in kw.items():
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,6 +25,10 @@ $Id$
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
|
|
||||||
|
from cybertools.organize.interfaces import ITask
|
||||||
|
|
||||||
|
|
||||||
class Task(object):
|
class Task(object):
|
||||||
|
|
||||||
|
implements(ITask)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue