Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions kaggle_object_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
AccessBehavior,
GetKernelListDetailsRequest,
)
from kagglesdk.kaggle_object import TimeDeltaSerializer
from kagglesdk.kernels.types.kernels_api_service import ApiGetAcceleratorQuotaStatisticsResponse

Selector = ListCompetitionsRequest.Selector

Expand Down Expand Up @@ -570,5 +572,31 @@ def test_oneof(self):
self.assertEqual("90%", operation.progress)


class TimeDeltaSerializerTests(unittest.TestCase):

def test_whole_second_duration(self):
self.assertEqual(TimeDeltaSerializer._from_dict_value("0s"), datetime.timedelta(0))
self.assertEqual(
TimeDeltaSerializer._from_dict_value("151s"),
datetime.timedelta(seconds=151),
)

def test_fractional_second_duration(self):
self.assertEqual(
TimeDeltaSerializer._from_dict_value("151.500s"),
datetime.timedelta(seconds=151, microseconds=500000),
)

def test_quota_response_deserializes_whole_second_durations(self):
response = ApiGetAcceleratorQuotaStatisticsResponse.from_json(
'{"gpuQuota":{"timeUsed":"0s","totalTimeAllowed":"151s"}}'
)
self.assertEqual(response.gpu_quota.time_used, datetime.timedelta(0))
self.assertEqual(
response.gpu_quota.total_time_allowed,
datetime.timedelta(seconds=151),
)


if __name__ == "__main__":
unittest.main()
5 changes: 4 additions & 1 deletion kagglesdk/kaggle_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,10 @@ def _nanos_to_str(nanos):

@staticmethod
def _from_dict_value(value):
(seconds, nanosRaw) = value.rstrip("s").split(".")
raw_value = value.rstrip("s")
if "." not in raw_value:
return timedelta(seconds=int(raw_value))
seconds, nanosRaw = raw_value.split(".", 1)
nanos = int(nanosRaw) * TimeDeltaSerializer.SUBSECOND_SCALING_FACTORS[len(nanosRaw)]
return timedelta(seconds=int(seconds), microseconds=int(int(nanos) / 1000))

Expand Down