def write(): """ Renders a list of the user's wikis and a small form to create them, and handles creation of new wikis. -] title - new wiki title """ if request.method == 'POST': f = request.form title_slug = slugify(f['title']) # If a wiki with this title has already been made, redirect to it. for wiki in g.user.wikis: if title_slug == wiki.title_slug: return redirect('wiki', user_slug=g.user_name_slug, title_slug=title_slug) # If not, create a new wiki and redirect to it. wiki = Wiki(title=f['title'], title_slug=title_slug, author=g.user, publicity=0) page = Page(wiki=wiki, title=f['title'], title_slug=title_slug, content="<h1>%s</h1><p></p>" % f['title'], next_page_id=-1) models.session.commit() wiki.first_page_id = page.id models.session.commit() return redirect(url_for('wiki', user_slug=wiki.author.name_slug, wiki_slug=wiki.title_slug)) else: if not g.user: flash("You must be logged in to do that.") return redirect(url_for('main')) return render_template('write.html', wikis=g.user.wikis)
def wiki(wiki_url): flag = not current_user.is_anonymous() or "None" print flag if request.method == "POST": title = wiki_url author = current_user.username or 'Anonymous' content = request.form["content"] wiki = Wiki(title=title, author=author, content=content) wiki.save() redirect("/wiki/"+title) try: item = Wiki.objects(title=wiki_url).order_by('-updated_at')[0] except: return render_template("/wiki/newpage.html", wiki_url=wiki_url, author=author) if wiki_url == str(item.title): return render_template('/wiki/wikipage.html', flag=flag, title=item.title, content=item.content, author=item.author, created_at=item.created_at)
def post(self, page): if not self.user: self.redirect("/wiki/login") else: content = self.request.get("content") if not content: self.render("wiki-edit.html", error="We need content") else: wiki = Wiki(name = page, content = content) wiki.put() self.redirect("/wiki%s" %page)
def test_wiki(self): pages = [ WikiPage(name="home", title="Home page of my project's wiki", action="created", url="example.com/wiki/home") ] wiki = Wiki(user=self.user, project=self.project, pages=pages) self.assertEqual( wiki.render_simple(), "[My Project] Mrs Foobar updated the wiki\n" "created page home: Home page of my project's wiki. " "(example.com/wiki/home)")
def save(request, pagename): '''保存页面内容并转到更新后的页面,如果页面已存在则更新它的内容, 如果页面不存在,则新建这个页面''' content = request.POST['content'] pages = Wiki.objects.filter(pagename=pagename) if pages: pages[0].content = content pages[0].save() else: page = Wiki(pagename=pagename, content=content) page.save() return HttpResponseRedirect('/wiki/%s' % pagename)
def get(self, page): wiki = Wiki.get_by_page(page) content = '' if wiki: version = self.request.get('v') if version: versioned_wiki = Wiki.get_version(wiki, int(version)) content = versioned_wiki.content else: latest_wiki = Wiki.get_latest(wiki) content = latest_wiki.content self.render('/templates/edit.html', page=page, content=content)
def post(self, page): content = self.request.get('content') creator = self.user wiki = Wiki.get_by_page(page) if wiki: wiki.content = content wiki.put() else: new_wiki = Wiki(page=page, content=content, creator=creator) new_wiki.put() # Redirect to created/edit page self.redirect(page)
def parse_wiki(ctxt, hook): page = hook["object_attributes"] page = WikiPage(name=page["slug"], title=page["title"], action=_preterit(page["action"]), url=page["url"]) return Wiki(user=ctxt.user, project=ctxt.project, pages=[page])
def get(self, page): wiki = Wiki.get_by_page(page) print(wiki) if wiki: version = self.request.get('v') if version: versioned_wiki = Wiki.get_version(wiki, int(version)) content = versioned_wiki.content else: latest_wiki = Wiki.get_latest(wiki) content = latest_wiki.content print('v=' + version) print('page: ' + wiki.page) self.render('/templates/wiki.html', page=page, version=version, content=content) else: self.redirect('/_edit' + page)
def parse_wiki(ctxt, hook): pages = [ WikiPage(name=page["page_name"], title=page["title"], action=page["action"], url=page["html_url"]) for page in hook["pages"] ] return Wiki(user=ctxt.user, project=ctxt.project, pages=pages)
def admin_wiki_delete(request, id=None): wiki = id and Wiki.get_by_id(int(id)) or None if not wiki: raise Http404 wiki.delete() return HttpResponseRedirect('/admin/gae_wiki/')
def wiki(request, slug): ret = cache.get(Wiki.get_cache_key(slug), None) if not ret: wiki = get_object_or_404(Wiki, slug=slug) tpl = wiki.template or 'gae_wiki/wiki.html' ret = render_to_response( tpl, locals(), context_instance=RequestContext(request), ) ret = ret._get_content() if wiki.cacheable: cache.set(Wiki.get_cache_key(slug), ret, app_settings.WIKI_CACHE_TIMEOUT) return HttpResponse(ret)
def test_wiki(self): pages = [ WikiPage( name="home", title="Home page of my project's wiki", action="created", url="example.com/wiki/home" ) ] wiki = Wiki( user=self.user, project=self.project, pages=pages ) self.assertEqual( wiki.render_simple(), "[My Project] Mrs Foobar updated the wiki\n" "created page home: Home page of my project's wiki. " "(example.com/wiki/home)" )
def admin_wiki_edit(request, id=None): wiki = id and Wiki.get_by_id(int(id)) or None if request.POST: form = FormWiki(request.POST, files=request.FILES, instance=wiki) if form.is_valid(): wiki = form.save(False) wiki.author = users.get_current_user() wiki.save() return HttpResponseRedirect(reverse('gae_wiki.views.admin_index')) else: form = FormWiki(instance=wiki) return locals()
def wiki_add(): form = WikiEditForm(request.form) form.category_id.choices = [(1, u'采集&直播流'), (2, u'监控系统'), (3, u'北美SunTV'), (4, u'iSearch'), (5, u'其他')] form.category_id.choices.insert(0, (0, u'- 指定类别 -')) if form.validate_on_submit(): wiki = Wiki() form.populate_obj(wiki) wiki.created_user = current_user.name wiki.updated_user = current_user.name wiki.created_time = datetime.datetime.now() wiki.updated_time = datetime.datetime.now() wiki.updated_count = 0 db.session.add(wiki) db.session.commit() return redirect(url_for('wiki_list')) return render_template('wiki_edit.html', form=form)
def post(self, page): content = self.request.get('content') creator = self.user wiki = Wiki.get_by_page(page) latest_version = Wiki.get_latest(wiki) version = latest_version.version + 1 if latest_version else 1 if not wiki: wiki = Wiki(page=page) wiki.put() versioned_content = VersionedWikiContent(version=version, content=content, creator=creator, wiki=wiki) versioned_content.put() time.sleep(2) self.redirect(page)
def save(self, commit=True): if self.instance: wiki = self.instance else: wiki = Wiki() wiki.title = self.cleaned_data['title'] wiki.slug = self.cleaned_data['slug'] wiki.description = self.cleaned_data['description'] wiki.text = self.cleaned_data['text'] wiki.format = self.cleaned_data['format'] wiki.published = self.cleaned_data['published'] wiki.template = self.cleaned_data['template'] wiki.show_in_rss = self.cleaned_data['show_in_rss'] wiki.cacheable = self.cleaned_data['cacheable'] wiki.show_in_rss = self.cleaned_data['show_in_rss'] wiki.disable_comments = self.cleaned_data['disable_comments'] if self.cleaned_data['temp_tags']: wiki.tags = map(lambda tag: db.Category(tag), self.cleaned_data['temp_tags'].split(' ')) else: wiki.tags = [] if commit: wiki.save() return wiki
def get(self, page): wiki = Wiki.get_by_page(page) wiki_versions = wiki.get_all_versions(wiki) self.render('/templates/history.html', page=page, wiki_versions=wiki_versions)
def items(self): return Wiki.all().order('-pub_date').filter('show_in_rss =', True)[:10]
def init_wiki_items(): if Wiki.objects.count() == 0: Wiki.objects.bulk_create([ Wiki(abbr='TEAM', expression='产品团队', description='''产品团队(Product Team), 是以产品为单位,管理产品生命周期的一组人员。 备注: 本平台所提到的团队均指产品团队。 '''), Wiki(abbr='PM', expression='项目经理', description='''项目经理(Project Manager), 是由组织委派,领导团队来实现项目目标的人。 备注: 不同的组织,会有不同的安排,担任项目经理的人员可能有:项目经理(Project Manager)、项目群经理(Program Manager)、产品经理、版本经理、产品技术主管、Scrum Master、开发Leader等; 请根据您所在组织的惯常做法进行安排。 '''), Wiki(abbr='ARCHITECT', expression='架构师', description= '''架构师(Architect), 是制定解决方案、切分产品功能模块、制定模块之间集成关系、搭建产品整体核心框架的人。 '''), Wiki( abbr='DEV_REP', expression='开发代表', description= '''开发代表(Development Representative), 负责开发/编码的主要程序设计人员或开发Leader。 '''), Wiki( abbr='TEST_REP', expression='测试代表', description='''测试代表(Test Representative), 负责测试的主要测试人员或测试Leader。 '''), Wiki( abbr='SECURITY_REVIEWER', expression='安全评审员', description='''安全评审员(Security Reviewer), 审核安全自检结果,进行综合安全风险评估的人。 建议由来自安全团队的专职网络安全人员担任,对项目组的自检结果进行审核(安全评审员不承担自检任务); 没有专职安全人员的组织,可在产品团队内部,指定一名具有安全设计经验的人员兼职担任此角色,但尽量不要与产品安全代表相同。''' ), Wiki( abbr='OP_REP', expression='产品运维代表', description= '''产品运维代表(Product Operation Representative), 承担产品的发布/实施/安全配置的人。 备注:运维代表来自运维/实施团队,承担具体的发布/实施任务。 '''), Wiki(abbr='QA', expression='质量保障人员', description= '''质量保障人员(Quality Assuarance, QA), 承担项目流程辅导、阶段切换审批等工作。 备注: 建议由来自项目管理办公室(PMO)的人员或者负责过程控制的人员担任; 本平台中,QA负责审核项目每个阶段的任务完成情况及执行阶段切换。 如果您所在组织中没有设立QA角色,可以配置成团队的Leader/负责人,由团队的Leader/负责人来执行流程审批。''' ), Wiki(abbr='QC', expression='质量控制', description='''质量控制代表(Quality Control, QC)。 本平台中QC负责对技术评审、同行评审等质量控制活动的意见进行审核。 '''), Wiki(abbr='MANDAY_COST', expression='平均人天成本', description= '''平均人天成本,即组织支出的平均每人每天的人力资源成本(含税前工资、保险、公积金、办公租金、物业、水电、员工福利等)。 备注: 平均人天成本,因所在地区、人员构成不同而有所不同; 如对资金、预算不敏感,保留默认值即可; 如需计入,可按照平均税后日薪的两倍进行估算,即: 平均人天成本 = 平均税后日薪 × 2 '''), Wiki( abbr='SPONSOR', expression='项目赞助人', description='''项目赞助人(Sponsor),为项目提供资源(人力、物力、预算)的人,通常为管理层具有决策权的人。 项目中的主要职责:为项目提供资源,决策立项,授权项目经理使用组织资源以达成项目目标,验收结果确认。 除精简项目管理流程不需要Sponsor参与决策外,其它项目管理流程需要Sponsor参与。 '''), Wiki(abbr='BUSINESS_REP', expression='业务代表', description='''业务代表: 代表业务确认需求的人。 项目中的主要职责:审核项目需求分析,确保项目组与业务对需求的理解保持一致。 '''), Wiki(abbr='CHIEF_REVIEWER', expression='主审人', description= '''主审人:专家评审团(负责对方案设计的功能、性能、安全、集成、可维护性等进行把关)的第一负责人,技术评审活动中的决策者。 项目中的职责:技术评审活动中汇总各领域专家(含主审人自己)的意见,给出评审决策意见(通过/返回改进)。 '''), Wiki(abbr='PEER_REVIEWER', expression='同行评审代表', description='''同行评审代表(Peer reviewer):具有丰富经验的领域(行业)内专家或资深人士。 一般选择在公司内曾经做过类似项目的同事担任。 项目中的职责:评审产品方案设计,给出改进意见。 '''), Wiki(abbr='PURCHASING_REP', expression='采购代表', description='''采购代表:由采购部门派出,对接本项目相关采购活动的采购人员。 项目中的职责:指导项目组遵循采购流程,受理采购需求。 如果项目不涉及采购,本角色填写项目经理自己即可。 '''), Wiki(abbr='USER_REP', expression='用户代表', description='''用户代表:由员工担任,但以最终用户身份试用、体验待交付产品的人。 项目中的职责:以最终用户身份试用、体验待交付产品,对UAT测试结果进行确认。 '''), Wiki(abbr='STAKEHOLDER', expression='干系人', description= '''干系人(Stakeholder):非项目成员,但跟项目有利益关系的人,需要知道项目的概况(主要是进展)。 项目的例行报告(周报/月报等)需抄送项目干系人。该角色可选(留空)。 '''), Wiki(abbr='HARDWARE_COST', expression='硬件预算', description='''硬件预算:服务器、存储或其它设备的预算 '''), Wiki(abbr='SOFTWARE_COST', expression='软件预算', description='''软件预算:采购软件包的一次性费用以及第一年License授权的费用 '''), Wiki(abbr='OTHER_COST', expression='其它费用', description='''其它费用:除已列出的费用外,其它需要在项目中支出的费用。 '''), Wiki(abbr='ANNUAL_LICENSE_COST', expression='每年License费用', description= '''每年License费用:预估每年用于采购License的支出。不属于项目内预算,但属于运维成本,供决策参考。 '''), Wiki(abbr='ANNUAL_OTHER_COST', expression='每年其它费用', description= '''每年其它费用:除License外,预估的每年例行支出(硬件维保等),不属于项目内预算,属于运维成本,供决策参考 '''), ]) return
def get_last_wiki_by_name(wiki_name): return Wiki.all().filter("name", wiki_name).order("-created").get()
def wiki_sequence(request): wikis = Wiki.all().order('sequence').filter('show_in_rss =', True) return locals()
def admin_index(request): list = Wiki.all() return locals()
def get_wiki_history(wiki_name): return list(Wiki.all().filter("name", wiki_name).order("-created"))
def save(self, commit=True): if self.instance: wiki = self.instance else: wiki = Wiki() wiki.title = self.cleaned_data["title"] wiki.slug = self.cleaned_data["slug"] wiki.description = self.cleaned_data["description"] wiki.text = self.cleaned_data["text"] wiki.format = self.cleaned_data["format"] wiki.published = self.cleaned_data["published"] wiki.template = self.cleaned_data["template"] wiki.show_in_rss = self.cleaned_data["show_in_rss"] wiki.cacheable = self.cleaned_data["cacheable"] wiki.show_in_rss = self.cleaned_data["show_in_rss"] wiki.disable_comments = self.cleaned_data["disable_comments"] if self.cleaned_data["temp_tags"]: wiki.tags = map(lambda tag: db.Category(tag), self.cleaned_data["temp_tags"].split(" ")) else: wiki.tags = [] if commit: wiki.save() return wiki
def admin_wiki_export_all(request): items = Wiki.all().order('title') #ret = render_to_string('gae_wiki/export_all.txt', locals()) ret = serialize(items) return HttpResponse(ret, mimetype='text/xml')
def get_wiki(wiki_name, wiki_id): if wiki_id.isdigit(): wiki = Wiki.by_id(int(wiki_id)) if wiki: return wiki return get_last_wiki_by_name(wiki_name)