Skip to content

Use f-strings where pyupgrade doesn't handle it automatically #1387

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion binderhub/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def get_provider(self, provider_prefix, spec):
"""Construct a provider object"""
providers = self.settings['repo_providers']
if provider_prefix not in providers:
raise web.HTTPError(404, "No provider found for prefix %s" % provider_prefix)
raise web.HTTPError(404, f"No provider found for prefix {provider_prefix}")

return providers[provider_prefix](
config=self.settings['traitlets_config'], spec=spec)
Expand Down
6 changes: 3 additions & 3 deletions binderhub/binderspawner_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ def get_args(self):
else:
args = [
'--ip=0.0.0.0',
'--port=%i' % self.port,
'--NotebookApp.base_url=%s' % self.server.base_url,
'--NotebookApp.token=%s' % self.user_options['token'],
f'--port={self.port}',
f'--NotebookApp.base_url={self.server.base_url}',
f"--NotebookApp.token={self.user_options['token']}",
'--NotebookApp.trust_xheaders=True',
]
if self.default_url:
Expand Down
15 changes: 6 additions & 9 deletions binderhub/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ async def get(self, provider_prefix, _unescaped_spec):
# EventSource cannot handle HTTP errors, so we must validate and send
# error messages on the eventsource.
if provider_prefix not in self.settings['repo_providers']:
await self.fail("No provider found for prefix %s" % provider_prefix)
await self.fail(f"No provider found for prefix {provider_prefix}")
return

# create a heartbeat
Expand Down Expand Up @@ -287,7 +287,7 @@ async def get(self, provider_prefix, _unescaped_spec):
return

if ref is None:
error_message = ["Could not resolve ref for %s. Double check your URL." % key]
error_message = [f"Could not resolve ref for {key}. Double check your URL."]

if provider.name == "GitHub":
error_message.append('GitHub recently changed default branches from "master" to "main".')
Expand Down Expand Up @@ -548,9 +548,8 @@ async def launch(self, provider):
matching_pods += 1
break
if matching_pods >= quota:
app_log.error("%s has exceeded quota: %s/%s (%s total)",
self.repo_url, matching_pods, quota, total_pods)
await self.fail("Too many users running %s! Try again soon." % self.repo_url)
app_log.error(f"{self.repo_url} has exceeded quota: {matching_pods}/{quota} ({total_pods} total)")
await self.fail(f"Too many users running {self.repo_url}! Try again soon.")
return

if matching_pods >= 0.5 * quota:
Expand Down Expand Up @@ -626,9 +625,7 @@ async def launch(self, provider):
await self.emit(
{
"phase": "launching",
"message": "Launch attempt {} failed, retrying...\n".format(
i + 1
),
"message": f"Launch attempt {i + 1} failed, retrying...\n",
}
)
await gen.sleep(retry_delay)
Expand All @@ -646,7 +643,7 @@ async def launch(self, provider):
break
event = {
'phase': 'ready',
'message': 'server running at %s\n' % server_info['url'],
'message': f"server running at {server_info['url']}\n",
}
event.update(server_info)
await self.emit(event)
16 changes: 8 additions & 8 deletions binderhub/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def _default_hub_url_local(self):
async def api_request(self, url, *args, **kwargs):
"""Make an API request to JupyterHub"""
headers = kwargs.setdefault('headers', {})
headers.update({'Authorization': 'token %s' % self.hub_api_token})
headers.update({'Authorization': f'token {self.hub_api_token}'})
hub_api_url = os.getenv('JUPYTERHUB_API_URL', '') or self.hub_url_local + 'hub/api/'
if not hub_api_url.endswith('/'):
hub_api_url += '/'
Expand Down Expand Up @@ -116,7 +116,7 @@ async def api_request(self, url, *args, **kwargs):

