File tree Expand file tree Collapse file tree 2 files changed +20
-1
lines changed
Expand file tree Collapse file tree 2 files changed +20
-1
lines changed Original file line number Diff line number Diff line change 1414
1515"""Representation of an ObjectId for Mongo."""
1616
17+ import datetime
1718import threading
1819import types
1920import time
@@ -159,9 +160,21 @@ def get_binary(self):
159160 """Get the binary representation of this ObjectId.
160161 """
161162 return self .__id
162-
163163 binary = property (get_binary )
164164
165+ def generation_time (self ):
166+ """A :class:`datetime.datetime` instance representing the time of
167+ generation for this :class:`ObjectId`.
168+
169+ The :class:`datetime.datetime` is always naive and represents the
170+ generation time in UTC. It is precise to the second.
171+
172+ .. versionadded:: 1.1.2+
173+ """
174+ t = struct .unpack (">i" , self .__id [0 :4 ])[0 ]
175+ return datetime .datetime .utcfromtimestamp (t )
176+ generation_time = property (generation_time )
177+
165178 def __str__ (self ):
166179 return self .__id .encode ("hex" )
167180
Original file line number Diff line number Diff line change 1414
1515"""Tests for the objectid module."""
1616
17+ import datetime
1718import unittest
1819import sys
1920sys .path [0 :0 ] = ["" ]
@@ -104,6 +105,11 @@ def test_multiprocessing(self):
104105 self .assert_ (id not in map )
105106 map [id ] = True
106107
108+ def test_generation_time (self ):
109+ d1 = datetime .datetime .utcnow ()
110+ d2 = ObjectId ().generation_time
111+
112+ self .assert_ (d2 - d1 < datetime .timedelta (seconds = 2 ))
107113
108114if __name__ == "__main__" :
109115 unittest .main ()
You can’t perform that action at this time.
0 commit comments