Beispiel #1
0
    def doinit(self, id=None, action=None, mode=None):
        statusMap = {
            ('translate', None): 0,
            ('translate', 'result'): STATUS.TRANSLATED,
            ('format', 'reserve'): STATUS.TRANSLATED,
            ('format', 'submit'): STATUS.RESERVED,
            ('organize', 'submit'): STATUS.FORMATTED,
            ('organize', 'rejected'): STATUS.REJECTED,
            ('organize', 'done'): STATUS.DONE,
            ('reject', 'formatter'): STATUS.RESERVED,
            ('reject', 'organizer'): STATUS.FORMATTED,
            ('recover', None): STATUS.REJECTED,
            ('all', None): 0,
        }
        if (action, mode) not in statusMap.keys():
            abort(404)
        if id:
            self.data = LetsTranslate.query.filter_by(id=id).first()
            if not self.data or statusMap[(action, mode)] != self.data.status:
                raise IDNotFoundError
        else:
            self.data = None

        self.list = LetsTranslate.query.all()
        self.id = id
        self.mode = mode
        self.action = action
        self.engine = TextEngine(markup=False)
Beispiel #2
0
 def dorender(self):
     if self.tabactive == 'page':
         self.content = self.page.get()
     self.textEngine = TextEngine(markup=self.markup)
     self.text = self.textEngine.remove(self.content)
     self.length, self.swath = self.textEngine.length(self.text)
     self.text = self.textEngine.convert(self.text)
Beispiel #3
0
 def dorender(self):
     if self.tabactive == 'page':
         self.content = self.page.get()
     self.textEngine = TextEngine(markup=self.markup)
     self.text = self.textEngine.remove(self.content)
     self.length, self.swath = self.textEngine.length(self.text)
     self.text = self.textEngine.convert(self.text)
Beispiel #4
0
    def doinit(self, id=None, action=None, mode=None):
        statusMap = {
            ('translate', None): 0,
            ('translate', 'result'): STATUS.TRANSLATED,
            ('format', 'reserve'): STATUS.TRANSLATED,
            ('format', 'submit'): STATUS.RESERVED,
            ('organize', 'submit'): STATUS.FORMATTED,
            ('organize', 'rejected'): STATUS.REJECTED,
            ('organize', 'done'): STATUS.DONE,
            ('reject', 'formatter'): STATUS.RESERVED,
            ('reject', 'organizer'): STATUS.FORMATTED,
            ('recover', None): STATUS.REJECTED,
            ('all', None): 0,
        }
        if (action, mode) not in statusMap.keys():
            abort(404)
        if id:
            self.data = LetsTranslate.query.filter_by(id=id).first()
            if not self.data or statusMap[(action, mode)] != self.data.status:
                raise IDNotFoundError
        else:
            self.data = None

        self.list = LetsTranslate.query.all()
        self.id = id
        self.mode = mode
        self.action = action
        self.engine = TextEngine(markup=False)
Beispiel #5
0
    def dorender(self):
        self.textEngine = TextEngine()
        self.text = self.page.get()

        self.check_info()
        self.check_ref()
        self.check_length()
        self.check_old()

        result = AttrObject(cl=self.evaluate(not self.failed),
                            text=msg['dykchecker-summary'],
                            desc='')

        if self.failed:
            result.value = msg['dykchecker-summary-fail']
        else:
            result.value = msg['dykchecker-summary-pass']

        self.results.insert(0, result)

        self.results = enumerate(self.results)
Beispiel #6
0
class Model(Template):
    def doinit(self):
        self.tabactive = self.form.tabStatus.data
        self.isActivePage = 'active'
        self.isActiveContent = ''
        if self.tabactive == 'content':
            self.isActivePage, self.isActiveContent = self.isActiveContent, self.isActivePage
        self.markup = self.form.markup.data and (self.tabactive == 'content')

        self.text = None
        self.title = self.form.title.data
        self.content = self.form.content.data

    def dovalidate(self):
        self.site = pywikibot.Site()

        if self.tabactive == 'page':
            if self.title:
                self.page = pywikibot.Page(self.site, self.title)
                path = self.exists(self.page)

                if path is None:
                    self.error('title', msg['contribtracker-page-not-found'])
                elif path:
                    self.page = path[-1]
            else:
                self.error('title', msg['validator-require'])
        else:
            if not self.content:
                self.error('content', msg['validator-require'])

    def dorender(self):
        if self.tabactive == 'page':
            self.content = self.page.get()
        self.textEngine = TextEngine(markup=self.markup)
        self.text = self.textEngine.remove(self.content)
        self.length, self.swath = self.textEngine.length(self.text)
        self.text = self.textEngine.convert(self.text)
