Mercurial > kallithea
view conftest.py @ 8280:37ec17c1344c
vcs: fix repo creation with a remote clone uri under Python 3
When trying to add a new repository based on a remote clone, it fails in
Python 3 as follows, for git:
ERROR kallithea.model.validators:validators.py:413 URL validation failed
Traceback (most recent call last):
File ".../kallithea/model/validators.py", line 411, in _validate_python
is_valid_repo_uri(repo_type, url, make_ui())
File ".../kallithea/lib/utils.py", line 250, in is_valid_repo_uri
GitRepository._check_url(url)
File ".../kallithea/lib/vcs/backends/git/repository.py", line 174, in _check_url
if not test_uri.endswith('info/refs'):
TypeError: endswith first arg must be bytes or a tuple of bytes, not str
and for hg, the other way around:
ERROR kallithea.model.validators:validators.py:413 URL validation failed
Traceback (most recent call last):
File ".../kallithea/model/validators.py", line 411, in _validate_python
is_valid_repo_uri(repo_type, url, make_ui())
File ".../kallithea/lib/utils.py", line 233, in is_valid_repo_uri
MercurialRepository._check_url(url, ui)
File ".../kallithea/lib/vcs/backends/hg/repository.py", line 297, in _check_url
if os.path.isdir(url) or url.startswith(b'file:'):
TypeError: startswith first arg must be str or a tuple of str, not bytes
In both cases, the code seems to actually expect a bytes url.
author | Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> |
---|---|
date | Sun, 01 Mar 2020 21:29:40 +0100 |
parents | 9948ed9916c4 |
children |
line wrap: on
line source
import os import mock import pytest import tg here = os.path.dirname(__file__) # HACK: def pytest_configure(): # Register global dummy tg.context to avoid "TypeError: No object (name: context) has been registered for this thread" tg.request_local.context._push_object(tg.util.bunch.Bunch()) # could be removed again after use with # tg.request_local.context._pop_object ... but we keep it around forever as # a reasonable sentinel def pytest_ignore_collect(path): # ignore all files outside the 'kallithea' directory if not str(path).startswith(os.path.join(here, 'kallithea')): return True # during doctest verification, normally all python files will be imported. # Thus, files that cannot be imported normally should be ignored. # Files that generate ImportErrors are ignored via # '--doctest-ignore-import-errors' (pytest.ini) kallithea_ignore_paths = ( # AttributeError: 'module' object has no attribute 'config' '/kallithea/alembic/env.py', # collection of the following file messes up the rest of test execution '/kallithea/tests/scripts/manual_test_concurrency.py', ) if str(path).endswith(kallithea_ignore_paths): return True @pytest.fixture() def doctest_mock_ugettext(request): """Mock ugettext ('_') in the module using this fixture. Intended to be used for doctests. In a doctest, enable this fixture using: >>> getfixture('doctest_mock_ugettext') """ m = __import__(request.module.__name__, globals(), locals(), [None], 0) with mock.patch.object(m, '_', lambda s: s): yield if getattr(pytest, 'register_assert_rewrite', None): # make sure that all asserts under kallithea/tests benefit from advanced # assert reporting with pytest-3.0.0+, including api/api_base.py, # models/common.py etc. # See also: https://docs.pytest.org/en/latest/assert.html#advanced-assertion-introspection pytest.register_assert_rewrite('kallithea.tests')