11from __future__ import print_function
22from __future__ import absolute_import
33import logging
4+ import copy
45from os .path import dirname , basename
56
67from irods .manager import Manager
910from irods .models import (DataObject , Collection , Resource ,
1011 User , DataObjectMeta , CollectionMeta , ResourceMeta , UserMeta )
1112from irods .meta import iRODSMeta , AVUOperation
13+ import irods .keywords as kw
1214
1315
1416logger = logging .getLogger (__name__ )
@@ -19,6 +21,19 @@ class InvalidAtomicAVURequest(Exception): pass
1921
2022class MetadataManager (Manager ):
2123
24+ __kw = {} # default (empty) keywords
25+
26+ def _updated_keywords (self ,opts ):
27+ kw_ = self .__kw .copy ()
28+ kw_ .update (opts )
29+ return kw_
30+
31+ def __call__ (self , admin = False , ** irods_kw_opt ):
32+ x = copy .copy (self )
33+ irods_kw_opt .update ([() if not admin else (kw .ADMIN_KW ,"" )])
34+ x .__kw = irods_kw_opt
35+ return x
36+
2237 @staticmethod
2338 def _model_class_to_resource_type (model_cls ):
2439 return {
@@ -63,7 +78,7 @@ def get(self, model_cls, path):
6378 avu_id = row [model .id ]
6479 ) for row in results ]
6580
66- def add (self , model_cls , path , meta ):
81+ def add (self , model_cls , path , meta , ** opts ):
6782 # Avoid sending request with empty argument(s)
6883 if not (len (path ) and len (meta .name ) and len (meta .value )):
6984 raise ValueError ('Empty value in ' + repr (meta ))
@@ -75,7 +90,8 @@ def add(self, model_cls, path, meta):
7590 path ,
7691 meta .name ,
7792 meta .value ,
78- meta .units
93+ meta .units ,
94+ ** self ._updated_keywords (opts )
7995 )
8096 request = iRODSMessage ("RODS_API_REQ" , msg = message_body ,
8197 int_info = api_number ['MOD_AVU_METADATA_AN' ])
@@ -84,15 +100,16 @@ def add(self, model_cls, path, meta):
84100 response = conn .recv ()
85101 logger .debug (response .int_info )
86102
87- def remove (self , model_cls , path , meta ):
103+ def remove (self , model_cls , path , meta , ** opts ):
88104 resource_type = self ._model_class_to_resource_type (model_cls )
89105 message_body = session_cache (MetadataRequest ,self .sess )(
90106 "rm" ,
91107 "-" + resource_type ,
92108 path ,
93109 meta .name ,
94110 meta .value ,
95- meta .units
111+ meta .units ,
112+ ** self ._updated_keywords (opts )
96113 )
97114 request = iRODSMessage ("RODS_API_REQ" , msg = message_body ,
98115 int_info = api_number ['MOD_AVU_METADATA_AN' ])
@@ -101,15 +118,16 @@ def remove(self, model_cls, path, meta):
101118 response = conn .recv ()
102119 logger .debug (response .int_info )
103120
104- def copy (self , src_model_cls , dest_model_cls , src , dest ):
121+ def copy (self , src_model_cls , dest_model_cls , src , dest , ** opts ):
105122 src_resource_type = self ._model_class_to_resource_type (src_model_cls )
106123 dest_resource_type = self ._model_class_to_resource_type (dest_model_cls )
107124 message_body = session_cache (MetadataRequest ,self .sess )(
108125 "cp" ,
109126 "-" + src_resource_type ,
110127 "-" + dest_resource_type ,
111128 src ,
112- dest
129+ dest ,
130+ ** self ._updated_keywords (opts )
113131 )
114132 request = iRODSMessage ("RODS_API_REQ" , msg = message_body ,
115133 int_info = api_number ['MOD_AVU_METADATA_AN' ])
@@ -119,15 +137,16 @@ def copy(self, src_model_cls, dest_model_cls, src, dest):
119137 response = conn .recv ()
120138 logger .debug (response .int_info )
121139
122- def set (self , model_cls , path , meta ):
140+ def set (self , model_cls , path , meta , ** opts ):
123141 resource_type = self ._model_class_to_resource_type (model_cls )
124142 message_body = session_cache (MetadataRequest ,self .sess )(
125143 "set" ,
126144 "-" + resource_type ,
127145 path ,
128146 meta .name ,
129147 meta .value ,
130- meta .units
148+ meta .units ,
149+ ** self ._updated_keywords (opts )
131150 )
132151 request = iRODSMessage ("RODS_API_REQ" , msg = message_body ,
133152 int_info = api_number ['MOD_AVU_METADATA_AN' ])
0 commit comments