Skip to content

Commit 5d77066

Browse files
d-w-moorealanking
authored andcommitted
[#369] remove dynamic generation of message classes
Revert to a single version of each of the classes: - MetadataRequest - TicketAdminRequest class since altering the definition of these PackStruct message classes based on iRODS server version turns out to be unnecessary. The KeyValPair element of the message, used to convey the ADMIN_KW value for newer iRODS servers, is actually ignored by the older servers. Also, skip the metadata and ticket tests of the newer ADMIN_KW functionality if the detected server version pre-dates that keyword.
1 parent be92b5b commit 5d77066

5 files changed

Lines changed: 51 additions & 79 deletions

File tree

irods/manager/metadata_manager.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from os.path import dirname, basename
66

77
from irods.manager import Manager
8-
from irods.message import (MetadataRequest, iRODSMessage, JSON_Message, session_cache)
8+
from irods.message import (MetadataRequest, iRODSMessage, JSON_Message)
99
from irods.api_number import api_number
1010
from irods.models import (DataObject, Collection, Resource,
1111
User, DataObjectMeta, CollectionMeta, ResourceMeta, UserMeta)
@@ -100,7 +100,7 @@ def add(self, model_cls, path, meta, **opts):
100100
raise ValueError('Empty value in ' + repr(meta))
101101

102102
resource_type = self._model_class_to_resource_type(model_cls)
103-
message_body = session_cache(MetadataRequest,self.sess)(
103+
message_body = MetadataRequest(
104104
"add",
105105
"-" + resource_type,
106106
path,
@@ -118,7 +118,7 @@ def add(self, model_cls, path, meta, **opts):
118118

119119
def remove(self, model_cls, path, meta, **opts):
120120
resource_type = self._model_class_to_resource_type(model_cls)
121-
message_body = session_cache(MetadataRequest,self.sess)(
121+
message_body = MetadataRequest(
122122
"rm",
123123
"-" + resource_type,
124124
path,
@@ -137,7 +137,7 @@ def remove(self, model_cls, path, meta, **opts):
137137
def copy(self, src_model_cls, dest_model_cls, src, dest, **opts):
138138
src_resource_type = self._model_class_to_resource_type(src_model_cls)
139139
dest_resource_type = self._model_class_to_resource_type(dest_model_cls)
140-
message_body = session_cache(MetadataRequest,self.sess)(
140+
message_body = MetadataRequest(
141141
"cp",
142142
"-" + src_resource_type,
143143
"-" + dest_resource_type,
@@ -155,7 +155,7 @@ def copy(self, src_model_cls, dest_model_cls, src, dest, **opts):
155155

156156
def set(self, model_cls, path, meta, **opts):
157157
resource_type = self._model_class_to_resource_type(model_cls)
158-
message_body = session_cache(MetadataRequest,self.sess)(
158+
message_body = MetadataRequest(
159159
"set",
160160
"-" + resource_type,
161161
path,

irods/message/__init__.py

Lines changed: 38 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -661,47 +661,36 @@ class ObjCopyRequest(Message):
661661
srcDataObjInp_PI = SubmessageProperty(FileOpenRequest)
662662
destDataObjInp_PI = SubmessageProperty(FileOpenRequest)
663663

664-
#in iRODS <= 4.2.11:
665-
# define ModAVUMetadataInp_PI "str *arg0; str *arg1; str *arg2; str *arg3;
666-
# str *arg4; str *arg5; str *arg6; str *arg7; str *arg8; str *arg9;"
667664

668-
#in iRODS > 4.2.11:
669665
# define ModAVUMetadataInp_PI "str *arg0; str *arg1; str *arg2; str *arg3;
670666
# str *arg4; str *arg5; str *arg6; str *arg7; str *arg8; str *arg9; struct KeyValPair_PI"
671667

672-
def MetadataRequest(session):
673-
674-
SERVER_REQUIRES_KEYVAL_PAIRS = (session.server_version >= (4,2,12))
668+
class MetadataRequest(Message):
669+
_name = 'ModAVUMetadataInp_PI'
675670

676-
class MetadataRequest_(Message):
677-
_name = 'ModAVUMetadataInp_PI'
671+
def __init__(self, *args, **metadata_opts):
672+
super(MetadataRequest, self).__init__()
673+
for i in range(len(args)):
674+
if args[i]:
675+
setattr(self, 'arg%d' % i, args[i])
676+
self.KeyValPair_PI = StringStringMap(metadata_opts)
678677

679-
def __init__(self, *args, **metadata_opts):
680-
super(MetadataRequest_, self).__init__()
681-
for i in range(len(args)):
682-
if args[i]:
683-
setattr(self, 'arg%d' % i, args[i])
684-
if SERVER_REQUIRES_KEYVAL_PAIRS:
685-
self.KeyValPair_PI = StringStringMap(metadata_opts)
686-
687-
arg0 = StringProperty()
688-
arg1 = StringProperty()
689-
arg2 = StringProperty()
690-
arg3 = StringProperty()
691-
arg4 = StringProperty()
692-
arg5 = StringProperty()
693-
arg6 = StringProperty()
694-
arg7 = StringProperty()
695-
arg8 = StringProperty()
696-
arg9 = StringProperty()
678+
arg0 = StringProperty()
679+
arg1 = StringProperty()
680+
arg2 = StringProperty()
681+
arg3 = StringProperty()
682+
arg4 = StringProperty()
683+
arg5 = StringProperty()
684+
arg6 = StringProperty()
685+
arg7 = StringProperty()
686+
arg8 = StringProperty()
687+
arg9 = StringProperty()
697688

698-
if SERVER_REQUIRES_KEYVAL_PAIRS:
699-
KeyValPair_PI = SubmessageProperty(StringStringMap)
689+
KeyValPair_PI = SubmessageProperty(StringStringMap)
700690

701-
return MetadataRequest_
702691

703-
# define modAccessControlInp_PI "int recursiveFlag; str *accessLevel; str
704-
# *userName; str *zone; str *path;"
692+
# define modAccessControlInp_PI "int recursiveFlag; str *accessLevel; str
693+
# *userName; str *zone; str *path;"
705694

706695

707696
class ModAclRequest(Message):
@@ -799,36 +788,26 @@ class GetTempPasswordOut(Message):
799788
#in iRODS >= 4.2.11:
800789
#define ticketAdminInp_PI "str *arg1; str *arg2; str *arg3; str *arg4; str *arg5; str *arg6; struct KeyValPair_PI;"
801790

802-
def TicketAdminRequest(session):
803-
804-
# class is different depending on server version
805-
806-
SERVER_REQUIRES_KEYVAL_PAIRS = (session.server_version >= (4,2,11))
807791

808-
class TicketAdminRequest_(Message):
809-
_name = 'ticketAdminInp_PI'
792+
class TicketAdminRequest(Message):
793+
_name = 'ticketAdminInp_PI'
810794

811-
def __init__(self, *args,**ticketOpts):
812-
super(TicketAdminRequest_, self).__init__()
813-
for i in range(6):
814-
if i < len(args) and args[i]:
815-
setattr(self, 'arg{0}'.format(i+1), str(args[i]))
816-
else:
817-
setattr(self, 'arg{0}'.format(i+1), "")
818-
if SERVER_REQUIRES_KEYVAL_PAIRS:
819-
self.KeyValPair_PI = StringStringMap(ticketOpts)
820-
821-
arg1 = StringProperty()
822-
arg2 = StringProperty()
823-
arg3 = StringProperty()
824-
arg4 = StringProperty()
825-
arg5 = StringProperty()
826-
arg6 = StringProperty()
827-
828-
if SERVER_REQUIRES_KEYVAL_PAIRS:
829-
KeyValPair_PI = SubmessageProperty(StringStringMap)
795+
def __init__(self, *args,**ticketOpts):
796+
super(TicketAdminRequest, self).__init__()
797+
for i in range(6):
798+
if i < len(args) and args[i]:
799+
setattr(self, 'arg{0}'.format(i+1), str(args[i]))
800+
else:
801+
setattr(self, 'arg{0}'.format(i+1), "")
802+
self.KeyValPair_PI = StringStringMap(ticketOpts)
830803

831-
return TicketAdminRequest_
804+
arg1 = StringProperty()
805+
arg2 = StringProperty()
806+
arg3 = StringProperty()
807+
arg4 = StringProperty()
808+
arg5 = StringProperty()
809+
arg6 = StringProperty()
810+
KeyValPair_PI = SubmessageProperty(StringStringMap)
832811

833812

834813
#define specificQueryInp_PI "str *sql; str *arg1; str *arg2; str *arg3; str *arg4; str *arg5; str *arg6; str *arg7; str *arg8; str *arg9; str *arg10; int maxRows; int continueInx; int rowOffset; int options; struct KeyValPair_PI;"
@@ -1111,17 +1090,3 @@ def empty_gen_query_out(cols):
11111090
SqlResult_PI=sql_results
11121091
)
11131092
return gqo
1114-
1115-
1116-
import weakref
1117-
1118-
cache_ = {
1119-
MetadataRequest: weakref.WeakKeyDictionary()
1120-
}
1121-
1122-
def session_cache (func,session,*args):
1123-
retval = cache_[func].get(session)
1124-
if retval is None:
1125-
cache_[func][session] = retval = func(*([session]+list(args)))
1126-
return retval
1127-

irods/test/meta_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ def test_metadata_manipulations_with_admin_kw__364__365(self):
226226
try:
227227
d = user = None
228228
adm = self.sess
229+
230+
if adm.server_version <= (4,2,11):
231+
self.skipTest('ADMIN_KW not valid for Metadata API in iRODS 4.2.11 and previous')
232+
229233
# Create a rodsuser, and a session for that roduser.
230234
user = adm.users.create ( 'bobby','rodsuser' )
231235
user.modify('password','bpass')

irods/test/ticket_test.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ def tearDown(self):
8282

8383
def test_admin_keyword_for_tickets (self):
8484

85+
if helpers.make_session().server_version < (4,2,11):
86+
self.skipTest('ADMIN_KW not valid for Tickets API before iRODS 4.2.11')
87+
8588
N_TICKETS = 3
8689

8790
# Create some tickets as alice.

irods/ticket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def _generate(self, length=15, allow_punctuation = False):
5858
return ''.join(random.SystemRandom().choice(source_characters) for _ in range(length))
5959

6060
def _api_request(self,cmd_string,*args, **opts):
61-
message_body = TicketAdminRequest(self.session)(cmd_string, self.ticket, *args, **opts)
61+
message_body = TicketAdminRequest(cmd_string, self.ticket, *args, **opts)
6262
message = iRODSMessage("RODS_API_REQ", msg=message_body, int_info=api_number['TICKET_ADMIN_AN'])
6363

6464
with self.session.pool.get_connection() as conn:

0 commit comments

Comments
 (0)