Beispiel #1
0
    def diff(self, *args, **kwargs):
        c.rgb = rgb
        c.pygmentize = Pygmentize(
            formatter_args=dict(
                linenos='table',
                lineanchors='line',
                linespans='line',
            )
        )

        try:
            a = Submission.query.filter_by(id=int(args[0])).one()
            b = Submission.query.filter_by(id=int(args[1])).one()
        except ValueError:
            abort(400)
        except IndexError:
            abort(400)
        except NoResultFound:
            abort(404)
        except MultipleResultsFound:  # pragma: no cover
            log.warn('Database inconsistency', exc_info=True)
            abort(500)
        else:
            return dict(page='assignment', view='diff',
                assignment=self.assignment, x=distances.combined(a.source or u'', b.source or u''),
                a=a, b=b, source=udiff(a.source, b.source, unicode(a), unicode(b)))
Beispiel #2
0
#from tg.i18n import ugettext as _
#from repoze.what import predicates
from repoze.what.predicates import Any, has_permission
from tw2.pygmentize import Pygmentize

# project specific imports
from sauce.lib.base import BaseController
from sauce.model import Submission
from sauce.lib.helpers import udiff
from sauce.lib.authz import user_is_in
from sauce.lib.menu import menu
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound

log = logging.getLogger(__name__)

similarity_combined = lambda a, b: distances.combined(a or u'', b or u'')


def rgb(v, cmap_name='RdYlGn'):
    '''Get CSS rgb representation from color map with name'''
    cmap = pylab.get_cmap(cmap_name)
    (r, g, b, _) = cmap(v)
    return 'rgb(' + ','.join('%d' % int(x * 255) for x in (r, g, b)) + ')'


class SimilarityController(BaseController):

    def __init__(self, assignment):
        self.assignment = assignment
        self.submissions = sorted((s for s in self.assignment.submissions if s.source),
            key=lambda s: s.id)