Add a "Related Document" field type
This commit is contained in:
parent
f80581f331
commit
8c0211008e
|
@ -11,5 +11,6 @@ themis/fields/__init__.py
|
|||
themis/fields/editors.py
|
||||
themis/fields/handlers.py
|
||||
themis/fields/interfaces.py
|
||||
themis/fields/marshaler.py
|
||||
themis/fields/vocabs.py
|
||||
themis/fields/widgets.py
|
|
@ -4,6 +4,8 @@ from zope.schema import Choice, Field, List, Date, Orderable
|
|||
from zope.schema.interfaces import IFromUnicode, IChoice
|
||||
from zope.schema.interfaces import WrongType
|
||||
|
||||
from z3c.relationfield.schema import RelationChoice, RelationList
|
||||
|
||||
from themis.fields.interfaces import ICommission
|
||||
from themis.fields.interfaces import ICommissions
|
||||
from themis.fields.vocabs import CommissionsSource
|
||||
|
@ -23,10 +25,14 @@ from themis.fields.vocabs import ContactsSource
|
|||
from themis.fields.interfaces import IDateOnly
|
||||
from themis.fields.interfaces import IRadioChoice
|
||||
from themis.fields.interfaces import ISubjects, ILegisSession, IList
|
||||
from themis.fields.interfaces import IRelatedDoc
|
||||
|
||||
from themis.fields.vocabs import SubjectsSource
|
||||
from themis.fields.vocabs import LegislativeSessionsSource
|
||||
|
||||
from plone.formwidget.contenttree import ObjPathSourceBinder
|
||||
from z3c.relationfield.schema import Relation
|
||||
|
||||
|
||||
class Commission(Field):
|
||||
implements(ICommission, IChoice)
|
||||
|
@ -331,3 +337,18 @@ class RadioChoice(Choice):
|
|||
implements(IRadioChoice)
|
||||
|
||||
|
||||
class RelatedDoc(Relation):
|
||||
implements(IRelatedDoc)
|
||||
|
||||
def __init__(self, **kw):
|
||||
super(RelatedDoc, self).__init__(**kw)
|
||||
self.vocabulary = ObjPathSourceBinder()
|
||||
|
||||
source = property(lambda self: self.vocabulary)
|
||||
|
||||
def bind(self, object):
|
||||
"""See zope.schema._bootstrapinterfaces.IField."""
|
||||
clone = super(RelatedDoc, self).bind(object)
|
||||
clone.vocabulary = self.vocabulary(object)
|
||||
return clone
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ from themis.fields import Contact, Contacts
|
|||
from themis.fields import Deputy, Deputies
|
||||
from themis.fields import Ministry, Ministries
|
||||
from themis.fields import DeputyOrMinistry, DeputiesOrMinistries
|
||||
from themis.fields import RelatedDoc
|
||||
from plone.schemaeditor.fields import FieldFactory
|
||||
|
||||
@interface.implementer(editor_ifaces.IFieldEditFormSchema)
|
||||
|
@ -41,3 +42,5 @@ LegisSessionFactory = FieldFactory(LegisSession, u'Legislative Session')
|
|||
DateOnlyFactory = FieldFactory(DateOnly, u'Date')
|
||||
|
||||
RadioChoiceFactory = FieldFactory(RadioChoice, u'Choice (radio)', values=[])
|
||||
|
||||
RelatedDocFactory = FieldFactory(RelatedDoc, u'Related Document')
|
||||
|
|
|
@ -72,4 +72,9 @@
|
|||
component=".editors.RadioChoiceFactory"
|
||||
/>
|
||||
|
||||
<utility
|
||||
name="themis.fields.RelatedDoc"
|
||||
component=".editors.RelatedDocFactory"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -10,6 +10,7 @@ if HAVE_SUPERMODEL:
|
|||
from zope.interface import implements
|
||||
from zope.component import adapts
|
||||
from plone.supermodel.interfaces import IToUnicode
|
||||
from plone.app.relationfield.widget import RelationChoiceHandler
|
||||
|
||||
from themis.fields import Commission, Commissions
|
||||
from themis.fields import DateOnly
|
||||
|
@ -20,6 +21,7 @@ if HAVE_SUPERMODEL:
|
|||
from themis.fields import DeputyOrMinistry, DeputiesOrMinistries
|
||||
from themis.fields import Contact, Contacts
|
||||
from themis.fields import LegisSession
|
||||
from themis.fields import RelatedDoc
|
||||
|
||||
class CommissionHandler_(BaseHandler):
|
||||
pass
|
||||
|
@ -91,4 +93,9 @@ if HAVE_SUPERMODEL:
|
|||
|
||||
RadioChoiceHandler = RadioChoiceHandler_(RadioChoice)
|
||||
|
||||
class RelatedDocHandler_(BaseHandler):
|
||||
pass
|
||||
|
||||
RelatedDocHandler = RelatedDocHandler_(RelatedDoc)
|
||||
|
||||
|
||||
|
|
|
@ -74,4 +74,9 @@
|
|||
name="themis.fields.RadioChoice"
|
||||
/>
|
||||
|
||||
<utility
|
||||
component=".handlers.RelatedDocHandler"
|
||||
name="themis.fields.RelatedDoc"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -3,6 +3,7 @@ from zope.interface import Interface
|
|||
from zope.schema.interfaces import IChoice, IField, IList, IDate
|
||||
from zope import schema
|
||||
from z3c.form.interfaces import IOrderedSelectWidget
|
||||
from z3c.relationfield.interfaces import IRelation
|
||||
|
||||
class ICommission(IField):
|
||||
'''Field containing a unicode string without newlines that is a commission.'''
|
||||
|
@ -82,3 +83,13 @@ class IRadioChoice(IChoice):
|
|||
required=False,
|
||||
values=[])
|
||||
|
||||
class IRelatedDoc(IRelation):
|
||||
default = schema.Text(
|
||||
title=IField['default'].title,
|
||||
description=IField['default'].description,
|
||||
required=False)
|
||||
|
||||
missing_value = schema.Text(
|
||||
title=IField['missing_value'].title,
|
||||
description=IField['missing_value'].description,
|
||||
required=False)
|
||||
|
|
|
@ -18,6 +18,7 @@ from themis.fields.interfaces import IDeputy, IDeputies
|
|||
from themis.fields.interfaces import IMinistry, IMinistries
|
||||
from themis.fields.interfaces import IDeputyOrMinistry, IDeputiesOrMinistries
|
||||
from themis.fields.interfaces import IOrderedSelectAndAddWidget
|
||||
from themis.fields.interfaces import IRelatedDoc
|
||||
|
||||
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
|
||||
from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget
|
||||
|
@ -27,6 +28,7 @@ from z3c.form.browser.orderedselect import OrderedSelectWidget
|
|||
from z3c.form.browser.checkbox import CheckBoxWidget
|
||||
from z3c.form.browser.select import SelectWidget
|
||||
from z3c.form.browser.radio import RadioWidget
|
||||
from plone.formwidget.contenttree.widget import ContentTreeWidget
|
||||
|
||||
@adapter(ICommission, IFormLayer)
|
||||
@implementer(IFieldWidget)
|
||||
|
@ -181,3 +183,9 @@ class OrderedSelectAndAddWidget(OrderedSelectWidget):
|
|||
self._bound_source = source
|
||||
return self._bound_source
|
||||
|
||||
@adapter(IRelatedDoc, IFormLayer)
|
||||
@implementer(IFieldWidget)
|
||||
def RelatedDocFieldWidget(field, request):
|
||||
'''IFieldWidget factory for RadioChoiceWidget'''
|
||||
return FieldWidget(field, ContentTreeWidget(request))
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
<adapter factory=".widgets.DateOnlyFieldWidget"/>
|
||||
<adapter factory=".widgets.DateFieldWidget"/>
|
||||
<adapter factory=".widgets.RadioChoiceFieldWidget"/>
|
||||
<adapter factory=".widgets.RelatedDocFieldWidget"/>
|
||||
|
||||
<class class=".widgets.OrderedSelectAndAddWidget">
|
||||
<require
|
||||
|
|
Reference in New Issue