Beispiel #1
0
 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))
Beispiel #2
0
 def add_do(self, title, **kw):
     project = Project(title=title, description=kw.get('description', u''),
                       creator=request.identity['user'])
     project.members.append(ProjectMembership(user=request.identity['user']))
     DBSession.add(project)
     DBSession.flush()
     
     flash(_('Project "%s" has been created' % title))
     return dict(_status=u'ok',
                 _redirect=url('/projects/view/%d' % project.id))
Beispiel #3
0
 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))
Beispiel #4
0
    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}
Beispiel #5
0
    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
Beispiel #6
0
 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))
Beispiel #7
0
    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)
Beispiel #8
0
    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,
            )
Beispiel #9
0
 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 
Beispiel #10
0
    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))
Beispiel #11
0
    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)    
Beispiel #12
0
 def setup(self):
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Beispiel #13
0
 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()
Beispiel #14
0
 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()
Beispiel #15
0
 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)
Beispiel #16
0
 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)
Beispiel #17
0
 def mine_list(self):
     projects = DBSession.query(Project).filter(Project.members.any(ProjectMembership.user == request.identity['user'])).all()
     return dict(projects=projects)
Beispiel #18
0
 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)
Beispiel #19
0
 def latex_symbols_thumb(self, id):
     symbol = DBSession.query(LaTeXSymbol).filter_by(id=id).one()
     response.content_type = "image/png"
     return symbol.thumbnail
Beispiel #20
0
 def test_query_obj(self):
     obj = DBSession.query(self.klass).one()
     for key, value in self.attrs.iteritems():
         assert_equals(getattr(obj, key), value)
Beispiel #21
0
 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)
Beispiel #22
0
 def tearDown(self):
     DBSession.rollback()
Beispiel #23
0
 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))
Beispiel #24
0
 def last_revision(self):
     return DBSession.query(FileRevision).filter_by(file_id=self.id).order_by('-id')[0:1][0]
Beispiel #25
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)