Commit 3064dbab authored by Antoine Millet's avatar Antoine Millet
Browse files

Fixed bug with encoding casting on client tags

parent c7d7097e
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -28,6 +28,18 @@ from cloudcontrol.common.client.exc import TagConflict
logger = logging.getLogger(__name__)


def ensure_unicode(text, encoding='utf-8'):
    """ Ensure input string is unicode, or decode it.
    """

    if isinstance(text, unicode):
        return text
    elif isinstance(text, (str, buffer)):
        return unicode(text, encoding)
    else:
        return unicode(text)


class Tag(object):
    """``class`` that abstract tags and act as a simple container."""
    def __init__(self, name, valuable, ttl=-1, refresh=None, parent=None,
@@ -562,7 +574,7 @@ class RootTagDB(TagDB):
        logger.debug('RPC register tag %s', tag.name)
        ttl = None if tag.ttl == -1 else tag.ttl
        self.rpc_call(tag.name, self.rpc_tag_register_cb, 'tags_register',
                      tag.name, ttl, unicode(tag.value))
                      tag.name, ttl, ensure_unicode(tag.value))

    def rpc_unregister_tag(self, tag_name):
        logger.debug('RPC unregister tag %s', tag_name)
@@ -574,17 +586,17 @@ class RootTagDB(TagDB):
        logger.debug('RPC update tag %s(%s)', tag.name, sub_id)
        if sub_id == '__main__':
            self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb,
                          'tags_update', tag.name, unicode(tag.value))
                          'tags_update', tag.name, ensure_unicode(tag.value))
        else:
            self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb,
                          'sub_tags_update', sub_id, tag.name, unicode(tag.value))
                          'sub_tags_update', sub_id, tag.name, ensure_unicode(tag.value))

    def rpc_register_sub_tag(self, sub_id, tag):
        logger.debug('RPC register tag %s(%s)', tag.name, sub_id)
        ttl = None if tag.ttl == -1 else tag.ttl
        self.rpc_call(tag.name, self.rpc_sub_tag_register_cb,
                      'sub_tags_register', sub_id, tag.name, ttl,
                      unicode(tag.value))
                      ensure_unicode(tag.value))

    def rpc_unregister_sub_tag(self, sub_id, tag_name):
        logger.debug('RPC unregister tag %s(%s)', tag_name, sub_id)