Beispiel #7
0
class Model(Template):
    def doinit(self):
        self.tabactive = self.form.tabStatus.data
        self.isActivePage = 'active'
        self.isActiveContent = ''
        if self.tabactive == 'content':
            self.isActivePage, self.isActiveContent = self.isActiveContent, self.isActivePage
        self.markup = self.form.markup.data and (self.tabactive == 'content')

        self.text = None
        self.title = self.form.title.data
        self.content = self.form.content.data

    def dovalidate(self):
        self.site = pywikibot.Site()

        if self.tabactive == 'page':
            if self.title:
                self.page = pywikibot.Page(self.site, self.title)
                path = self.exists(self.page)

                if path is None:
                    self.error('title', msg['contribtracker-page-not-found'])
                elif path:
                    self.page = path[-1]
            else:
                self.error('title', msg['validator-require'])
        else:
            if not self.content:
                self.error('content', msg['validator-require'])

    def dorender(self):
        if self.tabactive == 'page':
            self.content = self.page.get()
        self.textEngine = TextEngine(markup=self.markup)
        self.text = self.textEngine.remove(self.content)
        self.length, self.swath = self.textEngine.length(self.text)
        self.text = self.textEngine.convert(self.text)
Beispiel #8
0
    def dorender(self):
        self.textEngine = TextEngine()
        self.text = self.page.get()

        self.check_info()
        self.check_ref()
        self.check_length()
        self.check_old()

        result = AttrObject(cl=self.evaluate(not self.failed),
                            text=msg['dykchecker-summary'],
                            desc='')

        if self.failed:
            result.value = msg['dykchecker-summary-fail']
        else:
            result.value = msg['dykchecker-summary-pass']

        self.results.insert(0, result)

        self.results = enumerate(self.results)
