Compare commits
3 Commits
nilmdb-1.6
...
nilmdb-1.6
Author | SHA1 | Date | |
---|---|---|---|
9a2699adfc | |||
9bbb95b18b | |||
6bbed322c5 |
@@ -72,10 +72,16 @@ class Complete(object): # pragma: no cover
|
|||||||
path = parsed_args.path
|
path = parsed_args.path
|
||||||
if not path:
|
if not path:
|
||||||
return []
|
return []
|
||||||
return ( self.escape(k + '=' + v)
|
results = []
|
||||||
for (k,v) in client.stream_get_metadata(path).iteritems()
|
# prefix comes in as UTF-8, but results need to be Unicode,
|
||||||
if k.startswith(prefix) )
|
# weird. Still doesn't work in all cases, but that's bugs in
|
||||||
|
# argcomplete.
|
||||||
|
prefix = nilmdb.utils.unicode.decode(prefix)
|
||||||
|
for (k,v) in client.stream_get_metadata(path).iteritems():
|
||||||
|
kv = self.escape(k + '=' + v)
|
||||||
|
if kv.startswith(prefix):
|
||||||
|
results.append(kv)
|
||||||
|
return results
|
||||||
|
|
||||||
class Cmdline(object):
|
class Cmdline(object):
|
||||||
|
|
||||||
|
@@ -41,10 +41,10 @@ def cmd_metadata(self):
|
|||||||
if self.args.set is not None or self.args.update is not None:
|
if self.args.set is not None or self.args.update is not None:
|
||||||
# Either set, or update
|
# Either set, or update
|
||||||
if self.args.set is not None:
|
if self.args.set is not None:
|
||||||
keyvals = self.args.set
|
keyvals = map(nilmdb.utils.unicode.decode, self.args.set)
|
||||||
handler = self.client.stream_set_metadata
|
handler = self.client.stream_set_metadata
|
||||||
else:
|
else:
|
||||||
keyvals = self.args.update
|
keyvals = map(nilmdb.utils.unicode.decode, self.args.update)
|
||||||
handler = self.client.stream_update_metadata
|
handler = self.client.stream_update_metadata
|
||||||
|
|
||||||
# Extract key=value pairs
|
# Extract key=value pairs
|
||||||
@@ -62,7 +62,9 @@ def cmd_metadata(self):
|
|||||||
self.die("error setting/updating metadata: %s", str(e))
|
self.die("error setting/updating metadata: %s", str(e))
|
||||||
elif self.args.delete is not None:
|
elif self.args.delete is not None:
|
||||||
# Delete (by setting values to empty strings)
|
# Delete (by setting values to empty strings)
|
||||||
keys = self.args.delete or None
|
keys = None
|
||||||
|
if self.args.delete:
|
||||||
|
keys = map(nilmdb.utils.unicode.decode, self.args.delete)
|
||||||
try:
|
try:
|
||||||
data = self.client.stream_get_metadata(self.args.path, keys)
|
data = self.client.stream_get_metadata(self.args.path, keys)
|
||||||
for key in data:
|
for key in data:
|
||||||
@@ -72,7 +74,9 @@ def cmd_metadata(self):
|
|||||||
self.die("error deleting metadata: %s", str(e))
|
self.die("error deleting metadata: %s", str(e))
|
||||||
else:
|
else:
|
||||||
# Get (or unspecified)
|
# Get (or unspecified)
|
||||||
keys = self.args.get or None
|
keys = None
|
||||||
|
if self.args.get:
|
||||||
|
keys = map(nilmdb.utils.unicode.decode, self.args.get)
|
||||||
try:
|
try:
|
||||||
data = self.client.stream_get_metadata(self.args.path, keys)
|
data = self.client.stream_get_metadata(self.args.path, keys)
|
||||||
except nilmdb.client.ClientError as e:
|
except nilmdb.client.ClientError as e:
|
||||||
@@ -81,4 +85,6 @@ def cmd_metadata(self):
|
|||||||
# Print nonexistant keys as having empty value
|
# Print nonexistant keys as having empty value
|
||||||
if value is None:
|
if value is None:
|
||||||
value = ""
|
value = ""
|
||||||
printf("%s=%s\n", key, value)
|
printf("%s=%s\n",
|
||||||
|
nilmdb.utils.unicode.encode(key),
|
||||||
|
nilmdb.utils.unicode.encode(value))
|
||||||
|
@@ -14,3 +14,4 @@ import nilmdb.utils.iterator
|
|||||||
import nilmdb.utils.interval
|
import nilmdb.utils.interval
|
||||||
import nilmdb.utils.lock
|
import nilmdb.utils.lock
|
||||||
import nilmdb.utils.sort
|
import nilmdb.utils.sort
|
||||||
|
import nilmdb.utils.unicode
|
||||||
|
22
nilmdb/utils/unicode.py
Normal file
22
nilmdb/utils/unicode.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
def encode(u):
|
||||||
|
"""Try to encode something from Unicode to a string using the
|
||||||
|
default encoding. If it fails, try encoding as UTF-8."""
|
||||||
|
if not isinstance(u, unicode):
|
||||||
|
return u
|
||||||
|
try:
|
||||||
|
return u.encode()
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
return u.encode("utf-8")
|
||||||
|
|
||||||
|
def decode(s):
|
||||||
|
"""Try to decode someting from string to Unicode using the
|
||||||
|
default encoding. If it fails, try decoding as UTF-8."""
|
||||||
|
if isinstance(s, unicode):
|
||||||
|
return s
|
||||||
|
try:
|
||||||
|
return s.decode()
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
try:
|
||||||
|
return s.decode("utf-8")
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
return s # best we can do
|
@@ -88,7 +88,7 @@ class TestCmdline(object):
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
except SystemExit as e:
|
except SystemExit as e:
|
||||||
exitcode = e.code
|
exitcode = e.code
|
||||||
captured = outfile.getvalue()
|
captured = nilmdb.utils.unicode.decode(outfile.getvalue())
|
||||||
self.captured = captured
|
self.captured = captured
|
||||||
self.exitcode = exitcode
|
self.exitcode = exitcode
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user