Source code for changes.models.author
from uuid import UUID, uuid4
from datetime import datetime
from sqlalchemy import Column, String, DateTime
from sqlalchemy import or_
from changes.config import db
from changes.db.types.guid import GUID
[docs]class Author(db.Model):
"""
A list of every person who has written a revision parsed by changes.
Keyed by email. Automatically updated when new authors are seen by
changes in diffs etc.
"""
__tablename__ = 'author'
id = Column(GUID, primary_key=True, default=uuid4)
name = Column(String(128), nullable=False)
email = Column(String(128), unique=True)
date_created = Column(DateTime, default=datetime.utcnow)
def __init__(self, **kwargs):
super(Author, self).__init__(**kwargs)
if not self.id:
self.id = uuid4()
@classmethod
def find(cls, author_id, current_user=None):
if author_id == 'me':
assert current_user is not None
email = current_user.email
elif '@' in author_id:
email = author_id
else:
email = None
if email:
username, domain = email.split('@', 1)
email_query = '{}+%@{}'.format(username, domain)
return list(cls.query.filter(
or_(
cls.email.like(email_query),
cls.email == email,
)
))
try:
author_id = UUID(author_id)
except ValueError:
return []
author = cls.query.get(author_id)
if author is None:
return []
return [author]