# HG changeset patch # User Mads Kiilerich # Date 2019-07-16 12:13:53 # Node ID b71aedc74d7b14d1a9502548dacd353446fc0435 # Parent f0013f65982d0092b886745b6da2bc5589c1cb2a clone_url: clarify variable naming Minor nits: user -> username (temporarily more complex) uri_tmpl -> clone_uri_tmpl qualified_home_url -> prefix_url decoded_path -> prefix diff --git a/kallithea/controllers/summary.py b/kallithea/controllers/summary.py --- a/kallithea/controllers/summary.py +++ b/kallithea/controllers/summary.py @@ -126,10 +126,8 @@ class SummaryController(BaseRepoControll else: log.error("Configured clone_uri_tmpl %r has no '{repo}' or '_{repoid}' and cannot toggle to use repo id URLs", c.clone_uri_tmpl) - c.clone_repo_url = c.db_repo.clone_url(user=username, - uri_tmpl=_def_clone_uri) - c.clone_repo_url_id = c.db_repo.clone_url(user=username, - uri_tmpl=_def_clone_uri_by_id) + c.clone_repo_url = c.db_repo.clone_url(clone_uri_tmpl=_def_clone_uri, username=username) + c.clone_repo_url_id = c.db_repo.clone_url(clone_uri_tmpl=_def_clone_uri_by_id, username=username) if c.db_repo.enable_statistics: c.show_stats = True diff --git a/kallithea/lib/utils2.py b/kallithea/lib/utils2.py --- a/kallithea/lib/utils2.py +++ b/kallithea/lib/utils2.py @@ -411,25 +411,27 @@ def credentials_filter(uri): return ''.join(uri) -def get_clone_url(uri_tmpl, qualified_home_url, repo_name, repo_id, **override): - parsed_url = urlobject.URLObject(qualified_home_url) - decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/'))) +def get_clone_url(clone_uri_tmpl, prefix_url, repo_name, repo_id, **override): + parsed_url = urlobject.URLObject(prefix_url) + prefix = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/'))) args = { 'scheme': parsed_url.scheme, 'user': '', - 'netloc': parsed_url.netloc+decoded_path, # path if we use proxy-prefix - 'prefix': decoded_path, + 'netloc': parsed_url.netloc + prefix, # like "hostname:port/prefix" (with optional ":port" and "/prefix") + 'prefix': prefix, # undocumented, empty or starting with / 'repo': repo_name, - 'repoid': str(repo_id) + 'repoid': str(repo_id), } + if 'username' in override: + args['user'] = override.pop('username') args.update(override) args['user'] = urllib.quote(safe_str(args['user'])) for k, v in args.items(): - uri_tmpl = uri_tmpl.replace('{%s}' % k, v) + clone_uri_tmpl = clone_uri_tmpl.replace('{%s}' % k, v) # remove leading @ sign if it's present. Case of empty user - url_obj = urlobject.URLObject(uri_tmpl) + url_obj = urlobject.URLObject(clone_uri_tmpl) url = url_obj.with_netloc(url_obj.netloc.lstrip('@')) return safe_unicode(url) diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -1261,31 +1261,31 @@ class Repository(Base, BaseDbModel): return clone_uri def clone_url(self, **override): - import kallithea.lib.helpers as h - qualified_home_url = h.canonical_url('home') - - uri_tmpl = None + clone_uri_tmpl = None if 'with_id' in override: - uri_tmpl = self.DEFAULT_CLONE_URI_ID + clone_uri_tmpl = self.DEFAULT_CLONE_URI_ID del override['with_id'] - if 'uri_tmpl' in override: - uri_tmpl = override['uri_tmpl'] - del override['uri_tmpl'] + if 'clone_uri_tmpl' in override: + clone_uri_tmpl = override['clone_uri_tmpl'] + del override['clone_uri_tmpl'] # we didn't override our tmpl from **overrides - if not uri_tmpl: - uri_tmpl = self.DEFAULT_CLONE_URI + if not clone_uri_tmpl: + clone_uri_tmpl = self.DEFAULT_CLONE_URI try: from tg import tmpl_context as c - uri_tmpl = c.clone_uri_tmpl + clone_uri_tmpl = c.clone_uri_tmpl except AttributeError: # in any case if we call this outside of request context, # ie, not having tmpl_context set up pass - return get_clone_url(uri_tmpl=uri_tmpl, - qualified_home_url=qualified_home_url, + import kallithea.lib.helpers as h + prefix_url = h.canonical_url('home') + + return get_clone_url(clone_uri_tmpl=clone_uri_tmpl, + prefix_url=prefix_url, repo_name=self.repo_name, repo_id=self.repo_id, **override) diff --git a/kallithea/tests/other/test_libs.py b/kallithea/tests/other/test_libs.py --- a/kallithea/tests/other/test_libs.py +++ b/kallithea/tests/other/test_libs.py @@ -267,25 +267,25 @@ class TestLibs(TestController): grav = gravatar_url(email_address=em, size=24) assert grav == 'https://example.com/%s/%s' % (_md5(em), 24) - @parametrize('tmpl,repo_name,overrides,prefix,expected', [ + @parametrize('clone_uri_tmpl,repo_name,overrides,prefix,expected', [ (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '', 'http://vps1:8000/group/repo1'), - (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'username'}, '', 'http://username@vps1:8000/group/repo1'), + (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'username': 'username'}, '', 'http://username@vps1:8000/group/repo1'), (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '/prefix', 'http://vps1:8000/prefix/group/repo1'), - (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/prefix', 'http://user@vps1:8000/prefix/group/repo1'), - (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'username'}, '/prefix', 'http://username@vps1:8000/prefix/group/repo1'), - (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/prefix/', 'http://user@vps1:8000/prefix/group/repo1'), - (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'username'}, '/prefix/', 'http://username@vps1:8000/prefix/group/repo1'), + (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'username': 'user'}, '/prefix', 'http://user@vps1:8000/prefix/group/repo1'), + (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'username': 'username'}, '/prefix', 'http://username@vps1:8000/prefix/group/repo1'), + (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'username': 'user'}, '/prefix/', 'http://user@vps1:8000/prefix/group/repo1'), + (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'username': 'username'}, '/prefix/', 'http://username@vps1:8000/prefix/group/repo1'), ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {}, '', 'http://vps1:8000/_23'), - ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://username@vps1:8000/_23'), - ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://username@vps1:8000/_23'), - ('http://{netloc}/_{repoid}', 'group/repo1', {'user': 'username'}, '', 'http://vps1:8000/_23'), - ('https://{user}@proxy1.example.com/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://username@proxy1.example.com/group/repo1'), + ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'username': 'username'}, '', 'http://username@vps1:8000/_23'), + ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'username': 'username'}, '', 'http://username@vps1:8000/_23'), + ('http://{netloc}/_{repoid}', 'group/repo1', {'username': 'username'}, '', 'http://vps1:8000/_23'), + ('https://{user}@proxy1.example.com/{repo}', 'group/repo1', {'username': 'username'}, '', 'https://username@proxy1.example.com/group/repo1'), ('https://{user}@proxy1.example.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.example.com/group/repo1'), - ('https://proxy1.example.com/{user}/{repo}', 'group/repo1', {'user': 'username'}, '', 'https://proxy1.example.com/username/group/repo1'), + ('https://proxy1.example.com/{user}/{repo}', 'group/repo1', {'username': 'username'}, '', 'https://proxy1.example.com/username/group/repo1'), ]) - def test_clone_url_generator(self, tmpl, repo_name, overrides, prefix, expected): + def test_clone_url_generator(self, clone_uri_tmpl, repo_name, overrides, prefix, expected): from kallithea.lib.utils2 import get_clone_url - clone_url = get_clone_url(uri_tmpl=tmpl, qualified_home_url='http://vps1:8000'+prefix, + clone_url = get_clone_url(clone_uri_tmpl=clone_uri_tmpl, prefix_url='http://vps1:8000' + prefix, repo_name=repo_name, repo_id=23, **overrides) assert clone_url == expected