'Get or create a share for the given user (or users if `user` is a list).'

def share_with(self, item, user, flush=True):

    if isinstance(user, list):
        return map((lambda user: self.share_with(item, user, flush=False)), user)
    existing = self.get_share_assocs(item, user=user)
    if existing:
        return existing.pop(0)
    return self._create_user_share_assoc(item, user, flush=flush)
