Mercurial > kallithea
changeset 1728:07e56179633e beta
- fixes celery sqlalchemy session issues for async forking
- summary page css fixes
- speed optimizations
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 26 Nov 2011 17:51:03 +0200 |
parents | 8e9f51091229 |
children | da8ee2ef7f6d |
files | rhodecode/lib/auth.py rhodecode/lib/base.py rhodecode/lib/celerylib/tasks.py rhodecode/lib/celerypylons/commands.py rhodecode/model/db.py rhodecode/model/scm.py rhodecode/model/user.py rhodecode/public/css/style.css rhodecode/templates/summary/summary.html |
diffstat | 9 files changed, 63 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/lib/auth.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/lib/auth.py Sat Nov 26 17:51:03 2011 +0200 @@ -301,7 +301,7 @@ def propagate_data(self): user_model = UserModel() - self.anonymous_user = User.get_by_username('default') + self.anonymous_user = User.get_by_username('default', cache=True) is_user_loaded = False # try go get user by api key @@ -488,8 +488,6 @@ else: log.warning('Permission denied for %s %s', cls, self.user) - - anonymous = self.user.username == 'default' if anonymous: @@ -587,8 +585,7 @@ self.repo_name = None def __call__(self, check_Location=''): - cookie_store = session.get('rhodecode_user') - user = AuthUser.from_cookie_store(cookie_store) + user = request.user if not user: return False self.user_perms = user.permissions
--- a/rhodecode/lib/base.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/lib/base.py Sat Nov 26 17:51:03 2011 +0200 @@ -52,6 +52,7 @@ username = get_container_username(environ, config) auth_user = AuthUser(user_id, api_key, username) + request.user = auth_user self.rhodecode_user = c.rhodecode_user = auth_user if not self.rhodecode_user.is_authenticated and \ self.rhodecode_user.user_id is not None:
--- a/rhodecode/lib/celerylib/tasks.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/lib/celerylib/tasks.py Sat Nov 26 17:51:03 2011 +0200 @@ -322,8 +322,8 @@ :param html_body: html version of body """ log = get_logger(send_email) + sa = get_session() email_config = config - subject = "%s %s" % (email_config.get('email_prefix'), subject) if not recipients: # if recipients are not defined we send to email_config + all admins
--- a/rhodecode/lib/celerypylons/commands.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/lib/celerypylons/commands.py Sat Nov 26 17:51:03 2011 +0200 @@ -1,3 +1,4 @@ +import rhodecode from rhodecode.lib.utils import BasePasterCommand, Command from celery.app import app_or_default from celery.bin import camqadm, celerybeat, celeryd, celeryev @@ -37,7 +38,7 @@ if CELERY_ON == False: raise Exception('Please enable celery_on in .ini config ' 'file before running celeryd') - + rhodecode.CELERY_ON = CELERY_ON cmd = self.celery_command(app_or_default()) return cmd.run(**vars(self.options))
--- a/rhodecode/model/db.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/model/db.py Sat Nov 26 17:51:03 2011 +0200 @@ -371,17 +371,16 @@ 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 @@ :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 @@ 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 @@ 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):
--- a/rhodecode/model/scm.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/model/scm.py Sat Nov 26 17:51:03 2011 +0200 @@ -76,9 +76,7 @@ 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 @@ 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 @@ 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):
--- a/rhodecode/model/user.py Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/model/user.py Sat Nov 26 17:51:03 2011 +0200 @@ -89,7 +89,7 @@ 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 @@ :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 @@ 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 @@ #====================================================================== # 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 @@ #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 @@ 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 @@ # (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 @@ 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 @@ 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.
--- a/rhodecode/public/css/style.css Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/public/css/style.css Sat Nov 26 17:51:03 2011 +0200 @@ -1053,7 +1053,9 @@ #content div.box div.form div.fields div.field div.input.summary { margin: 0 0 0 110px; } - +#content div.box div.form div.fields div.field div.input.summary-short { + margin: 0 0 0 110px; +} #content div.box div.form div.fields div.field div.file { margin: 0 0 0 200px; }
--- a/rhodecode/templates/summary/summary.html Sat Nov 26 03:01:08 2011 +0200 +++ b/rhodecode/templates/summary/summary.html Sat Nov 26 17:51:03 2011 +0200 @@ -16,11 +16,10 @@ ${self.menu('summary')} </%def> -<% -summary = lambda n:{False:'summary'}.get(n) -%> - <%def name="main()"> + <% + summary = lambda n:{False:'summary-short'}.get(n) + %> %if c.show_stats: <div class="box box-left"> %else: @@ -38,7 +37,7 @@ <div class="label-summary"> <label>${_('Name')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> <div style="float:right;padding:5px 0px 0px 5px"> %if c.rhodecode_user.username != 'default': ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')} @@ -100,14 +99,14 @@ <div class="label-summary"> <label>${_('Description')}:</label> </div> - <div class="input summary(c.show_stats) desc">${h.urlify_text(c.dbrepo.description)}</div> + <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div> </div> <div class="field"> <div class="label-summary"> <label>${_('Contact')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> <div class="gravatar"> <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/> </div> @@ -121,7 +120,7 @@ <div class="label-summary"> <label>${_('Last change')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> <b>${'r%s:%s' % (h.get_changeset_safe(c.rhodecode_repo,'tip').revision, h.get_changeset_safe(c.rhodecode_repo,'tip').short_id)}</b> - <span class="tooltip" title="${c.rhodecode_repo.last_change}"> @@ -134,7 +133,7 @@ <div class="label-summary"> <label>${_('Clone url')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> <input type="text" id="clone_url" readonly="readonly" value="${c.rhodecode_repo.alias} clone ${c.clone_repo_url}" size="70"/> </div> </div> @@ -143,13 +142,14 @@ <div class="label-summary"> <label>${_('Trending files')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> %if c.show_stats: <div id="lang_stats"></div> %else: + ${_('Statistics are disabled for this repository')} %if h.HasPermissionAll('hg.admin')('enable stats on from summary'): - ${_('Statistics are disabled for this repository')} ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")} - %endif + ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-button-small")} + %endif %endif </div> </div> @@ -158,7 +158,7 @@ <div class="label-summary"> <label>${_('Download')}:</label> </div> - <div class="input summary(c.show_stats)"> + <div class="input ${summary(c.show_stats)}"> %if len(c.rhodecode_repo.revisions) == 0: ${_('There are no downloads yet')} %elif c.enable_downloads is False: