def dehydrate(self, bundle): bundle.data['url'] = bundle.request.build_absolute_uri( bundle.data['resource_uri'] + 'download/') # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) try: bundle.data['description'] = json.loads(bundle.data['description']) except: pass course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course, bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime( "%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) return bundle
def dehydrate(self, bundle): # Include full download url if bundle.request.is_secure(): prefix = 'https://' else: prefix = 'http://' bundle.data['url'] = prefix + bundle.request.META[ 'SERVER_NAME'] + bundle.data['resource_uri'] + 'download/' # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) try: bundle.data['description'] = json.loads(bundle.data['description']) except: pass course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course, bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime( "%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) return bundle
def dehydrate(self, bundle): # Include full download url if bundle.request.is_secure(): prefix = 'https://' else: prefix = 'http://' bundle.data['url'] = prefix + bundle.request.META['SERVER_NAME'] + bundle.data['resource_uri'] + 'download/' # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) try: bundle.data['description'] = json.loads(bundle.data['description']) except: pass course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course,bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime("%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) return bundle
def dehydrate(self, bundle): bundle.data['url'] = bundle.request.build_absolute_uri(bundle.data['resource_uri'] + 'download/') # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) try: bundle.data['description'] = json.loads(bundle.data['description']) except: pass course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course,bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime("%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) if course and course.user: bundle.data['author'] = course.user.first_name + " " + course.user.last_name bundle.data['username'] = course.user.username return bundle
def download_course(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop('pk', None) try: if request.user.is_staff: course = self._meta.queryset.get(pk = pk,is_archived=False) else: course = self._meta.queryset.get(pk = pk, is_archived=False,is_draft=False) except Course.DoesNotExist: raise Http404(_(u"Course not found")) except ValueError: try: if request.user.is_staff: course = self._meta.queryset.get(shortname = pk,is_archived=False) else: course = self._meta.queryset.get(shortname = pk, is_archived=False,is_draft=False) except Course.DoesNotExist: raise Http404(_(u"Course not found")) file_to_download = course.getAbsPath(); schedule = course.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers(course,request.user) cohort = Cohort.member_now(course,request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.COURSE_UPLOAD_DIR +"temp/"+ str(request.user.id) + "-" + course.filename shutil.copy2(course.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download,'a') if schedule: zip.writestr(course.shortname +"/schedule.xml",schedule.to_xml_string()) if has_completed_trackers: zip.writestr(course.shortname +"/tracker.xml",Tracker.to_xml_string(course,request.user)) zip.close() wrapper = FileWrapper(file(file_to_download)) response = HttpResponse(wrapper, content_type='application/zip') response['Content-Length'] = os.path.getsize(file_to_download) response['Content-Disposition'] = 'attachment; filename="%s"' %(course.filename) # Add to tracker tracker = Tracker() tracker.user = request.user tracker.course = course tracker.type = 'download' tracker.data = json.dumps({'version':course.version }) tracker.ip = request.META.get('REMOTE_ADDR','0.0.0.0') tracker.agent = request.META.get('HTTP_USER_AGENT','unknown') tracker.save() course_downloaded.send(sender=self, course=course, user=request.user) return response
def download_detail(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop('pk', None) try: course = self._meta.queryset.get(pk=pk) except Course.DoesNotExist: raise NotFound(_(u'Course download not found')) file_to_download = course.getAbsPath() schedule = course.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers( course, request.user) cohort = Cohort.member_now(course, request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.COURSE_UPLOAD_DIR + "temp/" + str( request.user.id) + "-" + course.filename shutil.copy2(course.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download, 'a') if schedule: zip.writestr(course.shortname + "/schedule.xml", schedule.to_xml_string()) if has_completed_trackers: zip.writestr(course.shortname + "/tracker.xml", Tracker.to_xml_string(course, request.user)) zip.close() wrapper = FileWrapper(file(file_to_download)) response = HttpResponse(wrapper, content_type='application/zip') response['Content-Length'] = os.path.getsize(file_to_download) response['Content-Disposition'] = 'attachment; filename="%s"' % ( course.filename) md = CourseDownload() md.user = request.user md.course = course md.course_version = course.version md.ip = request.META.get('REMOTE_ADDR', '0.0.0.0') md.agent = request.META.get('HTTP_USER_AGENT', 'unknown') md.save() course_downloaded.send(sender=self, course=course, user=request.user) return response
def download_detail(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop("pk", None) try: course = self._meta.queryset.get(pk=pk) except Course.DoesNotExist: raise NotFound(_(u"Course download not found")) file_to_download = course.getAbsPath() schedule = course.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers(course, request.user) cohort = Cohort.member_now(course, request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.COURSE_UPLOAD_DIR + "temp/" + str(request.user.id) + "-" + course.filename shutil.copy2(course.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download, "a") if schedule: zip.writestr(course.shortname + "/schedule.xml", schedule.to_xml_string()) if has_completed_trackers: zip.writestr(course.shortname + "/tracker.xml", Tracker.to_xml_string(course, request.user)) zip.close() wrapper = FileWrapper(file(file_to_download)) response = HttpResponse(wrapper, content_type="application/zip") response["Content-Length"] = os.path.getsize(file_to_download) response["Content-Disposition"] = 'attachment; filename="%s"' % (course.filename) md = CourseDownload() md.user = request.user md.course = course md.course_version = course.version md.ip = request.META.get("REMOTE_ADDR", "0.0.0.0") md.agent = request.META.get("HTTP_USER_AGENT", "unknown") md.save() course_downloaded.send(sender=self, course=course, user=request.user) return response
def dehydrate(self, bundle): # Include full download url if bundle.request.is_secure(): prefix = "https://" else: prefix = "http://" bundle.data["url"] = prefix + bundle.request.META["SERVER_NAME"] + bundle.data["resource_uri"] + "download/" # make sure title is shown as json object (not string representation of one) bundle.data["title"] = json.loads(bundle.data["title"]) course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course, bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data["schedule"] = schedule.lastupdated_date.strftime("%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data["schedule_uri"] = sr.get_resource_uri(schedule) return bundle
def dehydrate(self, bundle): bundle.data["url"] = bundle.request.build_absolute_uri(bundle.data["resource_uri"] + "download/") # make sure title is shown as json object (not string representation of one) bundle.data["title"] = json.loads(bundle.data["title"]) try: bundle.data["description"] = json.loads(bundle.data["description"]) except: pass course = Course.objects.get(pk=bundle.obj.pk) schedule = course.get_default_schedule() cohort = Cohort.member_now(course, bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data["schedule"] = schedule.lastupdated_date.strftime("%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data["schedule_uri"] = sr.get_resource_uri(schedule) return bundle