def _unique_collaborator_users(user, public=False): from wonder.romeo.video.views import collaborator_users seen = dict() # Include both account users that the user is collaborating with # and collaborators on video in this account. collaborators = chain(collaborator_users(user_id=user.id), collaborator_users(account_id=user.account_id)) for collaborator, user in collaborators: if public and not user: continue if collaborator.email not in seen: # map video collaborator to user connection connection = dict( connection=user, connection_id=None, href=None, state='collaborator', ) data = _connection_item(type('C', (object,), connection)(), public=public) if not user: del data['user'] data['collaborator'] = dict( id=collaborator.id, href=collaborator.href, display_name=collaborator.name, avatar=gravatar_url(collaborator.email), email=collaborator.email, ) seen[collaborator.email] = 1 yield data
def get(self, video): public = 'public' in request.args items = [_collaborator_item(c, u, public=public) for c, u in collaborator_users(video_id=video.id)] items.extend( dict( display_name=user.name, avatar=user.avatar or gravatar_url(user.email), user=_collaborator_user_item(user, public=public), owner=True, ) for user in video.account.users ) return dict(collaborator=dict(items=items, total=len(items)))
def _contact_item(contact, user=None): data = dict( external_system=contact.external_system, email=contact.email, display_name=user and user.display_name or contact.display_name, avatar=user and user.avatar or gravatar_url(contact.email), ) if user: data['user'] = dict( id=user.id, href=user.public_href, title=user.title, ) return data
def _comment_item(comment, username, email, avatar_filename, account_id): if avatar_filename and account_id: avatar = AccountUser(avatar_filename=avatar_filename, account_id=account_id).avatar else: avatar = gravatar_url(email) return dict( id=comment.id, href=comment.href, comment=comment.comment, timestamp=comment.timestamp, datetime=comment.date_added.isoformat(), display_name=username or email, avatar=avatar, resolved=comment.resolved, )
def _collaborator_item(collaborator, user=None, public=False): data = dict( display_name=user and user.display_name or collaborator.name, avatar=user and user.avatar or gravatar_url(collaborator.email), user=user and _collaborator_user_item(user, public=public), ) if not public: data.update( id=collaborator.id, href=collaborator.href, permissions=filter(None, [f if getattr(collaborator, f) else None for f in dir(collaborator) if f.startswith('can_')]), # email=collaborator.email, ) return data