示例#1
0
    def get_result(self, event):
        event_data = self.get_event_data(event)
        cur_time = event_data.get('currentTime',
                                  event_data.get('current_time', 0))
        cur_time = float('{:.2f}'.format(cur_time))
        cur_time = jsonify_timedelta((datetime.timedelta(seconds=cur_time)))

        return Result(success=True, completion=False, duration=cur_time)
    def as_version(self, version=Version.latest):
        """Returns a dict that has been modified based on versioning
        in order to be represented in JSON properly

        A class should overload as_version(self, version)
        implementation in order to tailor a more specific representation

        :param version: the relevant version. This allows for variance
         between versions
        :type version: str | unicode

        """
        if not isinstance(self, list):
            result = {}
            for k, v in self.iteritems() if isinstance(
                    self, dict) else vars(self).iteritems():
                k = self._props_corrected.get(k, k)
                if isinstance(v, SerializableBase):
                    result[k] = v.as_version(version)
                elif isinstance(v, list):
                    result[k] = []
                    for val in v:
                        if isinstance(val, SerializableBase):
                            result[k].append(val.as_version(version))
                        else:
                            result[k].append(val)
                elif isinstance(v, uuid.UUID):
                    result[k] = unicode(v)
                elif isinstance(v, datetime.timedelta):
                    result[k] = jsonify_timedelta(v)
                elif isinstance(v, datetime.datetime):
                    result[k] = jsonify_datetime(v)
                else:
                    result[k] = v
            result = self._filter_none(result)
        else:
            result = []
            for v in self:
                if isinstance(v, SerializableBase):
                    result.append(v.as_version(version))
                else:
                    result.append(v)
        return result
    def as_version(self, version=Version.latest):
        """Returns a dict that has been modified based on versioning
        in order to be represented in JSON properly

        A class should overload as_version(self, version)
        implementation in order to tailor a more specific representation

        :param version: the relevant version. This allows for variance
         between versions
        :type version: str | unicode

        """
        if not isinstance(self, list):
            result = {}
            for k, v in self.iteritems() if isinstance(self, dict) else vars(self).iteritems():
                k = self._props_corrected.get(k, k)
                if isinstance(v, SerializableBase):
                    result[k] = v.as_version(version)
                elif isinstance(v, list):
                    result[k] = []
                    for val in v:
                        if isinstance(val, SerializableBase):
                            result[k].append(val.as_version(version))
                        else:
                            result[k].append(val)
                elif isinstance(v, uuid.UUID):
                    result[k] = unicode(v)
                elif isinstance(v, datetime.timedelta):
                    result[k] = jsonify_timedelta(v)
                elif isinstance(v, datetime.datetime):
                    result[k] = jsonify_datetime(v)
                else:
                    result[k] = v
            result = self._filter_none(result)
        else:
            result = []
            for v in self:
                if isinstance(v, SerializableBase):
                    result.append(v.as_version(version))
                else:
                    result.append(v)
        return result
示例#4
0
    def get_object(self, event):
        """
        Get object for the statement.
        """
        event_data = self.get_event_data(event)
        duration = event_data.get('duration', event_data.get('duration', 0))
        total_time = jsonify_timedelta(datetime.timedelta(seconds=duration))

        return Activity(
            id=self._get_activity_id(event),
            definition=ActivityDefinition(
                type=constants.XAPI_ACTIVITY_VIDEO,
                name=LanguageMap(
                    {'en-US': 'Video'}
                ),  # TODO: get video name if possible, but not in tracking logs
                description=LanguageMap(
                    {'en-US': 'A video in an Open edX course'}),
                extensions={
                    constants.XAPI_CONTEXT_VIDEO_LENGTH: total_time,
                }),
        )
    def test_timedelta_to_iso(self):
        iso = jsonify_timedelta(timedelta(seconds=0))
        self.assertEqual(iso, 'PT00S')

        iso = jsonify_timedelta(timedelta(seconds=1))
        self.assertEqual(iso, 'PT01S')

        iso = jsonify_timedelta(timedelta(seconds=0.05))
        self.assertEqual(iso, 'PT00.05S')

        iso = jsonify_timedelta(timedelta(seconds=60.5))
        self.assertEqual(iso, 'PT01M00.5S')

        iso = jsonify_timedelta(timedelta(seconds=7261.5))
        self.assertEqual(iso, 'PT02H01M01.5S')

        iso = jsonify_timedelta(timedelta(days=2.5))
        self.assertEqual(iso, 'P2DT12H00M00S')
    def test_timedelta_to_iso(self):
        iso = jsonify_timedelta(timedelta(seconds=0))
        self.assertEqual(iso, 'PT00S')

        iso = jsonify_timedelta(timedelta(seconds=1))
        self.assertEqual(iso, 'PT01S')

        iso = jsonify_timedelta(timedelta(seconds=0.05))
        self.assertEqual(iso, 'PT00.05S')

        iso = jsonify_timedelta(timedelta(seconds=60.5))
        self.assertEqual(iso, 'PT01M00.5S')

        iso = jsonify_timedelta(timedelta(seconds=7261.5))
        self.assertEqual(iso, 'PT02H01M01.5S')

        iso = jsonify_timedelta(timedelta(days=2.5))
        self.assertEqual(iso, 'P2DT12H00M00S')
    def test_bad_timedelta_to_iso(self):
        with self.assertRaises(AssertionError):
            jsonify_timedelta(0)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(0.0)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(1)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(1.5)

        with self.assertRaises(AssertionError):
            jsonify_timedelta('PT12H')

        with self.assertRaises(AssertionError):
            jsonify_timedelta('2014-06-19T17:03:17.361077-05:00')

        with self.assertRaises(AssertionError):
            jsonify_timedelta(('bad', 'stuff'))
    def test_bad_timedelta_to_iso(self):
        with self.assertRaises(AssertionError):
            jsonify_timedelta(0)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(0.0)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(1)

        with self.assertRaises(AssertionError):
            jsonify_timedelta(1.5)

        with self.assertRaises(AssertionError):
            jsonify_timedelta('PT12H')

        with self.assertRaises(AssertionError):
            jsonify_timedelta('2014-06-19T17:03:17.361077-05:00')

        with self.assertRaises(AssertionError):
            jsonify_timedelta(('bad', 'stuff'))