def members_add(self, **kw): project = DBSession.query(Project).filter_by(id=kw['project_id']).one() emails = kw['emails'].lower().split(',') if emails: for email in emails: user = DBSession.query(User).filter_by(email_address=email).one() project.members.append(ProjectMembership(user=user)) flash(u'Los usuarios han sido invitados al proyecto') return dict(_status='ok', _redirect=url('/editor/workspace/%s#project_settings' % project.id))
def edit(self, id, revid=None): file = DBSession.query(File).filter_by(id=id).one() if request.is_xhr: override_template(self.edit, "genshi:vertex.templates.editor.edit-comparing") revision = None if revid is not None: revision = DBSession.query(FileRevision).filter_by(id=revid, file_id=id).one() if file.is_binary: tmpl_context.update_file_form = update_file_form return {"file": file, "revision": revision}
def new(self, **kw): project = DBSession.query(Project).filter_by(id=kw['project_id']).one() file = File(project=project, filename='%s.latex' % kw['filename']) DBSession.add(FileRevision(file=file, user=request.identity['user'])) DBSession.flush() flash(_('The file "%s.latex" has been added to the project.' % kw['filename'])) return dict(_status=u'ok', _redirect=url('/editor/edit/%s' % file.id))
def download(self, run_id, format=u'pdf'): run = DBSession.query(LaTeXCompileRun).filter_by(id=run_id).one() filename = '%s.%s' % (os.path.splitext(run.file.filename)[0], format) download = getattr(run, '%s_output' % format) response.content_type = 'application/%s' % format response.headers.add('Content-Disposition:', 'attachment; filename=%s' % filename) return download
def upload_update(self, **kw): file = DBSession.query(File).filter_by(id=kw['file_id']).one() if file.content_type != kw['file'].type: raise Exception(_('File content-type is invalid!')) # TODO: do this in validation! file.revisions.append(FileRevision(content_binary=kw['file'].value, user=request.identity['user'])) flash(_('"%s" has been updated to a new revision.' % file.filename)) redirect(url('/editor/edit/%s' % file.id))
def latex_symbols(self): res = dict() groups = DBSession.query(LaTeXSymbolGroup) for group in groups: symbols_ = [] for symbol in group.symbols: symbols_.append(dict(id=symbol.id, name=symbol.name, command=symbol.command)) res[group.name] = symbols_ return dict(symbols=res)
def revision_content(self, rid, download=False): rev = DBSession.query(FileRevision).filter_by(id=rid).one() response.content_type = rev.file.content_type if download: response.headers.add('Content-Disposition:', 'attachment; filename=%s' % rev.file.filename) else: response.headers.add('Content-Disposition:', 'inline; filename=%s' % rev.file.filename) if rev.file.is_binary: return rev.content_binary else: return rev.content
def save(self, file_id, revid, content): file = DBSession.query(File).filter_by(id=file_id).one() last_rev = file.last_revision _msg = _('The file has been saved.') _status = u'ok' if last_rev.id != int(revid): _msg = _('The file has been saved. Changes that you might want to check were detected between this revision and the previous one.') _status = u'warning' file.revisions.append(FileRevision(content=content, user=request.identity['user'])) return dict(_msg=_msg, _status=_status, file_id=file.id)
def compile(self, file_id, content): file = DBSession.query(File).filter_by(id=file_id).one() run = LaTeXCompileRun(file=file, content=content) if run.compile(): DBSession.add(run) DBSession.flush() return dict( _msg=_("The file compiled successfully."), _status=u"ok", run_id=run.id, pdf_url=url("/files/download/%s" % run.id), ps_url=url("/files/download/%s/ps" % run.id), dvi_url=url("/files/download/%s/dvi" % run.id), latex_log=run.latex_log, ) else: return dict( _msg=_("The file could not be compiled. Check the log for further details."), _status="error", latex_log=run.latex_log, )
def upload(self, **kw): project = DBSession.query(Project).filter_by(id=kw['project_id']).one() content_type = kw['file'].type # XXX: We assume files ending in .latex or .tex are LaTeX files if kw['file'].filename.lower().endswith('.tex') or \ kw['file'].filename.lower().endswith('.latex'): content_type = u'text/x-latex' rev = FileRevision(file=File(project=project, filename=kw['file'].filename, content_type=content_type), user=request.identity['user']) if rev.file.content_type in (config.get('vertex_text_types') + config.get('vertex_latex_types')): rev.content = kw['file'].value else: rev.content_binary = kw['file'].value DBSession.add(rev) DBSession.flush() flash(_('The file "%s" has been added to the project.' % (kw['file'].filename))) redirect(url('/editor/edit/%s' % rev.file.id))
def by_user_name(cls, username): """Return the user object whose user name is ``username``.""" return DBSession.query(cls).filter(cls.user_name == username).first()
def by_email_address(cls, email): """Return the user object whose email address is ``email``.""" return DBSession.query(cls).filter(cls.email_address == email).first()
def compare(self, rev1, rev2): rev1 = DBSession.query(FileRevision).filter_by(id=rev1).one() rev2 = DBSession.query(FileRevision).filter_by(id=rev2).one() return dict(rev1=rev1, rev2=rev2)
def settings(self, id): project = DBSession.query(Project).filter_by(id=id).one() tmpl_context.invite_people_form = invite_people_form return dict(project=project)
def mine_list(self): projects = DBSession.query(Project).filter(Project.members.any(ProjectMembership.user == request.identity['user'])).all() return dict(projects=projects)
def members_delete(self, project_id, user_id): membership = DBSession.query(ProjectMembership).filter_by(project_id=project_id, user_id=user_id).one() DBSession.delete(membership) return dict(_status=u'ok', _msg=u'El usuario "%s" ha sido removido del proyecto' % membership.user.name)
def latex_symbols_thumb(self, id): symbol = DBSession.query(LaTeXSymbol).filter_by(id=id).one() response.content_type = "image/png" return symbol.thumbnail
def delete(self, file_id): file = DBSession.query(File).filter_by(id=file_id).one() DBSession.delete(file) flash(_('The file "%s" has been deleted from the project.' % file.filename)) redirect(url('/projects/view/%d' % file.project.id))
def test_query_obj(self): obj = DBSession.query(self.klass).one() for key, value in self.attrs.iteritems(): assert_equals(getattr(obj, key), value)
def revisions(self, fid): file = DBSession.query(File).filter_by(id=fid).one() revisions = DBSession.query(FileRevision).filter_by(file_id=fid).order_by('-id') return dict(file=file, revisions=revisions)
def last_revision(self): return DBSession.query(FileRevision).filter_by(file_id=self.id).order_by('-id')[0:1][0]
def new(self, pid): project = DBSession.query(Project).filter_by(id=pid).one() tmpl_context.add_blank_file_form = add_blank_file_form tmpl_context.import_file_form = import_file_form return dict(project=project)