Skip to content

Commit a74c416

Browse files
d-w-moorealanking
authored andcommitted
[#364] allow ADMIN_KW in all metadata operations
1 parent a571469 commit a74c416

2 files changed

Lines changed: 42 additions & 16 deletions

File tree

irods/manager/metadata_manager.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import print_function
22
from __future__ import absolute_import
33
import logging
4+
import copy
45
from os.path import dirname, basename
56

67
from irods.manager import Manager
@@ -9,6 +10,7 @@
910
from irods.models import (DataObject, Collection, Resource,
1011
User, DataObjectMeta, CollectionMeta, ResourceMeta, UserMeta)
1112
from irods.meta import iRODSMeta, AVUOperation
13+
import irods.keywords as kw
1214

1315

1416
logger = logging.getLogger(__name__)
@@ -19,6 +21,19 @@ class InvalidAtomicAVURequest(Exception): pass
1921

2022
class 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'])

irods/meta.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,15 @@ def __init__(self, operation, avu, **kw):
6262
setattr(self,atr,locals()[atr])
6363

6464

65+
import copy
66+
6567
class iRODSMetaCollection(object):
6668

69+
def __call__(self, admin = False, **opts):
70+
x = copy.copy(self)
71+
x._manager = (x._manager)(admin, **opts)
72+
return x
73+
6774
def __init__(self, manager, model_cls, path):
6875
self._manager = manager
6976
self._model_cls = model_cls
@@ -103,28 +110,28 @@ def apply_atomic_operations(self, *avu_ops):
103110
self._manager.apply_atomic_operations(self._model_cls, self._path, *avu_ops)
104111
self._reset_metadata()
105112

106-
def set(self, *args):
113+
def set(self, *args, **opts):
107114
"""
108115
Set as iRODSMeta to a key
109116
"""
110117
meta = self._get_meta(*args)
111-
self._manager.set(self._model_cls, self._path, meta)
118+
self._manager.set(self._model_cls, self._path, meta, **opts)
112119
self._reset_metadata()
113120

114-
def add(self, *args):
121+
def add(self, *args, **opts):
115122
"""
116123
Add as iRODSMeta to a key
117124
"""
118125
meta = self._get_meta(*args)
119-
self._manager.add(self._model_cls, self._path, meta)
126+
self._manager.add(self._model_cls, self._path, meta, **opts)
120127
self._reset_metadata()
121128

122-
def remove(self, *args):
129+
def remove(self, *args, **opts):
123130
"""
124131
Removes an iRODSMeta
125132
"""
126133
meta = self._get_meta(*args)
127-
self._manager.remove(self._model_cls, self._path, meta)
134+
self._manager.remove(self._model_cls, self._path, meta, **opts)
128135
self._reset_metadata()
129136

130137
def items(self):
@@ -179,7 +186,7 @@ def __contains__(self, key):
179186
values = self.get_all(key)
180187
return len(values) > 0
181188

182-
def remove_all(self):
189+
def remove_all(self, **opts):
183190
for meta in self._meta:
184-
self._manager.remove(self._model_cls, self._path, meta)
191+
self._manager.remove(self._model_cls, self._path, meta, **opts)
185192
self._reset_metadata()

0 commit comments

Comments
 (0)