Beispiel #9
0
class Model(Template):
    def doinit(self):
        self.failed = False
        self.results = []

        self.title = self.form.title.data
        self.oldid = self.form.oldid.data
        self.minlen = int(self.form.minlen.data or 2000)
        self.ratio = float(self.form.ratio.data or 2.0)
        self.maxday = int(self.form.maxday.data or 14)

    def dovalidate(self):
        self.site = pywikibot.Site('th')
        self.page = pywikibot.Page(self.site, self.title)

        path = self.exists(self.page)
        if path is None:
            self.error('title', msg['dykchecker-page-not-found'])
        elif path:
            self.page = path[-1]

        if self.oldid:
            try:
                self.oldid = self.site.loadrevid(self.oldid)
            except:
                self.error('oldid', msg['dykchecker-oldid-not-found'])

    def dorender(self):
        self.textEngine = TextEngine()
        self.text = self.page.get()

        self.check_info()
        self.check_ref()
        self.check_length()
        self.check_old()

        result = AttrObject(cl=self.evaluate(not self.failed),
                            text=msg['dykchecker-summary'],
                            desc='')

        if self.failed:
            result.value = msg['dykchecker-summary-fail']
        else:
            result.value = msg['dykchecker-summary-pass']

        self.results.insert(0, result)

        self.results = enumerate(self.results)

    def evaluate(self, val):
        if val:
            return "passed"
        else:
            self.failed = True
            return "failed"

    def neutral(self):
        return "normal"

    def check_info(self):
        self.results.append(
            AttrObject(
                cl=self.neutral(),
                value=msg['dykchecker-revision-info-value'].format(
                    self.page.latestRevision(), self.page.title(),
                    self.page.userName(), self.page.editTime()),
                text=msg["dykchecker-revision-info"],
                desc="",
            ))

    def check_ref(self):
        allrefs = self.text.count("<ref")
        self.results.append(
            AttrObject(cl=self.evaluate(allrefs > 0),
                       value=msg['dykchecker-inlineref-value'].format(allrefs),
                       text=msg["dykchecker-inlineref"],
                       desc=msg["dykchecker-inlineref-desc"]))

    def check_length(self):
        self.text = self.textEngine.remove(self.text)
        self.length, self.swath = self.textEngine.length(self.text)
        self.results.append(
            AttrObject(
                cl=self.evaluate(self.length > self.minlen),
                value=msg['dykchecker-length-value'].format(self.length),
                text=msg["dykchecker-length"],
                desc=msg["dykchecker-length-desc"].format(self.minlen),
            ))
        self.text = self.textEngine.convert(self.text)

    def check_old(self):
        now = self.site.getcurrenttime()
        oldestRev = None
        newArt = False
        if self.oldid:
            oldestRev = self.oldid
        else:
            for revision in self.page.getVersionHistory():
                if (now - revision[1]).days > self.maxday:
                    break
                oldestRev = revision
            else:
                createRev = oldestRev
                newArt = True

            if not newArt:
                createRev = self.page.getVersionHistory(reverseOrder=True,
                                                        total=1)[0]

            if newArt:
                article_creation_desc = msg[
                    "dykchecker-creation-new-desc"].format(self.maxday)
                article_creation_eval = self.evaluate(True)
            else:
                article_creation_desc = msg["dykchecker-creation-desc"]
                article_creation_eval = self.neutral()

            self.results.append(
                AttrObject(text=msg["dykchecker-creation"],
                           desc=msg[article_creation_desc],
                           cl=article_creation_eval,
                           value=msg['dykchecker-creation-value'].format(
                               createRev[0], createRev[1], createRev[2],
                               (now - createRev[1]).days)))

            if newArt:
                return

        result = AttrObject(text=msg["dykchecker-old-revision"],
                            desc=msg["dykchecker-old-revision-desc"].format(
                                self.ratio, self.maxday))

        if oldestRev is None:
            result.cl = self.evaluate(False)
            result.value = msg['dykchecker-old-revision-not-exist'].format(
                self.maxday)
        else:
            if self.oldid:
                text = oldestRev[3]
            else:
                text = self.page.getOldVersion(oldestRev[0], get_redirect=True)
            text = self.textEngine.remove(text)
            length = self.textEngine.length(text)[0]
            ratio = float(self.length) / float(length)
            result.cl = self.evaluate(ratio >= (self.ratio + 1))
            result.value = msg['dykchecker-old-revision-value'].format(
                oldestRev[0], oldestRev[1], (now - oldestRev[1]).days, length,
                ratio - 1.0)
        self.results.append(result)
