diff --git a/themis.fields.egg-info/SOURCES.txt b/themis.fields.egg-info/SOURCES.txt index 2cd92c1..86f1ac9 100644 --- a/themis.fields.egg-info/SOURCES.txt +++ b/themis.fields.egg-info/SOURCES.txt @@ -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 \ No newline at end of file diff --git a/themis/fields/__init__.py b/themis/fields/__init__.py index 55914ec..1d8f9e0 100644 --- a/themis/fields/__init__.py +++ b/themis/fields/__init__.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 + diff --git a/themis/fields/editors.py b/themis/fields/editors.py index e523851..d3abd8a 100644 --- a/themis/fields/editors.py +++ b/themis/fields/editors.py @@ -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') diff --git a/themis/fields/editors.zcml b/themis/fields/editors.zcml index e416035..159af36 100644 --- a/themis/fields/editors.zcml +++ b/themis/fields/editors.zcml @@ -72,4 +72,9 @@ component=".editors.RadioChoiceFactory" /> + + diff --git a/themis/fields/handlers.py b/themis/fields/handlers.py index 00923c5..28a1fc9 100644 --- a/themis/fields/handlers.py +++ b/themis/fields/handlers.py @@ -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) + diff --git a/themis/fields/handlers.zcml b/themis/fields/handlers.zcml index 9eb2d57..7cef426 100644 --- a/themis/fields/handlers.zcml +++ b/themis/fields/handlers.zcml @@ -74,4 +74,9 @@ name="themis.fields.RadioChoice" /> + + diff --git a/themis/fields/interfaces.py b/themis/fields/interfaces.py index 8760c69..6295f2f 100644 --- a/themis/fields/interfaces.py +++ b/themis/fields/interfaces.py @@ -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) diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py index 91ad89c..7882273 100644 --- a/themis/fields/widgets.py +++ b/themis/fields/widgets.py @@ -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)) + diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml index 89343f3..ffd411c 100644 --- a/themis/fields/widgets.zcml +++ b/themis/fields/widgets.zcml @@ -29,6 +29,7 @@ +