##// END OF EJS Templates
Release 1.1.5 fixes:...
Release 1.1.5 fixes: removed pl (untranslated) language, added message extractors for html and updated the pot file with all translatable strings

File last commit:

r1136:93b980eb default
r1139:49032f99 default
Show More
db.py
249 lines | 13.2 KiB | text/x-python | PythonLexer
Models code cleanups
r759 # -*- coding: utf-8 -*-
"""
new improved models with helper functions for easier data fetching
r832 rhodecode.model.db
~~~~~~~~~~~~~~~~~~
Models code cleanups
r759
added current db version into rhodecode,...
r834 Database Models for RhodeCode
Models code cleanups
r759 :created_on: Apr 08, 2010
:author: marcink
rhodecode release 1.1.3 changes
r1057 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
Models code cleanups
r759 :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
rhodecode release 1.1.3 changes
r1057 from datetime import date
Models code cleanups
r759
fixed imports
r658 from sqlalchemy import *
Models code cleanups
r759 from sqlalchemy.exc import DatabaseError
changes for release 1.1.5
r1136 from sqlalchemy.orm import relationship, backref
from sqlalchemy.orm.interfaces import MapperExtension
Models code cleanups
r759
changes for release 1.1.5
r1136 from rhodecode.model.meta import Base, Session
Models code cleanups
r759
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
new improved models with helper functions for easier data fetching
r832
changes for release 1.1.5
r1136 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})
fixed models for compatibility with database systems
r780 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 app_settings_name = Column("app_settings_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
app_settings_value = Column("app_settings_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
renamed project to rhodecode
r547
rhodecode release 1.1.3 changes
r1057 def __init__(self, k='', v=''):
Added settings model, and Exceptions lib....
r704 self.app_settings_name = k
self.app_settings_value = v
def __repr__(self):
rhodecode release 1.1.3 changes
r1057 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.app_settings_name, self.app_settings_value)
Added settings model, and Exceptions lib....
r704
changes for release 1.1.5
r1136 class RhodeCodeUi(Base):
renamed hg_app to rhodecode
r548 __tablename__ = 'rhodecode_ui'
renamed project to rhodecode
r547 __table_args__ = {'useexisting':True}
fixed models for compatibility with database systems
r780 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 ui_section = Column("ui_section", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
ui_key = Column("ui_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
ui_value = Column("ui_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fixed models for compatibility with database systems
r780 ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True)
Hacking for git support,and new faster repo scan
r631
changes for release 1.1.5
r1136 class User(Base):
renamed project to rhodecode
r547 __tablename__ = 'users'
__table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'useexisting':True})
fixed models for compatibility with database systems
r780 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 username = Column("username", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
password = Column("password", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fixed models for compatibility with database systems
r780 active = Column("active", Boolean(), nullable=True, unique=None, default=None)
admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
changes for release 1.1.5
r1136 name = Column("name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
lastname = Column("lastname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
email = Column("email", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fixed models for compatibility with database systems
r780 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
is_ldap = Column("is_ldap", Boolean(), nullable=False, unique=None, default=False)
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 user_log = relationship('UserLog', cascade='all')
user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 repositories = relationship('Repository')
user_followers = relationship('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
changes for release 1.1.5
r1136 @property
def short_contact(self):
return '%s %s' % (self.name, self.lastname)
rhodecode release 1.1.3 changes
r1057
@property
def is_admin(self):
return self.admin
renamed project to rhodecode
r547 def __repr__(self):
rhodecode release 1.1.3 changes
r1057 return "<%s('id:%s:%s')>" % (self.__class__.__name__,
self.user_id, self.username)
Hacking for git support,and new faster repo scan
r631
changes for release 1.1.5
r1136 @classmethod
def by_username(cls, username):
return Session.query(cls).filter(cls.username == username).one()
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()
changes for release 1.1.5
r1136 class UserLog(Base):
renamed project to rhodecode
r547 __tablename__ = 'user_logs'
__table_args__ = {'useexisting':True}
fixed models for compatibility with database systems
r780 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
rhodecode release 1.1.3 changes
r1057 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
repository_id = Column("repository_id", Integer(length=None, convert_unicode=False, assert_unicode=None), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
changes for release 1.1.5
r1136 repository_name = Column("repository_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
user_ip = Column("user_ip", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
action = Column("action", UnicodeText(length=1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fixed models for compatibility with database systems
r780 action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 @property
def action_as_day(self):
return date(*self.action_date.timetuple()[:3])
user = relationship('User')
repository = relationship('Repository')
Hacking for git support,and new faster repo scan
r631
changes for release 1.1.5
r1136 class Repository(Base):
renamed project to rhodecode
r547 __tablename__ = 'repositories'
__table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
fixed models for compatibility with database systems
r780 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
rhodecode release 1.1.3 changes
r1057 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
fixed models for compatibility with database systems
r780 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
fixes #62, added option to disable statistics for each repository
r810 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
changes for release 1.1.5
r1136 description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
rhodecode release 1.1.3 changes
r1057 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
user = relationship('User')
fork = relationship('Repository', remote_side=repo_id)
repo_to_perm = relationship('RepoToPerm', cascade='all')
stats = relationship('Statistics', cascade='all', uselist=False)
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 repo_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
fixes #51 deleting a repo didn't delete it's dependent db entries....
r667
rhodecode release 1.1.3 changes
r1057 logs = relationship('UserLog', cascade='all')
changes for release 1.1.5
r1136
renamed project to rhodecode
r547 def __repr__(self):
rhodecode release 1.1.3 changes
r1057 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.repo_id, self.repo_name)
Hacking for git support,and new faster repo scan
r631
changes for release 1.1.5
r1136 class Permission(Base):
renamed project to rhodecode
r547 __tablename__ = 'permissions'
__table_args__ = {'useexisting':True}
fixed models for compatibility with database systems
r780 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 permission_name = Column("permission_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
permission_longname = Column("permission_longname", String(length=255, 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):
rhodecode release 1.1.3 changes
r1057 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.permission_id, self.permission_name)
renamed project to rhodecode
r547
changes for release 1.1.5
r1136 class RepoToPerm(Base):
renamed project to rhodecode
r547 __tablename__ = 'repo_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'useexisting':True})
fixed models for compatibility with database systems
r780 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
rhodecode release 1.1.3 changes
r1057 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 user = relationship('User')
permission = relationship('Permission')
repository = relationship('Repository')
renamed project to rhodecode
r547
changes for release 1.1.5
r1136 class UserToPerm(Base):
renamed project to rhodecode
r547 __tablename__ = 'user_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'useexisting':True})
fixed models for compatibility with database systems
r780 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
rhodecode release 1.1.3 changes
r1057 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 user = relationship('User')
permission = relationship('Permission')
renamed project to rhodecode
r547
changes for release 1.1.5
r1136 class Statistics(Base):
renamed project to rhodecode
r547 __tablename__ = 'statistics'
__table_args__ = (UniqueConstraint('repository_id'), {'useexisting':True})
fixed models for compatibility with database systems
r780 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
fixed models for compatibility with database systems
r780 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
changes for release 1.1.5
r1136 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data
fixed models for compatibility with database systems
r780 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
changes for release 1.1.5
r1136 languages = Column("languages", LargeBinary(1000000), nullable=False)#JSON data
Hacking for git support,and new faster repo scan
r631
rhodecode release 1.1.3 changes
r1057 repository = relationship('Repository', single_parent=True)
renamed project to rhodecode
r547
changes for release 1.1.5
r1136 class UserFollowing(Base):
implemented user dashboards, and following system.
r734 __tablename__ = 'user_followings'
__table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'),
UniqueConstraint('user_id', 'follows_user_id')
, {'useexisting':True})
fixed models for compatibility with database systems
r780 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
rhodecode release 1.1.3 changes
r1057 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
implemented user dashboards, and following system.
r734
rhodecode release 1.1.3 changes
r1057 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
implemented user dashboards, and following system.
r734
rhodecode release 1.1.3 changes
r1057 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
follows_repository = relationship('Repository', order_by='Repository.repo_name')
implemented user dashboards, and following system.
r734
changes for release 1.1.5
r1136 class CacheInvalidation(Base):
Adde table for cache invalidation
r670 __tablename__ = 'cache_invalidation'
#50 on point cache invalidation changes....
r692 __table_args__ = (UniqueConstraint('cache_key'), {'useexisting':True})
fixed models for compatibility with database systems
r780 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
changes for release 1.1.5
r1136 cache_key = Column("cache_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
cache_args = Column("cache_args", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
fixed models for compatibility with database systems
r780 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):
rhodecode release 1.1.3 changes
r1057 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.cache_id, self.cache_key)
added current db version into rhodecode,...
r834
changes for release 1.1.5
r1136 class DbMigrateVersion(Base):
added current db version into rhodecode,...
r834 __tablename__ = 'db_migrate_version'
__table_args__ = {'useexisting':True}
changes for release 1.1.5
r1136 repository_id = Column('repository_id', String(255), primary_key=True)
added current db version into rhodecode,...
r834 repository_path = Column('repository_path', Text)
version = Column('version', Integer)