14
14
import datetime
15
15
import json
16
16
import re
17
+ import dateutil .parser
17
18
import collections
18
19
from collections import defaultdict
19
20
179
180
180
181
181
182
# Datatypes
182
- _r_xsd_dateTime = re .compile (""" ^
183
- (?P<year>-?[0-9]{4}) - (?P<month>[0-9]{2}) - (?P<day>[0-9]{2})
184
- T (?P<hour>[0-9]{2}) : (?P<minute>[0-9]{2}) : (?P<second>[0-9]{2})
185
- (?P<microsecond>\.[0-9]{1,6})?
186
- (?P<tz>
187
- Z | (?P<tz_hr>[-+][0-9]{2}) : (?P<tz_min>[0-9]{2})
188
- )?
189
- $ """ , re .X )
190
-
191
183
attr2rdf = lambda attr : PROV [PROV_ID_ATTRIBUTES_MAP [attr ].split ('prov:' )[1 ]].rdf_representation ()
192
184
193
185
def _parse_xsd_dateTime (s ):
194
- """Returns datetime or None."""
195
- m = _r_xsd_dateTime .match (s )
196
- if m is not None :
197
- values = m .groupdict ()
198
- if values ["microsecond" ] is None :
199
- values ["microsecond" ] = 0
200
- else :
201
- values ["microsecond" ] = values ["microsecond" ][1 :]
202
- values ["microsecond" ] += "0" * (6 - len (values ["microsecond" ]))
203
- values = dict ((k , int (v )) for k , v in values .iteritems () if not k .startswith ("tz" ))
204
- return datetime .datetime (** values )
205
- else :
206
- return None
186
+ return dateutil .parser .parse (s )
207
187
208
188
209
189
def _ensure_datetime (time ):
@@ -359,7 +339,7 @@ def provn_representation(self):
359
339
360
340
def json_representation (self ):
361
341
return {'$' : self ._uri , 'type' : u'xsd:anyURI' }
362
-
342
+
363
343
def rdf_representation (self ):
364
344
return URIRef (self .get_uri ())
365
345
@@ -773,7 +753,7 @@ def rdf(self, graph=None, subj=None):
773
753
obj = RDFLiteral (value )
774
754
graph .add ((subj , pred , obj ))
775
755
return graph
776
-
756
+
777
757
def is_asserted (self ):
778
758
return self ._asserted
779
759
@@ -788,7 +768,7 @@ def is_relation(self):
788
768
class ProvElement (ProvRecord ):
789
769
def is_element (self ):
790
770
return True
791
-
771
+
792
772
def rdf (self , graph = None ):
793
773
if graph is None :
794
774
graph = Graph ()
@@ -1666,15 +1646,15 @@ def rdf(self, graph=None):
1666
1646
# graph should not None here
1667
1647
uri = self .get_identifier ().rdf_representation ()
1668
1648
graph = Graph (graph .store , uri )
1669
-
1649
+
1670
1650
for prefix , namespace in self ._namespaces .items ():
1671
1651
graph .bind (prefix , namespace .get_uri ())
1672
-
1652
+
1673
1653
for record in self ._records :
1674
1654
if record .is_asserted ():
1675
1655
record .rdf (graph )
1676
1656
return graph
1677
-
1657
+
1678
1658
def get_provjson (self , ** kw ):
1679
1659
"""Return the `PROV-JSON <http://www.w3.org/Submission/prov-json/>`_ representation for the bundle/document.
1680
1660
0 commit comments