def edit_page(request, slug=None): ''' Edits a blog entry or a web page (creates one if needed) ''' if is_authorized_user(): page = None if request.method == 'GET': if slug: try: page = memcache.get('/edit/%s/' % slug) # @UndefinedVariable if not page: key = ndb.Key(urlsafe=slug) page = key.get() p = page.to_dict() p['tags'] = ",".join(p['tags']) p['key'] = page.key.id() if p.get('published_at'): p.pop('published_at') form = PageForm(data=p) except: tb = traceback.format_exc() print tb raise Http404 else: form = PageForm(initial={'timestamp': int(time.time() * 1000)}) form.fields['blog'].initial = True if request.GET.get( 'type', False) else False else: # POST form = PageForm(data=request.POST, files=request.FILES) if form.data['save'] == 'delete': return delete_item(request, form) # else if form.is_valid(): d = form.cleaned_data if d['key']: # updating an existing entry key = ndb.Key('Page', d['key']) page = key.get() mem_key = page.get_request_path(d.get('blog')) memcache.delete(mem_key) # @UndefinedVariable memcache.delete(mem_key + "full") # @UndefinedVariable memcache.delete(mem_key + "mobile") # @UndefinedVariable else: page = Page() if d.get('link'): page.link = d['link'] else: page.link = create_link(d['title']) page.content = d['content'] page.title = d['title'] page.draft = d.get('draft', False) page.blog = d.get('blog', False) page.image = d['image'] page.timestamp = int(d['timestamp']) page.template = d.get('template') or 'blog-post.html' page.summary = d['summary'] or re.sub( '\s{2,}', ' ', strip_tags(d['content']))[0:300] page.published_at = datetime.datetime.utcfromtimestamp( int(d['timestamp']) / 1000) page.priority = d.get('priority', 1) tags = [] for tag in d['tags'].split(','): tags.append(tag.strip()) update_tag(tag.strip()) page.tags = tags page.put() if page.draft == False and page.blog == True: memcache.set('/', None) # @UndefinedVariable update_archive(page) if request.POST.get('save') == 'save and continue': # we need to deal with the eventual consistency problem. So the # page will be first pushed to the cache if we dont' do that we will see # incorrect or missing data memcache.set('/edit/%s/' % page.link, page) # @UndefinedVariable return HttpResponseRedirect('/edit/%s/' % page.link) else: if page.blog: return HttpResponseRedirect('/list/?type=blog') else: return HttpResponseRedirect('/list/') else: print form.errors return render(request, 'admin/edit-page.html', { 'form': form, 'page': page }) else: return HttpResponse("<a href='{}'>login</a>".format( users.create_login_url('/list/')))