@@ -160,19 +160,44 @@ def clone(self):
160160 )
161161
162162 def __setattr__ (self , name , value ):
163- # Avoids accidentally setting a field to None when that's not a valid
164- # attribute.
165- if not value :
166- if name in Todo .RRULE_FIELDS :
167- return object .__setattr__ (self , name , '' )
168- if name in Todo .STRING_FIELDS :
169- return object .__setattr__ (self , name , '' )
170- if name in Todo .INT_FIELDS :
171- return object .__setattr__ (self , name , 0 )
172- if name in Todo .LIST_FIELDS :
173- return object .__setattr__ (self , name , [])
174-
175- return object .__setattr__ (self , name , value )
163+ """Check type and avoid setting fields to None"""
164+ """when that is not a valid attribue."""
165+
166+ v = value
167+
168+ if name in Todo .RRULE_FIELDS :
169+ if value is None :
170+ v = ''
171+ else :
172+ assert isinstance (value , str ), (
173+ "Got {0} for {1} where str was expected"
174+ .format (type (value ), name ))
175+
176+ if name in Todo .STRING_FIELDS :
177+ if value is None :
178+ v = ''
179+ else :
180+ assert isinstance (value , str ), (
181+ "Got {0} for {1} where str was expected"
182+ .format (type (value ), name ))
183+
184+ if name in Todo .INT_FIELDS :
185+ if value is None :
186+ v = 0
187+ else :
188+ assert isinstance (value , int ), (
189+ "Got {0} for {1} where int was expected"
190+ .format (type (value ), name ))
191+
192+ if name in Todo .LIST_FIELDS :
193+ if value is None :
194+ v = []
195+ else :
196+ assert isinstance (value , list ), (
197+ "Got {0} for {1} where list was expected"
198+ .format (type (value ), name ))
199+
200+ return object .__setattr__ (self , name , v )
176201
177202 @property
178203 def is_completed (self ):
0 commit comments