'Constructor for Storage.
Args:
model: db.Model or ndb.Model, model class
key_name: string, key name for the entity that has the credentials
property_name: string, name of the property that is a
CredentialsProperty or CredentialsNDBProperty.
cache: memcache, a write-through cache to put in front of the
datastore. If the model you are using is an NDB model, using
a cache will be redundant since the model uses an instance
cache and memcache for you.
user: users.User object, optional. Can be used to grab user ID as a
key_name if no key name is specified.'

@_helpers.positional(4)
def __init__(self, model, key_name, property_name, cache=None, user=None):

    super(StorageByKeyName, self).__init__()
    if (key_name is None):
        if (user is None):
            raise ValueError('StorageByKeyName    called    with    no    key    name    or    user.')
        key_name = user.user_id()
    self._model = model
    self._key_name = key_name
    self._property_name = property_name
    self._cache = cache
