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)))
#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)