async def get_user_data(self, username):
resp = await self.api_request(
'users/%s' % username,
f'users/{username}',
method='GET',
)
body = json.loads(resp.body.decode('utf-8'))
Expand Down Expand Up @@ -169,7 +169,7 @@ async def launch(self, image, username, server_name='', repo_url='', extra_args=
# create a new user
app_log.info("Creating user %s for image %s", username, image)
try:
await self.api_request('users/%s' % escaped_username, body=b'', method='POST')
await self.api_request(f'users/{escaped_username}', body=b'', method='POST')
except HTTPError as e:
if e.response:
body = e.response.body
Expand All @@ -178,13 +178,13 @@ async def launch(self, image, username, server_name='', repo_url='', extra_args=
app_log.error("Error creating user %s: %s\n%s",
username, e, body,
)
raise web.HTTPError(500, "Failed to create temporary user for %s" % image)
raise web.HTTPError(500, f"Failed to create temporary user for {image}")
elif server_name == '':
# authentication is enabled but not named servers
# check if user has a running server ('')
user_data = await self.get_user_data(escaped_username)
if server_name in user_data['servers']:
raise web.HTTPError(409, "User %s already has a running server." % username)
raise web.HTTPError(409, f"User {username} already has a running server.")
elif self.named_server_limit_per_user > 0:
# authentication is enabled with named servers
# check if user has already reached to the limit of named servers
Expand Down Expand Up @@ -214,7 +214,7 @@ async def launch(self, image, username, server_name='', repo_url='', extra_args=
_server_name = " {}".format(server_name) if server_name else ''

# start server
app_log.info("Starting server%s for user %s with image %s", _server_name, username, image)
app_log.info(f"Starting server{_server_name} for user {username} with image {image}")
try:
resp = await self.api_request(
'users/{}/servers/{}'.format(escaped_username, server_name),
Expand All @@ -236,7 +236,7 @@ async def launch(self, image, username, server_name='', repo_url='', extra_args=
# and tune this appropriately
await gen.sleep(min(1.4 ** i, 10))
else:
raise web.HTTPError(500, "Image %s for user %s took too long to launch" % (image, username))
raise web.HTTPError(500, f"Image {image} for user {username} took too long to launch")

except HTTPError as e:
if e.response:
Expand All @@ -246,7 +246,7 @@ async def launch(self, image, username, server_name='', repo_url='', extra_args=

app_log.error("Error starting server{} for user {}: {}\n{}".
format(_server_name, username, e, body))
raise web.HTTPError(500, "Failed to launch image %s" % image)
raise web.HTTPError(500, f"Failed to launch image {image}")

data['url'] = self.hub_url + 'user/%s/%s' % (escaped_username, server_name)
return data
8 changes: 3 additions & 5 deletions binderhub/repoproviders.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,12 @@ def repo_config(self, settings):
raise ValueError(
"Spec-pattern configuration expected "
"a regex pattern string, not "
"type %s" % type(pattern))
f"type {type(pattern)}")
if not isinstance(config, dict):
raise ValueError(
"Spec-pattern configuration expected "
"a specification configuration dict, not "
"type %s" % type(config))
f"type {type(config)}")
# Ignore case, because most git providers do not
# count DS-100/textbook as different from ds-100/textbook
if re.match(pattern, self.spec, re.IGNORECASE):
Expand Down Expand Up @@ -814,9 +814,7 @@ async def github_api_request(self, api_url, etag=None):
# round expiry up to nearest 5 minutes
minutes_until_reset = 5 * (1 + (reset_seconds // 60 // 5))

raise ValueError("GitHub rate limit exceeded. Try again in %i minutes."
% minutes_until_reset
)
raise ValueError(f"GitHub rate limit exceeded. Try again in {minutes_until_reset} minutes.")
# Status 422 is returned by the API when we try and resolve a non
# existent reference
elif e.code in (404, 422):
Expand Down
6 changes: 3 additions & 3 deletions binderhub/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ def test_rendezvous_independence():
# check that the relative ranking of 80 buckets doesn't depend on the
# presence of 20 extra buckets
key = "k1"
eighty_buckets = utils.rendezvous_rank(["b%i" % i for i in range(80)], key)
hundred_buckets = utils.rendezvous_rank(["b%i" % i for i in range(100)], key)
eighty_buckets = utils.rendezvous_rank([f"b{i}" for i in range(80)], key)
hundred_buckets = utils.rendezvous_rank([f"b{i}" for i in range(100)], key)

for i in range(80, 100):
hundred_buckets.remove("b%i" % i)
hundred_buckets.remove(f"b{i}")

assert eighty_buckets == hundred_buckets

Expand Down
2 changes: 1 addition & 1 deletion examples/binder-api.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def build_binder(repo,
url = "{url}{urlpath}?token={token}".format(**evt, urlpath=opts.urlpath)
else:
url = "{url}?token={token}".format(**evt)
print("Opening %s" % url)
print(f"Opening {url}")
webbrowser.open(url)
break
else:
Expand Down
6 changes: 3 additions & 3 deletions helm-chart/binderhub/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,9 @@ jupyterhub:
else:
args = [
'--ip=0.0.0.0',
'--port=%i' % self.port,
'--NotebookApp.base_url=%s' % self.server.base_url,
'--NotebookApp.token=%s' % self.user_options['token'],
f'--port={self.port}',
f'--NotebookApp.base_url={self.server.base_url}',
f"--NotebookApp.token={self.user_options['token']}",
'--NotebookApp.trust_xheaders=True',
]
if self.default_url:
Expand Down