def get_dummy_dexterity_value(obj, widget, data):
    value = None
    field = widget.field
    catalog = getToolByName(obj, 'portal_catalog')
    if interfaces.IChoice.providedBy(field):
        if shasattr(field, 'vocabulary') and field.vocabulary:
            vocabulary = field.vocabulary
        elif shasattr(field, 'vocabularyName') and field.vocabularyName:
            factory = component.getUtility(
                interfaces.IVocabularyFactory,
                field.vocabularyName)
            vocabulary = factory(obj)
        else:
            return

        if interfaces.IContextSourceBinder.providedBy(vocabulary):
            criteria = vocabulary.selectable_filter.criteria
            results = catalog(**criteria)
            if not len(results):
                return
            value = results[random.randint(0, len(results)-1)].getObject()
        else:
            if interfaces.ITreeVocabulary.providedBy(vocabulary) or \
                    not len(vocabulary):
                # Can't yet deal with tree vocabs
                return
            index = random.randint(0, len(vocabulary)-1)
            value = vocabulary._terms[index].value

    elif interfaces.IBool.providedBy(field):
        value = random.randint(0, 1) and True or False

    elif interfaces.ITextLine.providedBy(field):
        if HAS_USERANDGROUPSELECTIONWIDGET and \
                IUserAndGroupSelectionWidget.providedBy(widget):
            mtool = getToolByName(obj, 'portal_membership')
            mids = mtool.listMemberIds()
            value = mids[random.randint(0, len(mids)-1 or 1)]
        else:
            length = getattr(field, 'max_length', None)
            value = unicode(get_text_line()[:length])

    elif interfaces.IText.providedBy(field):
        if IWysiwygWidget.providedBy(widget):
            value = unicode(get_rich_text(data))
        else:
            value = unicode(get_text_paragraph())

    elif interfaces.IDatetime.providedBy(field):
        days = random.random()*10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    elif interfaces.IDate.providedBy(field):
        days = random.random()*10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    return value
    def populate_dexterity_type(self, obj):
        request = self.request
        view = getMultiAdapter((obj, request), name="edit")
        view.update()
        view.form_instance.render()
        fields = view.form_instance.fields._data_values

        for i in range(0, len(fields)):
            field = fields[i].field
            name = field.__name__

            if name == 'title':
                continue

            if interfaces.IChoice.providedBy(field):
                if shasattr(field, 'vocabulary') and field.vocabulary:
                    vocabulary = field.vocabulary
                elif shasattr(field,
                              'vocabularyName') and field.vocabularyName:
                    factory = getUtility(interfaces.IVocabularyFactory,
                                         field.vocabularyName)
                    vocabulary = factory(obj)
                else:
                    continue
                index = random.randint(0, len(vocabulary) - 1)
                value = vocabulary._terms[index].value

            elif interfaces.ITextLine.providedBy(field):
                value = self.get_text_line()

            elif interfaces.IText.providedBy(field):
                widget = view.form_instance.widgets._data_values[i]

                if IWysiwygWidget.providedBy(widget):
                    value = self.get_rich_text()
                else:
                    value = self.get_text_paragraph()

            elif interfaces.IDatetime.providedBy(field):
                days = random.random() * 10 * (random.randint(-1, 1) or 1)
                value = datetime.datetime.now() + datetime.timedelta(days, 0)

            elif interfaces.IDate.providedBy(field):
                days = random.random() * 10 * (random.randint(-1, 1) or 1)
                value = datetime.datetime.now() + datetime.timedelta(days, 0)

            else:
                continue
            field.set(obj, value)
    def populate_dexterity_type(self, obj):
        request = self.request
        view = getMultiAdapter((obj, request), name="edit")
        view.update()
        view.form_instance.render()
        fields = view.form_instance.fields._data_values

        for i in range(0, len(fields)):
            field = fields[i].field 
            name = field.__name__

            if name == 'title':
                continue

            if interfaces.IChoice.providedBy(field):
                if shasattr(field, 'vocabulary') and field.vocabulary:
                    vocabulary = field.vocabulary
                elif shasattr(field, 'vocabularyName') and field.vocabularyName:
                    factory = getUtility(
                                    interfaces.IVocabularyFactory, 
                                    field.vocabularyName)
                    vocabulary = factory(obj)
                else:
                    continue
                index  = random.randint(0, len(vocabulary)-1)
                value = vocabulary._terms[index].value

            elif interfaces.ITextLine.providedBy(field):
                value = self.get_text_line()

            elif interfaces.IText.providedBy(field):
                widget = view.form_instance.widgets._data_values[i]

                if IWysiwygWidget.providedBy(widget):
                   value = self.get_rich_text() 
                else:
                   value = self.get_text_paragraph() 

            elif interfaces.IDatetime.providedBy(field):
                days = random.random()*10 * (random.randint(-1,1) or 1)
                value = datetime.datetime.now() + datetime.timedelta(days,0)

            elif interfaces.IDate.providedBy(field):
                days = random.random()*10 * (random.randint(-1,1) or 1)
                value = datetime.datetime.now() + datetime.timedelta(days,0)

            else:
                continue
            field.set(obj, value)
