def handle_requirements_upload(self, request, suffix=u''):
        """Handles uploading of requirements.txt"""

        _ = self.runtime.service(self, "i18n").ugettext

        log.info("Handling requirements.txt upload for course: {}, xblock: {}"\
            .format(str(self.course_id), str(self.location)))
        try:
            f = request.params['file']
            nbu.update_requirements(str(self.course_id), f)
            req = nbu.get_requirements(str(self.course_id))
            response = {'success': True, 'requirements': "<br>".join(req)}

        except Exception as e:
            raise_condition = "No File Attached"
            response = {
                'success': False,
                'error': _(raise_condition)
            } if str(e) == raise_condition else {
                'success': False,
                'error': str(e)
            }
        return Response(body=json.dumps(response),
                        content_type="application/json",
                        status=200)
    def handle_requirements_upload(self, request, suffix=u''):
        """Handles uploading of requirements.txt"""
        log.info("Handling requirements.txt upload for course: {}, xblock: {}"\
            .format(str(self.course_id), str(self.location)))
        try:
            f = request.params['file']
            nbu.update_requirements(str(self.course_id), f)
            req = nbu.get_requirements(str(self.course_id))
            response = {'success': True, 'requirements': "<br>".join(req)}

        except Exception as e:
            response = {'success': False, 'error': str(e)}

        return Response(body=json.dumps(response),
                        content_type="application/json",
                        status=200)
    def author_view(self, context=None):
        """View shown in the CMS XBlock preview"""
        # Setup last uploaded datetime
        upload_dt = ''
        if self.nb_upload_datetime:
            dt = dateparse.parse_datetime(self.nb_upload_datetime)
            upload_dt = dt.strftime("%Y-%m-%d %H:%M:%S") + " UTC"
        req = nbu.get_requirements(str(self.course_id))

        self.init_emulation()
        fragment = Fragment()

        # HTML Template and Context
        ctx_data = {
            'title': self.display_name,
            'instructions': self.instructions,
            'requirements': req,
            'max_attempts': self.max_attempts,
            'student_attempts': self.student_attempts,
            'student_score': self.student_score,
            'max_score': "{:0.2f}".format(self.raw_possible),
            'nb_name': self.nb_name,
            'inst_disabled': '',
            'student_disabled': 'disabled',
            'nb_upload_date': upload_dt,
            'student_download_url': self._get_nb_url('student'),
            'instructor_download_url': self._get_nb_url('instructor'),
            'xblock_id': self._get_xblock_loc(),
        }

        fragment.add_content(
            loader.render_django_template(
                'templates/xblock_jupyter_graded/author_view.html',
                context=ctx_data,
                i18n_service=self.runtime.service(self, "i18n"),
            ))
        fragment.add_css(loader.load_unicode('public/css/styles.css'))
        fragment.add_javascript(loader.load_unicode('public/js/author.js'))
        fragment.add_javascript(self.get_translation_content())
        fragment.initialize_js('JupyterGradedXBlock',
                               {'xblock_id': self._get_xblock_loc()})

        return fragment