from abc import ABCMeta, abstractmethod from collections import namedtuple from six import add_metaclass class RepositoryAuthorizedEmail( namedtuple('RepositoryAuthorizedEmail', [ 'email', 'repository_name', 'namespace_name', 'confirmed', 'code', ])): """ Tag represents a name to an image. :type email: string :type repository_name: string :type namespace_name: string :type confirmed: boolean :type code: string """ def to_dict(self): return { 'email': self.email, 'repository': self.repository_name, 'namespace': self.namespace_name, 'confirmed': self.confirmed, 'code': self.code } @add_metaclass(ABCMeta) class RepoEmailDataInterface(object): """ Interface that represents all data store interactions required by a Repo Email. """ @abstractmethod def get_email_authorized_for_repo(self, namespace_name, repository_name, email): """ Returns a RepositoryAuthorizedEmail if available else None """ @abstractmethod def create_email_authorization_for_repo(self, namespace_name, repository_name, email): """ Returns the newly created repository authorized email. """