diff --git a/rhodecode/__init__.py b/rhodecode/__init__.py
--- a/rhodecode/__init__.py
+++ b/rhodecode/__init__.py
@@ -40,7 +40,7 @@ BACKENDS = {
CELERY_ENABLED = False
CELERY_EAGER = False
-# link to config for pylons
+# link to config for pyramid
CONFIG = {}
# Populated with the settings dictionary from application init in
diff --git a/rhodecode/api/views/repo_api.py b/rhodecode/api/views/repo_api.py
--- a/rhodecode/api/views/repo_api.py
+++ b/rhodecode/api/views/repo_api.py
@@ -911,7 +911,8 @@ def update_repo(
repo_enable_downloads=enable_downloads
if not isinstance(enable_downloads, Optional) else repo.enable_downloads)
- ref_choices, _labels = ScmModel().get_repo_landing_revs(repo=repo)
+ ref_choices, _labels = ScmModel().get_repo_landing_revs(
+ request.translate, repo=repo)
old_values = repo.get_api_data()
schema = repo_schema.RepoSchema().bind(
diff --git a/rhodecode/tests/functional/test_admin_auth_settings.py b/rhodecode/apps/admin/tests/test_admin_auth_settings.py
rename from rhodecode/tests/functional/test_admin_auth_settings.py
rename to rhodecode/apps/admin/tests/test_admin_auth_settings.py
--- a/rhodecode/tests/functional/test_admin_auth_settings.py
+++ b/rhodecode/apps/admin/tests/test_admin_auth_settings.py
@@ -32,7 +32,7 @@ def assert_auth_settings_updated(respons
@pytest.mark.usefixtures("autologin_user", "app")
-class TestAuthSettingsController(object):
+class TestAuthSettingsView(object):
def _enable_plugins(self, plugins_list, csrf_token, override=None,
verify_response=False):
diff --git a/rhodecode/apps/admin/tests/test_admin_users.py b/rhodecode/apps/admin/tests/test_admin_users.py
--- a/rhodecode/apps/admin/tests/test_admin_users.py
+++ b/rhodecode/apps/admin/tests/test_admin_users.py
@@ -385,7 +385,7 @@ class TestAdminUsersView(TestController)
'csrf_token': self.csrf_token,
})
- msg = '???'
+ msg = u'Username "%(username)s" is forbidden'
msg = h.html_escape(msg % {'username': 'new_user'})
response.mustcontain('%s' % msg)
response.mustcontain(
diff --git a/rhodecode/apps/admin/views/permissions.py b/rhodecode/apps/admin/views/permissions.py
--- a/rhodecode/apps/admin/views/permissions.py
+++ b/rhodecode/apps/admin/views/permissions.py
@@ -53,8 +53,6 @@ log = logging.getLogger(__name__)
class AdminPermissionsView(BaseAppView, DataGridAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
-
-
PermissionModel().set_global_permission_choices(
c, gettext_translator=self.request.translate)
return c
diff --git a/rhodecode/apps/admin/views/repositories.py b/rhodecode/apps/admin/views/repositories.py
--- a/rhodecode/apps/admin/views/repositories.py
+++ b/rhodecode/apps/admin/views/repositories.py
@@ -58,7 +58,7 @@ class AdminReposView(BaseAppView, DataGr
c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
c.repo_groups_choices = map(lambda k: safe_unicode(k[0]), c.repo_groups)
c.landing_revs_choices, c.landing_revs = \
- ScmModel().get_repo_landing_revs()
+ ScmModel().get_repo_landing_revs(self.request.translate)
c.personal_repo_group = self._rhodecode_user.personal_repo_group
@LoginRequired()
diff --git a/rhodecode/apps/admin/views/settings.py b/rhodecode/apps/admin/views/settings.py
--- a/rhodecode/apps/admin/views/settings.py
+++ b/rhodecode/apps/admin/views/settings.py
@@ -660,7 +660,7 @@ class AdminSettingsView(BaseAppView):
c.active = 'search'
searcher = searcher_from_config(self.request.registry.settings)
- c.statistics = searcher.statistics()
+ c.statistics = searcher.statistics(self.request.translate)
return self._get_template_context(c)
diff --git a/rhodecode/apps/admin/views/users.py b/rhodecode/apps/admin/views/users.py
--- a/rhodecode/apps/admin/views/users.py
+++ b/rhodecode/apps/admin/views/users.py
@@ -259,7 +259,6 @@ class UsersView(UserAppView):
PermissionModel().set_global_permission_choices(
c, gettext_translator=req.translate)
-
return c
@LoginRequired()
diff --git a/rhodecode/apps/login/tests/test_login.py b/rhodecode/apps/login/tests/test_login.py
--- a/rhodecode/apps/login/tests/test_login.py
+++ b/rhodecode/apps/login/tests/test_login.py
@@ -88,32 +88,31 @@ class TestLoginController(object):
def test_login_admin_ok(self):
response = self.app.post(route_path('login'),
{'username': 'test_admin',
- 'password': 'test12'})
- assert response.status == '302 Found'
+ 'password': 'test12'}, status=302)
+ response = response.follow()
session = response.get_session_from_response()
username = session['rhodecode_user'].get('username')
assert username == 'test_admin'
- response = response.follow()
response.mustcontain('/%s' % HG_REPO)
def test_login_regular_ok(self):
response = self.app.post(route_path('login'),
{'username': 'test_regular',
- 'password': 'test12'})
+ 'password': 'test12'}, status=302)
- assert response.status == '302 Found'
+ response = response.follow()
session = response.get_session_from_response()
username = session['rhodecode_user'].get('username')
assert username == 'test_regular'
- response = response.follow()
+
response.mustcontain('/%s' % HG_REPO)
def test_login_ok_came_from(self):
test_came_from = '/_admin/users?branch=stable'
_url = '{}?came_from={}'.format(route_path('login'), test_came_from)
response = self.app.post(
- _url, {'username': 'test_admin', 'password': 'test12'})
- assert response.status == '302 Found'
+ _url, {'username': 'test_admin', 'password': 'test12'}, status=302)
+
assert 'branch=stable' in response.location
response = response.follow()
@@ -124,8 +123,8 @@ class TestLoginController(object):
with fixture.anon_access(False):
kwargs = {'branch': 'stable'}
response = self.app.get(
- h.route_path('repo_summary', repo_name=HG_REPO, _query=kwargs))
- assert response.status == '302 Found'
+ h.route_path('repo_summary', repo_name=HG_REPO, _query=kwargs),
+ status=302)
response_query = urlparse.parse_qsl(response.location)
assert 'branch=stable' in response_query[0][1]
@@ -200,13 +199,12 @@ class TestLoginController(object):
self.destroy_users.add(temp_user)
response = self.app.post(route_path('login'),
{'username': temp_user,
- 'password': 'test123'})
+ 'password': 'test123'}, status=302)
- assert response.status == '302 Found'
+ response = response.follow()
session = response.get_session_from_response()
username = session['rhodecode_user'].get('username')
assert username == temp_user
- response = response.follow()
response.mustcontain('/%s' % HG_REPO)
# new password should be bcrypted, after log-in and transfer
@@ -233,7 +231,7 @@ class TestLoginController(object):
)
assertr = response.assert_response()
- msg = '???'
+ msg = 'Username "%(username)s" already exists'
msg = msg % {'username': uname}
assertr.element_contains('#username+.error-message', msg)
@@ -251,7 +249,7 @@ class TestLoginController(object):
)
assertr = response.assert_response()
- msg = '???'
+ msg = u'This e-mail address is already taken'
assertr.element_contains('#email+.error-message', msg)
def test_register_err_same_email_case_sensitive(self):
@@ -267,7 +265,7 @@ class TestLoginController(object):
}
)
assertr = response.assert_response()
- msg = '???'
+ msg = u'This e-mail address is already taken'
assertr.element_contains('#email+.error-message', msg)
def test_register_err_wrong_data(self):
@@ -321,7 +319,7 @@ class TestLoginController(object):
)
assertr = response.assert_response()
- msg = '???'
+ msg = u'Username "%(username)s" already exists'
msg = msg % {'username': usr}
assertr.element_contains('#username+.error-message', msg)
@@ -338,7 +336,7 @@ class TestLoginController(object):
}
)
- msg = '???'
+ msg = u'Invalid characters (non-ascii) in password'
response.mustcontain(msg)
def test_register_password_mismatch(self):
@@ -353,7 +351,7 @@ class TestLoginController(object):
'lastname': 'test'
}
)
- msg = '???'
+ msg = u'Passwords do not match'
response.mustcontain(msg)
def test_register_ok(self):
@@ -363,6 +361,11 @@ class TestLoginController(object):
name = 'testname'
lastname = 'testlastname'
+ # this initializes a session
+ response = self.app.get(route_path('register'))
+ response.mustcontain('Create an Account')
+
+
response = self.app.post(
route_path('register'),
{
@@ -373,9 +376,10 @@ class TestLoginController(object):
'firstname': name,
'lastname': lastname,
'admin': True
- }
- ) # This should be overriden
- assert response.status == '302 Found'
+ },
+ status=302
+ ) # This should be overridden
+
assert_session_flash(
response, 'You have successfully registered with RhodeCode')
@@ -391,6 +395,9 @@ class TestLoginController(object):
def test_forgot_password_wrong_mail(self):
bad_email = 'marcin@wrongmail.org'
+ # this initializes a session
+ self.app.get(route_path('reset_password'))
+
response = self.app.post(
route_path('reset_password'), {'email': bad_email, }
)
@@ -398,8 +405,8 @@ class TestLoginController(object):
'If such email exists, a password reset link was sent to it.')
def test_forgot_password(self, user_util):
- response = self.app.get(route_path('reset_password'))
- assert response.status == '200 OK'
+ # this initializes a session
+ self.app.get(route_path('reset_password'))
user = user_util.create_user()
user_id = user.user_id
@@ -412,8 +419,7 @@ class TestLoginController(object):
# BAD KEY
confirm_url = '{}?key={}'.format(route_path('reset_password_confirmation'), 'badkey')
- response = self.app.get(confirm_url)
- assert response.status == '302 Found'
+ response = self.app.get(confirm_url, status=302)
assert response.location.endswith(route_path('reset_password'))
assert_session_flash(response, 'Given reset token is invalid')
diff --git a/rhodecode/apps/login/tests/test_register_captcha.py b/rhodecode/apps/login/tests/test_register_captcha.py
--- a/rhodecode/apps/login/tests/test_register_captcha.py
+++ b/rhodecode/apps/login/tests/test_register_captcha.py
@@ -58,7 +58,7 @@ class TestRegisterCaptcha(object):
('privkey', '', CaptchaData(True, 'privkey', '')),
('privkey', 'pubkey', CaptchaData(True, 'privkey', 'pubkey')),
])
- def test_get_captcha_data(self, private_key, public_key, expected, db,
+ def test_get_captcha_data(self, private_key, public_key, expected,
request_stub, user_util):
request_stub.user = user_util.create_user().AuthUser()
request_stub.matched_route = AttributeDict({'name': 'login'})
diff --git a/rhodecode/apps/login/views.py b/rhodecode/apps/login/views.py
--- a/rhodecode/apps/login/views.py
+++ b/rhodecode/apps/login/views.py
@@ -32,7 +32,7 @@ from recaptcha.client.captcha import sub
from rhodecode.apps._base import BaseAppView
from rhodecode.authentication.base import authenticate, HTTP_TYPE
-from rhodecode.events import UserRegistered
+from rhodecode.events import UserRegistered, trigger
from rhodecode.lib import helpers as h
from rhodecode.lib import audit_logger
from rhodecode.lib.auth import (
@@ -147,7 +147,7 @@ class LoginView(BaseAppView):
raise HTTPFound(c.came_from, headers=headers)
except UserCreationError as e:
log.error(e)
- self.session.flash(e, queue='error')
+ h.flash(e, category='error')
return self._get_template_context(c)
@@ -201,7 +201,7 @@ class LoginView(BaseAppView):
# the fly can throw this exception signaling that there's issue
# with user creation, explanation should be provided in
# Exception itself
- self.session.flash(e, queue='error')
+ h.flash(e, category='error')
return self._get_template_context(c)
@CSRFRequired()
@@ -250,6 +250,7 @@ class LoginView(BaseAppView):
route_name='register', request_method='POST',
renderer='rhodecode:templates/register.mako')
def register_post(self):
+ self.load_default_context()
captcha = self._get_captcha_data()
auto_active = 'hg.register.auto_activate' in User.get_default_user()\
.AuthUser().permissions['global']
@@ -275,10 +276,10 @@ class LoginView(BaseAppView):
new_user = UserModel().create_registration(form_result)
event = UserRegistered(user=new_user, session=self.session)
- self.request.registry.notify(event)
- self.session.flash(
+ trigger(event)
+ h.flash(
_('You have successfully registered with RhodeCode'),
- queue='success')
+ category='success')
Session().commit()
redirect_ro = self.request.route_path('login')
@@ -295,16 +296,17 @@ class LoginView(BaseAppView):
# the fly can throw this exception signaling that there's issue
# with user creation, explanation should be provided in
# Exception itself
- self.session.flash(e, queue='error')
+ h.flash(e, category='error')
return self.register()
@view_config(
route_name='reset_password', request_method=('GET', 'POST'),
renderer='rhodecode:templates/password_reset.mako')
def password_reset(self):
+ c = self.load_default_context()
captcha = self._get_captcha_data()
- render_ctx = {
+ template_context = {
'captcha_active': captcha.active,
'captcha_public_key': captcha.public_key,
'defaults': {},
@@ -319,8 +321,8 @@ class LoginView(BaseAppView):
if h.HasPermissionAny('hg.password_reset.disabled')():
_email = self.request.POST.get('email', '')
log.error('Failed attempt to reset password for `%s`.', _email)
- self.session.flash(_('Password reset has been disabled.'),
- queue='error')
+ h.flash(_('Password reset has been disabled.'),
+ category='error')
return HTTPFound(self.request.route_path('reset_password'))
password_reset_form = PasswordResetForm(self.request.translate)()
@@ -361,7 +363,7 @@ class LoginView(BaseAppView):
UserModel().reset_password_link(
form_result, password_reset_url)
# Display success message and redirect.
- self.session.flash(msg, queue='success')
+ h.flash(msg, category='success')
action_data = {'email': user_email,
'user_agent': self.request.user_agent}
@@ -371,30 +373,30 @@ class LoginView(BaseAppView):
return HTTPFound(self.request.route_path('reset_password'))
except formencode.Invalid as errors:
- render_ctx.update({
+ template_context.update({
'defaults': errors.value,
'errors': errors.error_dict,
})
if not self.request.POST.get('email'):
# case of empty email, we want to report that
- return render_ctx
+ return self._get_template_context(c, **template_context)
if 'recaptcha_field' in errors.error_dict:
# case of failed captcha
- return render_ctx
+ return self._get_template_context(c, **template_context)
log.debug('faking response on invalid password reset')
# make this take 2s, to prevent brute forcing.
time.sleep(2)
- self.session.flash(msg, queue='success')
+ h.flash(msg, category='success')
return HTTPFound(self.request.route_path('reset_password'))
- return render_ctx
+ return self._get_template_context(c, **template_context)
@view_config(route_name='reset_password_confirmation',
request_method='GET')
def password_reset_confirmation(self):
-
+ self.load_default_context()
if self.request.GET and self.request.GET.get('key'):
# make this take 2s, to prevent brute forcing.
time.sleep(2)
@@ -407,18 +409,18 @@ class LoginView(BaseAppView):
log.debug('Got token with role:%s expected is %s',
getattr(token, 'role', 'EMPTY_TOKEN'),
UserApiKeys.ROLE_PASSWORD_RESET)
- self.session.flash(
- _('Given reset token is invalid'), queue='error')
+ h.flash(
+ _('Given reset token is invalid'), category='error')
return HTTPFound(self.request.route_path('reset_password'))
try:
owner = token.user
data = {'email': owner.email, 'token': token.api_key}
UserModel().reset_password(data)
- self.session.flash(
+ h.flash(
_('Your password reset was successful, '
'a new password has been sent to your email'),
- queue='success')
+ category='success')
except Exception as e:
log.error(e)
return HTTPFound(self.request.route_path('reset_password'))
diff --git a/rhodecode/apps/my_account/tests/test_my_account_edit.py b/rhodecode/apps/my_account/tests/test_my_account_edit.py
--- a/rhodecode/apps/my_account/tests/test_my_account_edit.py
+++ b/rhodecode/apps/my_account/tests/test_my_account_edit.py
@@ -198,6 +198,6 @@ class TestMyAccountEdit(TestController):
params=params)
response.mustcontain('An email address must contain a single @')
- msg = '???'
+ msg = u'Username "%(username)s" already exists'
msg = h.html_escape(msg % {'username': 'test_admin'})
response.mustcontain(u"%s" % msg)
diff --git a/rhodecode/apps/my_account/views/my_account.py b/rhodecode/apps/my_account/views/my_account.py
--- a/rhodecode/apps/my_account/views/my_account.py
+++ b/rhodecode/apps/my_account/views/my_account.py
@@ -572,6 +572,7 @@ class MyAccountView(BaseAppView, DataGri
route_name='my_account_pullrequests_data',
request_method='GET', renderer='json_ext')
def my_account_pullrequests_data(self):
+ self.load_default_context()
req_get = self.request.GET
closed = str2bool(req_get.get('closed'))
diff --git a/rhodecode/apps/repository/tests/test_repo_files.py b/rhodecode/apps/repository/tests/test_repo_files.py
--- a/rhodecode/apps/repository/tests/test_repo_files.py
+++ b/rhodecode/apps/repository/tests/test_repo_files.py
@@ -48,6 +48,7 @@ def route_path(name, params=None, **kwar
import urllib
base_url = {
+ 'repo_summary': '/{repo_name}',
'repo_archivefile': '/{repo_name}/archive/{fname}',
'repo_files_diff': '/{repo_name}/diff/{f_path}',
'repo_files_diff_2way_redirect': '/{repo_name}/diff-2way/{f_path}',
@@ -999,8 +1000,11 @@ class TestFilesViewOtherCases(object):
.format(repo_file_add_url))
def test_access_empty_repo_redirect_to_summary_with_alert_no_write_perms(
- self, backend_stub, user_util):
+ self, backend_stub, autologin_regular_user):
repo = backend_stub.create_repo()
+ # init session for anon user
+ route_path('repo_summary', repo_name=repo.repo_name)
+
repo_file_add_url = route_path(
'repo_files_add_file',
repo_name=repo.repo_name,
diff --git a/rhodecode/apps/repository/views/repo_forks.py b/rhodecode/apps/repository/views/repo_forks.py
--- a/rhodecode/apps/repository/views/repo_forks.py
+++ b/rhodecode/apps/repository/views/repo_forks.py
@@ -53,11 +53,11 @@ class RepoForksView(RepoAppView, DataGri
perm_set=['group.write', 'group.admin'])
c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
c.repo_groups_choices = map(lambda k: safe_unicode(k[0]), c.repo_groups)
- choices, c.landing_revs = ScmModel().get_repo_landing_revs()
+ choices, c.landing_revs = ScmModel().get_repo_landing_revs(
+ self.request.translate)
c.landing_revs_choices = choices
c.personal_repo_group = c.rhodecode_user.personal_repo_group
-
return c
@LoginRequired()
@@ -78,6 +78,7 @@ class RepoForksView(RepoAppView, DataGri
renderer='json_ext', xhr=True)
def repo_forks_data(self):
_ = self.request.translate
+ self.load_default_context()
column_map = {
'fork_name': 'repo_name',
'fork_date': 'created_on',
diff --git a/rhodecode/apps/repository/views/repo_pull_requests.py b/rhodecode/apps/repository/views/repo_pull_requests.py
--- a/rhodecode/apps/repository/views/repo_pull_requests.py
+++ b/rhodecode/apps/repository/views/repo_pull_requests.py
@@ -173,6 +173,7 @@ class RepoPullRequestsView(RepoAppView,
route_name='pullrequest_show_all_data', request_method='GET',
renderer='json_ext', xhr=True)
def pull_request_list_data(self):
+ self.load_default_context()
# additional filters
req_get = self.request.GET
@@ -675,6 +676,7 @@ class RepoPullRequestsView(RepoAppView,
route_name='pullrequest_repo_refs', request_method='GET',
renderer='json_ext', xhr=True)
def pull_request_repo_refs(self):
+ self.load_default_context()
target_repo_name = self.request.matchdict['target_repo_name']
repo = Repository.get_by_repo_name(target_repo_name)
if not repo:
@@ -745,6 +747,7 @@ class RepoPullRequestsView(RepoAppView,
def pull_request_create(self):
_ = self.request.translate
self.assure_not_empty_repo()
+ self.load_default_context()
controls = peppercorn.parse(self.request.POST.items())
@@ -878,6 +881,7 @@ class RepoPullRequestsView(RepoAppView,
pull_request = PullRequest.get_or_404(
self.request.matchdict['pull_request_id'])
+ self.load_default_context()
# only owner or admin can update it
allowed_to_update = PullRequestModel().check_user_update(
pull_request, self._rhodecode_user)
@@ -976,6 +980,7 @@ class RepoPullRequestsView(RepoAppView,
pull_request = PullRequest.get_or_404(
self.request.matchdict['pull_request_id'])
+ self.load_default_context()
check = MergeCheck.validate(pull_request, self._rhodecode_db_user,
translator=self.request.translate)
merge_possible = not check.failed
@@ -1048,6 +1053,7 @@ class RepoPullRequestsView(RepoAppView,
pull_request = PullRequest.get_or_404(
self.request.matchdict['pull_request_id'])
+ self.load_default_context()
pr_closed = pull_request.is_closed()
allowed_to_delete = PullRequestModel().check_user_delete(
diff --git a/rhodecode/apps/repository/views/repo_settings.py b/rhodecode/apps/repository/views/repo_settings.py
--- a/rhodecode/apps/repository/views/repo_settings.py
+++ b/rhodecode/apps/repository/views/repo_settings.py
@@ -62,10 +62,11 @@ class RepoSettingsView(RepoAppView):
# we might be in missing requirement state, so we load things
# without touching scm_instance()
c.landing_revs_choices, c.landing_revs = \
- ScmModel().get_repo_landing_revs()
+ ScmModel().get_repo_landing_revs(self.request.translate)
else:
c.landing_revs_choices, c.landing_revs = \
- ScmModel().get_repo_landing_revs(self.db_repo)
+ ScmModel().get_repo_landing_revs(
+ self.request.translate, self.db_repo)
c.personal_repo_group = c.auth_user.personal_repo_group
c.repo_fields = RepositoryField.query()\
diff --git a/rhodecode/apps/user_group/views/__init__.py b/rhodecode/apps/user_group/views/__init__.py
--- a/rhodecode/apps/user_group/views/__init__.py
+++ b/rhodecode/apps/user_group/views/__init__.py
@@ -428,7 +428,7 @@ class UserGroupsView(UserGroupAppView):
try:
# first stage that verifies the checkbox
- _form = UserIndividualPermissionsForm()
+ _form = UserIndividualPermissionsForm(self.request.translate)
form_result = _form.to_python(dict(self.request.POST))
inherit_perms = form_result['inherit_default_permissions']
user_group.inherit_default_permissions = inherit_perms
diff --git a/rhodecode/config/environment.py b/rhodecode/config/environment.py
--- a/rhodecode/config/environment.py
+++ b/rhodecode/config/environment.py
@@ -74,9 +74,6 @@ def load_pyramid_environment(global_conf
# Initialize the database connection.
utils.initialize_database(settings_merged)
- # TODO(marcink): base_path handling ?
- # repos_path = list(db_cfg.items('paths'))[0][1]
-
load_rcextensions(root_path=settings_merged['here'])
# Limit backends to `vcs.backends` from configuration
diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py
--- a/rhodecode/lib/base.py
+++ b/rhodecode/lib/base.py
@@ -29,7 +29,6 @@ import socket
import markupsafe
import ipaddress
-import pyramid.threadlocal
from paste.auth.basic import AuthBasicAuthenticator
from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden, get_exception
@@ -41,15 +40,11 @@ from rhodecode.lib import auth, utils2
from rhodecode.lib import helpers as h
from rhodecode.lib.auth import AuthUser, CookieStoreWrapper
from rhodecode.lib.exceptions import UserCreationError
-from rhodecode.lib.utils import (
- get_repo_slug, set_rhodecode_config, password_changed,
- get_enabled_hook_classes)
+from rhodecode.lib.utils import (password_changed, get_enabled_hook_classes)
from rhodecode.lib.utils2 import (
str2bool, safe_unicode, AttributeDict, safe_int, md5, aslist, safe_str)
-from rhodecode.model import meta
from rhodecode.model.db import Repository, User, ChangesetComment
from rhodecode.model.notification import NotificationModel
-from rhodecode.model.scm import ScmModel
from rhodecode.model.settings import VcsSettingsModel, SettingsModel
log = logging.getLogger(__name__)
@@ -440,6 +435,8 @@ def get_auth_user(request):
# AuthUser
auth_user = AuthUser(ip_addr=ip_addr)
+ # in case someone changes a password for user it triggers session
+ # flush and forces a re-login
if password_changed(auth_user, session):
session.invalidate()
cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
diff --git a/rhodecode/lib/diffs.py b/rhodecode/lib/diffs.py
--- a/rhodecode/lib/diffs.py
+++ b/rhodecode/lib/diffs.py
@@ -23,19 +23,15 @@
Set of diffing helpers, previously part of vcs
"""
+import re
import collections
-import re
import difflib
import logging
from itertools import tee, imap
-from rhodecode.translation import temp_translation_factory as _
-
from rhodecode.lib.vcs.exceptions import VCSError
from rhodecode.lib.vcs.nodes import FileNode, SubModuleNode
-from rhodecode.lib.vcs.backends.base import EmptyCommit
-from rhodecode.lib.helpers import escape
from rhodecode.lib.utils2 import safe_unicode
log = logging.getLogger(__name__)
@@ -51,69 +47,6 @@ class OPS(object):
DEL = 'D'
-def wrap_to_table(str_):
- return '''
''' % (_('Click to comment'), str_)
-
-
-def wrapped_diff(filenode_old, filenode_new, diff_limit=None, file_limit=None,
- show_full_diff=False, ignore_whitespace=True, line_context=3,
- enable_comments=False):
- """
- returns a wrapped diff into a table, checks for cut_off_limit for file and
- whole diff and presents proper message
- """
-
- if filenode_old is None:
- filenode_old = FileNode(filenode_new.path, '', EmptyCommit())
-
- if filenode_old.is_binary or filenode_new.is_binary:
- diff = wrap_to_table(_('Binary file'))
- stats = None
- size = 0
- data = None
-
- elif diff_limit != -1 and (diff_limit is None or
- (filenode_old.size < diff_limit and filenode_new.size < diff_limit)):
-
- f_gitdiff = get_gitdiff(filenode_old, filenode_new,
- ignore_whitespace=ignore_whitespace,
- context=line_context)
- diff_processor = DiffProcessor(
- f_gitdiff, format='gitdiff', diff_limit=diff_limit,
- file_limit=file_limit, show_full_diff=show_full_diff)
- _parsed = diff_processor.prepare()
-
- diff = diff_processor.as_html(enable_comments=enable_comments)
- stats = _parsed[0]['stats'] if _parsed else None
- size = len(diff or '')
- data = _parsed[0] if _parsed else None
- else:
- diff = wrap_to_table(_('Changeset was too big and was cut off, use '
- 'diff menu to display this diff'))
- stats = None
- size = 0
- data = None
- if not diff:
- submodules = filter(lambda o: isinstance(o, SubModuleNode),
- [filenode_new, filenode_old])
- if submodules:
- diff = wrap_to_table(escape('Submodule %r' % submodules[0]))
- else:
- diff = wrap_to_table(_('No changes detected'))
-
- cs1 = filenode_old.commit.raw_id
- cs2 = filenode_new.commit.raw_id
-
- return size, cs1, cs2, diff, stats, data
-
-
def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
"""
Returns git style diff between given ``filenode_old`` and ``filenode_new``.
@@ -916,6 +849,10 @@ class DiffProcessor(object):
"""
Return given diff as html table with customized css classes
"""
+ # TODO(marcink): not sure how to pass in translator
+ # here in an efficient way, leave the _ for proper gettext extraction
+ _ = lambda s: s
+
def _link_to_if(condition, label, url):
"""
Generates a link if condition is meet or just the label if not.
diff --git a/rhodecode/lib/ext_json.py b/rhodecode/lib/ext_json.py
--- a/rhodecode/lib/ext_json.py
+++ b/rhodecode/lib/ext_json.py
@@ -51,7 +51,7 @@ def _obj_dump(obj):
return str(obj)
elif isinstance(obj, complex):
return [obj.real, obj.imag]
- elif rhodecode and isinstance(obj, rhodecode.translation.LazyString):
+ elif rhodecode and isinstance(obj, rhodecode.translation._LazyString):
return obj.eval()
else:
raise TypeError(repr(obj) + " is not JSON serializable")
diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py
--- a/rhodecode/lib/helpers.py
+++ b/rhodecode/lib/helpers.py
@@ -1929,12 +1929,12 @@ def secure_form(form_url, method="POST",
"""
from webhelpers.pylonslib.secure_form import insecure_form
- session = None
-
- # TODO(marcink): after pyramid migration require request variable ALWAYS
if 'request' in attrs:
session = attrs['request'].session
del attrs['request']
+ else:
+ raise ValueError(
+ 'Calling this form requires request= to be passed as argument')
form = insecure_form(form_url, method, multipart, **attrs)
token = literal(
diff --git a/rhodecode/lib/index/whoosh.py b/rhodecode/lib/index/whoosh.py
--- a/rhodecode/lib/index/whoosh.py
+++ b/rhodecode/lib/index/whoosh.py
@@ -23,19 +23,18 @@ Index schema for RhodeCode
"""
from __future__ import absolute_import
-import logging
import os
import re
+import logging
-from rhodecode.translation import temp_translation_factory as _
-
-from whoosh import query as query_lib, sorting
+from whoosh import query as query_lib
from whoosh.highlight import HtmlFormatter, ContextFragmenter
from whoosh.index import create_in, open_dir, exists_in, EmptyIndexError
from whoosh.qparser import QueryParser, QueryParserError
import rhodecode.lib.helpers as h
from rhodecode.lib.index import BaseSearch
+from rhodecode.lib.utils2 import safe_unicode
log = logging.getLogger(__name__)
@@ -122,7 +121,7 @@ class Search(BaseSearch):
allowed_repos_filter = self._get_repo_filter(
search_user, repo_name)
try:
- query = qp.parse(unicode(query))
+ query = qp.parse(safe_unicode(query))
log.debug('query: %s (%s)' % (query, repr(query)))
reverse, sortedby = False, None
@@ -147,20 +146,20 @@ class Search(BaseSearch):
search_type, res_ln, whoosh_results)
except QueryParserError:
- result['error'] = _('Invalid search query. Try quoting it.')
+ result['error'] = 'Invalid search query. Try quoting it.'
except (EmptyIndexError, IOError, OSError):
- msg = _('There is no index to search in. '
- 'Please run whoosh indexer')
+ msg = 'There is no index to search in. Please run whoosh indexer'
log.exception(msg)
result['error'] = msg
except Exception:
- msg = _('An error occurred during this search operation')
+ msg = 'An error occurred during this search operation'
log.exception(msg)
result['error'] = msg
return result
- def statistics(self):
+ def statistics(self, translator):
+ _ = translator
stats = [
{'key': _('Index Type'), 'value': 'Whoosh'},
{'key': _('File Index'), 'value': str(self.file_index)},
diff --git a/rhodecode/lib/utils2.py b/rhodecode/lib/utils2.py
--- a/rhodecode/lib/utils2.py
+++ b/rhodecode/lib/utils2.py
@@ -796,11 +796,11 @@ def suuid(url=None, truncate_to=22, alph
return "".join(output)[:truncate_to]
-def get_current_rhodecode_user():
+def get_current_rhodecode_user(request=None):
"""
Gets rhodecode user from request
"""
- pyramid_request = pyramid.threadlocal.get_current_request()
+ pyramid_request = request or pyramid.threadlocal.get_current_request()
# web case
if pyramid_request and hasattr(pyramid_request, 'user'):
diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -48,7 +48,6 @@ import formencode
from pkg_resources import resource_filename
from formencode import All, Pipe
-from rhodecode.translation import temp_translation_factory as _
from pyramid.threadlocal import get_current_request
from rhodecode import BACKENDS
diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py
--- a/rhodecode/model/scm.py
+++ b/rhodecode/model/scm.py
@@ -30,7 +30,6 @@ import logging
import cStringIO
import pkg_resources
-from rhodecode.translation import temp_translation_factory as _
from sqlalchemy import func
from zope.cachedescriptors.property import Lazy as LazyProperty
@@ -40,7 +39,6 @@ from rhodecode.lib.vcs.exceptions import
from rhodecode.lib.vcs.nodes import FileNode
from rhodecode.lib.vcs.backends.base import EmptyCommit
from rhodecode.lib import helpers as h
-
from rhodecode.lib.auth import (
HasRepoPermissionAny, HasRepoGroupPermissionAny,
HasUserGroupPermissionAny)
@@ -748,14 +746,14 @@ class ScmModel(BaseModel):
def get_unread_journal(self):
return self.sa.query(UserLog).count()
- def get_repo_landing_revs(self, repo=None):
+ def get_repo_landing_revs(self, translator, repo=None):
"""
Generates select option with tags branches and bookmarks (for hg only)
grouped by type
:param repo:
"""
-
+ _ = translator
repo = self._get_repo(repo)
hist_l = [
diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py
--- a/rhodecode/model/user.py
+++ b/rhodecode/model/user.py
@@ -24,11 +24,10 @@ users model for RhodeCode
import logging
import traceback
+import datetime
+import ipaddress
-import datetime
-from rhodecode.translation import temp_translation_factory as _
-
-import ipaddress
+from pyramid.threadlocal import get_current_request
from sqlalchemy.exc import DatabaseError
from rhodecode import events
@@ -163,8 +162,9 @@ class UserModel(BaseModel):
user = self._get_user(user)
if user.username == User.DEFAULT_USER:
raise DefaultUserException(
- _("You can't Edit this user since it's"
- " crucial for entire application"))
+ "You can't edit this user (`%(username)s`) since it's "
+ "crucial for entire application" % {
+ 'username': user.username})
# first store only defaults
user_attrs = {
@@ -247,6 +247,7 @@ class UserModel(BaseModel):
:returns: new User object with injected `is_new_user` attribute.
"""
+
if not cur_user:
cur_user = getattr(get_current_rhodecode_user(), 'username', None)
@@ -330,8 +331,9 @@ class UserModel(BaseModel):
# we're not allowed to edit default user
if user.username == User.DEFAULT_USER:
raise DefaultUserException(
- _("You can't edit this user (`%(username)s`) since it's "
- "crucial for entire application") % {'username': user.username})
+ "You can't edit this user (`%(username)s`) since it's "
+ "crucial for entire application"
+ % {'username': user.username})
# inject special attribute that will tell us if User is new or old
new_user.is_new_user = not edit
@@ -497,40 +499,43 @@ class UserModel(BaseModel):
def delete(self, user, cur_user=None, handle_repos=None,
handle_repo_groups=None, handle_user_groups=None):
if not cur_user:
- cur_user = getattr(get_current_rhodecode_user(), 'username', None)
+ cur_user = getattr(
+ get_current_rhodecode_user(), 'username', None)
user = self._get_user(user)
try:
if user.username == User.DEFAULT_USER:
raise DefaultUserException(
- _(u"You can't remove this user since it's"
- u" crucial for entire application"))
+ u"You can't remove this user since it's"
+ u" crucial for entire application")
left_overs = self._handle_user_repos(
user.username, user.repositories, handle_repos)
if left_overs and user.repositories:
repos = [x.repo_name for x in user.repositories]
raise UserOwnsReposException(
- _(u'user "%s" still owns %s repositories and cannot be '
- u'removed. Switch owners or remove those repositories:%s')
- % (user.username, len(repos), ', '.join(repos)))
+ u'user "%(username)s" still owns %(len_repos)s repositories and cannot be '
+ u'removed. Switch owners or remove those repositories:%(list_repos)s'
+ % {'username': user.username, 'len_repos': len(repos),
+ 'list_repos': ', '.join(repos)})
left_overs = self._handle_user_repo_groups(
user.username, user.repository_groups, handle_repo_groups)
if left_overs and user.repository_groups:
repo_groups = [x.group_name for x in user.repository_groups]
raise UserOwnsRepoGroupsException(
- _(u'user "%s" still owns %s repository groups and cannot be '
- u'removed. Switch owners or remove those repository groups:%s')
- % (user.username, len(repo_groups), ', '.join(repo_groups)))
+ u'user "%(username)s" still owns %(len_repo_groups)s repository groups and cannot be '
+ u'removed. Switch owners or remove those repository groups:%(list_repo_groups)s'
+ % {'username': user.username, 'len_repo_groups': len(repo_groups),
+ 'list_repo_groups': ', '.join(repo_groups)})
left_overs = self._handle_user_user_groups(
user.username, user.user_groups, handle_user_groups)
if left_overs and user.user_groups:
user_groups = [x.users_group_name for x in user.user_groups]
raise UserOwnsUserGroupsException(
- _(u'user "%s" still owns %s user groups and cannot be '
- u'removed. Switch owners or remove those user groups:%s')
+ u'user "%s" still owns %s user groups and cannot be '
+ u'removed. Switch owners or remove those user groups:%s'
% (user.username, len(user_groups), ', '.join(user_groups)))
# we might change the user data with detach/delete, make sure
diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py
--- a/rhodecode/model/validators.py
+++ b/rhodecode/model/validators.py
@@ -37,7 +37,6 @@ from formencode.validators import (
from sqlalchemy.sql.expression import true
from sqlalchemy.util import OrderedSet
-from webhelpers.pylonslib.secure_form import authentication_token
from rhodecode.authentication import (
legacy_plugin_prefix, _import_legacy_plugin)
@@ -455,21 +454,6 @@ def ValidAuth(localizer):
return _validator
-def ValidAuthToken(localizer):
- _ = localizer
-
- class _validator(formencode.validators.FancyValidator):
- messages = {
- 'invalid_token': _(u'Token mismatch')
- }
-
- def validate_python(self, value, state):
- if value != authentication_token():
- msg = M(self, 'invalid_token', state)
- raise formencode.Invalid(msg, value, state)
- return _validator
-
-
def ValidRepoName(localizer, edit=False, old_data=None):
old_data = old_data or {}
_ = localizer
diff --git a/rhodecode/subscribers.py b/rhodecode/subscribers.py
--- a/rhodecode/subscribers.py
+++ b/rhodecode/subscribers.py
@@ -195,12 +195,6 @@ def write_js_routes_if_enabled(event):
)
def get_routes():
- # pylons routes
- # TODO(marcink): remove when pyramid migration is finished
- if 'routes.map' in rhodecode.CONFIG:
- for route in rhodecode.CONFIG['routes.map'].jsroutes():
- yield route
-
# pyramid routes
for route in mapper.get_routes():
if not route.name.startswith('__'):
diff --git a/rhodecode/tests/database/conftest.py b/rhodecode/tests/database/conftest.py
--- a/rhodecode/tests/database/conftest.py
+++ b/rhodecode/tests/database/conftest.py
@@ -85,7 +85,8 @@ def _get_backend(backend_type):
class DBBackend(object):
_store = os.path.dirname(os.path.abspath(__file__))
_type = None
- _base_ini_config = [{'app:main': {'vcs.start_server': 'false'}}]
+ _base_ini_config = [{'app:main': {'vcs.start_server': 'false',
+ 'startup.import_repos': 'false'}}]
_db_url = [{'app:main': {'sqlalchemy.db1.url': ''}}]
_base_db_name = 'rhodecode_test_db_backend'
@@ -183,7 +184,7 @@ class DBBackend(object):
if not os.path.isdir(self._repos_location):
os.makedirs(self._repos_location)
self.execute(
- "paster upgrade-db {} --force-yes".format(ini_file))
+ "rc-upgrade-db {0} --force-yes".format(ini_file))
def setup_db(self):
raise NotImplementedError
diff --git a/rhodecode/tests/functional/test_sessions.py b/rhodecode/tests/functional/test_sessions.py
--- a/rhodecode/tests/functional/test_sessions.py
+++ b/rhodecode/tests/functional/test_sessions.py
@@ -56,11 +56,22 @@ class TestSessionBehaviorOnPasswordChang
def test_sessions_invalidated_when_password_is_changed(
self, app, autologin_user):
+ response = app.get(route_path('home'), status=200)
+ session = response.get_session_from_response()
+
+ # now mark as password change
self.password_changed_mock.return_value = True
+
+ # flushes session first
+ app.get(route_path('home'))
+
+ # second call is now "different" with flushed empty session
response = app.get(route_path('home'))
+ session = response.get_session_from_response()
+
+ assert 'rhodecode_user' not in session
+
assert_response = response.assert_response()
assert_response.element_contains('#quick_login_link .user', 'Sign in')
- session = response.get_session_from_response()
- assert 'rhodecode_user' not in session
- assert session.was_invalidated is True
+
diff --git a/rhodecode/tests/lib/middleware/test_simplegit.py b/rhodecode/tests/lib/middleware/test_simplegit.py
--- a/rhodecode/tests/lib/middleware/test_simplegit.py
+++ b/rhodecode/tests/lib/middleware/test_simplegit.py
@@ -74,8 +74,7 @@ def get_environ(url, request_method):
])
def test_get_action(url, expected_action, request_method, baseapp, request_stub):
- app = simplegit.SimpleGit(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplegit.SimpleGit(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
assert expected_action == app._get_action(get_environ(url, request_method))
@@ -103,8 +102,7 @@ def test_get_action(url, expected_action
])
def test_get_repository_name(url, expected_repo_name, request_method, baseapp, request_stub):
- app = simplegit.SimpleGit(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplegit.SimpleGit(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
assert expected_repo_name == app._get_repository_name(
get_environ(url, request_method))
@@ -112,8 +110,7 @@ def test_get_repository_name(url, expect
def test_get_config(user_util, baseapp, request_stub):
repo = user_util.create_repo(repo_type='git')
- app = simplegit.SimpleGit(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplegit.SimpleGit(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
extras = {'foo': 'FOO', 'bar': 'BAR'}
@@ -137,6 +134,6 @@ def test_create_wsgi_app_uses_scm_app_fr
'vcs.scm_app_implementation':
'rhodecode.tests.lib.middleware.mock_scm_app',
}
- app = simplegit.SimpleGit(application=None, config=config, registry=request_stub.registry)
+ app = simplegit.SimpleGit(config=config, registry=request_stub.registry)
wsgi_app = app._create_wsgi_app('/tmp/test', 'test_repo', {})
assert wsgi_app is mock_scm_app.mock_git_wsgi
diff --git a/rhodecode/tests/lib/middleware/test_simplehg.py b/rhodecode/tests/lib/middleware/test_simplehg.py
--- a/rhodecode/tests/lib/middleware/test_simplehg.py
+++ b/rhodecode/tests/lib/middleware/test_simplehg.py
@@ -54,8 +54,7 @@ def get_environ(url):
('/foo/bar?key=tip', 'pull'),
])
def test_get_action(url, expected_action, request_stub):
- app = simplehg.SimpleHg(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplehg.SimpleHg(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
assert expected_action == app._get_action(get_environ(url))
@@ -72,16 +71,14 @@ def test_get_action(url, expected_action
('/foo/bar/baz/?cmd=listkeys&key=tip', 'foo/bar/baz'),
])
def test_get_repository_name(url, expected_repo_name, request_stub):
- app = simplehg.SimpleHg(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplehg.SimpleHg(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
assert expected_repo_name == app._get_repository_name(get_environ(url))
def test_get_config(user_util, baseapp, request_stub):
repo = user_util.create_repo(repo_type='git')
- app = simplehg.SimpleHg(application=None,
- config={'auth_ret_code': '', 'base_path': ''},
+ app = simplehg.SimpleHg(config={'auth_ret_code': '', 'base_path': ''},
registry=request_stub.registry)
extras = [('foo', 'FOO', 'bar', 'BAR')]
@@ -123,7 +120,6 @@ def test_create_wsgi_app_uses_scm_app_fr
'vcs.scm_app_implementation':
'rhodecode.tests.lib.middleware.mock_scm_app',
}
- app = simplehg.SimpleHg(
- application=None, config=config, registry=request_stub.registry)
+ app = simplehg.SimpleHg(config=config, registry=request_stub.registry)
wsgi_app = app._create_wsgi_app('/tmp/test', 'test_repo', {})
assert wsgi_app is mock_scm_app.mock_hg_wsgi
diff --git a/rhodecode/tests/lib/middleware/test_simplesvn.py b/rhodecode/tests/lib/middleware/test_simplesvn.py
--- a/rhodecode/tests/lib/middleware/test_simplesvn.py
+++ b/rhodecode/tests/lib/middleware/test_simplesvn.py
@@ -23,17 +23,16 @@ from StringIO import StringIO
import pytest
from mock import patch, Mock
-import rhodecode
from rhodecode.lib.middleware.simplesvn import SimpleSvn, SimpleSvnApp
+from rhodecode.lib.utils import get_rhodecode_base_path
class TestSimpleSvn(object):
@pytest.fixture(autouse=True)
def simple_svn(self, baseapp, request_stub):
+ base_path = get_rhodecode_base_path()
self.app = SimpleSvn(
- application='None',
- config={'auth_ret_code': '',
- 'base_path': rhodecode.CONFIG['base_path']},
+ config={'auth_ret_code': '', 'base_path': base_path},
registry=request_stub.registry)
def test_get_config(self):
@@ -102,7 +101,6 @@ class TestSimpleSvn(object):
assert wsgi_app == wsgi_app_mock()
-
class TestSimpleSvnApp(object):
data = ''
path = '/group/my-repo'
@@ -121,8 +119,10 @@ class TestSimpleSvnApp(object):
def setup_method(self, method):
self.host = 'http://localhost/'
+ base_path = get_rhodecode_base_path()
self.app = SimpleSvnApp(
- config={'subversion_http_server_url': self.host})
+ config={'subversion_http_server_url': self.host,
+ 'base_path': base_path})
def test_get_request_headers_with_content_type(self):
expected_headers = {
diff --git a/rhodecode/tests/lib/middleware/test_simplevcs.py b/rhodecode/tests/lib/middleware/test_simplevcs.py
--- a/rhodecode/tests/lib/middleware/test_simplevcs.py
+++ b/rhodecode/tests/lib/middleware/test_simplevcs.py
@@ -79,8 +79,8 @@ def vcscontroller(baseapp, config_stub,
config_stub.include('rhodecode.authentication')
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
- app = HttpsFixup(controller, baseapp.config)
+ baseapp.config.get_settings(), request_stub.registry)
+ app = HttpsFixup(controller, baseapp.config.get_settings())
app = CustomTestApp(app)
_remove_default_user_from_query_cache()
@@ -136,8 +136,8 @@ class StubFailVCSController(simplevcs.Si
@pytest.fixture(scope='module')
def fail_controller(baseapp):
controller = StubFailVCSController(
- baseapp, baseapp.config, baseapp.config)
- controller = HttpsFixup(controller, baseapp.config)
+ baseapp.config.get_settings(), baseapp.config)
+ controller = HttpsFixup(controller, baseapp.config.get_settings())
controller = CustomTestApp(controller)
return controller
@@ -153,17 +153,15 @@ def test_provides_traceback_for_appenlig
def test_provides_utils_scm_app_as_scm_app_by_default(baseapp, request_stub):
- controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ controller = StubVCSController(baseapp.config.get_settings(), request_stub.registry)
assert controller.scm_app is scm_app_http
def test_allows_to_override_scm_app_via_config(baseapp, request_stub):
- config = baseapp.config.copy()
+ config = baseapp.config.get_settings().copy()
config['vcs.scm_app_implementation'] = (
'rhodecode.tests.lib.middleware.mock_scm_app')
- controller = StubVCSController(
- baseapp, config, request_stub.registry)
+ controller = StubVCSController(config, request_stub.registry)
assert controller.scm_app is mock_scm_app
@@ -225,7 +223,7 @@ class TestShadowRepoExposure(object):
underlying wsgi app.
"""
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._check_ssl = mock.Mock()
controller.is_shadow_repo = True
controller._action = 'pull'
@@ -250,7 +248,7 @@ class TestShadowRepoExposure(object):
underlying wsgi app.
"""
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._check_ssl = mock.Mock()
controller.is_shadow_repo = True
controller._action = 'pull'
@@ -274,7 +272,7 @@ class TestShadowRepoExposure(object):
Check that a push action to a shadow repo is aborted.
"""
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._check_ssl = mock.Mock()
controller.is_shadow_repo = True
controller._action = 'push'
@@ -300,7 +298,7 @@ class TestShadowRepoExposure(object):
"""
environ_stub = {}
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._name = 'RepoGroup/MyRepo'
controller.set_repo_names(environ_stub)
assert not controller.is_shadow_repo
@@ -324,7 +322,7 @@ class TestShadowRepoExposure(object):
pr_segment=TestShadowRepoRegularExpression.pr_segment,
shadow_segment=TestShadowRepoRegularExpression.shadow_segment)
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._name = shadow_url
controller.set_repo_names({})
@@ -352,7 +350,7 @@ class TestShadowRepoExposure(object):
pr_segment=TestShadowRepoRegularExpression.pr_segment,
shadow_segment=TestShadowRepoRegularExpression.shadow_segment)
controller = StubVCSController(
- baseapp, baseapp.config, request_stub.registry)
+ baseapp.config.get_settings(), request_stub.registry)
controller._name = shadow_url
controller.set_repo_names({})
@@ -362,7 +360,7 @@ class TestShadowRepoExposure(object):
controller.vcs_repo_name)
-@pytest.mark.usefixtures('db')
+@pytest.mark.usefixtures('baseapp')
class TestGenerateVcsResponse(object):
def test_ensures_that_start_response_is_called_early_enough(self):
@@ -429,7 +427,7 @@ class TestGenerateVcsResponse(object):
'vcs.hooks.direct_calls': False,
}
registry = AttributeDict()
- controller = StubVCSController(None, settings, registry)
+ controller = StubVCSController(settings, registry)
controller._invalidate_cache = mock.Mock()
controller.stub_response_body = response_body
self.start_response = mock.Mock()
@@ -482,7 +480,7 @@ class TestPrepareHooksDaemon(object):
expected_extras = {'extra1': 'value1'}
daemon = DummyHooksCallbackDaemon()
- controller = StubVCSController(None, app_settings, request_stub.registry)
+ controller = StubVCSController(app_settings, request_stub.registry)
prepare_patcher = mock.patch.object(
simplevcs, 'prepare_callback_daemon',
return_value=(daemon, expected_extras))
diff --git a/rhodecode/tests/lib/middleware/test_vcs_unavailable.py b/rhodecode/tests/lib/middleware/test_vcs_unavailable.py
--- a/rhodecode/tests/lib/middleware/test_vcs_unavailable.py
+++ b/rhodecode/tests/lib/middleware/test_vcs_unavailable.py
@@ -44,10 +44,8 @@ def test_vcs_unavailable_returns_vcs_err
# Patch remote repo to raise an exception instead of making a RPC.
with mock.patch.object(RemoteRepo, '__getattr__') as remote_mock:
remote_mock.side_effect = VCSCommunicationError()
- # Patch pylons error handling middleware to not re-raise exceptions.
- with mock.patch.object(PylonsErrorHandlingMiddleware, 'reraise') as r:
- r.return_value = False
- response = app.get(url, expect_errors=True)
+
+ response = app.get(url, expect_errors=True)
assert response.status_code == 502
assert 'Could not connect to VCS Server' in response.body
diff --git a/rhodecode/tests/lib/test_action_parser.py b/rhodecode/tests/lib/test_action_parser.py
--- a/rhodecode/tests/lib/test_action_parser.py
+++ b/rhodecode/tests/lib/test_action_parser.py
@@ -29,6 +29,6 @@ from rhodecode.model.db import UserLog
'user_closed_pull_request',
'user_merged_pull_request'
])
-def test_action_map_pr_values(baseapp, pr_key):
- parser = ActionParser(UserLog(action="test:test"))
+def test_action_map_pr_values(request_stub, baseapp, pr_key):
+ parser = ActionParser(request_stub, UserLog(action="test:test"))
assert pr_key in parser.action_map
diff --git a/rhodecode/tests/lib/test_diffs.py b/rhodecode/tests/lib/test_diffs.py
--- a/rhodecode/tests/lib/test_diffs.py
+++ b/rhodecode/tests/lib/test_diffs.py
@@ -23,7 +23,7 @@ import textwrap
import pytest
from rhodecode.lib.diffs import (
- DiffProcessor, wrapped_diff,
+ DiffProcessor,
NEW_FILENODE, DEL_FILENODE, MOD_FILENODE, RENAMED_FILENODE,
CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE)
from rhodecode.tests.fixture import Fixture
@@ -34,23 +34,6 @@ from rhodecode.lib.vcs.backends.svn.repo
fixture = Fixture()
-def test_wrapped_diff_limited_file_diff(vcsbackend_random):
- vcsbackend = vcsbackend_random
- repo = vcsbackend.create_repo()
- vcsbackend.add_file(repo, 'a_file', content="line 1\nline 2\nline3\n")
- commit = repo.get_commit()
- file_node = commit.get_node('a_file')
-
- # Only limit the file diff to trigger the code path
- result = wrapped_diff(
- None, file_node, diff_limit=10000, file_limit=1)
- data = result[5]
-
- # Verify that the limits were applied
- assert data['exceeds_limit'] is True
- assert data['is_limited_diff'] is True
-
-
def test_diffprocessor_as_html_with_comments():
raw_diff = textwrap.dedent('''
diff --git a/setup.py b/setup.py
diff --git a/rhodecode/tests/lib/test_ext_json.py b/rhodecode/tests/lib/test_ext_json.py
--- a/rhodecode/tests/lib/test_ext_json.py
+++ b/rhodecode/tests/lib/test_ext_json.py
@@ -158,7 +158,7 @@ def test_formatted_json():
assert formatted_json(data) == expected_data
-def test_pylons_lazy_translation_string(baseapp):
+def test_lazy_translation_string(baseapp):
data = {'label': _('hello')}
data2 = {'label2': _pluralize('singular', 'plural', 1)}
diff --git a/rhodecode/tests/models/test_pullrequest.py b/rhodecode/tests/models/test_pullrequest.py
--- a/rhodecode/tests/models/test_pullrequest.py
+++ b/rhodecode/tests/models/test_pullrequest.py
@@ -65,7 +65,7 @@ class TestPullRequestModel(object):
'rhodecode.model.notification.NotificationModel.create')
self.notification_patcher.start()
self.helper_patcher = mock.patch(
- 'rhodecode.lib.helpers.url')
+ 'rhodecode.lib.helpers.route_path')
self.helper_patcher.start()
self.hook_patcher = mock.patch.object(PullRequestModel,
diff --git a/rhodecode/tests/models/test_scm.py b/rhodecode/tests/models/test_scm.py
--- a/rhodecode/tests/models/test_scm.py
+++ b/rhodecode/tests/models/test_scm.py
@@ -183,7 +183,7 @@ def test_get_non_unicode_reference(backe
tags=non_unicode_list, alias=backend.alias)
repo = Mock(__class__=db.Repository, scm_instance=scm_instance)
- choices, __ = model.get_repo_landing_revs(repo=repo)
+ choices, __ = model.get_repo_landing_revs(translator=lambda s: s, repo=repo)
if backend.alias == 'hg':
valid_choices = [
'rev:tip', u'branch:Ad\xc4\xb1n\xc4\xb1',
diff --git a/rhodecode/tests/other/test_validators.py b/rhodecode/tests/other/test_validators.py
--- a/rhodecode/tests/other/test_validators.py
+++ b/rhodecode/tests/other/test_validators.py
@@ -209,12 +209,6 @@ def test_ValidAuth(localizer, config_stu
formencode.Invalid, validator.to_python, invalid_creds)
-def test_ValidAuthToken(localizer):
- validator = v.ValidAuthToken(localizer)
- pytest.raises(formencode.Invalid, validator.to_python, 'BadToken')
- validator
-
-
def test_ValidRepoName(localizer):
validator = v.ValidRepoName(localizer)
diff --git a/rhodecode/translation.py b/rhodecode/translation.py
--- a/rhodecode/translation.py
+++ b/rhodecode/translation.py
@@ -23,8 +23,6 @@ from pyramid.threadlocal import get_curr
_ = TranslationStringFactory('rhodecode')
-temp_translation_factory = _
-
class _LazyString(object):
def __init__(self, *args, **kw):