From e80f4b6b6b90a8149a14c528ee9d206bedf7d3a1 Mon Sep 17 00:00:00 2001 From: Alan Boudreault Date: Mon, 8 May 2017 15:14:16 -0400 Subject: [PATCH] Add Duration support to cqlengine --- cassandra/cqlengine/columns.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cassandra/cqlengine/columns.py b/cassandra/cqlengine/columns.py index 92d7c470..25854add 100644 --- a/cassandra/cqlengine/columns.py +++ b/cassandra/cqlengine/columns.py @@ -22,6 +22,7 @@ from cassandra import util from cassandra.cqltypes import SimpleDateType, _cqltypes, UserType from cassandra.cqlengine import ValidationError from cassandra.cqlengine.functions import get_total_seconds +from cassandra.util import Duration as _Duration log = logging.getLogger(__name__) @@ -598,6 +599,25 @@ class Time(Column): return value if isinstance(value, util.Time) else util.Time(value) +class Duration(Column): + """ + Stores a duration (months, days, nanoseconds) + + .. versionadded:: 3.10.0 + + requires C* 3.10+ and protocol v4+ + """ + db_type = 'duration' + + def validate(self, value): + val = super(Duration, self).validate(value) + if val is None: + return + if not isinstance(val, _Duration): + raise TypeError('{0} {1} is not a valid Duration.'.format(self.column_name, value)) + return val + + class UUID(Column): """ Stores a type 1 or 4 UUID