diff --git a/irods/models.py b/irods/models.py index 8986d6a22..99df3db55 100644 --- a/irods/models.py +++ b/irods/models.py @@ -47,6 +47,8 @@ class Zone(Model): type = Column(String, "ZONE_TYPE", 103) connection = Column(String, "ZONE_CONNECTION", 104) comment = Column(String, "ZONE_COMMENT", 105) + create_time = Column(DateTime, "ZONE_CREATE_TIME", 106) + modify_time = Column(DateTime, "ZONE_MODIFY_TIME", 107) class User(Model): diff --git a/irods/test/zone_test.py b/irods/test/zone_test.py index 2e1049a1d..d8b4543c4 100644 --- a/irods/test/zone_test.py +++ b/irods/test/zone_test.py @@ -2,6 +2,7 @@ import os import sys +import time import unittest from datetime import datetime as _datetime @@ -106,6 +107,37 @@ def test_create_remote_zone_and_update_properties__issue_816(self): if newzone: newzone.remove() + def test_zone_create_and_modify_times__issue_822(self): + newzone = None + try: + # Create new zone + newzonename = "otherzone" + newzone = self.sess.zones.create(newzonename, "remote") + query_zone = self.sess.query(Zone).filter(Zone.name == newzonename).one() + create_time = query_zone[Zone.create_time] + old_modify_time = query_zone[Zone.modify_time] + + # Confirm that creation/modification are datetimes + self.assertIsInstance(create_time, _datetime) + self.assertIsInstance(old_modify_time, _datetime) + + # Confirm we get the same result via query vs. iRODSZone object attribute + self.assertEqual(create_time, self.sess.zones.get(newzonename).create_time) + self.assertEqual(old_modify_time, self.sess.zones.get(newzonename).modify_time) + + # Confirm modify time is updated after comment change after more than one second, + # but create time is not changed. + time.sleep(1.5) + newzone.modify("comment", "some comment") + query_zone = self.sess.query(Zone).filter(Zone.name == newzonename).one() + self.assertEqual(query_zone[Zone.create_time], create_time) + self.assertGreater(query_zone[Zone.modify_time], old_modify_time) + self.assertGreater(self.sess.zones.get(newzonename).modify_time, old_modify_time) + + finally: + if newzone: + newzone.remove() + if __name__ == "__main__": # let the tests find the parent irods lib diff --git a/irods/zone.py b/irods/zone.py index a3ee647bd..42bb8776b 100644 --- a/irods/zone.py +++ b/irods/zone.py @@ -11,6 +11,8 @@ def __init__(self, manager, result=None): self.type = result[Zone.type] self.connection = result[Zone.connection] self.comment = result[Zone.comment] + self.create_time = result[Zone.create_time] + self.modify_time = result[Zone.modify_time] def remove(self): self.manager.remove(self.name)