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 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)
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)
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)
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)
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
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)
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