Beispiel #1
0
    def handleSave(self, action):
        errorMsg = False
        data, errors = self.extractData()

        if 'books_folder' in data:
            booksPath = data['books_folder']
            portal = api.portal.get()
            try:
                folder = portal.restrictedTraverse(str(booksPath))
                if folder.portal_type != 'Folder':
                    errorMsg = _(u'Item at this location is not a folder!')
            except KeyError:
                errorMsg = _(u'Folder does not exist at this location!')

            if errorMsg:
                api.portal.show_message(errorMsg,
                                        request=self.request,
                                        type='error')

        if errors or errorMsg:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)
        api.portal.show_message(message=_(u'Changes saved.'),
                                request=self.request,
                                type='info')
        self.request.response.redirect(self.request.getURL())
Beispiel #2
0
class ILitTrainControlPanelView(Interface):

    books_folder = schema.TextLine(
        title=_(u'Books folder'),
        description=_(u'Folder where books are stored.'),  # noqa: E501
        required=True,
    )
Beispiel #3
0
 def handleCount(self, action):
     brains = api.content.find(portal_type='Lemma')
     api.portal.show_message(message=_(
         u'There are ${successCount} lemmas',
         mapping={u'successCount': len(brains)}),
                             request=self.request,
                             type='info')
Beispiel #4
0
 def handleCancel(self, action):
     api.portal.show_message(message=_(u'Changes canceled.'),
                             request=self.request,
                             type='info')
     self.request.response.redirect(u'{0}/{1}'.format(
         api.portal.get().absolute_url(),
         self.control_panel_view,
     ))
Beispiel #5
0
class ILemma(model.Schema):

    lemma = schema.TextLine(
        title=_(u'Lemma'),
        required=True,
    )

    count = schema.Int(
        title=_(u'Count'),
        description=_(u'How often does this lemma occur in the whole book?'),
        default=0,
        required=True,
    )

    chapters = RelationList(
        title=_(u'Chapters'),
        description=_(u'List of chapters in which this lemma occurs'),
        default=[],
        value_type=RelationChoice(
            source=CatalogSource(portal_type=['Chapter']), ),
        required=True,
    )

    partOfSpeech = schema.Text(
        title=_(u'Part of speech tag'),
        required=True,
    )

    definitions = JSONField(
        title=_(u'Definitions'),
        required=False,
    )

    relatedWords = JSONField(
        title=_(u'Related words'),
        required=False,
    )

    examples = JSONField(
        title=_(u'Examples'),
        required=False,
    )
Beispiel #6
0
class LitTrainControlPanelForm(RegistryEditForm):
    schema = ILitTrainControlPanelView
    schema_prefix = 'littrain'
    label = u'LitTrain Settings'

    @button.buttonAndHandler(_(u'Count stored lemmas'))
    def handleCount(self, action):
        brains = api.content.find(portal_type='Lemma')
        api.portal.show_message(message=_(
            u'There are ${successCount} lemmas',
            mapping={u'successCount': len(brains)}),
                                request=self.request,
                                type='info')

    @button.buttonAndHandler(_(u'Show undefined lemmas'))
    def handleFindUndefined(self, action):
        undefinedLemmas = []
        brains = api.content.find(portal_type='Lemma')
        for brain in brains:
            lemma = brain.getObject()
            if len(lemma.definitions) == 0:
                undefinedLemmas.append(lemma.title)

        message = ', '.join(undefinedLemmas)
        api.portal.show_message(message=message,
                                request=self.request,
                                type='info')

    @button.buttonAndHandler(_(u'Update all lemmas'))
    def handleUpdateAll(self, action):
        brains = api.content.find(portal_type='Lemma')
        brainCount = len(brains)
        logging.info(u'Found {0} lemmas to update ...'.format(str(brainCount)))

        counter = 0
        reportInterval = 50
        for brain in brains:
            lemma = brain.getObject()
            lemma.updateDefinitions()
            counter += 1
            if counter % reportInterval == 0:  # noqa: S001
                percentage = int(float(counter) / float(brainCount) * 100)
                logging.info(u'Updated {0}% of all lemmas'.format(percentage))

        logging.info(u'Successfully updated {0} lemmas'.format(str(counter)))

    @button.buttonAndHandler(_(u'Save'), name='save')
    def handleSave(self, action):
        errorMsg = False
        data, errors = self.extractData()

        if 'books_folder' in data:
            booksPath = data['books_folder']
            portal = api.portal.get()
            try:
                folder = portal.restrictedTraverse(str(booksPath))
                if folder.portal_type != 'Folder':
                    errorMsg = _(u'Item at this location is not a folder!')
            except KeyError:
                errorMsg = _(u'Folder does not exist at this location!')

            if errorMsg:
                api.portal.show_message(errorMsg,
                                        request=self.request,
                                        type='error')

        if errors or errorMsg:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)
        api.portal.show_message(message=_(u'Changes saved.'),
                                request=self.request,
                                type='info')
        self.request.response.redirect(self.request.getURL())

    @button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handleCancel(self, action):
        api.portal.show_message(message=_(u'Changes canceled.'),
                                request=self.request,
                                type='info')
        self.request.response.redirect(u'{0}/{1}'.format(
            api.portal.get().absolute_url(),
            self.control_panel_view,
        ))
Beispiel #7
0
class IBook(model.Schema):

    author = schema.TextLine(
        title=_(u'Author'),
        required=True,
    )