This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8396 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 892d5d80db5a46b52ed680cd4fd96535d233e361 Author: Dave Brondsema <[email protected]> AuthorDate: Fri Sep 10 21:02:06 2021 +0000 [#8396] remove dependency on ipython --- Allura/allura/command/show_models.py | 22 ---------------- Allura/allura/lib/utils.py | 20 +++------------ Allura/allura/tests/functional/test_root.py | 6 ++--- Allura/allura/tests/test_helpers.py | 7 +++--- AlluraTest/alluratest/tools.py | 18 ++++++++++++++ ForgeBlog/forgeblog/tests/test_commands.py | 5 ++-- .../forgeimporters/github/tests/test_wiki.py | 18 +++++++------- .../forgeimporters/trac/tests/test_tickets.py | 6 ++--- .../forgesvn/tests/functional/test_controllers.py | 8 +++--- ForgeSVN/forgesvn/tests/model/test_repository.py | 7 +++--- ForgeWiki/forgewiki/tests/test_converters.py | 7 ++++-- requirements.in | 1 - requirements.txt | 29 ++-------------------- 13 files changed, 57 insertions(+), 97 deletions(-) diff --git a/Allura/allura/command/show_models.py b/Allura/allura/command/show_models.py index f4623de..b0fb3ac 100644 --- a/Allura/allura/command/show_models.py +++ b/Allura/allura/command/show_models.py @@ -385,25 +385,3 @@ def dfs(root, graph, depth=0): for node in graph[root][1]: for r in dfs(node, graph, depth + 1): yield r - - -def pm(etype, value, tb): # pragma no cover - import pdb - import traceback - try: - from IPython.ipapi import make_session - make_session() - from IPython.Debugger import Pdb - sys.stderr.write('Entering post-mortem IPDB shell\n') - p = Pdb(color_scheme='Linux') - p.reset() - p.setup(None, tb) - p.print_stack_trace() - sys.stderr.write('%s: %s\n' % (etype, value)) - p.cmdloop() - p.forget() - # p.interaction(None, tb) - except ImportError: - sys.stderr.write('Entering post-mortem PDB shell\n') - traceback.print_exception(etype, value, tb) - pdb.post_mortem(tb) diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py index 3f566a3..5adc4f4 100644 --- a/Allura/allura/lib/utils.py +++ b/Allura/allura/lib/utils.py @@ -440,23 +440,9 @@ def postmortem_hook(etype, value, tb): # pragma no cover import sys import pdb import traceback - try: - from IPython.ipapi import make_session - make_session() - from IPython.Debugger import Pdb - sys.stderr.write('Entering post-mortem IPDB shell\n') - p = Pdb(color_scheme='Linux') - p.reset() - p.setup(None, tb) - p.print_stack_trace() - sys.stderr.write('%s: %s\n' % (etype, value)) - p.cmdloop() - p.forget() - # p.interaction(None, tb) - except ImportError: - sys.stderr.write('Entering post-mortem PDB shell\n') - traceback.print_exception(etype, value, tb) - pdb.post_mortem(tb) + sys.stderr.write('Entering post-mortem PDB shell\n') + traceback.print_exception(etype, value, tb) + pdb.post_mortem(tb) class LineAnchorCodeHtmlFormatter(HtmlFormatter): diff --git a/Allura/allura/tests/functional/test_root.py b/Allura/allura/tests/functional/test_root.py index 3caf217..31efd55 100644 --- a/Allura/allura/tests/functional/test_root.py +++ b/Allura/allura/tests/functional/test_root.py @@ -31,14 +31,14 @@ Please read http://pythonpaste.org/webtest/ for more information. from __future__ import unicode_literals from __future__ import absolute_import import os +from unittest import skipIf import six from tg import tmpl_context as c -from alluratest.tools import assert_equal, assert_in +from alluratest.tools import assert_equal, module_not_available from ming.orm.ormsession import ThreadLocalORMSession import mock -from IPython.testing.decorators import module_not_available, skipif from allura.tests import decorators as td from allura.tests import TestController @@ -177,7 +177,7 @@ class TestRootController(TestController): self.app.get('/p', status=301) self.app.get('/p/', status=302) - @skipif(module_not_available('newrelic')) + @skipIf(module_not_available('newrelic'), 'requires newrelic') def test_newrelic_set_transaction_name(self): from allura.controllers.project import NeighborhoodController with mock.patch('newrelic.agent.callable_name') as callable_name,\ diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py index 4e35c01..d743a95 100644 --- a/Allura/allura/tests/test_helpers.py +++ b/Allura/allura/tests/test_helpers.py @@ -19,7 +19,7 @@ from __future__ import unicode_literals from __future__ import absolute_import -from unittest import TestCase +from unittest import TestCase, skipIf from os import path from datetime import datetime, timedelta import time @@ -27,8 +27,7 @@ import time import PIL from mock import Mock, patch from tg import tmpl_context as c -from alluratest.tools import assert_equals, assert_raises -from IPython.testing.decorators import skipif, module_not_available +from alluratest.tools import assert_equals, assert_raises, module_not_available from datadiff import tools as dd from webob import Request from webob.exc import HTTPUnauthorized @@ -368,7 +367,7 @@ def test_notifications_disabled(): assert_equals(project.notifications_disabled, False) -@skipif(module_not_available('html2text')) +@skipIf(module_not_available('html2text'), 'html2text required') def test_plain2markdown_with_html2text(): """Test plain2markdown using html2text to escape markdown, if available.""" text = '''paragraph diff --git a/AlluraTest/alluratest/tools.py b/AlluraTest/alluratest/tools.py index dd3e4d2..8831b12 100644 --- a/AlluraTest/alluratest/tools.py +++ b/AlluraTest/alluratest/tools.py @@ -84,3 +84,21 @@ def assert_greater_equal(*a, **kw): def assert_regexp_matches(*a, **kw): return testcase.assertRegexpMatches(*a, **kw) + + +# +# copied from IPython.testing.decorators +# BSD license +def module_not_available(module): + """Can module be imported? Returns true if module does NOT import. + + This is used to make a decorator to skip tests that require module to be + available, but delay the 'import numpy' to test execution time. + """ + try: + mod = __import__(module) + mod_not_avail = False + except ImportError: + mod_not_avail = True + + return mod_not_avail diff --git a/ForgeBlog/forgeblog/tests/test_commands.py b/ForgeBlog/forgeblog/tests/test_commands.py index addc8ee..b275067 100644 --- a/ForgeBlog/forgeblog/tests/test_commands.py +++ b/ForgeBlog/forgeblog/tests/test_commands.py @@ -20,7 +20,7 @@ from __future__ import absolute_import from datetime import datetime, timedelta from tg import app_globals as g from datadiff.tools import assert_equal -from IPython.testing.decorators import module_not_available, skipif +from unittest import skipIf import pkg_resources import mock import feedparser @@ -28,6 +28,7 @@ import feedparser from ming.orm.ormsession import ThreadLocalORMSession from alluratest.controller import setup_basic_test, setup_global_objects +from alluratest.tools import module_not_available from allura import model as M from forgeblog import model as BM @@ -71,7 +72,7 @@ def _mock_feed(*entries): _mock_feed.i = 0 -@skipif(module_not_available('html2text')) +@skipIf(module_not_available('html2text'), 'requires html2text') @mock.patch.object(feedparser, 'parse') def test_pull_rss_feeds(parsefeed): html_content = ( diff --git a/ForgeImporters/forgeimporters/github/tests/test_wiki.py b/ForgeImporters/forgeimporters/github/tests/test_wiki.py index 578a875..1be0a94 100644 --- a/ForgeImporters/forgeimporters/github/tests/test_wiki.py +++ b/ForgeImporters/forgeimporters/github/tests/test_wiki.py @@ -19,17 +19,17 @@ from __future__ import unicode_literals from __future__ import absolute_import -from unittest import TestCase +from unittest import TestCase, skipIf from alluratest.tools import assert_equal from mock import Mock, patch, call from ming.odm import ThreadLocalORMSession import git -from IPython.testing.decorators import module_not_available, skipif from allura import model as M from allura.tests import TestController from allura.tests.decorators import with_tool, without_module from alluratest.controller import setup_basic_test +from alluratest.tools import module_not_available from forgeimporters.github.wiki import GitHubWikiImporter from forgeimporters.github.utils import GitHubMarkdownConverter from forgeimporters.github import GitHubOAuthMixin @@ -187,7 +187,7 @@ class TestGitHubWikiImporter(TestCase): assert_equal(render.call_args_list, [call('Home.rst', '# test message')]) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') @patch('forgeimporters.github.wiki.WM.Page.upsert') @patch('forgeimporters.github.wiki.mediawiki2markdown') def test_with_history_mediawiki(self, md2mkm, upsert): @@ -300,7 +300,7 @@ Our website is <http://domain.net>. assert_equal(f(source), result) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_markup(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' @@ -403,7 +403,7 @@ Our website is [[http://domain.net]]. prefix, new), '<a href="/p/test/wiki/Test Page">Test <b>Page</b></a>') - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_markup_with_mediawiki2markdown(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' @@ -431,7 +431,7 @@ Our website is [[http://domain.net]]. assert_equal(f(source, 'test.mediawiki'), result) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_textile_no_leading_tabs(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' @@ -455,7 +455,7 @@ Some text 1. See [Page]''' assert_equal(f(source, 'test.textile').strip(), result) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_markup_with_amp_in_links(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' @@ -467,7 +467,7 @@ See [Page]''' # markdown should be untouched assert_equal(f(source, 'test.rst').strip(), result) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_markup_textile(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' @@ -513,7 +513,7 @@ some text and **[Tips n\u2019 Tricks]** ''' assert_equal(f(source, 'test3.textile'), result) - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_convert_textile_special_tag(self): importer = GitHubWikiImporter() importer.github_wiki_url = 'https://github.com/a/b/wiki' diff --git a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py index a942fd5..0b010e0 100644 --- a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py +++ b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py @@ -20,15 +20,15 @@ from __future__ import absolute_import import json import os -from unittest import TestCase +from unittest import TestCase, skipIf from mock import Mock, patch from ming.orm import ThreadLocalORMSession from tg import tmpl_context as c -from IPython.testing.decorators import module_not_available, skipif from allura.tests import TestController from allura.tests.decorators import with_tracker from alluratest.controller import TestRestApiBase, setup_unit_test +from alluratest.tools import module_not_available from allura import model as M from forgetracker import model as TM @@ -262,7 +262,7 @@ class TestTracImportSupportFunctional(TestRestApiBase, TestCase): import_support.get_slug_by_id('204', '2'), comments[1].slug) @with_tracker - @skipif(module_not_available('html2text')) + @skipIf(module_not_available('html2text'), 'html2text required') def test_list(self): from allura.scripts.trac_export import TracExport, DateJSONEncoder csv_fp = open(os.path.dirname(__file__) + '/data/test-list.csv') diff --git a/ForgeSVN/forgesvn/tests/functional/test_controllers.py b/ForgeSVN/forgesvn/tests/functional/test_controllers.py index 116542c..99100f3 100644 --- a/ForgeSVN/forgesvn/tests/functional/test_controllers.py +++ b/ForgeSVN/forgesvn/tests/functional/test_controllers.py @@ -23,6 +23,7 @@ import json import re import shutil import os +from unittest import skipUnless import six import tg @@ -31,7 +32,6 @@ from tg import tmpl_context as c from ming.orm import ThreadLocalORMSession from mock import patch from alluratest.tools import assert_equal, assert_in -from IPython.testing.decorators import onlyif from allura import model as M from allura.lib import helpers as h @@ -230,7 +230,7 @@ class TestRootController(SVNTestController): r = self.app.get('/src/2/log/?path=does/not/exist/') assert 'No (more) commits' in r - @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') + @skipUnless(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') def test_tarball(self): r = self.app.get('/src/3/tree/') assert 'Download Snapshot' in r @@ -245,7 +245,7 @@ class TestRootController(SVNTestController): r = self.app.get('/src/3/tarball') assert 'Your download will begin shortly' in r - @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') + @skipUnless(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') def test_tarball_cyrillic(self): r = self.app.get('/src/6/tree/') assert 'Download Snapshot' in r @@ -260,7 +260,7 @@ class TestRootController(SVNTestController): r = self.app.get('/src/6/tarball') assert 'Your download will begin shortly' in r - @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') + @skipUnless(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') def test_tarball_path(self): h.set_context('test', 'svn-tags', neighborhood='Projects') shutil.rmtree(c.app.repo.tarball_path, ignore_errors=True) diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py index 6781b9f..f71a787 100644 --- a/ForgeSVN/forgesvn/tests/model/test_repository.py +++ b/ForgeSVN/forgesvn/tests/model/test_repository.py @@ -22,6 +22,8 @@ from __future__ import absolute_import import os import shutil import unittest +from unittest import skipUnless + import pkg_resources from itertools import count, product from datetime import datetime @@ -38,7 +40,6 @@ import ming from ming.base import Object from ming.orm import session, ThreadLocalORMSession from testfixtures import TempDirectory -from IPython.testing.decorators import onlyif from alluratest.controller import setup_basic_test, setup_global_objects from allura import model as M @@ -434,7 +435,7 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase): revision=pysvn.Revision.return_value, recurse=False) - @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') + @skipUnless(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') def test_tarball(self): tmpdir = tg.config['scm.repos.tarball.root'] assert_equal(self.repo.tarball_path, @@ -451,7 +452,7 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase): shutil.rmtree(self.repo.tarball_path.encode('utf-8'), ignore_errors=True) - @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') + @skipUnless(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing') def test_tarball_paths(self): rev = '19' h.set_context('test', 'svn-tags', neighborhood='Projects') diff --git a/ForgeWiki/forgewiki/tests/test_converters.py b/ForgeWiki/forgewiki/tests/test_converters.py index 398c0a8..bd8fa4d 100644 --- a/ForgeWiki/forgewiki/tests/test_converters.py +++ b/ForgeWiki/forgewiki/tests/test_converters.py @@ -17,12 +17,15 @@ from __future__ import unicode_literals from __future__ import absolute_import -from IPython.testing.decorators import module_not_available, skipif + +from unittest import skipIf + +from alluratest.tools import module_not_available from forgewiki import converters -@skipif(module_not_available('mediawiki')) +@skipIf(module_not_available('mediawiki'), 'mediawiki required') def test_mediawiki2markdown(): mediawiki_text = """ '''bold''' ''italics'' diff --git a/requirements.in b/requirements.in index 184dea3..67f0136 100644 --- a/requirements.in +++ b/requirements.in @@ -54,7 +54,6 @@ wrapt==1.11.2 # testing datadiff -ipython<6 # Ipython 7 starts to require py3 mock pyflakes #pylint -- disabled due to [#8346] (also requires diff versions on py2 vs 3, including transitive deps which gets tricky with pip-compile) diff --git a/requirements.txt b/requirements.txt index 4f06a6c..6036931 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,10 +33,7 @@ cryptography==3.3.2 datadiff==2.0.0 # via -r requirements.in decorator==4.4.0 - # via - # -r requirements.in - # ipython - # traitlets + # via -r requirements.in docutils==0.15.2 # via pypeline easywidgets==0.3.6 @@ -72,10 +69,6 @@ idna==3.2 # via requests inflection==0.5.1 # via profanityfilter -ipython==5.8.0 - # via -r requirements.in -ipython-genutils==0.2.0 - # via traitlets iso8601==0.1.12 # via colander jinja2==2.11.3 @@ -117,26 +110,16 @@ pastedeploy==2.0.1 # pastescript pastescript==3.1.0 # via -r requirements.in -pexpect==4.7.0 - # via ipython -pickleshare==0.7.5 - # via ipython pillow==8.3.2 # via -r requirements.in profanityfilter==2.0.6 # via -r requirements.in -prompt-toolkit==1.0.16 - # via ipython -ptyprocess==0.6.0 - # via pexpect pycparser==2.19 # via cffi pyflakes==2.1.1 # via -r requirements.in pygments==2.9.0 - # via - # -r requirements.in - # ipython + # via -r requirements.in pymongo==3.10.1 # via # -r requirements.in @@ -178,8 +161,6 @@ setproctitle==1.1.9 # via -r requirements.in sgmllib3k==1.0.0 # via feedparser -simplegeneric==0.8.1 - # via ipython six==1.15.0 # via # -r requirements.in @@ -194,11 +175,9 @@ six==1.15.0 # mock # paste # pastescript - # prompt-toolkit # python-dateutil # qrcode # textile - # traitlets # webhelpers2 # webtest smmap2==2.0.4 @@ -211,8 +190,6 @@ textile==3.0.4 # via pypeline timermiddleware==0.5.1 # via -r requirements.in -traitlets==4.3.2 - # via ipython translationstring==1.3 # via colander turbogears2==2.3.12 @@ -221,8 +198,6 @@ urllib3==1.26.6 # via requests waitress==1.4.3 # via webtest -wcwidth==0.1.7 - # via prompt-toolkit webencodings==0.5.1 # via # bleach