Beispiel #10
0
class Model(Template):
    def doinit(self, id=None, action=None, mode=None):
        statusMap = {
            ('translate', None): 0,
            ('translate', 'result'): STATUS.TRANSLATED,
            ('format', 'reserve'): STATUS.TRANSLATED,
            ('format', 'submit'): STATUS.RESERVED,
            ('organize', 'submit'): STATUS.FORMATTED,
            ('organize', 'rejected'): STATUS.REJECTED,
            ('organize', 'done'): STATUS.DONE,
            ('reject', 'formatter'): STATUS.RESERVED,
            ('reject', 'organizer'): STATUS.FORMATTED,
            ('recover', None): STATUS.REJECTED,
            ('all', None): 0,
        }
        if (action, mode) not in statusMap.keys():
            abort(404)
        if id:
            self.data = LetsTranslate.query.filter_by(id=id).first()
            if not self.data or statusMap[(action, mode)] != self.data.status:
                raise IDNotFoundError
        else:
            self.data = None

        self.list = LetsTranslate.query.all()
        self.id = id
        self.mode = mode
        self.action = action
        self.engine = TextEngine(markup=False)

    def dovalidate(self):
        return True

    def getList(self):
        query = self.list
        if self.action == 'format':
            if self.mode == 'reserve':
                fun = lambda x: x.status == STATUS.TRANSLATED
            else:
                query = self.user.letstranslates
                fun = lambda x: x.status == STATUS.RESERVED
        elif self.action == 'organize':
            if self.mode == 'submit':
                fun = lambda x: x.status == STATUS.FORMATTED
            elif self.mode == 'rejected':
                fun = lambda x: x.status == STATUS.REJECTED
            elif self.mode == 'done':
                fun = lambda x: x.status == STATUS.DONE
        elif self.action == 'all':
            fun = lambda x: x.status != STATUS.REJECTED

        self.results = filter(fun, query)

        if self.action == 'all':
            for res in self.results:
                res.length = self.engine.length(
                    self.engine.remove(res.content_translated))[0]

    def renderEdit(self):
        if (self.action, self.mode) == ('translate', None):
            return

        if not (hasattr(self.form, 'request') and self.form.request):
            data = asDict(self.data)
            for key in data:
                if hasattr(self.form, key):
                    getattr(self.form, key).data = data[key]

        if (self.action, self.mode) == ('format', 'submit'):
            self.form.content_formatted.data = ''

        if (self.action, self.mode) == ('organize', 'submit'):
            self.form.summary.data = msg['letstranslate-summary'].format(
                data['user_translator'], self.data.user_formatter.username)

        if hasattr(self.form, 'length'):
            self.form.length.data = self.engine.length(
                self.engine.remove(self.data.content_translated))[0]

        if hasattr(self.form, 'user_formatter'):
            self.form.user_formatter.data = self.data.user_formatter.username

    def save(self):
        wikify = None
        basedata = dict(date_edited=datetime.now())
        fieldlist = []

        if self.action == 'translate':
            fieldlist = [
                'pid', 'user_translator', 'lang', 'fam', 'title_untranslated',
                'title_translated', 'content_translated', 'email'
            ]
            if self.form.wikiuser.data:
                wikify = 'user_translator'
        elif self.action == 'format':
            if self.mode == 'reserve':
                basedata['user_formatter_id'] = self.user.id
                basedata['status'] = STATUS.RESERVED
            else:
                fieldlist = ['title_translated', 'content_formatted']
                basedata['status'] = STATUS.FORMATTED
        elif self.action == 'organize':
            if self.mode == 'submit':
                fieldlist = ['title_translated', 'content_formatted']
                basedata['status'] = STATUS.DONE
            else:
                return self.data.id

        for field in fieldlist:
            basedata[field] = getattr(self.form, field).data

        if wikify:
            basedata[wikify] = u'[[User:{}]]'.format(basedata[wikify])

        if self.data:
            for key in basedata:
                setattr(self.data, key, basedata[key])
            trycommit(db)
            return self.data.id
        else:
            letstranslate = LetsTranslate(**basedata)
            db.session.add(letstranslate)
            trycommit(db)
            return letstranslate.id

    def reject(self):
        self.data.status = STATUS.REJECTED
        trycommit(db)

    def recover(self):
        self.data.status = STATUS.TRANSLATED
        trycommit(db)

    def wikifyUser(self, row, name, wikify=False):
        if name.startswith('[[User:'******']]'):
            name = name[len('[[User:'******']]')]
            wikify = True

        if wikify:
            name = u'<a href="http://{lang}.{fam}.org/wiki/User:{name}">{name}</a>'.format(
                fam=row.fam, lang=row.lang, name=name)
        return name
