Skip to content

Commit 98ee4b6

Browse files
committed
[_708] new __slots__ members to prevent configuration misfires
1 parent 94b8594 commit 98ee4b6

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

irods/client_configuration/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ def __new__(meta, name, bases, attrs):
4545

4646

4747
class ConnectionsProperties(iRODSConfiguration, metaclass=iRODSConfigAliasMetaclass):
48+
__slots__=()
49+
4850
@property
4951
def xml_parser_default(self):
5052
from irods.message import get_default_XML_by_name
@@ -59,10 +61,13 @@ def xml_parser_default(self, str_value):
5961

6062
connections = ConnectionsProperties()
6163

64+
6265
class ConfigurationError(BaseException): pass
6366
class ConfigurationValueError(ValueError,ConfigurationError): pass
6467

68+
6569
class Genquery1_Properties(iRODSConfiguration, metaclass=iRODSConfigAliasMetaclass):
70+
__slots__ = ()
6671

6772
@property
6873
def irods_query_limit(self):
@@ -89,6 +94,7 @@ def irods_query_limit(self, target_value):
8994

9095

9196
class DataObjects(iRODSConfiguration):
97+
9298
__slots__ = (
9399
"auto_close",
94100
"allow_redirect",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import unittest
2+
3+
import irods.client_configuration as cfg
4+
5+
6+
# Test assignments on the negative and positive space of the
7+
# client configuration.
8+
class TestClientConfigurationAttributes(unittest.TestCase):
9+
def test_configuration_writes_and_miswrites__issue_708(self):
10+
# For caching configuration objects
11+
configuration_level = {}
12+
leaf_names = []
13+
14+
for dotted_name, value, is_conf in cfg._var_items_as_generator():
15+
with self.subTest(dotted_name=dotted_name):
16+
name_parts = dotted_name.split('.')
17+
namespace = '.'.join(name_parts[:-1])
18+
attribute_name = name_parts[-1]
19+
if isinstance(value, cfg.iRODSConfiguration):
20+
configuration_level[dotted_name] = value
21+
elif is_conf:
22+
leaf_names.append(attribute_name)
23+
24+
# Test the positive space, i.e. the 'hit'
25+
setattr(configuration_level[namespace], attribute_name, value)
26+
27+
# Test the negative space, i.e. the 'miss'
28+
with self.assertRaises(AttributeError):
29+
setattr(configuration_level[namespace], attribute_name + '_1', value)
30+
31+
# These cases were identified as likely ones for possible failed writes via misspelling.
32+
self.assertIn('irods_query_limit', leaf_names)
33+
self.assertIn('xml_parser_default', leaf_names)

0 commit comments

Comments
 (0)