diff --git a/vcsserver/lib/statsd_client.py b/vcsserver/lib/statsd_client.py --- a/vcsserver/lib/statsd_client.py +++ b/vcsserver/lib/statsd_client.py @@ -24,6 +24,7 @@ class StatsdClientClass(Singleton): setup_run = False statsd_client = None statsd = None + strict_mode_init = False def __getattribute__(self, name): @@ -31,8 +32,9 @@ class StatsdClientClass(Singleton): if self.setup_run: return super(StatsdClientClass, self).__getattribute__(name) else: + if self.strict_mode_init: + raise StatsdClientNotInitialised(f"requested key was {name}") return None - #raise StatsdClientNotInitialised("requested key was %s" % name) return super(StatsdClientClass, self).__getattribute__(name) @@ -40,6 +42,8 @@ class StatsdClientClass(Singleton): """ Initialize the client """ + strict_init_mode = settings.pop('statsd_strict_init', False) + statsd = client_from_config(settings) self.statsd = statsd self.statsd_client = statsd diff --git a/vcsserver/lib/svnremoterepo.py b/vcsserver/lib/svnremoterepo.py --- a/vcsserver/lib/svnremoterepo.py +++ b/vcsserver/lib/svnremoterepo.py @@ -73,7 +73,7 @@ def _create_auth_baton(pool): 'svn_auth_get_ssl_client_cert_file_provider', 'svn_auth_get_windows_simple_provider', 'svn_auth_get_windows_ssl_server_trust_provider', - ] + ] providers = [] @@ -90,7 +90,7 @@ def _create_auth_baton(pool): client.get_ssl_client_cert_file_provider(), client.get_ssl_client_cert_pw_file_provider(), client.get_ssl_server_trust_file_provider(), - ] + ] return core.svn_auth_open(providers, pool) diff --git a/vcsserver/remote/git.py b/vcsserver/remote/git.py --- a/vcsserver/remote/git.py +++ b/vcsserver/remote/git.py @@ -40,7 +40,7 @@ from dulwich.repo import Repo as Dulwich from dulwich.server import update_server_info from vcsserver import exceptions, settings, subprocessio -from vcsserver.str_utils import safe_str, safe_int +from vcsserver.str_utils import safe_str, safe_int, safe_bytes from vcsserver.base import RepoFactory, obfuscate_qs, ArchiveNode, archive_repo from vcsserver.hgcompat import ( hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler) @@ -824,12 +824,12 @@ class GitRemote(RemoteBase): @reraise_safe_exceptions def init(self, wire): - repo_path = str_to_dulwich(wire['path']) + repo_path = safe_str(wire['path']) self.repo = Repo.init(repo_path) @reraise_safe_exceptions def init_bare(self, wire): - repo_path = str_to_dulwich(wire['path']) + repo_path = safe_str(wire['path']) self.repo = Repo.init_bare(repo_path) @reraise_safe_exceptions diff --git a/vcsserver/tests/test_subprocessio.py b/vcsserver/tests/test_subprocessio.py --- a/vcsserver/tests/test_subprocessio.py +++ b/vcsserver/tests/test_subprocessio.py @@ -52,7 +52,7 @@ class FileLikeObj(object): # pragma: no def environ(): """Delete coverage variables, as they make the tests fail.""" env = dict(os.environ) - for key in env.keys(): + for key in list(env.keys()): if key.startswith('COV_CORE_'): del env[key] diff --git a/vcsserver/tests/test_wsgi_app_caller.py b/vcsserver/tests/test_wsgi_app_caller.py --- a/vcsserver/tests/test_wsgi_app_caller.py +++ b/vcsserver/tests/test_wsgi_app_caller.py @@ -29,7 +29,7 @@ def demo_app(environ, start_response): input_data = safe_str(environ['wsgi.input'].read(1024)) data = [ - f'Hello World!\n', + 'Hello World!\n', f'input_data={input_data}\n', ] for key, value in sorted(environ.items()):