This is an automated email from the ASF dual-hosted git repository. gcruz pushed a commit to branch gc/8498 in repository https://gitbox.apache.org/repos/asf/allura.git
commit c390d155f73aefcb056dc07197d5d3a6c7ce82c9 Author: Guillermo Cruz <[email protected]> AuthorDate: Wed Feb 8 17:11:29 2023 -0600 [#8498] PEP8 cleanup --- Allura/allura/controllers/auth.py | 25 +++---- Allura/allura/controllers/project.py | 19 +++--- Allura/allura/ext/admin/admin_main.py | 12 ++-- Allura/allura/lib/custom_middleware.py | 21 +++--- Allura/allura/model/auth.py | 12 ++-- Allura/allura/tests/functional/test_admin.py | 17 +++-- Allura/allura/tests/functional/test_auth.py | 35 +++++----- Allura/allura/tests/functional/test_root.py | 13 ++-- .../allura/tests/functional/test_user_profile.py | 5 +- Allura/allura/tests/test_tasks.py | 18 ++--- ForgeGit/forgegit/tests/model/test_repository.py | 33 +++++----- .../forgeimporters/tests/github/test_tracker.py | 2 +- ForgeWiki/forgewiki/tests/functional/test_root.py | 76 +++++++++++----------- scripts/teamforge-import.py | 20 +++--- 14 files changed, 157 insertions(+), 151 deletions(-) diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py index 21b3fc346..c45274556 100644 --- a/Allura/allura/controllers/auth.py +++ b/Allura/allura/controllers/auth.py @@ -684,11 +684,8 @@ class PreferencesController(BaseController): primary_addr, user=user) if not admin: - email_body = g.jinja2_env.get_template('allura:templates/mail/primary_email_changed.md').render(dict( - user=user, - config=config, - addr=primary_addr - )) + email_body = g.jinja2_env.get_template('allura:templates/mail/primary_email_changed.md').render( + dict(user=user, config=config, addr=primary_addr)) # send to previous primary addr send_system_mail_to_user(old_primary_addr, 'Primary Email Address Changed', email_body) user.set_pref('email_address', primary_addr) @@ -842,10 +839,8 @@ class PreferencesController(BaseController): del session['totp_new_key'] session.save() tg.flash('Two factor authentication has now been set up.') - email_body = g.jinja2_env.get_template('allura:templates/mail/twofactor_enabled.md').render(dict( - user=c.user, - config=config, - )) + email_body = g.jinja2_env.get_template('allura:templates/mail/twofactor_enabled.md').render( + dict(user=c.user, config=config, )) send_system_mail_to_user(c.user, 'Two-Factor Authentication Enabled', email_body) redirect('/auth/preferences/multifactor_recovery') @@ -977,7 +972,7 @@ class UserSkillsController(BaseController): @with_trailing_slash @expose('jinja:allura:templates/user_skills.html') def index(self, **kw): - l = [] + lst = [] parents = [] if kw.get('selected_category') is not None: selected_skill = M.TroveCategory.query.get( @@ -985,12 +980,12 @@ class UserSkillsController(BaseController): elif self.category: selected_skill = self.category else: - l = M.TroveCategory.query.find( + lst = M.TroveCategory.query.find( dict(trove_parent_id=0, show_as_skill=True)).all() selected_skill = None if selected_skill: - l = [scat for scat in selected_skill.subcategories - if scat.show_as_skill] + lst = [scat for scat in selected_skill.subcategories + if scat.show_as_skill] temp_cat = selected_skill.parent_category while temp_cat: parents = [temp_cat] + parents @@ -998,11 +993,11 @@ class UserSkillsController(BaseController): provider = plugin.AuthenticationProvider.get(request) menu = provider.account_navigation() return dict( - skills_list=l, + skills_list=lst, selected_skill=selected_skill, parents=parents, menu=menu, - add_details_fields=(len(l) == 0)) + add_details_fields=(len(lst) == 0)) @expose() @require_post() diff --git a/Allura/allura/controllers/project.py b/Allura/allura/controllers/project.py index 56d01c9d0..089dc70a2 100644 --- a/Allura/allura/controllers/project.py +++ b/Allura/allura/controllers/project.py @@ -111,7 +111,7 @@ class NeighborhoodController: else: redirect(c.project.app_configs[0].options.mount_point + '/') else: - text=g.markdown.cached_convert( + text = g.markdown.cached_convert( self.neighborhood, 'homepage'), c.project_summary = W.project_summary @@ -251,7 +251,7 @@ class NeighborhoodController: def icon(self, w=None, **kw): try: if isinstance(w, list): - w = w[0] + w = w[0] icon = c.project.icon_sized(w=int(w or 48)) except ValueError as e: log.info('Invalid project icon size: %s on %s', e, request.url) @@ -287,7 +287,8 @@ class NeighborhoodProjectBrowseController(ProjectBrowseController): def _lookup(self, category_name, *remainder): c.project = self.neighborhood.neighborhood_project category_name = unquote(category_name) - return NeighborhoodProjectBrowseController(neighborhood=self.neighborhood, category_name=category_name, parent_category=self.category), remainder + return NeighborhoodProjectBrowseController(neighborhood=self.neighborhood, category_name=category_name, + parent_category=self.category), remainder @expose('jinja:allura:templates/neighborhood_project_list.html') @without_trailing_slash @@ -318,7 +319,7 @@ class ToolListController: c.page_list = W.page_list tool_name = tool_name.lower() entries = c.project.sitemap(included_tools=[tool_name], - tools_only=True, per_tool_limit=None) + tools_only=True, per_tool_limit=None) total_entries = len(entries) limit, page = h.paging_sanitizer(limit, page, total_entries) start = page * limit @@ -330,7 +331,7 @@ class ToolListController: entries=entries[start:start + limit], type=tool_label, tool_name=h.pluralize_tool_name(tool_label, total_entries), - ) + ) class ProjectController(FeedController): @@ -391,7 +392,8 @@ class ProjectController(FeedController): developers.append(_user) else: users.append(_user) - get_username = lambda user: user['username'] + + def get_username(user): return user['username'] admins = sorted(admins, key=get_username) developers = sorted(developers, key=get_username) users = sorted(users, key=get_username) @@ -407,7 +409,8 @@ class ProjectController(FeedController): if hasattr(app, 'default_redirect'): app.default_redirect() args = dict(redirect_with=exc.HTTPMovedPermanently) - redirect(app.url() if callable(app.url) else app.url, **args) # Application has property; Subproject has method + # Application has property; Subproject has method + redirect(app.url() if callable(app.url) else app.url, **args) else: redirect(c.project.app_configs[0].url(), redirect_with=exc.HTTPMovedPermanently) @@ -427,7 +430,7 @@ class ProjectController(FeedController): def icon(self, w=48, **kw): try: if isinstance(w, list): - w = w[0] + w = w[0] icon = c.project.icon_sized(w=int(w)) except ValueError as e: log.info('Invalid project icon size: %s on %s', e, request.url) diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py index f02acc200..3cf3eba29 100644 --- a/Allura/allura/ext/admin/admin_main.py +++ b/Allura/allura/ext/admin/admin_main.py @@ -54,7 +54,6 @@ from . import widgets as aw import six - log = logging.getLogger(__name__) @@ -504,6 +503,7 @@ class ProjectAdminController(BaseController): trove_cat_id=trove_obj.trove_cat_id, error_msg=error_msg, in_trove=in_trove) + @expose() @require_post() def delete_trove(self, type, trove, **kw): @@ -529,10 +529,12 @@ class ProjectAdminController(BaseController): c_filename, c_fileext = os.path.splitext(screen.filename) if c_fileext == '.png' and e_fileext.lower() == '.bmp' and e_filename == c_filename: future_bmp = True - # If both filename(without ext.) equals and exiting file ext. is png and given file ext is bmp, there will be two similar png files. + # If both filename(without ext.) equals and exiting file ext. is png and given file ext is bmp, + # there will be two similar png files. if screen.filename == screenshot.filename or future_bmp: - screenshot.filename = re.sub(r'(.*)\.(.*)', r'\1-' + str(randint(1000,9999)) + r'.\2', screenshot.filename) + screenshot.filename = re.sub(r'(.*)\.(.*)', r'\1-' + str(randint(1000, 9999)) + r'.\2', + screenshot.filename) # if filename already exists append a random number break M.AuditLog.log('screenshots: added screenshot {} with caption "{}"'.format( @@ -705,7 +707,7 @@ class ProjectAdminController(BaseController): flash(f'{exc.__class__.__name__}: {exc.args[0]}', 'error') if request.referer is not None and tool is not None and 'delete' in tool[0] and \ - re.search(c.project.url() + r'(admin\/|)' + tool[0]['mount_point']+ r'\/*', + re.search(c.project.url() + r'(admin\/|)' + tool[0]['mount_point'] + r'\/*', six.ensure_text(request.referer)): # Redirect to root when deleting currect module redirect('../') @@ -1073,7 +1075,7 @@ class PermissionsController(BaseController): permissions[perm] = role_ids c.project.acl = [] for perm, role_ids in permissions.items(): - role_names = lambda ids: ','.join(sorted( + def role_names(ids): return ','.join(sorted( pr.name for pr in M.ProjectRole.query.find(dict(_id={'$in': ids})))) old_role_ids = old_permissions.get(perm, []) if old_role_ids != role_ids: diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py index 4ea99c6d3..95c9a0122 100644 --- a/Allura/allura/lib/custom_middleware.py +++ b/Allura/allura/lib/custom_middleware.py @@ -210,7 +210,8 @@ class CSRFMiddleware: # Set cookie for use in later forms: - # in addition to setting a cookie, set this so its available on first response before cookie gets created in browser + # in addition to setting a cookie, + # set this so its available on first response before cookie gets created in browser environ[self._cookie_name] = cookie def session_start_response(status, headers, exc_info=None): @@ -272,6 +273,7 @@ class SetRequestHostFromConfig: Set request properties for host and port, based on the 'base_url' config setting. This permits code to use request.host etc to construct URLs correctly, even when behind a proxy, like in docker """ + def __init__(self, app, config): self.app = app self.config = config @@ -472,46 +474,43 @@ class ContentSecurityPolicyMiddleware: report_rules = set(resp.headers.getall('Content-Security-Policy-Report-Only')) report_uri = self.config.get('csp.report_uri', None) report_uri_enforce = self.config.get('csp.report_uri_enforce', None) - + if rules: resp.headers.pop('Content-Security-Policy') if report_rules: - resp.headers.pop('Content-Security-Policy-Report-Only') - + resp.headers.pop('Content-Security-Policy-Report-Only') if self.config['base_url'].startswith('https'): rules.add('upgrade-insecure-requests') - if self.config.get('csp.frame_sources'): - if asbool(self.config.get('csp.frame_sources_enforce',False)): + if asbool(self.config.get('csp.frame_sources_enforce', False)): rules.add(f"frame-src {self.config['csp.frame_sources']}") else: report_rules.add(f"frame-src {self.config['csp.frame_sources']}") if self.config.get('csp.form_action_urls'): - if asbool(self.config.get('csp.form_actions_enforce',False)): + if asbool(self.config.get('csp.form_actions_enforce', False)): rules.add(f"form-action {self.config['csp.form_action_urls']}") else: report_rules.add(f"form-action {self.config['csp.form_action_urls']}") if self.config.get('csp.script_src'): script_srcs = self.config['csp.script_src'] - """ + """ Sometimes you might have the need to build custom values from inside a controller and pass it to the middleware. In this case we pass a custom list of domains from google that can't be built directly in here. """ - if environ.get('csp_script_domains',''): + if environ.get('csp_script_domains', ''): script_srcs = f"{script_srcs} {' '.join(environ['csp_script_domains'])}" - if asbool(self.config.get('csp.script_src_enforce',False)): + if asbool(self.config.get('csp.script_src_enforce', False)): rules.add(f"script-src {script_srcs} {self.config.get('csp.script_src.extras','')}") else: report_rules.add(f"script-src {script_srcs} {self.config.get('csp.script_src.extras','')}") - rules.add("object-src 'none'") rules.add("frame-ancestors 'self'") if rules: diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py index 4e3f50e1a..4ff120955 100644 --- a/Allura/allura/model/auth.py +++ b/Allura/allura/model/auth.py @@ -177,8 +177,8 @@ please visit the following URL: %s ''' % (self.email, - self.claimed_by_user(include_pending=True).username, - h.absurl(f'/auth/verify_addr?a={h.urlquote(self.nonce)}'), + self.claimed_by_user(include_pending=True).username, + h.absurl(f'/auth/verify_addr?a={h.urlquote(self.nonce)}'), ) log.info('Verification email:\n%s', text) allura.tasks.mail_tasks.sendsimplemail.post( @@ -428,7 +428,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable): self.set_tool_data('AuthPasswordReset', hash=hash, hash_expiry=datetime.utcnow() + - timedelta(seconds=int(config.get('auth.recovery_hash_expiry_period', 600)))) + timedelta(seconds=int(config.get('auth.recovery_hash_expiry_period', 600)))) reset_url = h.absurl(f'/auth/forgotten_password/{hash}') return reset_url @@ -638,7 +638,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable): private_project = self.private_project() except Exception: log.warning('Error getting/creating user-project for %s', - self.username, exc_info=True) + self.username, exc_info=True) private_project = None icon_source = None if private_project and private_project.icon: @@ -682,7 +682,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable): users = [u for u in users if u is not None] if len(users) > 1: log.warning('Multiple active users matching confirmed email: %s %s. ' - 'Using first one', [u.username for u in users], addr) + 'Using first one', [u.username for u in users], addr) return users[0] if len(users) > 0 else None @classmethod @@ -981,7 +981,7 @@ class ProjectRole(MappedClass): def user(self): if (self.user_id is None and self.name - and self.name != '*anonymous'): + and self.name != '*anonymous'): return None return User.query.get(_id=self.user_id) diff --git a/Allura/allura/tests/functional/test_admin.py b/Allura/allura/tests/functional/test_admin.py index 1a1bb251c..2b18d098a 100644 --- a/Allura/allura/tests/functional/test_admin.py +++ b/Allura/allura/tests/functional/test_admin.py @@ -957,33 +957,33 @@ class TestProjectAdmin(TestController): r.mustcontain('Neighborhood Invitation(s) for test') def test_social_networks(self): - #Invalid Twitter - resp = self.app.post('/admin/update', params={'twitter_handle':'https://twit.com/tests'}) + # invalid Twitter + resp = self.app.post('/admin/update', params={'twitter_handle': 'https://twit.com/tests'}) assert resp.status_int == 200 resp = self.app.post('/admin/update', params={'twitter_handle': 'https://google.com'}) assert resp.status_int == 200 - #invalid Facebook + # invalid Facebook resp = self.app.post('/admin/update', params={'facebook_page': 'https://facebok.com'}) assert resp.status_int == 200 resp = self.app.post('/admin/update', params={'facebook_page': 'https://spam.com'}) assert resp.status_int == 200 assert 'Invalid Facebook address' in resp - #invalid instagram + # invalid instagram resp = self.app.post('/admin/update', params={'instagram_page': 'https://instagrams.com'}) assert resp.status_int == 200 - #invalid fediverse + # invalid fediverse resp = self.app.post('/admin/update', params={'fediverse_address': '@test12@indieweb'}) assert resp.status_int == 200 - #valid Twitter + # valid Twitter resp = self.app.post('/admin/update', params={'twitter_handle': 'https://twitter.com/sourceforge'}) assert resp.status_int == 302 resp = self.app.post('/admin/update', params={'twitter_handle': '@sourceforge'}) assert resp.status_int == 302 - #valid Facebook + # valid Facebook resp = self.app.post('/admin/update', params={'facebook_page': 'https://www.facebook.com/sourceforgenet/'}) assert resp.status_int == 302 - #valid instagram + # valid instagram resp = self.app.post('/admin/update', params={'instagram_page': 'https://instagram.com/test'}) assert resp.status_int == 302 resp = self.app.post('/admin/update', params={'instagram_page': '@test'}) @@ -995,7 +995,6 @@ class TestProjectAdmin(TestController): assert resp.status_int == 302 - class TestExport(TestController): def setup_method(self, method): diff --git a/Allura/allura/tests/functional/test_auth.py b/Allura/allura/tests/functional/test_auth.py index 06524f366..fc2536678 100644 --- a/Allura/allura/tests/functional/test_auth.py +++ b/Allura/allura/tests/functional/test_auth.py @@ -76,8 +76,8 @@ class TestAuth(TestController): r = self.app.post('/auth/do_login', antispam=True, params=dict( username='test-user', password='foo', honey1='robot', # bad honeypot value _session_id=self.app.cookies['_session_id']), - extra_environ={'regular_antispam_err_handling_even_when_tests': 'true'}, - status=302) + extra_environ={'regular_antispam_err_handling_even_when_tests': 'true'}, + status=302) wf = json.loads(self.webflash(r)) assert wf['status'] == 'error' assert wf['message'] == 'Spambot protection engaged' @@ -681,7 +681,7 @@ class TestAuth(TestController): assert '[email protected]' not in r assert '[email protected]' in r assert (M.User.query.get(username='test-admin').get_pref('email_address') == - '[email protected]') + '[email protected]') # add test@example with td.audits('New email address: [email protected]', user=True): @@ -932,8 +932,8 @@ class TestAuth(TestController): _session_id=self.app.cookies['_session_id'])) assert 'Enter a value 6 characters long or more' in r assert ('Usernames must include only small letters, numbers, ' - 'and dashes. They must also start with a letter and be ' - 'at least 3 characters long.' in r) + 'and dashes. They must also start with a letter and be ' + 'at least 3 characters long.' in r) r = self.app.post( '/auth/save_new', params=dict( @@ -1264,7 +1264,6 @@ class TestPreferences(TestController): user = M.User.query.get(username='test-admin') assert len(user.socialnetworks) == 0 - @td.with_user_project('test-admin') def test_contacts(self): # Add skype account @@ -1321,8 +1320,8 @@ class TestPreferences(TestController): user = M.User.query.get(username='test-admin') assert len(user.socialnetworks) == 2 expected = [{'socialnetwork': socialnetwork2, 'accounturl': accounturl2}, - {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] - assert all([social in expected for social in user.socialnetworks]) + {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] + assert all([social in expected for social in user.socialnetworks]) # Add empty social network account self.app.post('/auth/user_info/contacts/add_social_network', @@ -1332,7 +1331,7 @@ class TestPreferences(TestController): user = M.User.query.get(username='test-admin') assert len(user.socialnetworks) == 2 expected = [{'socialnetwork': socialnetwork2, 'accounturl': accounturl2}, - {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] + {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] assert all([social in expected for social in user.socialnetworks]) # Add invalid social network account @@ -1343,7 +1342,7 @@ class TestPreferences(TestController): user = M.User.query.get(username='test-admin') assert len(user.socialnetworks) == 2 expected = [{'socialnetwork': socialnetwork2, 'accounturl': accounturl2}, - {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] + {'socialnetwork': socialnetwork3, 'accounturl': accounturl3}] assert all([social in expected for social in user.socialnetworks]) # Add telephone number @@ -2045,7 +2044,8 @@ class TestOAuth(TestController): ) ThreadLocalODMSession.flush_all() r = self.app.post('/rest/oauth/do_authorize', params={'yes': '1', 'oauth_token': 'api_key_reqtok_12345'}) - assert r.location.startswith('http://my.domain.com/callback?myparam=foo&oauth_token=api_key_reqtok_12345&oauth_verifier=') + url = 'http://my.domain.com/callback?myparam=foo&oauth_token=api_key_reqtok_12345&oauth_verifier=' + assert r.location.startswith(url) class TestOAuthRequestToken(TestController): @@ -2197,7 +2197,7 @@ class TestDisableAccount(TestController): extra_environ={'username': '*anonymous'}) assert r.status_int == 302 assert (r.location == - 'http://localhost/auth/?return_to=%2Fauth%2Fdisable%2F') + 'http://localhost/auth/?return_to=%2Fauth%2Fdisable%2F') def test_lists_user_projects(self): r = self.app.get('/auth/disable/') @@ -2565,7 +2565,8 @@ class TestTwoFactor(TestController): form['code'] = code with audits('Set up multifactor TOTP', user=True): r = form.submit() - assert 'Two factor authentication has now been set up.' == json.loads(self.webflash(r))['message'], self.webflash(r) + msg = 'Two factor authentication has now been set up.' + assert msg == json.loads(self.webflash(r))['message'], self.webflash(r) tasks = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all() assert len(tasks) == 1 @@ -2615,7 +2616,8 @@ class TestTwoFactor(TestController): form = r.forms['totp_set'] form['code'] = code r = form.submit() - assert 'Two factor authentication has now been set up.' == json.loads(self.webflash(r))['message'], self.webflash(r) + msg = 'Two factor authentication has now been set up.' + assert msg == json.loads(self.webflash(r))['message'], self.webflash(r) # new key in place current_key = TotpService.get().get_secret_key(M.User.query.get(username='test-admin')) @@ -2641,7 +2643,8 @@ class TestTwoFactor(TestController): r.form['password'] = 'foo' with audits('Disabled multifactor TOTP', user=True): r = r.form.submit() - assert 'Multifactor authentication has now been disabled.' == json.loads(self.webflash(r))['message'], self.webflash(r) + msg = 'Multifactor authentication has now been disabled.' + assert msg == json.loads(self.webflash(r))['message'], self.webflash(r) user = M.User.query.get(username='test-admin') assert user.get_pref('multifactor') is False assert TotpService().get().get_secret_key(user) is None @@ -2746,7 +2749,7 @@ class TestTwoFactor(TestController): # sent back to regular login assert ('Your multifactor login was disrupted, please start over.' == - json.loads(self.webflash(r))['message']), self.webflash(r) + json.loads(self.webflash(r))['message']), self.webflash(r) r = r.follow() assert 'Password Login' in r diff --git a/Allura/allura/tests/functional/test_root.py b/Allura/allura/tests/functional/test_root.py index d795187ae..d243f4456 100644 --- a/Allura/allura/tests/functional/test_root.py +++ b/Allura/allura/tests/functional/test_root.py @@ -62,7 +62,7 @@ class TestRootController(TestController): def test_neighborhood(self): response = self.app.get('/neighborhood') assert response.html.find('h2', {'class': 'dark title'}).find('span').contents[ - 0].strip() == 'All Neighborhoods' + 0].strip() == 'All Neighborhoods' nbhds = response.html.findAll('div', {'class': 'nbhd_name'}) assert nbhds[0].find('a').get('href') == '/adobe/' cat_links = response.html.find('div', {'id': 'sidebar'}).findAll('li') @@ -178,7 +178,7 @@ class TestRootController(TestController): self.app.get('/p/') arg = callable_name.call_args[0][0] assert (arg.__wrapped__ == - NeighborhoodController.index.__wrapped__) + NeighborhoodController.index.__wrapped__) set_transaction_name.assert_called_with('foo', priority=2) def test_error_page(self): @@ -186,8 +186,8 @@ class TestRootController(TestController): r = self.app.get('/error/document') r.mustcontain("We're sorry but we weren't able to process") - @mock.patch.dict(tg.config, {'csp.frame_sources_enforce': True, \ - 'csp.report_uri_enforce': 'https://example.com/r/d/csp/enforce', \ + @mock.patch.dict(tg.config, {'csp.frame_sources_enforce': True, + 'csp.report_uri_enforce': 'https://example.com/r/d/csp/enforce', 'csp.form_actions_enforce': True, 'csp.script_src_enforce': True}) def test_headers(self): @@ -213,8 +213,8 @@ class TestRootController(TestController): csp_headers = resp.headers.getall('Content-Security-Policy-Report-Only')[0] assert all([h.strip() in csp_headers for h in expected_headers.split(';')]) - - @mock.patch.dict(tg.config, {'csp.report_uri_enforce': 'https://example.com/r/d/csp/enforce', 'csp.frame_sources_enforce': True}) + @mock.patch.dict(tg.config, {'csp.report_uri_enforce': 'https://example.com/r/d/csp/enforce', + 'csp.frame_sources_enforce': True}) def test_headers_frame_sources_enforce(self): resp = self.app.get('/p/wiki/Home/') expected_headers = "report-uri https://example.com/r/d/csp/enforce;" @@ -226,6 +226,7 @@ class TestRootController(TestController): assert all([h.strip() in csp_headers for h in expected_headers.split(';')]) assert all([h.strip() in csp_report_headers for h in expected_report_headers.split(';')]) + class TestRootWithSSLPattern(TestController): def setup_method(self, method): with td.patch_middleware_config({'force_ssl.pattern': '^/auth'}): diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py index 9d9e205fb..e6de739d1 100644 --- a/Allura/allura/tests/functional/test_user_profile.py +++ b/Allura/allura/tests/functional/test_user_profile.py @@ -24,6 +24,7 @@ from allura.tests import decorators as td from allura.tests import TestController from allura.tests.functional.test_discuss import TestDiscussBase + class TestUserProfileSections(TestController): def teardown_method(self, method): @@ -70,7 +71,7 @@ class TestUserProfile(TestDiscussBase): def test_profile(self): r = self.app.get('/u/test-admin/profile/') assert ('Test Admin' == - r.html.find('h1', 'project_title').find('a').text) + r.html.find('h1', 'project_title').find('a').text) sections = {c for s in r.html.findAll(None, 'profile-section') for c in s['class']} assert 'personal-data' in sections assert 'Username:\ntest-admin' in r.html.find(None, 'personal-data').getText().replace(' ', '') @@ -85,7 +86,7 @@ class TestUserProfile(TestDiscussBase): @mock.patch.dict(tg.config, {'use_gravatar': 'true'}) def test_profile_user_card(self): user = User.by_username('test-admin') - locals = { + locals = { 'city': 'test-city', 'country': 'US' } diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py index f4521caad..10baaceca 100644 --- a/Allura/allura/tests/test_tasks.py +++ b/Allura/allura/tests/test_tasks.py @@ -73,7 +73,8 @@ class TestRepoTasks(unittest.TestCase): @mock.patch.object(M, 'MergeRequest') def test_merge(self, MR, session): mr = mock.Mock(_id='_id', activity_name='merge req', activity_url='/fake/url', activity_extras={}, node_id=None, - app=mock.Mock(activity_name='code merge', activity_url='/fake/url', activity_extras={}, node_id=None)) + app=mock.Mock(activity_name='code merge', activity_url='/fake/url', activity_extras={}, + node_id=None)) MR.query.get.return_value = mr repo_tasks.merge(mr._id) mr.app.repo.merge.assert_called_once_with(mr) @@ -143,12 +144,12 @@ class TestEventTasks(unittest.TestCase): def test_compound_error(self): t = raise_compound_exception.post() - with LogCapture(level=logging.ERROR) as l, \ + with LogCapture(level=logging.ERROR) as lc, \ mock.patch.dict(tg.config, {'monq.raise_errors': False}): # match normal non-test behavior t() - # l.check() would be nice, but string is too detailed to check - assert l.records[0].name == 'allura.model.monq_model' - msg = l.records[0].getMessage() + # lc.check() would be nice, but string is too detailed to check + assert lc.records[0].name == 'allura.model.monq_model' + msg = lc.records[0].getMessage() assert "AssertionError('assert 0'" in msg assert "AssertionError('assert 5'" in msg assert ' on job <MonQTask ' in msg @@ -210,7 +211,7 @@ class TestIndexTasks(unittest.TestCase): t3 = _TestArtifact.query.get(_shorthand_id='t3') assert len(t3.backrefs) == 5, t3.backrefs assert (find_slinks.call_args_list == - [mock.call(a.index().get('text')) for a in artifacts]) + [mock.call(a.index().get('text')) for a in artifacts]) @td.with_wiki @mock.patch('allura.tasks.index_tasks.g.solr') @@ -560,7 +561,7 @@ class TestUserNotificationTasks(TestController): dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all() assert len(tasks) == 1 assert (tasks[0].kwargs['subject'] == - '[test:wiki] Your name was mentioned') + '[test:wiki] Your name was mentioned') assert tasks[0].kwargs['toaddr'] == '[email protected]' assert tasks[0].kwargs['reply_to'] == g.noreply text = tasks[0].kwargs['text'] @@ -644,7 +645,7 @@ class TestExportTasks(unittest.TestCase): dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all() assert len(tasks) == 1 assert (tasks[0].kwargs['subject'] == - 'Bulk export for project test completed') + 'Bulk export for project test completed') assert tasks[0].kwargs['fromaddr'] == '"Allura" <noreply@localhost>' assert tasks[0].kwargs['reply_to'] == g.noreply text = tasks[0].kwargs['text'] @@ -663,4 +664,5 @@ class TestAdminTasks(unittest.TestCase): def test_install_app_docstring(self): assert 'ep_name, mount_point=None' in admin_tasks.install_app.__doc__ + Mapper.compile_all() diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py index 7b7468991..0dd8a9fc0 100644 --- a/ForgeGit/forgegit/tests/model/test_repository.py +++ b/ForgeGit/forgegit/tests/model/test_repository.py @@ -485,11 +485,12 @@ By Dave Brondsema''' in text_body self._setup_weird_chars_repo() # commits aren't artifacts :/ but still can do some references with them # commit b85dfbe message mentions [616d24f8dd4e95cadd8e93df5061f09855d1a066] - ref = M.ArtifactReference.query.get(_id='allura.model.repository.Commit#616d24f8dd4e95cadd8e93df5061f09855d1a066') + id = 'allura.model.repository.Commit#616d24f8dd4e95cadd8e93df5061f09855d1a066' + ref = M.ArtifactReference.query.get(_id=id) assert ref assert 'b85dfbe' in ref.references[0], ref.references - - otherway = M.ArtifactReference.query.get(_id='allura.model.repository.Commit#b85dfbec3a5d08677bdd402fc0338934f623a234') + id = 'allura.model.repository.Commit#b85dfbec3a5d08677bdd402fc0338934f623a234' + otherway = M.ArtifactReference.query.get(_id=id) assert otherway assert not otherway.references @@ -499,9 +500,9 @@ By Dave Brondsema''' in text_body os.remove( os.path.join(tmpdir, "git/t/te/test/testgit.git/test-src-git-HEAD.zip")) assert (self.repo.tarball_path == - os.path.join(tmpdir, 'git/t/te/test/testgit.git')) + os.path.join(tmpdir, 'git/t/te/test/testgit.git')) assert (self.repo.tarball_url('HEAD') == - 'file:///git/t/te/test/testgit.git/test-src-git-HEAD.zip') + 'file:///git/t/te/test/testgit.git/test-src-git-HEAD.zip') self.repo.tarball('HEAD') assert os.path.isfile( os.path.join(tmpdir, "git/t/te/test/testgit.git/test-src-git-HEAD.zip")) @@ -606,14 +607,14 @@ By Dave Brondsema''' in text_body def test_default_branch_non_standard_unset(self): with mock.patch.object(self.repo, 'get_branches') as gb,\ - mock.patch.object(self.repo, 'set_default_branch') as set_db: + mock.patch.object(self.repo, 'set_default_branch') as set_db: gb.return_value = [Object(name='foo')] assert self.repo.get_default_branch(('main', 'master')) == 'foo' set_db.assert_called_once_with('foo') def test_default_branch_non_standard_invalid(self): with mock.patch.object(self.repo, 'get_branches') as gb,\ - mock.patch.object(self.repo, 'set_default_branch') as set_db: + mock.patch.object(self.repo, 'set_default_branch') as set_db: self.repo.default_branch_name = 'zz' gb.return_value = [Object(name='foo')] assert self.repo.get_default_branch(('main', 'master')) == 'foo' @@ -621,7 +622,7 @@ By Dave Brondsema''' in text_body def test_default_branch_invalid(self): with mock.patch.object(self.repo, 'get_branches') as gb,\ - mock.patch.object(self.repo, 'set_default_branch') as set_db: + mock.patch.object(self.repo, 'set_default_branch') as set_db: self.repo.default_branch_name = 'zz' gb.return_value = [Object(name='foo'), Object(name='master')] assert self.repo.get_default_branch(('main', 'master')) == 'master' @@ -641,7 +642,7 @@ By Dave Brondsema''' in text_body def test_default_branch_main_before_master(self): with mock.patch.object(self.repo, 'get_branches') as gb,\ - mock.patch.object(self.repo, 'set_default_branch') as set_db: + mock.patch.object(self.repo, 'set_default_branch') as set_db: self.repo.default_branch_name = None gb.return_value = [Object(name='master'), Object(name='main')] assert self.repo.get_default_branch(('main', 'master')) == 'main' @@ -739,12 +740,12 @@ By Dave Brondsema''' in text_body @mock.patch('forgegit.model.git_repo.shutil', autospec=True) def test_merge(self, shutil, GitImplementation, git, tempfile): mr = mock.Mock(downstream_repo=mock.Mock( - full_fs_path='downstream-url', - url=lambda: 'downstream-repo-url'), - source_branch='source-branch', - target_branch='target-branch', - url=lambda: '/merge-request/1/', - downstream=mock.Mock(commit_id='cid')) + full_fs_path='downstream-url', + url=lambda: 'downstream-repo-url'), + source_branch='source-branch', + target_branch='target-branch', + url=lambda: '/merge-request/1/', + downstream=mock.Mock(commit_id='cid')) _git = mock.Mock() self.repo._impl._git.git = _git self.repo.merge(mr) @@ -1004,7 +1005,7 @@ class TestGitImplementation(unittest.TestCase): 'forgegit', 'tests/data/testrename.git') repo = mock.Mock(full_fs_path=repo_dir) impl = GM.git_repo.GitImplementation(repo) - lcd = lambda c, p: impl.last_commit_ids(mock.Mock(_id=c), p) + def lcd(c, p): return impl.last_commit_ids(mock.Mock(_id=c), p) self.assertEqual(lcd('13951944969cf45a701bf90f83647b309815e6d5', ['f2.txt', 'f3.txt']), { 'f2.txt': '259c77dd6ee0e6091d11e429b56c44ccbf1e64a3', 'f3.txt': '653667b582ef2950c1954a0c7e1e8797b19d778a', diff --git a/ForgeImporters/forgeimporters/tests/github/test_tracker.py b/ForgeImporters/forgeimporters/tests/github/test_tracker.py index e26894ac3..15c575c75 100644 --- a/ForgeImporters/forgeimporters/tests/github/test_tracker.py +++ b/ForgeImporters/forgeimporters/tests/github/test_tracker.py @@ -127,7 +127,7 @@ class TestTrackerImporter(TestCase): {'name': 'first', 'due_date': '2015-04-23', 'complete': False}, {'name': 'second', 'due_date': - '2015-04-25', 'complete': False}, + '2015-04-25', 'complete': False}, ], }, ]) diff --git a/ForgeWiki/forgewiki/tests/functional/test_root.py b/ForgeWiki/forgewiki/tests/functional/test_root.py index a4c0b0311..6459c853c 100644 --- a/ForgeWiki/forgewiki/tests/functional/test_root.py +++ b/ForgeWiki/forgewiki/tests/functional/test_root.py @@ -186,9 +186,9 @@ class TestRootController(TestController): 'title': 'foo', 'text': 'sometext', 'labels': 'test label', - }).follow() + }).follow() assert ('<a href="/p/test/wiki/search/?q=labels_t:%22test label%22&parser=standard">test label (1)</a>' in - response) + response) def test_title_slashes(self): # forward slash not allowed in wiki page title - converted to dash @@ -198,7 +198,7 @@ class TestRootController(TestController): 'title': 'foo/bar', 'text': 'sometext', 'labels': '', - }).follow() + }).follow() assert 'foo-bar' in response assert 'foo-bar' in response.request.url @@ -209,7 +209,7 @@ class TestRootController(TestController): 'title': 'page.dot', 'text': 'text1', 'labels': '', - }).follow() + }).follow() assert 'page.dot' in r def test_subpage_attempt(self): @@ -220,7 +220,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'text1', 'labels': '', - }) + }) assert '/p/test/wiki/Home/' in self.app.get(h.urlquote('/wiki/tést/Home/')) self.app.get(h.urlquote('/wiki/tést/notthere/'), status=404) @@ -232,14 +232,14 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'text1', 'labels': '', - }) + }) self.app.post( h.urlquote('/wiki/tést/update'), params={ 'title': 'tést'.encode(), 'text': 'text2', 'labels': '', - }) + }) response = self.app.get(h.urlquote('/wiki/tést/history')) assert 'tést' in response # two revisions are shown @@ -269,7 +269,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) self.app.post(h.urlquote('/wiki/tést/revert'), params=dict(version='1')) response = self.app.get(h.urlquote('/wiki/tést/diff') + '?v1=0&v2=0') assert 'tést' in response @@ -347,14 +347,14 @@ class TestRootController(TestController): self.app.post('/wiki/testdiff/update', params=d) response = self.app.get('/wiki/testdiff/diff?v1=1&v2=2') assert ('# Now fix <del> permissons. </del> <ins> permissions. </ins> ' - 'Wrong permissions may cause <ins> a </ins> massive slowdown!' in - response) + 'Wrong permissions may cause <ins> a </ins> massive slowdown!' in + response) assert '<script>alert' not in response assert '<script>alert' in response response = self.app.get('/wiki/testdiff/diff?v1=2&v2=1') assert ('# Now fix <del> permissions. </del> <ins> permissons. </ins> ' - 'Wrong permissions may cause <del> a </del> massive slowdown!' in - response) + 'Wrong permissions may cause <del> a </del> massive slowdown!' in + response) def test_page_raw(self): self.app.post( @@ -363,7 +363,7 @@ class TestRootController(TestController): 'title': 'TEST', 'text': 'sometext', 'labels': '', - }) + }) response = self.app.get('/wiki/TEST/raw') assert 'TEST' in response @@ -374,7 +374,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': '', 'labels': '', - }) + }) response = self.app.post(h.urlquote('/wiki/tést/revert'), params=dict(version='1')) assert '.' in response.json['location'] response = self.app.get(h.urlquote('/wiki/tést/')) @@ -388,7 +388,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) response = self.app.post(h.urlquote('/wiki/tést/revert'), params=dict(version='1')) assert '.' in response.json['location'] response = self.app.get(h.urlquote('/wiki/tést/')) @@ -403,7 +403,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) assert spam_checker.check.call_args[0][0] == 'tést\nsometext' assert response.location == 'http://localhost/wiki/t%C3%A9st/' @@ -414,7 +414,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': '- [ ] checkbox', 'labels': '', - }) + }) response = self.app.get(h.urlquote('/wiki/tést/get_markdown')) assert '- [ ] checkbox' in response @@ -425,7 +425,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': '- [ ] checkbox', 'labels': '', - }) + }) response = self.app.post( h.urlquote('/wiki/tést/update_markdown'), params={ @@ -448,7 +448,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': 'yellow,green', - }) + }) assert response.location == 'http://localhost/wiki/t%C3%A9st/' response = self.app.post( h.urlquote('/wiki/tést/update'), @@ -456,7 +456,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': 'yellow', - }) + }) assert response.location == 'http://localhost/wiki/t%C3%A9st/' def test_page_label_count(self): @@ -469,7 +469,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': labels, - }) + }) r = self.app.get('/wiki/browse_tags/') assert 'results of 100 ' in r assert '<div class="page_list">' in r @@ -502,7 +502,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) content = open(__file__, 'rb').read() self.app.post(h.urlquote('/wiki/tést/attach'), upload_files=[('file_info', 'test_root.py', content)]) @@ -516,7 +516,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) content = open(__file__, 'rb').read() self.app.post(h.urlquote('/wiki/tést/attach'), upload_files=[('file_info', 'test1.py', content), ('file_info', 'test2.py', content)]) @@ -531,7 +531,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) file_name = 'test_root.py' file_data = open(__file__, 'rb').read() upload = ('file_info', file_name, file_data) @@ -545,7 +545,7 @@ class TestRootController(TestController): 'title': 'TEST', 'text': 'sometext', 'labels': '', - }) + }) file_name = 'neo-icon-set-454545-256x350.png' file_path = os.path.join( allura.__path__[0], 'nf', 'allura', 'images', file_name) @@ -584,17 +584,17 @@ class TestRootController(TestController): 'title': 'TEST', 'text': 'sometext', 'labels': '', - }) + }) self.app.post('/wiki/aaa/update', params={ 'title': 'aaa', 'text': '', 'labels': '', - }) + }) self.app.post('/wiki/bbb/update', params={ 'title': 'bbb', 'text': '', 'labels': '', - }) + }) h.set_context('test', 'wiki', neighborhood='Projects') a = model.Page.query.find(dict(title='aaa')).first() @@ -616,7 +616,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) wiki_page = self.app.get(h.urlquote('/wiki/tést/')) assert wiki_page.html.find('div', {'id': 'new_post_holder'}) options_admin = self.app.get( @@ -635,7 +635,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) wiki_page = self.app.get(h.urlquote('/wiki/tést/')) assert wiki_page.html.find('ul', {'class': 'sidebarmenu'}) options_admin = self.app.get( @@ -657,7 +657,7 @@ class TestRootController(TestController): 'title': 'tést'.encode(), 'text': 'sometext', 'labels': '', - }) + }) wiki_page = self.app.get(h.urlquote('/wiki/tést/')) assert wiki_page.html.find('div', {'class': 'editbox'}) options_admin = self.app.get( @@ -676,7 +676,7 @@ class TestRootController(TestController): 'title': 'our_néw_home'.encode(), 'text': 'sometext', 'labels': '', - }) + }) homepage_admin = self.app.get('/admin/wiki/home', validate_chunk=True) assert homepage_admin.form['new_home'].value == 'Home' homepage_admin.form['new_home'].value = 'our_néw_home' @@ -702,7 +702,7 @@ class TestRootController(TestController): 'title': 'space page', 'text': '''There is a space in the title!''', 'labels': '', - } + } self.app.post('/wiki/space%20page/update', params=params) self.app.get('/wiki/TEST/') params = { @@ -720,7 +720,7 @@ class TestRootController(TestController): * Here is a link to [attach](TEST/attachment/test_root.py) ''', 'labels': '', - } + } self.app.post('/wiki/TEST/update', params=params) content = open(__file__, 'rb').read() self.app.post('/wiki/TEST/attach', @@ -778,7 +778,7 @@ class TestRootController(TestController): 'title': 'cache', 'text': html, 'labels': '', - }) + }) # first request caches html, second serves from cache r = self.app.get('/wiki/cache/') r = self.app.get('/wiki/cache/') @@ -789,12 +789,12 @@ class TestRootController(TestController): 'title': 'aaa', 'text': '111', 'labels': '', - }) + }) self.app.post('/wiki/bbb/update', params={ 'title': 'bbb', 'text': '222', 'labels': '', - }) + }) response = self.app.get('/wiki/browse_pages/') assert 'aaa' in response assert 'bbb' in response @@ -827,7 +827,7 @@ class TestRootController(TestController): * Handmaid mailto <a href="mailto:[email protected]">Email Yoda</a> ''', 'labels': '', - } + } self.app.post('/wiki/test_mailto/update', params=params) r = self.app.get('/wiki/test_mailto/') mailto_links = 0 diff --git a/scripts/teamforge-import.py b/scripts/teamforge-import.py index 903232477..ff72c8398 100644 --- a/scripts/teamforge-import.py +++ b/scripts/teamforge-import.py @@ -191,7 +191,7 @@ def save_user(usernames): users[username] = Object(user_data) if users[username].status != 'Active': log.warning('user: %s status: %s' % - (username, users[username].status)) + (username, users[username].status)) def get_project(project): @@ -638,19 +638,19 @@ def check_unsupported_tools(project): doc_count += 1 if doc_count: log.warning('Migrating documents is not supported, but found %s docs' % - doc_count) + doc_count) scm = make_client(options.api_url, 'ScmApp') for repo in scm.service.getRepositoryList(s, project.id).dataRows: log.warning('Migrating SCM repos is not supported, but found %s' % - repo.repositoryPath) + repo.repositoryPath) tasks = make_client(options.api_url, 'TaskApp') task_count = len( tasks.service.getTaskList(s, project.id, filters=None).dataRows) if task_count: log.warning('Migrating tasks is not supported, but found %s tasks' % - task_count) + task_count) tracker = make_client(options.api_url, 'TrackerApp') tracker_count = len( @@ -707,16 +707,13 @@ def download_file(tool, url_path, *filepaths): # log in to make sure the file should really be html if resp.headers.type == 'text/html': # log in and save the file - resp = loggedInOpener.open(scheme + '://' + hostname + "/sf/sfmain/do/login", six.moves.urllib.parse.urlencode({ - 'username': options.username, - 'password': options.password, - 'returnToUrl': url, - 'sfsubmit': 'submit' - })) + resp = loggedInOpener.open(scheme + '://' + hostname + "/sf/sfmain/do/login", six.moves.urllib.parse.urlencode( + {'username': options.username, 'password': options.password, 'returnToUrl': url, 'sfsubmit': 'submit'})) with open(out_file, 'w', encoding='utf-8') as out: out.write(resp.fp.read()) return out_file + bracket_macro = re.compile(r'\[(.*?)\]') h1 = re.compile(r'^!!!', re.MULTILINE) h2 = re.compile(r'^!!', re.MULTILINE) @@ -754,6 +751,7 @@ def wiki2markdown(markup): markup = re_stats.sub('', markup) return markup + re_rel = re.compile(r'\b(rel\d+)\b') @@ -1023,6 +1021,7 @@ def get_parser(defaults): return optparser + re_username = re.compile(r"^[a-z\-0-9]+$") @@ -1060,6 +1059,7 @@ def make_valid_sf_username(orig_username): sf_username = adjusted_username return sf_username + if __name__ == '__main__': logging.basicConfig(level=logging.WARN) log.setLevel(logging.DEBUG)