def get_dummy_dexterity_value(obj, widget, data):
    value = None
    field = widget.field
    if interfaces.IChoice.providedBy(field):
        value = get_value_for_choice(obj, field)

    elif interfaces.ISet.providedBy(field) and \
            interfaces.IChoice.providedBy(field.value_type):
        value = get_value_for_choice(obj, field.value_type)

    elif interfaces.IBool.providedBy(field):
        value = random.randint(0, 1) and True or False

    elif interfaces.ITextLine.providedBy(field):
        if HAS_USERANDGROUPSELECTIONWIDGET and \
                IUserAndGroupSelectionWidget.providedBy(widget):
            mtool = api.portal.get_tool('portal_membership')
            mids = mtool.listMemberIds()
            value = mids[random.randint(0, len(mids) - 1 or 1)]
        else:
            length = getattr(field, 'max_length', None)
            value = unicode(get_text_line()[:length])

    elif interfaces.IText.providedBy(field):
        if IWysiwygWidget.providedBy(widget):
            value = unicode(get_rich_text(data))
        else:
            value = unicode(get_text_paragraph())

    elif HAS_PLONE_APP_TEXTFIELD and IRichText.providedBy(field):
        value = unicode(get_rich_text(data))

    elif interfaces.IDatetime.providedBy(field):
        days = random.random() * 10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    elif interfaces.IDate.providedBy(field):
        days = random.random() * 10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    return value
def get_dummy_dexterity_value(obj, widget, data):
    value = None
    field = widget.field
    if interfaces.IChoice.providedBy(field):
        value = get_value_for_choice(obj, field)

    elif interfaces.ISet.providedBy(field) and \
            interfaces.IChoice.providedBy(field.value_type):
        value = get_value_for_choice(obj, field.value_type)

    elif interfaces.IBool.providedBy(field):
        value = random.randint(0, 1) and True or False

    elif interfaces.ITextLine.providedBy(field):
        if HAS_USERANDGROUPSELECTIONWIDGET and \
                IUserAndGroupSelectionWidget.providedBy(widget):
            mtool = api.portal.get_tool('portal_membership')
            mids = mtool.listMemberIds()
            value = mids[random.randint(0, len(mids)-1 or 1)]
        else:
            length = getattr(field, 'max_length', None)
            value = unicode(get_text_line()[:length])

    elif interfaces.IText.providedBy(field):
        if IWysiwygWidget.providedBy(widget):
            value = unicode(get_rich_text(data))
        else:
            value = unicode(get_text_paragraph())

    elif HAS_PLONE_APP_TEXTFIELD and IRichText.providedBy(field):
        value = unicode(get_rich_text(data))

    elif interfaces.IDatetime.providedBy(field):
        days = random.random()*10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    elif interfaces.IDate.providedBy(field):
        days = random.random()*10 * (random.randint(-1, 1) or 1)
        value = datetime.datetime.now() + datetime.timedelta(days, 0)

    return value