23
23
_et_cache = {}
24
24
25
25
26
+ def _to_bytes (s ):
27
+ """
28
+ If given a string, converts it to bytes, otherwise returns it as is
29
+ """
30
+ if isinstance (s , str ):
31
+ return s .encode ()
32
+ else :
33
+ return s
34
+
35
+
26
36
def _clear_caches ():
27
37
"""Clear query caches.
28
38
@@ -34,7 +44,7 @@ def _clear_caches():
34
44
35
45
36
46
def connect (server = '' ):
37
- _moira .connect (server )
47
+ _moira .connect (_to_bytes ( server ) )
38
48
version (- 1 )
39
49
connect .__doc__ = _moira .connect .__doc__
40
50
@@ -74,8 +84,18 @@ def _list_query(handle, *args):
74
84
This bypasses the tuple -> dict conversion done in moira.query()
75
85
"""
76
86
results = []
77
- _moira ._query (handle , results .append , * args )
78
- return results
87
+
88
+ # Python 3 wants bytes
89
+ args_converted = (_to_bytes (arg ) for arg in args )
90
+
91
+ # Perform the query
92
+ _moira ._query (_to_bytes (handle ), results .append , * args_converted )
93
+
94
+ # We get bytes back, convert back to string
95
+ return [
96
+ tuple (val .decode () for val in result )
97
+ for result in results
98
+ ]
79
99
80
100
81
101
def _parse_args (handle , args , kwargs ):
@@ -99,7 +119,7 @@ def _parse_args(handle, args, kwargs):
99
119
return tuple (kwargs .get (i , '*' )
100
120
for i in _arg_cache [handle ])
101
121
else :
102
- return args
122
+ return tuple ( _to_bytes ( arg ) for arg in args )
103
123
104
124
105
125
def query (handle , * args , ** kwargs ):
@@ -116,7 +136,10 @@ def query(handle, *args, **kwargs):
116
136
the function.
117
137
"""
118
138
if handle .startswith ('_' ):
119
- return _list_query (handle , * args )
139
+ # TODO: why are we converting twice?
140
+ # perhaps if we don't, we wouldn't need this extra function
141
+ args_converted = (_to_bytes (arg ) for arg in args )
142
+ return _list_query (handle , * args_converted )
120
143
else :
121
144
fmt = kwargs .pop ('fmt' , dict )
122
145
@@ -126,7 +149,7 @@ def query(handle, *args, **kwargs):
126
149
results = []
127
150
128
151
for r in plain_results :
129
- results .append (fmt (zip (_return_cache [handle ], r )))
152
+ results .append (fmt (list ( zip (_return_cache [handle ], r ) )))
130
153
131
154
return results
132
155
@@ -147,9 +170,9 @@ def access(handle, *args, **kwargs):
147
170
args = _parse_args (handle , args , kwargs )
148
171
149
172
try :
150
- _moira ._access (handle , * args )
173
+ _moira ._access (_to_bytes ( handle ) , * args )
151
174
return True
152
- except MoiraException , e :
175
+ except MoiraException as e :
153
176
if e .code != errors ()['MR_PERM' ]:
154
177
raise
155
178
return False
0 commit comments