Beispiel #11
0
class Model(Template):
    def doinit(self):
        self.failed = False
        self.results = []

        self.title = self.form.title.data
        self.oldid = self.form.oldid.data
        self.minlen = int(self.form.minlen.data or 2000)
        self.ratio = float(self.form.ratio.data or 2.0)
        self.maxday = int(self.form.maxday.data or 14)

    def dovalidate(self):
        self.site = pywikibot.Site('th')
        self.page = pywikibot.Page(self.site, self.title)

        path = self.exists(self.page)
        if path is None:
            self.error('title', msg['dykchecker-page-not-found'])
        elif path:
            self.page = path[-1]

        if self.oldid:
            try:
                self.oldid = self.site.loadrevid(self.oldid)
            except:
                self.error('oldid', msg['dykchecker-oldid-not-found'])

    def dorender(self):
        self.textEngine = TextEngine()
        self.text = self.page.get()

        self.check_info()
        self.check_ref()
        self.check_length()
        self.check_old()

        result = AttrObject(cl=self.evaluate(not self.failed),
                            text=msg['dykchecker-summary'],
                            desc='')

        if self.failed:
            result.value = msg['dykchecker-summary-fail']
        else:
            result.value = msg['dykchecker-summary-pass']

        self.results.insert(0, result)

        self.results = enumerate(self.results)

    def evaluate(self, val):
        if val:
            return "passed"
        else:
            self.failed = True
            return "failed"

    def neutral(self):
        return "normal"

    def check_info(self):
        self.results.append(
            AttrObject(cl=self.neutral(),
                       value=msg['dykchecker-revision-info-value'].format(
                           self.page.latestRevision(),
                           self.page.title(),
                           self.page.userName(),
                           self.page.editTime()
                       ),
                       text=msg["dykchecker-revision-info"],
                       desc="",
            )
        )

    def check_ref(self):
        allrefs = self.text.count("<ref")
        self.results.append(
            AttrObject(cl=self.evaluate(allrefs > 0),
                       value=msg['dykchecker-inlineref-value'].format(allrefs),
                       text=msg["dykchecker-inlineref"],
                       desc=msg["dykchecker-inlineref-desc"]
            )
        )

    def check_length(self):
        self.text = self.textEngine.remove(self.text)
        self.length, self.swath = self.textEngine.length(self.text)
        self.results.append(
            AttrObject(cl=self.evaluate(self.length > self.minlen),
                       value=msg['dykchecker-length-value'].format(self.length),
                       text=msg["dykchecker-length"],
                       desc=msg["dykchecker-length-desc"].format(self.minlen),
            )
        )
        self.text = self.textEngine.convert(self.text)

    def check_old(self):
        now = self.site.getcurrenttime()
        oldestRev = None
        newArt = False
        if self.oldid:
            oldestRev = self.oldid
        else:
            for revision in self.page.getVersionHistory():
                if (now - revision[1]).days > self.maxday:
                    break
                oldestRev = revision
            else:
                createRev = oldestRev
                newArt = True

            if not newArt:
                createRev = self.page.getVersionHistory(reverseOrder=True, total=1)[0]

            if newArt:
                article_creation_desc = msg["dykchecker-creation-new-desc"].format(self.maxday)
                article_creation_eval = self.evaluate(True)
            else:
                article_creation_desc = msg["dykchecker-creation-desc"]
                article_creation_eval = self.neutral()

            self.results.append(
                AttrObject(text=msg["dykchecker-creation"],
                           desc=msg[article_creation_desc],
                           cl=article_creation_eval,
                           value=msg['dykchecker-creation-value'].format(
                               createRev[0], createRev[1], createRev[2], (now - createRev[1]).days
                           )
                )
            )

            if newArt:
                return

        result = AttrObject(text=msg["dykchecker-old-revision"],
                            desc=msg["dykchecker-old-revision-desc"].format(self.ratio, self.maxday))

        if oldestRev is None:
            result.cl = self.evaluate(False)
            result.value = msg['dykchecker-old-revision-not-exist'].format(self.maxday)
        else:
            if self.oldid:
                text = oldestRev[3]
            else:
                text = self.page.getOldVersion(oldestRev[0], get_redirect=True)
            text = self.textEngine.remove(text)
            length = self.textEngine.length(text)[0]
            ratio = float(self.length) / float(length)
            result.cl = self.evaluate(ratio >= (self.ratio + 1))
            result.value = msg['dykchecker-old-revision-value'].format(
                oldestRev[0], oldestRev[1], (now - oldestRev[1]).days, length, ratio - 1.0
            )
        self.results.append(result)
