##// END OF EJS Templates
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions

File last commit:

r759:a7f50911 beta
r774:c47152c5 beta
Show More
db.py
215 lines | 12.0 KiB | text/x-python | PythonLexer
Models code cleanups
r759 # -*- coding: utf-8 -*-
"""
package.rhodecode.model.db
~~~~~~~~~~~~~~
Database Models for RhodeCode
:created_on: Apr 08, 2010
:author: marcink
:copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
"""
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License or (at your opinion) any later version of the license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import logging
import datetime
fixed imports
r658 from sqlalchemy import *
Models code cleanups
r759 from sqlalchemy.exc import DatabaseError
fixed imports
r658 from sqlalchemy.orm import relation, backref
from sqlalchemy.orm.session import Session
Models code cleanups
r759
from rhodecode.model.meta import Base
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
more renames for rhode code !!
r549 class RhodeCodeSettings(Base):
renamed hg_app to rhodecode
r548 __tablename__ = 'rhodecode_settings'
renamed project to rhodecode
r547 __table_args__ = (UniqueConstraint('app_settings_name'), {'useexisting':True})
app_settings_id = Column("app_settings_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
app_settings_name = Column("app_settings_name", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
app_settings_value = Column("app_settings_value", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
Added settings model, and Exceptions lib....
r704 def __init__(self, k, v):
self.app_settings_name = k
self.app_settings_value = v
def __repr__(self):
return "<RhodeCodeSetting('%s:%s')>" % (self.app_settings_name,
self.app_settings_value)
more renames for rhode code !!
r549 class RhodeCodeUi(Base):
renamed hg_app to rhodecode
r548 __tablename__ = 'rhodecode_ui'
renamed project to rhodecode
r547 __table_args__ = {'useexisting':True}
ui_id = Column("ui_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
ui_section = Column("ui_section", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
ui_key = Column("ui_key", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
ui_value = Column("ui_value", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
ui_active = Column("ui_active", BOOLEAN(), nullable=True, unique=None, default=True)
Hacking for git support,and new faster repo scan
r631
class User(Base):
renamed project to rhodecode
r547 __tablename__ = 'users'
__table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'useexisting':True})
user_id = Column("user_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
username = Column("username", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
password = Column("password", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
active = Column("active", BOOLEAN(), nullable=True, unique=None, default=None)
admin = Column("admin", BOOLEAN(), nullable=True, unique=None, default=False)
name = Column("name", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
lastname = Column("lastname", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
email = Column("email", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
last_login = Column("last_login", DATETIME(timezone=False), nullable=True, unique=None, default=None)
Added settings model, and Exceptions lib....
r704 is_ldap = Column("is_ldap", BOOLEAN(), nullable=False, unique=None, default=False)
Hacking for git support,and new faster repo scan
r631
Added settings model, and Exceptions lib....
r704 user_log = relation('UserLog', cascade='all')
user_perms = relation('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
Hacking for git support,and new faster repo scan
r631
fixed #72 show warning on removal when user still is owner of existing repositories...
r713 repositories = relation('Repository')
implemented user dashboards, and following system.
r734 user_followers = relation('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
fixed #72 show warning on removal when user still is owner of existing repositories...
r713
Models code cleanups
r759 @property
renamed project to rhodecode
r547 def full_contact(self):
return '%s %s <%s>' % (self.name, self.lastname, self.email)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 def __repr__(self):
return "<User('id:%s:%s')>" % (self.user_id, self.username)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 def update_lastlogin(self):
"""Update user lastlogin"""
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 try:
session = Session.object_session(self)
self.last_login = datetime.datetime.now()
session.add(self)
session.commit()
log.debug('updated user %s lastlogin', self.username)
Models code cleanups
r759 except (DatabaseError,):
Hacking for git support,and new faster repo scan
r631 session.rollback()
class UserLog(Base):
renamed project to rhodecode
r547 __tablename__ = 'user_logs'
__table_args__ = {'useexisting':True}
user_log_id = Column("user_log_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=False, unique=None, default=None)
repository_id = Column("repository_id", INTEGER(length=None, convert_unicode=False, assert_unicode=None), ForeignKey(u'repositories.repo_id'), nullable=False, unique=None, default=None)
repository_name = Column("repository_name", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631 user_ip = Column("user_ip", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
renamed project to rhodecode
r547 action = Column("action", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
action_date = Column("action_date", DATETIME(timezone=False), nullable=True, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 user = relation('User')
repository = relation('Repository')
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 class Repository(Base):
__tablename__ = 'repositories'
__table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
repo_id = Column("repo_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
repo_name = Column("repo_name", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
Hacking for git support,and new faster repo scan
r631 repo_type = Column("repo_type", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
renamed project to rhodecode
r547 user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=False, unique=False, default=None)
private = Column("private", BOOLEAN(), nullable=True, unique=None, default=None)
description = Column("description", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fork_id = Column("fork_id", INTEGER(), ForeignKey(u'repositories.repo_id'), nullable=True, unique=False, default=None)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 user = relation('User')
fork = relation('Repository', remote_side=repo_id)
repo_to_perm = relation('RepoToPerm', cascade='all')
added cache reset, stats reset, and delete into repository settings in admin....
r708 stats = relation('Statistics', cascade='all', uselist=False)
fixes #51 deleting a repo didn't delete it's dependent db entries....
r667
implemented user dashboards, and following system.
r734 repo_followers = relation('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
renamed project to rhodecode
r547 def __repr__(self):
#50 on point cache invalidation changes....
r692 return "<Repository('%s:%s')>" % (self.repo_id, self.repo_name)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 class Permission(Base):
__tablename__ = 'permissions'
__table_args__ = {'useexisting':True}
permission_id = Column("permission_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
permission_name = Column("permission_name", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
permission_longname = Column("permission_longname", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 def __repr__(self):
return "<Permission('%s:%s')>" % (self.permission_id, self.permission_name)
class RepoToPerm(Base):
__tablename__ = 'repo_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'useexisting':True})
repo_to_perm_id = Column("repo_to_perm_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", INTEGER(), ForeignKey(u'permissions.permission_id'), nullable=False, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631 repository_id = Column("repository_id", INTEGER(), ForeignKey(u'repositories.repo_id'), nullable=False, unique=None, default=None)
renamed project to rhodecode
r547 user = relation('User')
permission = relation('Permission')
repository = relation('Repository')
class UserToPerm(Base):
__tablename__ = 'user_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'useexisting':True})
user_to_perm_id = Column("user_to_perm_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", INTEGER(), ForeignKey(u'permissions.permission_id'), nullable=False, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
renamed project to rhodecode
r547 user = relation('User')
permission = relation('Permission')
class Statistics(Base):
__tablename__ = 'statistics'
__table_args__ = (UniqueConstraint('repository_id'), {'useexisting':True})
stat_id = Column("stat_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
repository_id = Column("repository_id", INTEGER(), ForeignKey(u'repositories.repo_id'), nullable=False, unique=True, default=None)
stat_on_revision = Column("stat_on_revision", INTEGER(), nullable=False)
commit_activity = Column("commit_activity", BLOB(), nullable=False)#JSON data
commit_activity_combined = Column("commit_activity_combined", BLOB(), nullable=False)#JSON data
languages = Column("languages", BLOB(), nullable=False)#JSON data
Hacking for git support,and new faster repo scan
r631
fixes #51 deleting a repo didn't delete it's dependent db entries....
r667 repository = relation('Repository', single_parent=True)
renamed project to rhodecode
r547
implemented user dashboards, and following system.
r734 class UserFollowing(Base):
__tablename__ = 'user_followings'
__table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'),
UniqueConstraint('user_id', 'follows_user_id')
, {'useexisting':True})
user_following_id = Column("user_following_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=False, unique=None, default=None)
follows_repo_id = Column("follows_repository_id", INTEGER(), ForeignKey(u'repositories.repo_id'), nullable=True, unique=None, default=None)
follows_user_id = Column("follows_user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=True, unique=None, default=None)
user = relation('User', primaryjoin='User.user_id==UserFollowing.user_id')
follows_user = relation('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
follows_repository = relation('Repository')
Adde table for cache invalidation
r670 class CacheInvalidation(Base):
__tablename__ = 'cache_invalidation'
#50 on point cache invalidation changes....
r692 __table_args__ = (UniqueConstraint('cache_key'), {'useexisting':True})
Adde table for cache invalidation
r670 cache_id = Column("cache_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=True)
cache_key = Column("cache_key", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
cache_args = Column("cache_args", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
#50 on point cache invalidation changes....
r692 cache_active = Column("cache_active", BOOLEAN(), nullable=True, unique=None, default=False)
Adde table for cache invalidation
r670
#50 on point cache invalidation changes....
r692 def __init__(self, cache_key, cache_args=''):
self.cache_key = cache_key
self.cache_args = cache_args
self.cache_active = False
def __repr__(self):
implemented user dashboards, and following system.
r734 return "<CacheInvalidation('%s:%s')>" % (self.cache_id, self.cache_key)