1616import re
1717from datetime import datetime
1818
19- from tincan .serializable_base import SerializableBase
19+ from tincan .statement_base import StatementBase
2020from tincan .agent import Agent
2121from tincan .group import Group
22- from tincan .verb import Verb
23- from tincan .attachment import Attachment
24- from tincan .attachment_list import AttachmentList
2522from tincan .result import Result
26- from tincan .context import Context
2723from tincan .substatement import SubStatement
2824from tincan .statement_ref import StatementRef
2925from tincan .activity import Activity
3430 :synopsis: A Statement object that contains all the information for one statement that is sent to an LRS
3531"""
3632
37- class Statement (SerializableBase ):
33+ class Statement (StatementBase ):
34+
35+ _UUID_REGEX = re .compile (
36+ r'^[a-f0-9]{8}-'
37+ r'[a-f0-9]{4}-'
38+ r'[1-5][a-f0-9]{3}-'
39+ r'[89ab][a-f0-9]{3}-'
40+ r'[a-f0-9]{12}$'
41+ )
3842
3943 _props_req = [
4044 "id" ,
@@ -78,60 +82,6 @@ def id(self, value):
7882 def id (self ):
7983 del self ._id
8084
81- @property
82- def actor (self ):
83- """Actor for Statement
84-
85- :setter: Tries to convert to Agent or Group
86- :setter type: :mod:`tincan.agent` | :mod:`tincan.group`
87- :rtype: :mod:`tincan.agent` | :mod:`tincan.group`
88-
89- """
90- return self ._actor
91-
92- @actor .setter
93- def actor (self , value ):
94- if value is not None and not isinstance (value , Agent ) and not isinstance (value , Group ):
95- if isinstance (value , dict ):
96- if 'object_type' in value or 'objectType' in value :
97- if 'objectType' in value :
98- value ['object_type' ] = value ['objectType' ]
99- value .pop ('objectType' )
100- if value ['object_type' ] == 'Agent' :
101- value = Agent (value )
102- elif value ['object_type' ] == 'Group' :
103- value = Group (value )
104- else :
105- value = Agent (value )
106- else :
107- value = Agent (value )
108- self ._actor = value
109-
110- @actor .deleter
111- def actor (self ):
112- del self ._actor
113-
114- @property
115- def verb (self ):
116- """Verb for Statement
117-
118- :setter: Tries to convert to Verb
119- :setter type: :mod:`tincan.verb`
120- :rtype: :mod:`tincan.verb`
121-
122- """
123- return self ._verb
124-
125- @verb .setter
126- def verb (self , value ):
127- if value is not None and not isinstance (value , Verb ):
128- value = Verb (value )
129- self ._verb = value
130-
131- @verb .deleter
132- def verb (self ):
133- del self ._verb
134-
13585 @property
13686 def object (self ):
13787 """Object for Statement
@@ -172,54 +122,6 @@ def object(self, value):
172122 def object (self ):
173123 del self ._object
174124
175- @property
176- def timestamp (self ):
177- """Timestamp for Statement
178-
179- :setter: Tries to convert to :class:`datetime.datetime`. If
180- no timezone is given, makes a naive `datetime.datetime`.
181-
182- Strings will be parsed as ISO 8601 timestamps.
183-
184- If a number is provided, it will be interpreted as a UNIX
185- timestamp, which by definition is UTC.
186-
187- If a `dict` is provided, does `datetime.datetime(**value)`.
188-
189- If a `tuple` or a `list` is provided, does
190- `datetime.datetime(*value)`. Uses the timezone in the tuple or
191- list if provided.
192-
193- :setter type: :class:`datetime.datetime` | unicode | str | int | float | dict | tuple | list | None
194- :rtype: :class:`datetime.datetime`
195- """
196- return self ._timestamp
197-
198- @timestamp .setter
199- def timestamp (self , value ):
200- if value is None :
201- self ._timestamp = value
202- return
203-
204- try :
205- self ._timestamp = make_datetime (value )
206- except TypeError as e :
207- e .message = (
208- "Property 'timestamp' in a 'tincan.%s' "
209- "object must be set with a "
210- "datetime.datetime, str, unicode, int, float, dict "
211- "or None.\n \n %s" %
212- (
213- self .__class__ .__name__ ,
214- e .message ,
215- )
216- )
217- raise e
218-
219- @timestamp .deleter
220- def timestamp (self ):
221- del self ._timestamp
222-
223125 @property
224126 def stored (self ):
225127 """Storage time. Tries to convert to :class:`datetime.datetime`.
@@ -243,7 +145,7 @@ def stored(self):
243145
244146 @stored .setter
245147 def stored (self , value ):
246- if value is None :
148+ if value is None or isinstance ( value , datetime ) :
247149 self ._stored = value
248150 return
249151
@@ -308,27 +210,6 @@ def result(self, value):
308210 def result (self ):
309211 del self ._result
310212
311- @property
312- def context (self ):
313- """Context for Statement
314-
315- :setter: Tries to convert to Context
316- :setter type: :mod:`tincan.context`
317- :rtype: :mod:`tincan.context`
318-
319- """
320- return self ._context
321-
322- @context .setter
323- def context (self , value ):
324- if value is not None and not isinstance (value , Context ):
325- value = Context (value )
326- self ._context = value
327-
328- @context .deleter
329- def context (self ):
330- del self ._context
331-
332213 @property
333214 def version (self ):
334215 """Version for Statement
@@ -351,28 +232,4 @@ def version(self, value):
351232
352233 @version .deleter
353234 def version (self ):
354- del self ._version
355-
356- @property
357- def attachments (self ):
358- """Attachments for Statement
359-
360- :setter: Tries to convert each element to Attachment
361- :setter type: :mod:`tincan.attachment_list`
362- :rtype: :mod:`tincan.attachment_list`
363-
364- """
365- return self ._attachments
366-
367- @attachments .setter
368- def attachments (self , value ):
369- if value is not None and not isinstance (value , AttachmentList ):
370- try :
371- value = AttachmentList ([Attachment (value )])
372- except (TypeError , AttributeError ):
373- value = AttachmentList (value )
374- self ._attachments = value
375-
376- @attachments .deleter
377- def attachments (self ):
378- del self ._attachments
235+ del self ._version
0 commit comments