[ARVADOS] updated: 1.1.4-320-g4f0c3d5

Git user git at public.curoverse.com
Tue Jun 5 08:42:26 EDT 2018


Summary of changes:
 sdk/python/arvados/collection.py     | 36 ++++++++++++++++++++++++++++++------
 sdk/python/tests/test_collections.py | 27 ++++++++++++++++++++-------
 2 files changed, 50 insertions(+), 13 deletions(-)

       via  4f0c3d501d19bed5915d5d188598d3a7f1dec7f8 (commit)
      from  3c2266151711f532491a2369de37086bd7234dce (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 4f0c3d501d19bed5915d5d188598d3a7f1dec7f8
Author: Fuad Muhic <fmuhic at capeannenterprises.com>
Date:   Tue Jun 5 14:03:38 2018 +0200

    Add getters for properties and trash_at attributes and small bugfix for
    save and save_new methods in Collection class.
    
    Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic at capeannenterprises.com>

diff --git a/sdk/python/arvados/collection.py b/sdk/python/arvados/collection.py
index dde7324..e38a6bd 100644
--- a/sdk/python/arvados/collection.py
+++ b/sdk/python/arvados/collection.py
@@ -13,6 +13,8 @@ import os
 import re
 import errno
 import hashlib
+import datetime
+import ciso8601
 import time
 import threading
 
@@ -1269,6 +1271,18 @@ class Collection(RichCollectionBase):
     def root_collection(self):
         return self
 
+    def get_properties(self):
+        if self._api_response and self._api_response["properties"]:
+            return self._api_response["properties"]
+        else:
+            return {}
+
+    def get_trash_at(self):
+        if self._api_response and self._api_response["trash_at"]:
+            return ciso8601.parse_datetime(self._api_response["trash_at"])
+        else:
+            return None
+
     def stream_name(self):
         return "."
 
@@ -1453,7 +1467,8 @@ class Collection(RichCollectionBase):
         `save_new()`.
 
         :properties:
-          Additional properties of collection.
+          Additional properties of collection. This value will replace any existing
+          properties of collection.
 
         :storage_classes:
           Specify desirable storage classes to be used when writing data to Keep.
@@ -1477,13 +1492,17 @@ class Collection(RichCollectionBase):
         if storage_classes and type(storage_classes) is not list:
             raise errors.ArgumentError("storage_classes must be list type.")
 
+        if trash_at and type(trash_at) is not datetime.datetime:
+            raise errors.ArgumentError("trash_at must be datetime type.")
+
         body={}
         if properties:
             body["properties"] = properties
         if storage_classes:
             body["storage_classes_desired"] = storage_classes
-        if storage_classes:
-            body["trash_at"] = trash_at
+        if trash_at:
+            t = trash_at.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+            body["trash_at"] = t
 
         if not self.committed():
             if not self._has_collection_uuid():
@@ -1543,7 +1562,8 @@ class Collection(RichCollectionBase):
           If None, defaults to the current user.
 
         :properties:
-          Additional properties of collection.
+          Additional properties of collection. This value will replace any existing
+          properties of collection.
 
         :storage_classes:
           Specify desirable storage classes to be used when writing data to Keep.
@@ -1568,6 +1588,9 @@ class Collection(RichCollectionBase):
         if storage_classes and type(storage_classes) is not list:
             raise errors.ArgumentError("storage_classes must be list type.")
 
+        if trash_at and type(trash_at) is not datetime.datetime:
+            raise errors.ArgumentError("trash_at must be datetime type.")
+
         self._my_block_manager().commit_all()
         text = self.manifest_text(strip=False)
 
@@ -1585,8 +1608,9 @@ class Collection(RichCollectionBase):
                 body["properties"] = properties
             if storage_classes:
                 body["storage_classes_desired"] = storage_classes
-            if storage_classes:
-                body["trash_at"] = trash_at
+            if trash_at:
+                t = trash_at.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+                body["trash_at"] = t
 
             self._remember_api_response(self._my_api().collections().create(ensure_unique_name=ensure_unique_name, body=body).execute(num_retries=num_retries))
             text = self._api_response["manifest_text"]
diff --git a/sdk/python/tests/test_collections.py b/sdk/python/tests/test_collections.py
index e00c971..b921cd7 100644
--- a/sdk/python/tests/test_collections.py
+++ b/sdk/python/tests/test_collections.py
@@ -14,6 +14,7 @@ import random
 import re
 import sys
 import tempfile
+import datetime
 import time
 import unittest
 
@@ -802,6 +803,18 @@ class CollectionMethods(run_test_server.TestCaseWithServers):
         self.assertEqual(fn0, c.items()[0][0])
         self.assertEqual(fn1, c.items()[1][0])
 
+    def test_get_properties(self):
+        c = Collection()
+        self.assertEqual(c.get_properties(), {})
+        c.save_new(properties={"foo":"bar"})
+        self.assertEqual(c.get_properties(), {"foo":"bar"})
+
+    def test_get_trash_at(self):
+        c = Collection()
+        self.assertEqual(c.get_trash_at(), None)
+        c.save_new(trash_at=datetime.datetime(2111, 1, 1, 11, 11, 11, 111))
+        self.assertEqual(c.get_trash_at(), datetime.datetime(2111, 1, 1, 11, 11, 11, 111))
+
 
 class CollectionOpenModes(run_test_server.TestCaseWithServers):
 
@@ -1302,41 +1315,41 @@ class CollectionCreateUpdateTest(run_test_server.TestCaseWithServers):
         c = self.create_count_txt()
         c.save(properties={'type' : 'Intermediate'},
                storage_classes=['archive'],
-               trash_at='2100-01-01T00:00:00.000000000Z')
+               trash_at=datetime.datetime(2111, 1, 1, 11, 11, 11, 111111))
 
         self.assertRegex(
             c.manifest_text(),
             r"^\. 781e5e245d69b566979b86e28d23f2c7\+10\+A[a-f0-9]{40}@[a-f0-9]{8} 0:10:count\.txt$",)
         self.assertEqual(c.api_response()["storage_classes_desired"], ['archive'])
         self.assertEqual(c.api_response()["properties"], {'type' : 'Intermediate'})
