def __init__(self):
     """Initialize this instance."""
     self.service = SecretService()
class Keyring(object):
    """A Keyring for a given application name."""

    def __init__(self):
        """Initialize this instance."""
        self.service = SecretService()

    def _get_keyring_attr(self, app_name):
        """Build the keyring attributes for this credentials."""
        attr = {"key-type": "%s credentials" % NAME,
                "token-name": get_token_name(app_name)}
        return attr

    @inlineCallbacks
    def _find_keyring_item(self, app_name, attr=None):
        """Return the keyring item or None if not found."""
        if attr is None:
            attr = self._get_keyring_attr(app_name)
        logger.debug("Finding all items for app_name %r.", app_name)
        items = yield self.service.search_items(attr)
        if len(items) == 0:
            # if no items found, return None
            logger.debug("No items found!")
            returnValue(None)

        logger.debug("Returning first item found.")
        returnValue(items[0])

    @inlineCallbacks
    def set_credentials(self, app_name, cred):
        """Set the credentials."""
        # Creates the secret from the credentials
        secret = urlencode(cred)

        attr = self._get_keyring_attr(app_name)
        # Add our credentials to the keyring
        yield self.service.open_session()
        collection = yield self.service.get_default_collection()
        yield collection.create_item(app_name, attr, secret, True)

    @inlineCallbacks
    def get_credentials(self, app_name):
        """A deferred with the secret in a dictionary."""
        # If we have no attributes, return None
        logger.debug("Getting credentials for %r.", app_name)
        yield self.service.open_session()
        item = yield self._find_keyring_item(app_name)
        if item is not None:
            logger.debug("Parsing secret.")
            secret = yield item.get_value()
            returnValue(dict(parse_qsl(secret)))

        # nothing was found
        returnValue(None)

    @inlineCallbacks
    def delete_credentials(self, app_name):
        """Delete a set of credentials from the keyring."""
        attr = self._get_keyring_attr(app_name)
        # Add our credentials to the keyring
        yield self.service.open_session()
        collection = yield self.service.get_default_collection()
        yield collection.create_item(app_name, attr, "secret!", True)

        item = yield self._find_keyring_item(app_name)
        if item is not None:
            yield item.delete()