def setup_database(app): with app.app_context(): db.create_all() home = Page() home.name = "Home" contact = Page() contact.name = Page() db.session.add(home) db.session.add(contact) db.session.commit()
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): if not page: # it's a new page page = Page() page.name = form.cleaned_data['name'] page.user = request.user page.created_on = datetime.now() page.save() page_revision = PageRevision(content = form.cleaned_data['content'], edit_reason = form.cleaned_data['edit_reason'], user = request.user, revision_for = page) page_revision.save() page.current_revision = page_revision page.save() else: # it's an edit on an old page page.name = form.cleaned_data['name'] revision_count = PageRevision.objects.filter(revision_for = page).count() new_rev = revision_count + 1 page_revision = PageRevision(content = form.cleaned_data['content'], edit_reason = form.cleaned_data['edit_reason'], user = request.user, revision_for = page, revision_num = new_rev) page_revision.save() page.current_revision = page_revision page.modified_on = datetime.now() page.user = request.user page.save() return HttpResponseRedirect('../../%s/' % page.name) else: if page: page_dict = page.__dict__ # we have phased out page.content, # instead page will be a reference to current revision content. # but for the purposes of the form, we'll emulate it (ugly hack!) page_dict['content'] = page.current_revision.content form = PageForm(initial=page_dict) else: form = PageForm(initial={'name': name}) context = RequestContext(request) return render_to_response('wiki/edit.html', {'form': form}, context)
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): if not page: page = Page() page.name = form.cleaned_data['name'] page.save() revision = Revision() revision.page = page revision.content = form.cleaned_data['content'] if request.user.is_authenticated(): revision.editor = request.user revision.save() return HttpResponseRedirect(page.get_absolute_url()) else: if page: revision = page.get_latest_revision() form = PageForm(initial={'name': page.name, 'content': revision.content}) else: form = PageForm(initial={'name': name}) ctx = { 'form': form } return render_to_response('wiki/edit.html', ctx, context_instance=RequestContext(request))
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): if not page: page = Page() page.name = form.cleaned_data['name'] page.content = form.cleaned_data['content'] page.save() return redirect(view, name=page.name) else: if page: form = PageForm(initial=page.__dict__) else: form = PageForm(initial={'name': name}) context = { 'form': form, } return render_to_response('wiki/edit.html', RequestContext(request, context))
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: try: page = Page.objects.get(name=name.title()) except Page.DoesNotExist: page = Page(name=name) if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): page.name = form.cleaned_data['name'] page.content = form.cleaned_data['content'] if not page.order: page.order = Page.objects.latest('order').order + 1 page.save() return redirect(view, name=page.name) else: if page: form = PageForm(initial=page.__dict__) else: form = PageForm(initial={'name': name}) context = {'form': form, 'page': page, 'pages': Page.objects.all()} return render_to_response('wiki/edit.html', RequestContext(request, context))
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): if not page: page = Page() page.name = form.cleaned_data['name'] page.content = form.cleaned_data['content'] page.save() return HttpResponseRedirect('../../%s/' % page.name) else: if page: form = PageForm(initial=page.__dict__) else: form = PageForm(initial={'name': name}) return render_to_response('wiki/edit.html', { 'form': form, 'admin': is_admin(request), 'user': get_user(request), 'navbar':Page.objects.get(name='NavBar'), })
def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == "POST": form = PageForm(request.POST) if form.is_valid(): if not page: page = Page() page.name = form.cleaned_data["name"] page.content = form.cleaned_data["content"] page.save() return HttpResponseRedirect("../../%s/" % page.name) else: if page: form = PageForm(initial=page.__dict__) else: form = PageForm(initial={"name": name}) return render_to_response( "wiki/edit.html", { "form": form, "admin": is_admin(request), "user": get_user(request), "navbar": Page.objects.get(name="NavBar"), }, )
def testCreater(): if request.method == 'GET': form = TestCreaterForm() # 创建可选择科目数组 choices = [] subjects = Subject.query.all() for subject in subjects: choices.append((subject.id, subject.name)) form.subject.choices = choices # 创建可选择班级数组 choices = [] classes = Class.query.all() for class_ in classes: choices.append((class_.id, class_.name)) form.class_.choices = choices return render_template("教师创建考试页面.html", form=form) else: form = TestCreaterForm(request.form) page_structure = {} page_structure["选择题"] = form.choice_question_number.data page_structure["填空题"] = form.fill_blank_question_number.data page_structure["判断题"] = form.true_false_question_number.data page_structure["解答题"] = form.free_response_question_number.data subject_id = form.subject.data classes = form.class_.data for class_id in classes: class_ = Class.query.get(int(class_id)) students = class_.students for student in students: student_subject = StudentSubject.query.filter_by( student_id=student.id, subject_id=subject_id).first() if student_subject is None: student_subject = StudentSubject(student_id=student.id, subject_id=subject_id) db.session.add(student_subject) db.session.commit() teacher_s_s = TeacherSS.query.filter_by( student_subject_id=student_subject.id, teacher_id=session["uid"]).first() if teacher_s_s is None: teacher_s_s = TeacherSS( student_subject_id=student_subject.id, teacher_id=session["uid"]) db.session.add(teacher_s_s) # db.session.commit() page = Page() page.name = form.name.data page.date = form.date.data page.time_start = form.start_time.data minute_num = form.time_length.data page.time_length = minute_num * 60 page.level = form.level.data page.structure = json.dumps(page_structure) teacher_s_s.pages.append(page) db.session.commit() flash("考试计划创建成功") return redirect("/testList")
def post(self, ident=None): if ident: source = Page.fetch_by_key(ident) else: source = Page() source.name = self.request.get('name', '') source.url = self.request.get('url', '') source.phrases = self.request.get('phrases', '') key = source.put() self.response.write(key.urlsafe())
def show_pages(): if request.method == "POST" and g.site.domain == g.user: name = request.form['name'] if name: p = Page() p.name = name p.slug = slugify(name) p.site = g.site.domain p.save() return redirect(url_for(".edit_page", slug=p.slug)) pages = Page.objects(site=g.site.domain) return render_template('pages.html', pages=pages)
def post(self): current_user = users.get_current_user() if not current_user: return self.redirect('/') user = User.get_by_id(current_user.user_id()) if not user: return self.redirect('/register') try: page = Page(parent=user.key) page.user = user.key page.url = self.request.get('url') page.name = self.request.get('name') page.put() self.redirect('/') except db.Error: self.redirect('/')
def edit(request, name): if not request.user.is_authenticated(): raise Http404 page = get(Page, name, True) if request.method == "POST": form = PageForm(request.POST) if form.is_valid(): if not page: page = Page() page.name = form.cleaned_data["name"] page.content = form.cleaned_data["content"] page.author = request.user page.tags = " ".join(filter(None, name.split("/"))) page.save() return HttpResponseRedirect("%s" % urlquote(page.get_path())) else: if page: form = PageForm(initial=page.__dict__) else: form = PageForm(initial={"name": name}) return render_to_response("edit.html", {"form": form})
def parse_xml(self, path, module): logger.debug("parsing xml: %s", path) # lookup tables lookup = {} lookup["encounter"] = {} lookup["page"] = {} lookup["map"] = {} lookup["image"] = {} lookup["npc"] = {} lookup["quest"] = {} # arrays pages = [] maps = [] groups = [] encounters = [] # xml tree tree = ElementTree.parse(path) root = tree.getroot() # NPCS logger.info("parsing npcs") for category in root.findall("./npc/category"): for node in category.findall("*"): tag = node.tag name = node.find("name").text npc = NPC() npc.name = name lookup["npc"][tag] = npc # PAGES logger.info("parsing pages") parent = Group() parent.name = "Story" parent.slug = slugify(parent.name) groups.append(parent) for category in root.findall("./encounter/category"): group = Group() group.name = category.get("name") group.slug = slugify(group.name) group.parent = parent if group.name == None or group.name == "": group = parent else: groups.append(group) # get all pages for node in category.findall("*"): # tag tag = node.tag # create page page = Page() page.meta["tag"] = tag page.name = node.find("name").text page.slug = slugify(page.name) page.content = ElementTree.tostring( node.find("text"), encoding='utf-8', method='xml').decode('utf-8') page.parent = group pages.append(page) lookup["page"][tag] = page # QUESTS logger.info("parsing quests") parent = Group() parent.name = "Quests" parent.slug = slugify(parent.name) groups.append(parent) # some modules got, so use this instead for node in root.findall("./quest/*/*"): # for node in root.findall("./quest/*"): # tag tag = node.tag # create quest page = Page() page.meta["tag"] = id page.name = node.find("name").text page.slug = slugify(page.name) page.content = ElementTree.tostring(node.find("description"), encoding='utf-8', method='xml').decode('utf-8') cr = node.find("cr").text if node.find("cr") else "" xp = node.find("xp").text if node.find("xp") else "" page.content += '<p><strong>CR:</strong> ' + cr + ' <strong>XP:</strong> ' + xp + '</p>' page.parent = parent pages.append(page) lookup["quest"][tag] = page # sort pages_sorted = humansorted(pages, key=lambda x: x.name) # MAPS & IMAGES logger.info("parsing images and maps") parent = Group() parent.name = "Maps & Images" parent.slug = slugify(parent.name) groups.append(parent) for category in root.findall("./image/category"): group = Group() group.name = category.get("name") group.slug = slugify(group.name) group.parent = parent if group.name == None or group.name == "": group = parent else: groups.append(group) for node in category.findall("*"): # tag tag = node.tag # create image image = Image() image.tag = tag image.bitmap = node.find("./image/bitmap").text.replace( "\\", "/") image.name = node.find("name").text lookup["image"][tag] = image markers = [] # get shortcouts (markers) for shortcut in node.findall("./image/shortcuts/shortcut"): # create marker marker = Marker() marker.x = shortcut.find("x").text marker.y = shortcut.find("y").text shortcut_ref = shortcut.find("recordname").text.replace( "encounter.", "").replace("@*", "") page = None if shortcut_ref in lookup["page"]: page = lookup["page"][shortcut_ref] # remove chapter numbers from page name # maybe use a regex? name = page.name if " " in page.name: first, second = page.name.split(' ', 1) if "." in first: name = second marker.name = name marker.contentRef = "/page/" + page.slug markers.append(marker) if markers: # if markers not empty, its a map map = Map() map.parent = group map.meta["tag"] = tag map.name = image.name map.slug = slugify(map.name) map.image = image.bitmap if node.find("./image/gridsize") != None: map.gridSize = node.find("./image/gridsize").text if node.find("./image/gridoffset") != None: gridOffset = node.find("./image/gridoffset").text map.gridOffsetX = gridOffset.split(",")[0] map.gridOffsetY = gridOffset.split(",")[1] map.markers = markers maps.append(map) lookup["map"][tag] = map else: # otherwise, its a image page = Page() page.parent = group page.meta["tag"] = tag page.name = image.name page.slug = slugify(page.name) page.content = '<p><img class="size-full" src="' + image.bitmap + '" /></p>' pages_sorted.append(page) # do not add to lookup tables # sort maps_sorted = humansorted(maps, key=lambda x: x.name) # ENCOUNTERS logger.info("parsing encounters") parent = Group() parent.name = "Encounters" parent.slug = slugify(parent.name) groups.append(parent) for category in root.findall("./battle/category"): group = Group() group.name = category.get("name") group.slug = slugify(group.name) group.parent = parent if group.name == None or group.name == "": group = parent else: groups.append(group) for node in category.findall("*"): # tag tag = node.tag # create encounter encounter = Encounter() encounter.meta["tag"] = tag encounter.parent = group encounter.name = node.find("name").text encounter.slug = slugify(encounter.name) encounters.append(encounter) lookup["encounter"][tag] = encounter # get combatants for npcnode in node.find("npclist").findall("*"): # get positions maplinks = npcnode.findall("./maplink/*") # combatants count count = int(npcnode.find("count").text) # iterate for x in range(count): combatant = Combatant() combatant.name = npcnode.find("name").text encounter.combatants.append(combatant) # if position on map if len(maplinks) == count: maplinknode = maplinks[x] if maplinknode.find("./imagex") != None: combatant.x = maplinknode.find("./imagex").text if maplinknode.find("./imagey") != None: combatant.y = maplinknode.find("./imagey").text encounters_sorted = humansorted(encounters, key=lambda x: x.name) # custom regex for processing links def href_replace(match): key = str(match.group(2)).split("@")[0] type = match.group(1) if type == "image" and key in lookup["map"]: return 'href="/map/' + lookup["map"][key].slug elif type == "image" and key in lookup["image"]: return 'href="' + lookup["image"][key].bitmap elif type == "encounter" and key in lookup["page"]: return 'href="' + lookup["page"][key].slug elif type == "battle" and key in lookup["encounter"]: return 'href="/encounter/' + lookup["encounter"][key].slug elif type == "quest" and key in lookup["quest"]: return 'href="' + lookup["quest"][key].slug else: return key # fix content tags in pages for page in pages_sorted: content = page.content # maybe regex content = content.replace('<text type="formattedtext">', '').replace('<text>', '').replace('</text>', '') content = content.replace('<description type="formattedtext">', '').replace('<description>', '').replace( '</description>', '') content = content.replace('<frame>', '<blockquote class="read">').replace( '</frame>', '</blockquote>') content = content.replace('<frameid>DM</frameid>', '') content = content.replace('\r', '<br />') content = content.replace('<h>', '<h3>').replace('</h>', '</h3>') content = content.replace('<list>', '<ul>').replace('</list>', '</ul>') # content = content.replace("<linklist>", "<ul>").replace("</linklist>", "</ul>") content = content.replace('<linklist>', '').replace('</linklist>', '') content = content.replace('<link', '<p><a').replace('</link>', '</a></p>') content = content.replace(' recordname', ' href') content = content.strip() # fix links content = re.sub( r'href=[\'"]?(encounter|battle|image|quest)\.([^\'">]+)', href_replace, content) # add title if content.startswith('<h3>'): page.content = content.replace('<h3>', '<h2>', 1).replace('</h3>', '</h2>', 1) else: page.content = '<h2>' + page.name + '</h2>' + content # assign data to module module.groups = groups module.pages = pages_sorted module.maps = maps_sorted module.encounters = encounters_sorted return module