[#8539] code simplifications
diff --git a/Allura/allura/command/taskd_cleanup.py b/Allura/allura/command/taskd_cleanup.py
index 0f4ec91..232773f 100644
--- a/Allura/allura/command/taskd_cleanup.py
+++ b/Allura/allura/command/taskd_cleanup.py
@@ -154,7 +154,7 @@
 
     def _check_taskd_status(self, pid):
         for i in range(self.options.num_retry):
-            retry = False if i == 0 else True
+            retry = i != 0
             status = self._taskd_status(pid, retry)
             if ('taskd pid %s' % pid) in status:
                 return 'OK'
@@ -164,7 +164,7 @@
 
     def _check_task(self, taskd_pid, task):
         for i in range(self.options.num_retry):
-            retry = False if i == 0 else True
+            retry = i != 0
             status = self._taskd_status(taskd_pid, retry)
             line = 'taskd pid {} is currently handling task {}'.format(
                 taskd_pid, task)
diff --git a/Allura/allura/controllers/project.py b/Allura/allura/controllers/project.py
index f4d8c98..f04fa5b 100644
--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -564,7 +564,7 @@
         set_nav(self.neighborhood)
         c.overview_form = W.neighborhood_overview_form
         allow_undelete = asbool(config.get('allow_project_undelete', True))
-        allow_wiki_as_root = True if get_default_wiki_page() else False
+        allow_wiki_as_root = bool(get_default_wiki_page())
 
         return dict(
             neighborhood=self.neighborhood,
diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py
index f077b3d..2553482 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -189,7 +189,7 @@
         if request.environ.get('paste.testing'):
             # test suite is running
             return False
-        elif asbool(config.get('debug')) and config['base_url'].startswith('http://'):
+        elif asbool(config.get('debug')) and config['base_url'].startswith('http://'):  # noqa: SIM103
             # development w/o https
             return False
         else:
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 0700902..252aea3 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -184,7 +184,7 @@
         try:
             end_dt = datetime.strptime(end_dt, '%Y/%m/%d %H:%M:%S')
         except ValueError:
-            end_dt = start_dt - timedelta(days=3) if not end_dt else end_dt
+            end_dt = end_dt if end_dt else start_dt - timedelta(days=3)
         start = bson.ObjectId.from_datetime(start_dt)
         end = bson.ObjectId.from_datetime(end_dt)
         nb = M.Neighborhood.query.get(name='Users')
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index 0cf6b8c..de33f55 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -337,7 +337,7 @@
         if params is None:
             params = request.params
         new_params = dict(params)
-        if not request.method == 'GET':
+        if request.method != 'GET':
             obj = None
             try:
                 new_params.pop('timestamp', None)
diff --git a/Allura/allura/tests/decorators.py b/Allura/allura/tests/decorators.py
index 6b1ea52..7311f58 100644
--- a/Allura/allura/tests/decorators.py
+++ b/Allura/allura/tests/decorators.py
@@ -109,12 +109,8 @@
     def __exit__(self, exc_type, exc_val, exc_t):
         if exc_type:
             self.exc = exc_val
-            if issubclass(exc_type, self.ExcType):
-                # ok
-                return True
-            else:
-                # root exception will be raised, untouched
-                return False
+            # otherwise root exception will be raised, untouched
+            return issubclass(exc_type, self.ExcType)
         else:
             raise AssertionError('Did not raise %s' % self.ExcType)
 
diff --git a/Allura/allura/tests/functional/test_neighborhood.py b/Allura/allura/tests/functional/test_neighborhood.py
index ec16331..e7e6759 100644
--- a/Allura/allura/tests/functional/test_neighborhood.py
+++ b/Allura/allura/tests/functional/test_neighborhood.py
@@ -342,7 +342,7 @@
         neighborhood = M.Neighborhood.query.get(name='Adobe')
         neighborhood.features['css'] = 'picker'
         r = self.app.get('/adobe/')
-        while isinstance(r.response, HTTPFound) or isinstance(r.response, HTTPMovedPermanently):
+        while isinstance(r.response, (HTTPFound, HTTPMovedPermanently)):
             r = r.follow()
         assert test_css in r
         r = self.app.get('/adobe/_admin/overview',
@@ -352,7 +352,7 @@
         neighborhood = M.Neighborhood.query.get(name='Adobe')
         neighborhood.features['css'] = 'custom'
         r = self.app.get('/adobe/')
-        while isinstance(r.response, HTTPFound) or isinstance(r.response, HTTPMovedPermanently):
+        while isinstance(r.response, (HTTPFound, HTTPMovedPermanently)):
             r = r.follow()
         assert test_css in r
         r = self.app.get('/adobe/_admin/overview',
diff --git a/Allura/allura/tests/functional/test_personal_dashboard.py b/Allura/allura/tests/functional/test_personal_dashboard.py
index 9a64ba7..b6a68eb 100644
--- a/Allura/allura/tests/functional/test_personal_dashboard.py
+++ b/Allura/allura/tests/functional/test_personal_dashboard.py
@@ -50,21 +50,20 @@
             return m
         eps = list(map(ep, ['a', 'b', 'c', 'd']))
         order = {'personal_dashboard_sections.order': 'b, d,c , f '}
-        with mock.patch('allura.lib.helpers.iter_entry_points') as iep:
-            with mock.patch.dict(tg.config, order):
-                iep.return_value = eps
-                sections = SectionsUtil.load_sections('personal_dashboard')
-                assert sections == [
-                    eps[1].load(),
-                    eps[3].load(),
-                    eps[2].load(),
-                    eps[0].load()]
-                r = self.app.get('/dashboard')
-                assert 'Section a' in r.text
-                assert 'Section b' in r.text
-                assert 'Section c' in r.text
-                assert 'Section d' in r.text
-                assert 'Section f' not in r.text
+        with mock.patch('allura.lib.helpers.iter_entry_points') as iep, mock.patch.dict(tg.config, order):
+            iep.return_value = eps
+            sections = SectionsUtil.load_sections('personal_dashboard')
+            assert sections == [
+                eps[1].load(),
+                eps[3].load(),
+                eps[2].load(),
+                eps[0].load()]
+            r = self.app.get('/dashboard')
+            assert 'Section a' in r.text
+            assert 'Section b' in r.text
+            assert 'Section c' in r.text
+            assert 'Section d' in r.text
+            assert 'Section f' not in r.text
 
 
 class TestTicketsSection(TrackerTestController):
diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py
index e6de739..230bafb 100644
--- a/Allura/allura/tests/functional/test_user_profile.py
+++ b/Allura/allura/tests/functional/test_user_profile.py
@@ -48,15 +48,14 @@
         order = {'user_profile_sections.order': 'b, d,c , f '}
         if hasattr(type(app), '_sections'):
             delattr(type(app), '_sections')
-        with mock.patch('allura.lib.helpers.iter_entry_points') as iep:
-            with mock.patch.dict(tg.config, order):
-                iep.return_value = eps
-                sections = app.profile_sections
-                assert sections == [
-                    eps[1].load(),
-                    eps[3].load(),
-                    eps[2].load(),
-                    eps[0].load()]
+        with mock.patch('allura.lib.helpers.iter_entry_points') as iep, mock.patch.dict(tg.config, order):
+            iep.return_value = eps
+            sections = app.profile_sections
+            assert sections == [
+                eps[1].load(),
+                eps[3].load(),
+                eps[2].load(),
+                eps[0].load()]
         r = self.app.get('/u/test-user/profile')
         assert 'Section a' in r.text
         assert 'Section b' in r.text
diff --git a/Allura/allura/tests/model/test_project.py b/Allura/allura/tests/model/test_project.py
index b5850b8..fc7b2bb 100644
--- a/Allura/allura/tests/model/test_project.py
+++ b/Allura/allura/tests/model/test_project.py
@@ -120,12 +120,11 @@
 
     def test_subproject(self):
         project = M.Project.query.get(shortname='test')
-        with td.raises(ToolError):
-            with patch('allura.lib.plugin.ProjectRegistrationProvider') as Provider:
-                Provider.get().shortname_validator.to_python.side_effect = Invalid(
-                    'name', 'value', {})
-                # name doesn't validate
-                sp = project.new_subproject('test-proj-nose')
+        with td.raises(ToolError), patch('allura.lib.plugin.ProjectRegistrationProvider') as Provider:
+            Provider.get().shortname_validator.to_python.side_effect = Invalid(
+                'name', 'value', {})
+            # name doesn't validate
+            sp = project.new_subproject('test-proj-nose')
         sp = project.new_subproject('test-proj-nose')
         spp = sp.new_subproject('spp')
         ThreadLocalODMSession.flush_all()
diff --git a/Allura/allura/tests/test_commands.py b/Allura/allura/tests/test_commands.py
index 7ad19a1..ed30467 100644
--- a/Allura/allura/tests/test_commands.py
+++ b/Allura/allura/tests/test_commands.py
@@ -435,14 +435,14 @@
     cmd._taskd_status.return_value = ''
     cmd.options = Mock(num_retry=10)
     cmd._check_taskd_status(123)
-    expected_calls = [call(123, False if i == 0 else True) for i in range(10)]
+    expected_calls = [call(123, i != 0) for i in range(10)]
     assert cmd._taskd_status.mock_calls == expected_calls
 
     cmd._taskd_status = Mock()
     cmd._taskd_status.return_value = ''
     cmd.options = Mock(num_retry=3)
     cmd._check_task(123, Mock())
-    expected_calls = [call(123, False if i == 0 else True) for i in range(3)]
+    expected_calls = [call(123, i != 0) for i in range(3)]
     assert cmd._taskd_status.mock_calls == expected_calls
 
 
diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py
index 99eae9c..71318ee 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -542,9 +542,8 @@
         raise HTTPUnauthorized()
     with h.login_overlay(exceptions=['foo']):
         raise HTTPUnauthorized()
-    with td.raises(HTTPUnauthorized):
-        with h.login_overlay(exceptions=['foobar']):
-            raise HTTPUnauthorized()
+    with td.raises(HTTPUnauthorized), h.login_overlay(exceptions=['foobar']):
+        raise HTTPUnauthorized()
 
 
 class TestIterEntryPoints(TestCase):
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index 54e936e..81fb412 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -584,11 +584,11 @@
         setup_global_objects()
 
     def test_delivers_messages(self):
-        with mock.patch.object(M.Mailbox, 'deliver') as deliver:
-            with mock.patch.object(M.Mailbox, 'fire_ready') as fire_ready:
-                notification_tasks.notify('42', ['52'], 'none')
-                deliver.assert_called_with('42', ['52'], 'none')
-                fire_ready.assert_called_with()
+        with mock.patch.object(M.Mailbox, 'deliver') as deliver, \
+                mock.patch.object(M.Mailbox, 'fire_ready') as fire_ready:
+            notification_tasks.notify('42', ['52'], 'none')
+            deliver.assert_called_with('42', ['52'], 'none')
+            fire_ready.assert_called_with()
 
 
 @event_handler('my_event')
diff --git a/Allura/allura/tests/test_webhooks.py b/Allura/allura/tests/test_webhooks.py
index 6393573..e843241 100644
--- a/Allura/allura/tests/test_webhooks.py
+++ b/Allura/allura/tests/test_webhooks.py
@@ -564,9 +564,8 @@
     def test_get_payload(self):
         sender = RepoPushWebhookSender()
         _ci = lambda x: MagicMock(webhook_info={'id': str(x)}, parent_ids=['0'])
-        with patch.object(self.git.repo, 'commit', new=_ci):
-            with h.push_config(c, app=self.git):
-                result = sender.get_payload(commit_ids=['1', '2', '3'], ref='ref')
+        with patch.object(self.git.repo, 'commit', new=_ci), h.push_config(c, app=self.git):
+            result = sender.get_payload(commit_ids=['1', '2', '3'], ref='ref')
         expected_result = {
             'size': 3,
             'commits': [{'id': '1'}, {'id': '2'}, {'id': '3'}],
diff --git a/Allura/allura/tests/unit/test_session.py b/Allura/allura/tests/unit/test_session.py
index e2042c0..282b567 100644
--- a/Allura/allura/tests/unit/test_session.py
+++ b/Allura/allura/tests/unit/test_session.py
@@ -46,14 +46,13 @@
 def test_extensions_cm_raises():
     session = mock.Mock(_kwargs=dict(extensions=[]))
     extension = mock.Mock()
-    with td.raises(ValueError):
-        with substitute_extensions(session, [extension]) as sess:
-            session.flush.side_effect = AttributeError
-            assert session.flush.call_count == 1
-            assert session.close.call_count == 1
-            assert sess == session
-            assert sess._kwargs['extensions'] == [extension]
-            raise ValueError('test')
+    with td.raises(ValueError), substitute_extensions(session, [extension]) as sess:
+        session.flush.side_effect = AttributeError
+        assert session.flush.call_count == 1
+        assert session.close.call_count == 1
+        assert sess == session
+        assert sess._kwargs['extensions'] == [extension]
+        raise ValueError('test')
     assert session.flush.call_count == 1
     assert session.close.call_count == 1
     assert session._kwargs['extensions'] == []
@@ -62,13 +61,12 @@
 def test_extensions_cm_flush_raises():
     session = mock.Mock(_kwargs=dict(extensions=[]))
     extension = mock.Mock()
-    with td.raises(AttributeError):
-        with substitute_extensions(session, [extension]) as sess:
-            session.flush.side_effect = AttributeError
-            assert session.flush.call_count == 1
-            assert session.close.call_count == 1
-            assert sess == session
-            assert sess._kwargs['extensions'] == [extension]
+    with td.raises(AttributeError), substitute_extensions(session, [extension]) as sess:
+        session.flush.side_effect = AttributeError
+        assert session.flush.call_count == 1
+        assert session.close.call_count == 1
+        assert sess == session
+        assert sess._kwargs['extensions'] == [extension]
     assert session.flush.call_count == 2
     assert session.close.call_count == 1
     assert session._kwargs['extensions'] == []
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index 5d85145..de05a19 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -168,7 +168,7 @@
             followee=followee,
             following=following,
             timeline=filtered_timeline,
-            noindex=False if filtered_timeline else True,
+            noindex=not filtered_timeline,
             page=page,
             limit=limit,
             has_more=has_more,
diff --git a/ForgeFeedback/forgefeedback/tests/unit/test_root_controller.py b/ForgeFeedback/forgefeedback/tests/unit/test_root_controller.py
index fd04a04..0df9787 100644
--- a/ForgeFeedback/forgefeedback/tests/unit/test_root_controller.py
+++ b/ForgeFeedback/forgefeedback/tests/unit/test_root_controller.py
@@ -35,10 +35,10 @@
 
     def test_index(self):
         reviews = feedback_main.RootController().index()
-        assert True if not reviews['user_has_already_reviewed'] else False
+        assert bool(not reviews['user_has_already_reviewed'])
         create_feedbacks()
         reviews = feedback_main.RootController().index()
-        assert True if reviews['user_has_already_reviewed'] else False
+        assert bool(reviews['user_has_already_reviewed'])
 
     def test_feedback(self):
         create_feedbacks()
diff --git a/ForgeImporters/forgeimporters/github/__init__.py b/ForgeImporters/forgeimporters/github/__init__.py
index f14d215..57deee4 100644
--- a/ForgeImporters/forgeimporters/github/__init__.py
+++ b/ForgeImporters/forgeimporters/github/__init__.py
@@ -208,7 +208,7 @@
 
 def valid_access_token(access_token, scopes_required=None):
     tok_details = access_token_details(access_token)
-    if not tok_details.status_code == 200:
+    if tok_details.status_code != 200:
         return False
     if scopes_required and not all(scope_req in tok_details.json()['scopes']
                                    for scope_req in scopes_required):
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index e70a61d..ad6ab61 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1329,7 +1329,7 @@
             if key in self.originals:
                 orig_value = self.originals[key]
                 curr_value = self.data[key]
-                if not orig_value == curr_value:
+                if orig_value != curr_value:
                     t.append((key, (orig_value, curr_value)))
         return t
 
diff --git a/ruff.toml b/ruff.toml
index 4337590..6df46f4 100644
--- a/ruff.toml
+++ b/ruff.toml
@@ -36,6 +36,11 @@
     "PLC",
     "PLE",
     "PLW",
+    "SIM101",
+    "SIM103",
+    "SIM117",
+    "SIM2",
+    "SIM401",
     "FA",   # future annotations (to ensure compatibility with `target-version`)
 ]