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
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_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'))