##// END OF EJS Templates
fixed regresion made in previos commit, that introduced bug in handling regular repositories
fixed regresion made in previos commit, that introduced bug in handling regular repositories

File last commit:

r1323:a7a772ea beta
r1324:e272be32 beta
Show More
db.py
544 lines | 24.3 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
~~~~~~~~~~~~~~~~~~
source code cleanup: remove trailing white space, normalize file endings
r1203
added current db version into rhodecode,...
r834 Database Models for RhodeCode
source code cleanup: remove trailing white space, normalize file endings
r1203
Models code cleanups
r759 :created_on: Apr 08, 2010
:author: marcink
source code cleanup: remove trailing white space, normalize file endings
r1203 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
Models code cleanups
r759 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # 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, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
Models code cleanups
r759 # 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.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
Models code cleanups
r759 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
Added os.sep in models for better win support...
r1199
import os
Models code cleanups
r759 import logging
import datetime
Added grouping by days in journal
r994 from datetime import date
Models code cleanups
r759
fixed imports
r658 from sqlalchemy import *
Models code cleanups
r759 from sqlalchemy.exc import DatabaseError
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 from sqlalchemy.orm import relationship, backref
fixed Session problems in model class functions...
r1081 from sqlalchemy.orm.interfaces import MapperExtension
Models code cleanups
r759
Fixed #161 form saves the create repository permission....
r1266 from rhodecode.lib import str2bool
fixed Session problems in model class functions...
r1081 from rhodecode.model.meta import Base, Session
Fixed #161 form saves the create repository permission....
r1266 from rhodecode.model.caching_query import FromCache
Models code cleanups
r759
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
fixed Session problems in model class functions...
r1081 #==============================================================================
# MAPPER EXTENSIONS
#==============================================================================
class RepositoryMapper(MapperExtension):
def after_update(self, mapper, connection, instance):
pass
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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
Fixed dbmigrate issues.
r907 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):
Extended repo2db mapper with group creation via directory structures...
r878 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.app_settings_name, self.app_settings_value)
Added settings model, and Exceptions lib....
r704
Fixed #161 form saves the create repository permission....
r1266
@classmethod
added some fixes to LDAP form re-submition, new simples ldap-settings getter....
r1292 def get_by_name(cls, ldap_key):
return Session.query(cls)\
.filter(cls.app_settings_name == ldap_key).scalar()
@classmethod
Fixed #161 form saves the create repository permission....
r1266 def get_app_settings(cls, cache=False):
ret = Session.query(cls)
if cache:
ret = ret.options(FromCache("sql_cache_short", "get_hg_settings"))
if not ret:
raise Exception('Could not get application settings !')
settings = {}
for each in ret:
settings['rhodecode_' + each.app_settings_name] = \
each.app_settings_value
return settings
@classmethod
def get_ldap_settings(cls, cache=False):
ret = Session.query(cls)\
.filter(cls.app_settings_name.startswith('ldap_'))\
.all()
fd = {}
for row in ret:
added some fixes to LDAP form re-submition, new simples ldap-settings getter....
r1292 fd.update({row.app_settings_name:row.app_settings_value})
Fixed #161 form saves the create repository permission....
r1266 return fd
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 ldap_dn = Column("ldap_dn", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
api_key = Column("api_key", 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
#56 implemented users groups editing,...
r972 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
#56 implemented users groups editing,...
r972 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
extended admin rescan to show what repositories was added and what removed...
r1039 group_member = relationship('UsersGroupMember', cascade='all')
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065
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
Added some more details into user edit permissions view
r895 @property
made simple global rss and atom feed
r1088 def short_contact(self):
return '%s %s' % (self.name, self.lastname)
@property
Added some more details into user edit permissions view
r895 def is_admin(self):
return self.admin
renamed project to rhodecode
r547 def __repr__(self):
Extended repo2db mapper with group creation via directory structures...
r878 return "<%s('id:%s:%s')>" % (self.__class__.__name__,
self.user_id, self.username)
Hacking for git support,and new faster repo scan
r631
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 @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()
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
removed unicode from models string params
r880 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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
Added grouping by days in journal
r994 @property
def action_as_day(self):
return date(*self.action_date.timetuple()[:3])
#56 implemented users groups editing,...
r972 user = relationship('User')
repository = relationship('Repository')
Hacking for git support,and new faster repo scan
r631
started working on issue #56
r956
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 class UsersGroup(Base):
started working on issue #56
r956 __tablename__ = 'users_groups'
__table_args__ = {'useexisting':True}
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
started working on issue #56
r956
#56 fixed relationship query behavior to speed up fetching, and...
r974 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
started working on issue #56
r956
Fixed permissions for users groups, group can have create repo permission now....
r1271
@classmethod
def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
if case_insensitive:
gr = Session.query(cls)\
.filter(cls.users_group_name.ilike(group_name))
else:
gr = Session.query(UsersGroup)\
.filter(UsersGroup.users_group_name == group_name)
if cache:
gr = gr.options(FromCache("sql_cache_short",
"get_user_%s" % group_name))
return gr.scalar()
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 class UsersGroupMember(Base):
started working on issue #56
r956 __tablename__ = 'users_groups_members'
__table_args__ = {'useexisting':True}
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
started working on issue #56
r956 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
#56 fixed relationship query behavior to speed up fetching, and...
r974 user = relationship('User', lazy='joined')
#56 implemented users groups editing,...
r972 users_group = relationship('UsersGroup')
updated db migrations to schema 3
r1023 def __init__(self, gr_id='', u_id=''):
#56 implemented users groups editing,...
r972 self.users_group_id = gr_id
self.user_id = u_id
started working on issue #56
r956
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 class Repository(Base):
renamed project to rhodecode
r547 __tablename__ = 'repositories'
__table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
fixed Session problems in model class functions...
r1081 __mapper_args__ = {'extension':RepositoryMapper()}
fixed models for compatibility with database systems
r780 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
clone_uri = Column("clone_uri", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
removed unicode from models string params
r880 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)
implemented #84 downloads can be enabled/disabled per each repository from now.
r962 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
Added simple forks page, resolves issue #179
r1301 created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
removed unicode from models string params
r880 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
Hacking for git support,and new faster repo scan
r631
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113
#56 implemented users groups editing,...
r972 user = relationship('User')
fork = relationship('Repository', remote_side=repo_id)
group = relationship('Group')
fixed problem with caching
r1033 repo_to_perm = relationship('RepoToPerm', cascade='all', order_by='RepoToPerm.repo_to_perm_id')
Fixed permissions for users groups, group can have create repo permission now....
r1271 users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
#56 implemented users groups editing,...
r972 stats = relationship('Statistics', cascade='all', uselist=False)
fixes #51 deleting a repo didn't delete it's dependent db entries....
r667
updated config files, and changed model repo_followers to followers
r1034 followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
implemented user dashboards, and following system.
r734
Fixed links for repository, it's optional now to pass a link without a summary...
r976 logs = relationship('UserLog', cascade='all')
fixees for #106 relation issues on databases different than sqlite
r970
renamed project to rhodecode
r547 def __repr__(self):
Extended repo2db mapper with group creation via directory structures...
r878 return "<%s('%s:%s')>" % (self.__class__.__name__,
removed unicode from models string params
r880 self.repo_id, self.repo_name)
Extended repo2db mapper with group creation via directory structures...
r878
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 @classmethod
def by_repo_name(cls, repo_name):
return Session.query(cls).filter(cls.repo_name == repo_name).one()
Added simple forks page, resolves issue #179
r1301
@classmethod
def get_repo_forks(cls, repo_id):
return Session.query(cls).filter(Repository.fork_id == repo_id)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 @property
Added handy methods to Repository model for fetching groups with parents
r1155 def just_name(self):
Added os.sep in models for better win support...
r1199 return self.repo_name.split(os.sep)[-1]
Added handy methods to Repository model for fetching groups with parents
r1155
@property
def groups_with_parents(self):
groups = []
if self.group is None:
return groups
cur_gr = self.group
groups.insert(0, cur_gr)
while 1:
gr = getattr(cur_gr, 'parent_group', None)
cur_gr = cur_gr.parent_group
if gr is None:
break
groups.insert(0, gr)
return groups
@property
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 def groups_and_repo(self):
Added handy methods to Repository model for fetching groups with parents
r1155 return self.groups_with_parents, self.just_name
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065
class Group(Base):
Extended repo2db mapper with group creation via directory structures...
r878 __tablename__ = 'groups'
__table_args__ = (UniqueConstraint('group_name'), {'useexisting':True},)
group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 group_name = Column("group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
removed unicode from models string params
r880 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
Extended repo2db mapper with group creation via directory structures...
r878
#56 implemented users groups editing,...
r972 parent_group = relationship('Group', remote_side=group_id)
Extended repo2db mapper with group creation via directory structures...
r878
def __init__(self, group_name='', parent_group=None):
self.group_name = group_name
self.parent_group = parent_group
def __repr__(self):
return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
self.group_name)
Hacking for git support,and new faster repo scan
r631
Changes for repo groups
r1159 @property
def parents(self):
groups = []
if self.parent_group is None:
return groups
cur_gr = self.parent_group
groups.insert(0, cur_gr)
while 1:
gr = getattr(cur_gr, 'parent_group', None)
cur_gr = cur_gr.parent_group
if gr is None:
break
groups.insert(0, gr)
return groups
fixed saving settings on repositories inside groups, also fixes #187...
r1323
@property
def full_path(self):
return '/'.join([g.group_name for g in self.parents] +
[self.group_name])
Added repo group page showing what reposiories are inside a group
r1193 @property
def repositories(self):
return Session.query(Repository).filter(Repository.group == self).all()
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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):
Extended repo2db mapper with group creation via directory structures...
r878 return "<%s('%s:%s')>" % (self.__class__.__name__,
removed unicode from models string params
r880 self.permission_id, self.permission_name)
renamed project to rhodecode
r547
Fixed #161 form saves the create repository permission....
r1266 @classmethod
def get_by_key(cls, key):
return Session.query(cls).filter(cls.permission_name == key).scalar()
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
removed unicode from models string params
r880 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
#56 implemented users groups editing,...
r972 user = relationship('User')
permission = relationship('Permission')
repository = relationship('Repository')
renamed project to rhodecode
r547
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
removed unicode from models string params
r880 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
#56 implemented users groups editing,...
r972 user = relationship('User')
permission = relationship('Permission')
renamed project to rhodecode
r547
Fixed #161 form saves the create repository permission....
r1266 @classmethod
def has_perm(cls, user_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
return Session.query(cls).filter(cls.user_id == user_id)\
.filter(cls.permission == perm).scalar() is not None
@classmethod
def grant_perm(cls, user_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
new = cls()
new.user_id = user_id
new.permission = perm
try:
Session.add(new)
Session.commit()
except:
Session.rollback()
@classmethod
def revoke_perm(cls, user_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
try:
Session.query(cls).filter(cls.user_id == user_id)\
.filter(cls.permission == perm).delete()
Session.commit()
except:
Session.rollback()
#56 added assignments of users groups into repository
r1014
Fixed permissions for users groups, group can have create repo permission now....
r1271 class UsersGroupRepoToPerm(Base):
__tablename__ = 'users_group_repo_to_perm'
added user group to perm table
r958 __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True})
users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
added user group to perm table
r958 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
#56 added assignments of users groups into repository
r1014 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
added user group to perm table
r958
#56 implemented users groups editing,...
r972 users_group = relationship('UsersGroup')
permission = relationship('Permission')
#56 added assignments of users groups into repository
r1014 repository = relationship('Repository')
added user group to perm table
r958
Fixed permissions for users groups, group can have create repo permission now....
r1271
class UsersGroupToPerm(Base):
__tablename__ = 'users_group_to_perm'
users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
users_group = relationship('UsersGroup')
permission = relationship('Permission')
@classmethod
def has_perm(cls, users_group_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
return Session.query(cls).filter(cls.users_group_id ==
users_group_id)\
.filter(cls.permission == perm)\
.scalar() is not None
@classmethod
def grant_perm(cls, users_group_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
new = cls()
new.users_group_id = users_group_id
new.permission = perm
try:
Session.add(new)
Session.commit()
except:
Session.rollback()
@classmethod
def revoke_perm(cls, users_group_id, perm):
if not isinstance(perm, Permission):
raise Exception('perm needs to be an instance of Permission class')
try:
Session.query(cls).filter(cls.users_group_id == users_group_id)\
.filter(cls.permission == perm).delete()
Session.commit()
except:
Session.rollback()
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 class GroupToPerm(Base):
added group to perm mapping table
r879 __tablename__ = 'group_to_perm'
__table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'useexisting':True})
group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
removed unicode from models string params
r880 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)
group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
added group to perm mapping table
r879
#56 implemented users groups editing,...
r972 user = relationship('User')
permission = relationship('Permission')
group = relationship('Group')
added group to perm mapping table
r879
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
removed unicode from models string params
r880 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 languages = Column("languages", LargeBinary(1000000), nullable=False)#JSON data
Hacking for git support,and new faster repo scan
r631
#56 implemented users groups editing,...
r972 repository = relationship('Repository', single_parent=True)
renamed project to rhodecode
r547
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
removed unicode from models string params
r880 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)
#179 Added followers page
r1279 follows_from = Column('follows_from', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
implemented user dashboards, and following system.
r734
#56 implemented users groups editing,...
r972 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
implemented user dashboards, and following system.
r734
#56 implemented users groups editing,...
r972 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
Optimized queries on journal, and added quick stop following action button in journal
r1000 follows_repository = relationship('Repository', order_by='Repository.repo_name')
implemented user dashboards, and following system.
r734
#179 Added followers page
r1279
@classmethod
def get_repo_followers(cls, repo_id):
return Session.query(cls).filter(cls.follows_repo_id == repo_id)
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 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)
added clone_uri,api_key into models. Fixed models for mysql compatibilty
r1113 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):
Extended repo2db mapper with group creation via directory structures...
r878 return "<%s('%s:%s')>" % (self.__class__.__name__,
self.cache_id, self.cache_key)
added current db version into rhodecode,...
r834
Moved BaseModel into base class for declarative base. Added some handy methods into...
r1065 class DbMigrateVersion(Base):
added current db version into rhodecode,...
r834 __tablename__ = 'db_migrate_version'
__table_args__ = {'useexisting':True}
repository_id = Column('repository_id', String(250), primary_key=True)
repository_path = Column('repository_path', Text)
version = Column('version', Integer)