Beispiel #12
0
class Model(Template):
    def doinit(self, id=None, action=None, mode=None):
        statusMap = {
            ('translate', None): 0,
            ('translate', 'result'): STATUS.TRANSLATED,
            ('format', 'reserve'): STATUS.TRANSLATED,
            ('format', 'submit'): STATUS.RESERVED,
            ('organize', 'submit'): STATUS.FORMATTED,
            ('organize', 'rejected'): STATUS.REJECTED,
            ('organize', 'done'): STATUS.DONE,
            ('reject', 'formatter'): STATUS.RESERVED,
            ('reject', 'organizer'): STATUS.FORMATTED,
            ('recover', None): STATUS.REJECTED,
            ('all', None): 0,
        }
        if (action, mode) not in statusMap.keys():
            abort(404)
        if id:
            self.data = LetsTranslate.query.filter_by(id=id).first()
            if not self.data or statusMap[(action, mode)] != self.data.status:
                raise IDNotFoundError
        else:
            self.data = None

        self.list = LetsTranslate.query.all()
        self.id = id
        self.mode = mode
        self.action = action
        self.engine = TextEngine(markup=False)

    def dovalidate(self):
        return True

    def getList(self):
        query = self.list
        if self.action == 'format':
            if self.mode == 'reserve':
                fun = lambda x: x.status == STATUS.TRANSLATED
            else:
                query = self.user.letstranslates
                fun = lambda x: x.status == STATUS.RESERVED
        elif self.action == 'organize':
            if self.mode == 'submit':
                fun = lambda x: x.status == STATUS.FORMATTED
            elif self.mode == 'rejected':
                fun = lambda x: x.status == STATUS.REJECTED
            elif self.mode == 'done':
                fun = lambda x: x.status == STATUS.DONE
        elif self.action == 'all':
            fun = lambda x: x.status != STATUS.REJECTED

        self.results = filter(fun, query)

        if self.action == 'all':
            for res in self.results:
                res.length = self.engine.length(self.engine.remove(res.content_translated))[0]

    def renderEdit(self):
        if (self.action, self.mode) == ('translate', None):
            return

        if not (hasattr(self.form, 'request') and self.form.request):
            data = asDict(self.data)
            for key in data:
                if hasattr(self.form, key):
                    getattr(self.form, key).data = data[key]

        if (self.action, self.mode) == ('format', 'submit'):
            self.form.content_formatted.data = ''

        if (self.action, self.mode) == ('organize', 'submit'):
            self.form.summary.data = msg['letstranslate-summary'].format(data['user_translator'], self.data.user_formatter.username)

        if hasattr(self.form, 'length'):
            self.form.length.data = self.engine.length(self.engine.remove(self.data.content_translated))[0]

        if hasattr(self.form, 'user_formatter'):
            self.form.user_formatter.data = self.data.user_formatter.username

    def save(self):
        wikify = None
        basedata = dict(
            date_edited = datetime.now()
        )
        fieldlist = []

        if self.action == 'translate':
            fieldlist = ['pid', 'user_translator', 'lang', 'fam',
                         'title_untranslated', 'title_translated',
                         'content_translated', 'email']
            if self.form.wikiuser.data:
                wikify = 'user_translator'
        elif self.action == 'format':
            if self.mode == 'reserve':
                basedata['user_formatter_id'] = self.user.id
                basedata['status'] = STATUS.RESERVED
            else:
                fieldlist = ['title_translated', 'content_formatted']
                basedata['status'] = STATUS.FORMATTED
        elif self.action == 'organize':
            if self.mode == 'submit':
                fieldlist = ['title_translated', 'content_formatted']
                basedata['status'] = STATUS.DONE
            else:
                return self.data.id

        for field in fieldlist:
            basedata[field] = getattr(self.form, field).data

        if wikify:
            basedata[wikify] = u'[[User:{}]]'.format(basedata[wikify])

        if self.data:
            for key in basedata:
                setattr(self.data, key, basedata[key])
            trycommit(db)
            return self.data.id
        else:
            letstranslate = LetsTranslate(**basedata)
            db.session.add(letstranslate)
            trycommit(db)
            return letstranslate.id

    def reject(self):
        self.data.status = STATUS.REJECTED
        trycommit(db)


    def recover(self):
        self.data.status = STATUS.TRANSLATED
        trycommit(db)

    def wikifyUser(self, row, name, wikify=False):
        if name.startswith('[[User:'******']]'):
            name = name[len('[[User:'******']]')]
            wikify = True

        if wikify:
            name = u'<a href="http://{lang}.{fam}.org/wiki/User:{name}">{name}</a>'.format(fam=row.fam,
                                                                                           lang=row.lang,
                                                                                           name=name)
        return name