aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/model
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2011-11-26 17:51:03 +0200
committerMarcin Kuzminski <marcin@python-works.com>2011-11-26 17:51:03 +0200
commitf437fdf086c99d83d264d769a521b0b2859a8e52 (patch)
treee18409deb42f2545ab3d6288e862ea543f9309e6 /rhodecode/model
parent04f6ae7f31be52b182f3158633b6a1c53ed58337 (diff)
- fixes celery sqlalchemy session issues for async forking
- summary page css fixes - speed optimizations --HG-- branch : beta
Diffstat (limited to 'rhodecode/model')
-rwxr-xr-xrhodecode/model/db.py35
-rw-r--r--rhodecode/model/scm.py8
-rw-r--r--rhodecode/model/user.py36
3 files changed, 41 insertions, 38 deletions
diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py
index cd3d4f6f..5c4714b7 100755
--- a/rhodecode/model/db.py
+++ b/rhodecode/model/db.py
@@ -371,17 +371,16 @@ class UsersGroup(Base, BaseModel):
return '<userGroup(%s)>' % (self.users_group_name)
@classmethod
- def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
+ def get_by_group_name(cls, group_name, cache=False,
+ case_insensitive=False):
if case_insensitive:
- gr = cls.query()\
- .filter(cls.users_group_name.ilike(group_name))
+ q = cls.query().filter(cls.users_group_name.ilike(group_name))
else:
- gr = cls.query()\
- .filter(cls.users_group_name == group_name)
+ q = cls.query().filter(cls.users_group_name == group_name)
if cache:
- gr = gr.options(FromCache("sql_cache_short",
- "get_user_%s" % group_name))
- return gr.scalar()
+ q = q.options(FromCache("sql_cache_short",
+ "get_user_%s" % group_name))
+ return q.scalar()
@classmethod
@@ -535,9 +534,9 @@ class Repository(Base, BaseModel):
:param cls:
"""
- q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key ==
- cls.url_sep())
- q.options(FromCache("sql_cache_short", "repository_repo_path"))
+ q = Session().query(RhodeCodeUi)\
+ .filter(RhodeCodeUi.ui_key == cls.url_sep())
+ q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
return q.one().ui_value
@property
@@ -849,6 +848,18 @@ class Permission(Base, BaseModel):
def get_by_key(cls, key):
return cls.query().filter(cls.permission_name == key).scalar()
+ @classmethod
+ def get_default_perms(cls, default_user_id, cache=True):
+ q = Session().query(UserRepoToPerm, Repository, cls)\
+ .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\
+ .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\
+ .filter(UserRepoToPerm.user_id == default_user_id)
+ if cache:
+ q = q.options(FromCache("sql_cache_short", "get_default_perms"))
+
+ return q.all()
+
+
class UserRepoToPerm(Base, BaseModel):
__tablename__ = 'repo_to_perm'
__table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'extend_existing':True})
@@ -869,7 +880,7 @@ class UserToPerm(Base, BaseModel):
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
user = relationship('User')
- permission = relationship('Permission')
+ permission = relationship('Permission', lazy='joined')
@classmethod
def has_perm(cls, user_id, perm):
diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py
index ee2a9f98..528f1331 100644
--- a/rhodecode/model/scm.py
+++ b/rhodecode/model/scm.py
@@ -76,9 +76,7 @@ class CachedRepoList(object):
def __iter__(self):
for dbr in self.db_repo_list:
-
scmr = dbr.scm_instance_cached
-
# check permission at this level
if not HasRepoPermissionAny('repository.read', 'repository.write',
'repository.admin')(dbr.repo_name,
@@ -100,8 +98,7 @@ class CachedRepoList(object):
tmp_d['description'] = dbr.description
tmp_d['description_sort'] = tmp_d['description']
tmp_d['last_change'] = last_change
- tmp_d['last_change_sort'] = time.mktime(last_change \
- .timetuple())
+ tmp_d['last_change_sort'] = time.mktime(last_change.timetuple())
tmp_d['tip'] = tip.raw_id
tmp_d['tip_sort'] = tip.revision
tmp_d['rev'] = tip.revision
@@ -112,8 +109,7 @@ class CachedRepoList(object):
tmp_d['last_msg'] = tip.message
tmp_d['author'] = tip.author
tmp_d['dbrepo'] = dbr.get_dict()
- tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork \
- else {}
+ tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork else {}
yield tmp_d
class ScmModel(BaseModel):
diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py
index e7093d2c..10926dd9 100644
--- a/rhodecode/model/user.py
+++ b/rhodecode/model/user.py
@@ -89,7 +89,7 @@ class UserModel(BaseModel):
raise
- def create_or_update(self, username, password, email, name, lastname,
+ def create_or_update(self, username, password, email, name, lastname,
active=True, admin=False, ldap_dn=None):
"""
Creates a new instance if not found, or updates current one
@@ -104,18 +104,18 @@ class UserModel(BaseModel):
:param admin:
:param ldap_dn:
"""
-
+
from rhodecode.lib.auth import get_crypt_password
-
+
log.debug('Checking for %s account in RhodeCode database', username)
user = User.get_by_username(username, case_insensitive=True)
if user is None:
- log.debug('creating new user %s', username)
+ log.debug('creating new user %s', username)
new_user = User()
else:
- log.debug('updating user %s', username)
+ log.debug('updating user %s', username)
new_user = user
-
+
try:
new_user.username = username
new_user.admin = admin
@@ -134,8 +134,8 @@ class UserModel(BaseModel):
log.error(traceback.format_exc())
self.sa.rollback()
raise
-
-
+
+
def create_for_container_auth(self, username, attrs):
"""
Creates the given user if it's not already in the database
@@ -354,14 +354,10 @@ class UserModel(BaseModel):
#======================================================================
# fetch default permissions
#======================================================================
- default_user = User.get_by_username('default')
+ default_user = User.get_by_username('default', cache=True)
+ default_user_id = default_user.user_id
- default_perms = self.sa.query(UserRepoToPerm, Repository, Permission)\
- .join((Repository, UserRepoToPerm.repository_id ==
- Repository.repo_id))\
- .join((Permission, UserRepoToPerm.permission_id ==
- Permission.permission_id))\
- .filter(UserRepoToPerm.user == default_user).all()
+ default_perms = Permission.get_default_perms(default_user_id)
if user.is_admin:
#==================================================================
@@ -382,7 +378,7 @@ class UserModel(BaseModel):
#default global
default_global_perms = self.sa.query(UserToPerm)\
- .filter(UserToPerm.user == default_user)
+ .filter(UserToPerm.user_id == default_user_id)
for perm in default_global_perms:
user.permissions['global'].add(perm.permission.permission_name)
@@ -391,7 +387,7 @@ class UserModel(BaseModel):
for perm in default_perms:
if perm.Repository.private and not (perm.Repository.user_id ==
uid):
- #diself.sable defaults for private repos,
+ #disable defaults for private repos,
p = 'repository.none'
elif perm.Repository.user_id == uid:
#set admin if owner
@@ -438,7 +434,7 @@ class UserModel(BaseModel):
# (or replace with higher) permissions
#==================================================================
- #users group global
+ # users group global
user_perms_from_users_groups = self.sa.query(UsersGroupToPerm)\
.options(joinedload(UsersGroupToPerm.permission))\
.join((UsersGroupMember, UsersGroupToPerm.users_group_id ==
@@ -448,7 +444,7 @@ class UserModel(BaseModel):
for perm in user_perms_from_users_groups:
user.permissions['global'].add(perm.permission.permission_name)
- #users group repositories
+ # users group repositories
user_repo_perms_from_users_groups = self.sa.query(
UsersGroupRepoToPerm,
Permission, Repository,)\
@@ -465,7 +461,7 @@ class UserModel(BaseModel):
cur_perm = user.permissions['repositories'][perm.
UsersGroupRepoToPerm.
repository.repo_name]
- #overwrite permission only if it's greater than permission
+ # overwrite permission only if it's greater than permission
# given from other sources
if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm]:
user.permissions['repositories'][perm.UsersGroupRepoToPerm.