Skip to content
This repository has been archived by the owner on Jun 18, 2020. It is now read-only.

Commit

Permalink
Enable submission deleting, Issue #69
Browse files Browse the repository at this point in the history
  • Loading branch information
moschlar committed Jun 19, 2012
1 parent 58a4754 commit 78d1fa7
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 4 deletions.
28 changes: 27 additions & 1 deletion sauce/controllers/submissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#from tg.i18n import ugettext as _
from repoze.what.predicates import not_anonymous, Any, has_permission
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
from sqlalchemy.exc import IntegrityError
from sqlalchemy.exc import SQLAlchemyError
from chardet import detect
from pygmentize.widgets import Pygmentize

Expand Down Expand Up @@ -246,6 +246,32 @@ def edit(self, **kwargs):
return dict(page=['submissions', 'edit'], event=self.event,
assignment=self.assignment, submission=self.submission)

@expose()
def delete(self):
subm_id = self.submission.id
subm_url = self.submission.url
try:
if (hasattr(request, 'teacher') and request.teacher or
hasattr(request, 'user') and request.user == self.submission.user):
DBSession.delete(self.submission)
DBSession.flush()
else:
#abort(403)
flash('You have no permission to delete this Submission', 'warning')
redirect(url(self.submission.url + '/show'))
except SQLAlchemyError:
DBSession.rollback()
flash('Submission could not be deleted', 'error')
log.warn('Submission could not be deleted', exc_info=True)
redirect(url(self.submission.url + '/show'))
else:
flash('Submission %d deleted' % (subm_id), 'ok')
if request.referer and (set(request.referer.split('/')) >= set(subm_url.split('/'))):
redirect(url(self.assignment.url))
else:
redirect(request.referer)
redirect(url(self.assignment.url))

@expose('sauce.templates.submission_result')
def result(self, force_test=False):
compilation = None
Expand Down
4 changes: 3 additions & 1 deletion sauce/lib/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ def __call__(self, environ, start_response):
c.user = request.user
c.student = request.student
c.teacher = request.teacher


request.referer = request.environ.get('HTTP_REFERER', None)

# Initialize other tmpl_context variables
c.sub_menu = []
c.side_menu = []
Expand Down
2 changes: 1 addition & 1 deletion sauce/model/submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ class Judgement(DeclarativeBase):
'''Date of judgement'''

submission_id = Column(Integer, ForeignKey('submissions.id'), nullable=False)
submission = relationship('Submission', backref=backref('judgement', uselist=False))
submission = relationship('Submission', backref=backref('judgement', uselist=False, cascade='all,delete-orphan'))

teacher_id = Column(Integer, ForeignKey('teachers.id'), nullable=False)
teacher = relationship('Teacher', backref=backref('judgements'))
Expand Down
2 changes: 1 addition & 1 deletion sauce/model/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ class Testrun(DeclarativeBase):
'''Test that was run in this testrun'''

submission_id = Column(Integer, ForeignKey('submissions.id'), nullable=False)
submission = relationship('Submission', backref=backref('testruns'))
submission = relationship('Submission', backref=backref('testruns', cascade='all,delete-orphan'))
'''Submission that was run in this testrun'''

__mapper_args__ = {'order_by': asc(date)}
Expand Down
6 changes: 6 additions & 0 deletions sauce/templates/submission.mak
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@
<a href="${submission.url}/judge"><i class="icon-tag"></i>&nbsp;Judge</a>
</li>
% endif
% if hasattr(request, 'teacher') and request.teacher or \
hasattr(request, 'user') and request.user == submission.user:
<li class="${('', 'active')['delete' in page]}">
<a href="${submission.url}/delete"><i class="icon-remove"></i>&nbsp;<span style="color:#B94A48;">Delete</span></a>
</li>
% endif
</ul>

<dl class="dl-horizontal">
Expand Down
4 changes: 4 additions & 0 deletions sauce/widgets/submission_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ def _actions(filler, subm):
if hasattr(request, 'teacher') and request.teacher:
result.append(u'<a href="%s/judge" class="btn btn-mini" title="Judge">'
'<i class="icon-tag"></i></a>' % (subm.url))
if (hasattr(request, 'teacher') and request.teacher or
hasattr(request, 'user') and request.user == subm.user):
result.append(u'<a href="%s/delete" class="btn btn-mini btn-danger" title="Delete">'
'<i class="icon-remove icon-white"></i></a>' % (subm.url))
return literal('<div class="btn-group" style="width: %dpx;">'
% (len(result)*30) + ''.join(result) + '</div>')

Expand Down

0 comments on commit 78d1fa7

Please sign in to comment.