diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2011-11-26 17:51:03 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2011-11-26 17:51:03 +0200 |
commit | f437fdf086c99d83d264d769a521b0b2859a8e52 (patch) | |
tree | e18409deb42f2545ab3d6288e862ea543f9309e6 /rhodecode/model | |
parent | 04f6ae7f31be52b182f3158633b6a1c53ed58337 (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-x | rhodecode/model/db.py | 35 | ||||
-rw-r--r-- | rhodecode/model/scm.py | 8 | ||||
-rw-r--r-- | rhodecode/model/user.py | 36 |
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. |