[Debconf-video-commits] r390 - package/branches/pycon09/src/pyconvideo/pyconvideo
benh at alioth.debian.org
benh at alioth.debian.org
Thu Mar 26 05:37:28 UTC 2009
Author: benh
Date: 2009-03-26 05:37:28 +0000 (Thu, 26 Mar 2009)
New Revision: 390
Added:
package/branches/pycon09/src/pyconvideo/pyconvideo/review_locked.html
package/branches/pycon09/src/pyconvideo/pyconvideo/review_target.html
Modified:
package/branches/pycon09/src/pyconvideo/pyconvideo/review_list_events.html
package/branches/pycon09/src/pyconvideo/pyconvideo/videorecording_list.html
package/branches/pycon09/src/pyconvideo/pyconvideo/videotargetfile_list.html
package/branches/pycon09/src/pyconvideo/pyconvideo/views.py
Log:
Finish review interface. Modulo bugs.
Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/review_list_events.html
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/review_list_events.html 2009-03-26 04:25:50 UTC (rev 389)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/review_list_events.html 2009-03-26 05:37:28 UTC (rev 390)
@@ -12,15 +12,18 @@
</a>
</p>
+ {% if completed %}
+ <p>Thankyou for reviewing! Now select the next event.</p>
+ {% else %}
<p>
Select the event covered by this recording. If the recording
covers multiple events, review the video again for each event.
</p>
+ {% endif %}
<form action="review" method="post">
If the recording does not cover any events, press
- <input type="hidden" name="file_status" value="D" />
- <input type="submit" name="submit" value="Delete" />
+ <input type="submit" name="delete" value="Delete" />
</form>
<table>
Added: package/branches/pycon09/src/pyconvideo/pyconvideo/review_locked.html
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/review_locked.html (rev 0)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/review_locked.html 2009-03-26 05:37:28 UTC (rev 390)
@@ -0,0 +1,13 @@
+<html>
+
+ <head><title>File is locked</title></head>
+
+ <body>
+ <h1>File is locked</h1>
+
+ <p>File: {{ filename }}</p>
+
+ <p>This file is being reviewed by {{ user.get_full_name }}.</p>
+ </body>
+
+</html>
Added: package/branches/pycon09/src/pyconvideo/pyconvideo/review_target.html
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/review_target.html (rev 0)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/review_target.html 2009-03-26 05:37:28 UTC (rev 390)
@@ -0,0 +1,21 @@
+<html>
+
+ <head><title>Review target</title></head>
+
+ <body>
+ <h1>Review target</h1>
+
+ <p>
+ Target:
+ <a href="file://{{ target.target_filename|urlencode }}">
+ {{ target.target_filename }}
+ </a>
+ </p>
+
+ <form action="review" method="POST">
+ {{ form.as_p }}
+ <input type="submit" name="finish" value="Finish review" />
+ </form>
+ </body>
+
+</html>
Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/videorecording_list.html
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/videorecording_list.html 2009-03-26 04:25:50 UTC (rev 389)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/videorecording_list.html 2009-03-26 05:37:28 UTC (rev 390)
@@ -5,6 +5,10 @@
<body>
<h1>Video recordings</h1>
+ {% if completed %}
+ <p>Thankyou for reviewing! Please select another unclaimed file.</p>
+ {% endif %}
+
<table>
<tr>
<th>Start time</th>
@@ -32,12 +36,12 @@
{% endfor %}
{% if recording.locked_by %}
{% ifequal recording.locked_by user %}
- <form action="{{ recording.id }}/review" method="post">
+ <form action="/recording/{{ recording.id }}/review" method="post">
<input type="submit" name="submit" value="Continue review" />
</form>
{% endifequal %}
{% else %}
- <form action="{{ recording.id }}/review" method="post">
+ <form action="/recording/{{ recording.id }}/review" method="post">
<input type="submit" name="submit" value="Review" />
</form>
{% endif %}
Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/videotargetfile_list.html
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/videotargetfile_list.html 2009-03-26 04:25:50 UTC (rev 389)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/videotargetfile_list.html 2009-03-26 05:37:28 UTC (rev 390)
@@ -5,6 +5,10 @@
<body>
<h1>Target files</h1>
+ {% if completed %}
+ <p>Thankyou for reviewing! Please select another unclaimed file.</p>
+ {% endif %}
+
<table>
<tr>
<th>Event</th>
@@ -22,12 +26,12 @@
<td class="status-{{ target.status.status_code }}">
{% if target.locked_by %}
{% ifequal target.locked_by user %}
- <form action="{{ target.id }}/review" method="post">
+ <form action="/target/{{ target.id }}/review" method="post">
<input type="submit" name="submit" value="Continue review" />
</form>
{% endifequal %}
{% else %}
- <form action="{{ target.id }}/review" method="post">
+ <form action="/target/{{ target.id }}/review" method="post">
<input type="submit" name="submit" value="Review" />
</form>
{% endif %}
Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/views.py
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/views.py 2009-03-26 04:25:50 UTC (rev 389)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/views.py 2009-03-26 05:37:28 UTC (rev 390)
@@ -15,10 +15,11 @@
value = unicode(re.sub('[^\w\s_]', '', value).strip())
return defaultfilters.mark_safe(re.sub('[_\s]+', '_', value))
-def list_recordings(request):
+def list_recordings(request, completed=False):
return render_to_response(
'pyconvideo/videorecording_list.html',
- {'object_list':
+ {'completed': completed,
+ 'object_list':
models.VideoRecording.objects.all().order_by('recording_time').select_related(),
'user': request.user})
@@ -37,11 +38,18 @@
return mx.DateTime.DateTimeDelta(0, hours, minutes, seconds)
raise forms.ValidationError('%s is not a valid time' % value)
+class FileStatusField(forms.ChoiceField):
+ def __init__(self):
+ forms.ChoiceField.__init__(
+ self,
+ choices=(models.VideoFileStatus.objects
+ .exclude(file_status_code='D')
+ .exclude(file_status_code='X')
+ .values_list('file_status_code', 'file_status_desc')),
+ widget=forms.RadioSelect)
+
class RecordingReviewForm(forms.Form):
- file_status = forms.ChoiceField(
- choices=models.VideoFileStatus.objects.values_list('file_status_code',
- 'file_status_desc'),
- widget=forms.RadioSelect)
+ file_status = FileStatusField()
start_time = IntervalField()
end_time = IntervalField()
base_name = forms.CharField()
@@ -51,6 +59,7 @@
@transaction.commit_on_success
def review_recording(request, recording_id):
recording = get_object_or_404(models.VideoRecording, pk=recording_id)
+ completed = False
# lock or fail
if not recording.locked_by:
@@ -65,14 +74,40 @@
event_id = request.POST.get('event')
event = event_id and models.Event.objects.get(event_id=event_id)
- file_status = request.POST.get('file_status')
- if (event and file_status) or file_status == 'D':
+ if request.POST.get('finish') or request.POST.get('continue'):
# process review
form = RecordingReviewForm(request.POST)
if form.is_valid():
- # TODO
- pass
+ recording.file_status = \
+ models.VideoFileStatus.objects.get(
+ file_status_code=form.file_status)
+ if request.POST.get('finish'):
+ recording.locked_by = None
+ recording.save()
+ event_recording = models.VideoEventRecording(
+ event=event, recording=recording,
+ start_time=form.start_time, end_time=form.end_time,
+ event_recording_base_name=form.base_name)
+ event_recording.save()
+ if request.POST.get('finish'):
+ return list_recordings(request, completed=True)
+ else:
+ # go back to the list of events, but acknowledge
+ # completion
+ completed = True
+ else:
+ # try again
+ return render_to_response('pyconvideo/review_event_recording.html',
+ {'recording': recording,
+ 'event': event,
+ 'form': form})
+ elif request.POST.get('delete'):
+ recording.file_status = \
+ models.VideoFileStatus.objects.get(file_status_code='D')
+ recording.locked_by = None
+ recording.save()
+ return list_recordings(request, completed=True)
elif event:
# show main form
defaults = {'file_status': recording.file_status.file_status_code,
@@ -83,19 +118,20 @@
{'recording': recording,
'event': event,
'form': RecordingReviewForm(defaults)})
- else:
- # list events for association
- events = models.Event.objects
- events = events.extra(
- select={'proximity':
- "abs(date_part('epoch', age(event.start_time, %s)))"},
- select_params=[recording.recording_time],
- order_by=['proximity'])
- events = events.all()
- return render_to_response('pyconvideo/review_list_events.html',
- {'recording': recording,
- 'events': events})
+ # list events for association
+ events = models.Event.objects
+ events = events.extra(
+ select={'proximity':
+ "abs(date_part('epoch', age(event.start_time, %s)))"},
+ select_params=[recording.recording_time],
+ order_by=['proximity'])
+ events = events.all()
+ return render_to_response('pyconvideo/review_list_events.html',
+ {'completed': completed,
+ 'recording': recording,
+ 'events': events})
+
def list_targets(request):
sources = models.VideoEventRecording.objects.all().select_related()
formats = models.VideoTargetFormat.objects.all()
@@ -114,6 +150,10 @@
'formats': formats,
'user': request.user})
+class TargetReviewForm(forms.Form):
+ file_status = FileStatusField()
+ comments = forms.CharField(required=False, widget=forms.Textarea)
+
@login_required
@transaction.commit_on_success
def review_target(request, target_id):
@@ -129,3 +169,25 @@
'user': target.locked_by})
else:
return render_to_response('pyconvideo/review_locked.html')
+
+ if request.POST.get('finish'):
+ # process review
+ form = TargetReviewForm(request.POST)
+ if form.is_valid():
+ target.file_status = \
+ models.VideoFileStatus.objects.get(
+ file_status_code=form.file_status)
+ target.locked_by = None
+ target.save()
+ return list_targets(request, completed=True)
+ else:
+ # try again
+ return render_to_response('pyconvideo/review_target.html',
+ {'target': target,
+ 'form': form})
+ else:
+ # show form
+ defaults = {'file_status': target.file_status.file_status_code}
+ return render_to_response('pyconvideo/review_target.html',
+ {'target': target,
+ 'form': TargetReviewForm(defaults)})
More information about the Debconf-video-commits
mailing list