def get(self, id): prop = Proposal.get_by_id(int(id)) if self.request.get('change'): self._handle_change(prop, self.request.get('change')) return changes_db = Change.all().ancestor(prop).order('created').fetch(100) changes = [] lexer = pygments.lexers.get_lexer_by_name('diff') formatter = pygments.formatters.get_formatter_by_name('html', nobackground=True) for change_db in changes_db: change = { 'db': change_db, } if change_db.class_name() == 'PatchChange': change['type'] = 'patch' change['highlighted'] = pygments.highlight(change_db.diff, lexer, formatter) elif change_db.class_name() == 'BinaryChange': mime_type, encoding = mimetypes.guess_type(change_db.path, False) if mime_type.startswith('image'): change['type'] = 'image' else: change['type'] = 'binary' changes.append(change) vote = prop.get_vote(user) add_stylesheet(self.request, '/pygments.css') self.response.out.write(self.env.get_template('proposal_view.html').render(locals()))
def post(self, id): if self.request.get('apply'): self._handle_apply(id) elif self.request.get('vote'): user, user_admin, user_url = _user(self) prop = Proposal.get_by_id(int(id)) vote = int(self.request.get('vote')) prop.set_vote(user, vote) self.redirect(self.request.path) else: self.redirect(self.request.path)
def _handle_apply(self, id): if not users.is_current_user_admin(): self.redirect(self.request.path) return prop = Proposal.get_by_id(int(id)) changes = Change.all().ancestor(prop).order('created').fetch(100) def txn(): for change in changes: change.apply() #db.run_in_transaction(txn) txn() self.redirect(self.request.path)
def _handle_save_binary(self, prop_id=None): if prop_id is None: prop = Proposal(title=self.request.get('title'), state='private') else: prop = Proposal.get_by_id(int(prop_id)) def txn(): if prop_id is None: prop.put() change = BinaryChange(parent=prop, path=self.request.get('path'), data=self.request.get('newfile')) change.put() db.run_in_transaction(txn) self.redirect('/proposal/%s'%prop.key().id())