comparison rhodecode/model/db.py @ 2434:f29469677319 codereview

Added basic models for saving open pull requests - added pull-request models - added pull-requests notifications into inbox
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 10 Jun 2012 02:08:10 +0200
parents 9f37281195a2
children 1bc579bcd67a
comparison
equal deleted inserted replaced
2433:74f2910f7ad9 2434:f29469677319
1369 revision = Column('revision', String(40), nullable=False) 1369 revision = Column('revision', String(40), nullable=False)
1370 status = Column('status', String(128), nullable=False, default=DEFAULT) 1370 status = Column('status', String(128), nullable=False, default=DEFAULT)
1371 changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id')) 1371 changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id'))
1372 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) 1372 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1373 version = Column('version', Integer(), nullable=False, default=0) 1373 version = Column('version', Integer(), nullable=False, default=0)
1374 pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True)
1375
1374 author = relationship('User', lazy='joined') 1376 author = relationship('User', lazy='joined')
1375 repo = relationship('Repository') 1377 repo = relationship('Repository')
1376 comment = relationship('ChangesetComment', lazy='joined') 1378 comment = relationship('ChangesetComment', lazy='joined')
1379 pull_request = relationship('PullRequest', lazy='joined')
1377 1380
1378 @classmethod 1381 @classmethod
1379 def get_status_lbl(cls, value): 1382 def get_status_lbl(cls, value):
1380 return dict(cls.STATUSES).get(value) 1383 return dict(cls.STATUSES).get(value)
1381 1384
1382 @property 1385 @property
1383 def status_lbl(self): 1386 def status_lbl(self):
1384 return ChangesetStatus.get_status_lbl(self.status) 1387 return ChangesetStatus.get_status_lbl(self.status)
1388
1389
1390 class PullRequest(Base, BaseModel):
1391 __tablename__ = 'pull_requests'
1392 __table_args__ = (
1393 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1394 'mysql_charset': 'utf8'},
1395 )
1396
1397 pull_request_id = Column('pull_request_id', Integer(), nullable=False, primary_key=True)
1398 title = Column('title', Unicode(256), nullable=True)
1399 description = Column('description', Unicode(10240), nullable=True)
1400 _revisions = Column('revisions', UnicodeText(20500)) # 500 revisions max
1401 org_repo_id = Column('org_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
1402 org_ref = Column('org_ref', Unicode(256), nullable=False)
1403 other_repo_id = Column('other_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
1404 other_ref = Column('other_ref', Unicode(256), nullable=False)
1405
1406 @hybrid_property
1407 def revisions(self):
1408 return self._revisions.split(':')
1409
1410 @revisions.setter
1411 def revisions(self, val):
1412 self._revisions = ':'.join(val)
1413
1414 reviewers = relationship('PullRequestReviewers')
1415 org_repo = relationship('Repository', primaryjoin='PullRequest.org_repo_id==Repository.repo_id')
1416 other_repo = relationship('Repository', primaryjoin='PullRequest.other_repo_id==Repository.repo_id')
1417
1418 def __json__(self):
1419 return dict(
1420 revisions=self.revisions
1421 )
1422
1423
1424 class PullRequestReviewers(Base, BaseModel):
1425 __tablename__ = 'pull_request_reviewers'
1426 __table_args__ = (
1427 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1428 'mysql_charset': 'utf8'},
1429 )
1430
1431 def __init__(self, user=None, pull_request=None):
1432 self.user = user
1433 self.pull_request = pull_request
1434
1435 pull_requests_reviewers_id = Column('pull_requests_reviewers_id', Integer(), nullable=False, primary_key=True)
1436 pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=False)
1437 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True)
1438
1439 user = relationship('User')
1440 pull_request = relationship('PullRequest')
1385 1441
1386 1442
1387 class Notification(Base, BaseModel): 1443 class Notification(Base, BaseModel):
1388 __tablename__ = 'notifications' 1444 __tablename__ = 'notifications'
1389 __table_args__ = ( 1445 __table_args__ = (