from abc import ABCMeta, abstractmethod
from collections import namedtuple

from six import add_metaclass


USER_FIELDS = ['uuid', 'username', 'email', 'given_name',
               'family_name', 'company', 'location']


class User(namedtuple('User', USER_FIELDS)):
  """
  User represents a user.
  """


@add_metaclass(ABCMeta)
class EndpointsCommonDataInterface(object):
  """
  Interface that represents all data store interactions required by the common endpoints lib.
  """

  @abstractmethod
  def get_user(self, user_uuid):
    """
    Returns the User matching the given uuid, if any or None if none.
    """

  @abstractmethod
  def get_namespace_uuid(self, namespace_name):
    """
    Returns the uuid of the Namespace with the given name, if any.
    """