def editor(page_id): page = Page.get_edit_or_404(page_id) user = users.get_current_user() client_id = 'page-%d-%s-%s' % (page_id, user.user_id(), b32encode(os.urandom(10))) token = gae_channels.create_channel(client_id) channel = PageChannel(user=user, page=page, token=token, client_id=client_id) channel.put() return render_template('editor.html', page=page, channel_token=token)
def page_rpc(page_id): page = Page.get_edit_or_404(page_id) try: message = json.loads(request.form.get('message', '')) except Exception: abort(400) data = message.get('data', None) token = message.get('from', None) if not token or not data: logging.warn('RPC received no token or data.') abort(400) cmd = data.get('cmd', None) if not cmd: logging.warn('RPC received no cmd.') abort(400) channel = PageChannel.gql('WHERE token=:1', token).get() if not channel: # We've timed out the channel. User should refresh the page. logging.debug('Could not find token: %s', token) return dict(cmd='refresh') channel.dt_last_update = datetime.utcnow() channel.put() # Commands if cmd == 'open': page.add_channel(channel) page.update_locks() return 'OK' elif cmd == 'claimLock': page.clean_channels() page.add_channel_first(channel) page.update_locks() return 'OK' elif cmd == 'save': style_id = data.get('style_id', '') style = Style.get_edit_or_404(style_id) if not style.preview_rev: preview_rev = StyleRevision(parent=style, rev=style.published_rev.rev + 1) preview_rev.put() style.preview_rev = preview_rev style.put() log = style.preview_rev.update(data.get('scss', '')) publish = data.get('fPublish', False) preview = not publish if publish: style.published_rev = style.preview_rev style.preview_rev = None style.put() page_key = str(page.key()) memcache.delete(page_key + '-css') memcache.delete(page_key + '-css-etag') page.queue_refresh() return jsonify({'css': page.compressed_css(preview), 'log': log}) else: logging.warn('Got a bad command: %s', cmd) abort(400) # Bad cmd
def page_rpc(page_id): page = Page.get_edit_or_404(page_id) try: message = json.loads(request.form.get("message", "")) except Exception: abort(400) data = message.get("data", None) token = message.get("from", None) if not token or not data: logging.warn("RPC received no token or data.") abort(400) cmd = data.get("cmd", None) if not cmd: logging.warn("RPC received no cmd.") abort(400) channel = PageChannel.gql("WHERE token=:1", token).get() if not channel: # We've timed out the channel. User should refresh the page. logging.debug("Could not find token: %s", token) return dict(cmd="refresh") channel.dt_last_update = datetime.utcnow() channel.put() # Commands if cmd == "open": page.add_channel(channel) page.update_locks() return "OK" elif cmd == "claimLock": page.clean_channels() page.add_channel_first(channel) page.update_locks() return "OK" elif cmd == "save": style_id = data.get("style_id", "") style = Style.get_edit_or_404(style_id) if not style.preview_rev: preview_rev = StyleRevision(parent=style, rev=style.published_rev.rev + 1) preview_rev.put() style.preview_rev = preview_rev style.put() log = style.preview_rev.update(data.get("scss", "")) publish = data.get("fPublish", False) preview = not publish if publish: style.published_rev = style.preview_rev style.preview_rev = None style.put() page_key = str(page.key()) memcache.delete(page_key + "-css") memcache.delete(page_key + "-css-etag") page.queue_refresh() return jsonify({"css": page.compressed_css(preview), "log": log}) else: logging.warn("Got a bad command: %s", cmd) abort(400) # Bad cmd
def page_import(page_id): page = Page.get_edit_or_404(page_id) if request.method == 'POST': if 'fOk' in request.form: queue_import(page, first_time=True) return redirect(url_for('page_import', page_id=page_id)) else: return redirect(url_for('editor', page_id=page_id)) else: if page.import_state == IMPORT_DONE: page.import_state = CAN_IMPORT page.put() return redirect(url_for('editor', page_id=page_id)) return render_template('page_import.html', page=page)
def page_styles(page_id): page = Page.get_edit_or_404(page_id) return Response(page.styles_json(), content_type='application/json')
def page_preview(page_id): page = Page.get_edit_or_404(page_id) if page.preview_img: return _send_file(page.preview_img, 'image/png') else: return redirect('/static/img/loading-preview.png')