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 create_page(db, page): new_data = Page() new_data.title = unicode(page['title']) new_data.content = unicode(page["content"]) new_data.css = unicode(page['css']) new_data.book_id = int(page["book_id"]) db.session.add(new_data)
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 page_update_or_create(name, content): """Update or create a Wiki Page""" try: p = Page.objects.get(name=name) except Page.DoesNotExist: p = Page(name=name) finally: p.content = content p.save()
def post(self, slug=None): if slug: page = Page.gql("WHERE slug = :1", slug).get() else: page = Page() page.title = self.request.get('title') page.slug = self.request.get('slug') page.content = self.request.get('content') page.order_in_menu = int(self.request.get('order_in_menu')) page.put() self.redirect(page.get_url())
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})
from flask_security import utils sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from app import create_app from models import Page, db, Role, User app = create_app() with app.app_context(): admin_role = Role() admin_role.name = 'admin' db.session.add(admin_role) db.session.commit() root = User() root.email = '*****@*****.**' root.password = utils.hash_password("123456") root.active = True root.roles.append(admin_role) db.session.add(root) db.session.commit() page = Page() page.title = "Home Page" page.content = "<h1><b>Hello from flask - docker!<b></h1>" page.is_homepage = True db.session.add(page) db.session.commit()
admin_role.name = 'admin' db.session.add(admin_role) db.session.commit() root = User() root.email = '*****@*****.**' root.password = '******' root.active = True root.roles.append(admin_role) db.session.add(root) db.session.commit() page = Page() page.title = 'Homepage' page.slug = 'home' page.content = "<h1>Bismillah</h1>" page.is_homepage = True db.session.add(page) db.session.commit() menu = Menu() menu.title = 'Homepage' menu.order = 1 menu.page_id = page.id db.session.add(menu) db.session.commit() page = Page() page.title = 'About' page.slug = 'about' page.content = "<h1>Ini About page</h1>"
def save(user_slug, wiki_slug, page_slug): """ Saves page changes in the database. -] patch - array of changed content blocks; 'undefined' if unchanged <- slugified page title """ user = User.get_by(name_slug=user_slug) if user != g.user: return False wiki = user.wiki_by_slug(wiki_slug) try: page = wiki.page_by_slug(page_slug) except NoResultFound: old_last_page = Page.get_by(wiki=wiki, next_page_id=-1) page = Page(wiki=wiki, title="", title_slug="", content="<h1>Untitled</h1>", next_page_id=-1) models.session.commit() old_last_page.next_page_id = page.id patch = request.form.getlist('patch') block = re.compile('<(?:h1|h2|h3|p)>.*?</(?:h1|h2|h3|p)>') content_blocks = block.findall(page.content) # If the page's title has been changed in the content... new_title = page.title if len(patch) and patch[0] != 'undefined': new_title = patch[0][4:-5] newline = re.compile('\n') new_title = re.sub(newline, "", new_title) if page.title != new_title: # ..if a page exists with this title, append " (alternative)" to it. try: same_title_page = Page.get_by(title=new_title) except NoResultFound: pass if same_title_page: stp = same_title_page header_end = 4 + len(stp.title) stp.title += " (alternative)" stp.title_slug = slugify(stp.title) stp.content = stp.content[:header_end] + " (alternative)" + \ stp.content[header_end:] # ..if the page with changed title was the main page, make a new one. if page.title == wiki.title: try: if new_title: second_page = page else: second_page = Page.get_by(id=page.next_page_id) next_page_id = second_page.id except NoResultFound: next_page_id = -1 new_main_page = Page(wiki=wiki, title=wiki.title, title_slug=slugify(wiki.title), content="<h1>%s</h1><p></p>" % wiki.title, next_page_id=next_page_id) models.session.commit() wiki.first_page_id = new_main_page.id # ..change the page's title in the database. page.title = new_title page.title_slug = slugify(new_title) # Replace content with patched content. for i, block in enumerate(patch): if block != 'undefined': if i < len(content_blocks): content_blocks[i] = block else: content_blocks.append(block) # Sanitize unsafe angle brackets. content = ''.join(content_blocks) unsafe_lt = re.compile(r"<(?!/?(h1|h2|h3|p|b|i|u)>)") content = re.sub(unsafe_lt, '<', content) # The content is reversed to get around regex lookbehind limitation. unsafe_gt = re.compile(r">(?!(1h|2h|3h|p|b|i|u)/?<)") content = re.sub(unsafe_gt, ';tg&', content[::-1]) page.content = content[::-1] # If the title is blank, delete the page. deleted = False blank_title = re.compile('<h1>(<br>)*</h1>') if blank_title.match(page.content): try: previous_page = Page.get_by(wiki=wiki, next_page_id=page.id) previous_page.next_page_id = page.next_page_id except NoResultFound: pass page.delete() deleted = True # Update the wiki's update date. wiki.update_date = datetime.now() # Commit to database! models.session.commit() if not deleted: return slugify(page.title) else: return "untitled!"
menu = Menu() menu.title = 'IT' menu.page_id = it_page.id # NOTE: As it refer to gaming_page.id, we need to commit gaming_page first menu.order = 1 db.session.add(menu) db.session.commit() # All initial posts post = Page() post.title = 'Doom VFR datang!' post.excerpt = """ Pertama kali saya menguji headset VR modern, saya bermain Doom.Demo tahun 2013 PAX West saya datang dari eksekutif Oculus Brendan Iribe, yang memasang headset VR yang terpasang di dompet, sebelum menyalakan versi modifikasi Doom 3. Hampir seketika, saya memuji perendaman itu. Aku melepaskan dan menumbuhkan kemampuanku untuk segera mengalihkan kepalaku ke barisan tembakan setan. Saya menghargai trik pencahayaan dan perspektif yang digunakan untuk menyampaikan betapa banyak kekacauan yang terjadi di sekitarku. Tidak ada yang seperti saat itu. """ post.content = readfile( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'doomfvr.txt')) post.category = 'gaming' post.tag = 'doom,vr,feature' db.session.add(post) post = Page() post.title = 'Bug memalukan pada OSX Sierra' post.excerpt = """ Kekacauan yang luar biasa! """ post.content = \ ''' <h1>Siapa yang salah ini?</h1> <p>Masa' bisa begitu saja error?</p> '''
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
import sys, os sys.path.append(os.getcwd() + '/web_app') # sesuai dg mark directory as sources from app import create_app from models import db, Page app = create_app() with app.app_context(): page = Page() page.title = 'Halaman Awal' page.content = "<h1>Selamat Datang !</h1>" page.is_homepage= True db.session.add(page) db.session.commit()