-        self.assertEqual(c.api_response()["trash_at"], '2100-01-01T00:00:00.000000000Z')
+        self.assertEqual(c.api_response()["trash_at"], '2111-01-01T11:11:11.111111000Z')
 
 
     def test_create_and_save_new(self):
         c = self.create_count_txt()
         c.save_new(properties={'type' : 'Intermediate'},
                    storage_classes=['archive'],
-                   trash_at='2100-01-01T00:00:00.000000000Z')
+                   trash_at=datetime.datetime(2111, 1, 1, 11, 11, 11, 111111))
 
         self.assertRegex(
             c.manifest_text(),
             r"^\. 781e5e245d69b566979b86e28d23f2c7\+10\+A[a-f0-9]{40}@[a-f0-9]{8} 0:10:count\.txt$",)
         self.assertEqual(c.api_response()["storage_classes_desired"], ['archive'])
         self.assertEqual(c.api_response()["properties"], {'type' : 'Intermediate'})
-        self.assertEqual(c.api_response()["trash_at"], '2100-01-01T00:00:00.000000000Z')
+        self.assertEqual(c.api_response()["trash_at"], '2111-01-01T11:11:11.111111000Z')
 
     def test_create_and_save_after_commiting(self):
         c = self.create_count_txt()
         c.save(properties={'type' : 'Intermediate'},
                storage_classes=['hot'],
-               trash_at='2100-01-01T00:00:00.000000000Z')
+               trash_at=datetime.datetime(2111, 1, 1, 11, 11, 11, 111111))
         c.save(properties={'type' : 'Output'},
                storage_classes=['cold'],
-               trash_at='2200-02-02T22:22:22.222222222Z')
+               trash_at=datetime.datetime(2222, 2, 2, 22, 22, 22, 222222))
 
         self.assertEqual(c.api_response()["storage_classes_desired"], ['cold'])
         self.assertEqual(c.api_response()["properties"], {'type' : 'Output'})
-        self.assertEqual(c.api_response()["trash_at"], '2200-02-02T22:22:22.222222222Z')
+        self.assertEqual(c.api_response()["trash_at"], '2222-02-02T22:22:22.222222000Z')
 
     def test_create_diff_apply(self):
         c1 = self.create_count_txt()

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list