Skip to content

Commit 24da4e5

Browse files
committed
pre-commit: run pyupgrade
1 parent f5c32d0 commit 24da4e5

File tree

17 files changed

+49
-50
lines changed

17 files changed

+49
-50
lines changed

binderhub/binderspawner_mixin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __init__(self, *args, **kwargs):
3535
# classes using traitlets?
3636
# https://stackoverflow.com/questions/9575409/calling-parent-class-init-with-multiple-inheritance-whats-the-right-way
3737
# https://github.com/ipython/traitlets/pull/175
38-
super(BinderSpawnerMixin, self).__init__(*args, **kwargs)
38+
super().__init__(*args, **kwargs)
3939

4040
auth_enabled = Bool(
4141
False,

binderhub/build.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ def submit(self):
436436
for f in w.stream(
437437
self.api.list_namespaced_pod,
438438
self.namespace,
439-
label_selector="name={}".format(self.name),
439+
label_selector=f"name={self.name}",
440440
timeout_seconds=30,
441441
_request_timeout=KUBE_REQUEST_TIMEOUT,
442442
):

binderhub/build_local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(self, message=None):
2626
self.message = message
2727

2828
def __str__(self):
29-
s = "ProcessTerminated: {}".format(self.message)
29+
s = f"ProcessTerminated: {self.message}"
3030
return s
3131

3232

binderhub/builder.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ async def emit(self, data):
149149
else:
150150
serialized_data = data
151151
try:
152-
self.write('data: {}\n\n'.format(serialized_data))
152+
self.write(f'data: {serialized_data}\n\n')
153153
await self.flush()
154154
except StreamClosedError:
155155
app_log.warning("Stream closed while handling %s", self.request.uri)
@@ -196,7 +196,7 @@ def send_error(self, status_code, **kwargs):
196196
'status_code': status_code,
197197
'message': message + '\n',
198198
})
199-
self.write('data: {}\n\n'.format(evt))
199+
self.write(f'data: {evt}\n\n')
200200
self.finish()
201201

202202
def initialize(self):
@@ -255,7 +255,7 @@ async def get(self, provider_prefix, _unescaped_spec):
255255
IOLoop.current().spawn_callback(self.keep_alive)
256256

257257
spec = spec.rstrip("/")
258-
key = '%s:%s' % (provider_prefix, spec)
258+
key = f'{provider_prefix}:{spec}'
259259

260260
# get a provider object that encapsulates the provider and the spec
261261
try:
@@ -268,7 +268,7 @@ async def get(self, provider_prefix, _unescaped_spec):
268268
if provider.is_banned():
269269
await self.emit({
270270
'phase': 'failed',
271-
'message': 'Sorry, {} has been temporarily disabled from launching. Please contact admins for more info!'.format(spec)
271+
'message': f'Sorry, {spec} has been temporarily disabled from launching. Please contact admins for more info!'
272272
})
273273
return
274274

@@ -283,7 +283,7 @@ async def get(self, provider_prefix, _unescaped_spec):
283283
try:
284284
ref = await provider.get_resolved_ref()
285285
except Exception as e:
286-
await self.fail("Error resolving ref for %s: %s" % (key, e))
286+
await self.fail(f"Error resolving ref for {key}: {e}")
287287
return
288288

289289
if ref is None:

binderhub/launcher.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def unique_name_from_repo(self, repo_url):
154154

155155
if len(prefix) > 32:
156156
# if it's long, truncate
157-
prefix = '{}-{}'.format(prefix[:15], prefix[-15:])
157+
prefix = f'{prefix[:15]}-{prefix[-15:]}'
158158

159159
# add a random suffix to avoid collisions for users on the same image
160160
return '{}-{}'.format(prefix, ''.join(random.choices(SUFFIX_CHARS, k=SUFFIX_LENGTH)))
@@ -230,7 +230,7 @@ async def launch(
230230
data.update(extra_args)
231231

232232
# server name to be used in logs
233-
_server_name = " {}".format(server_name) if server_name else ''
233+
_server_name = f" {server_name}" if server_name else ''
234234

235235
# start server
236236
app_log.info(f"Starting server{_server_name} for user {username} with image {image}")
@@ -244,7 +244,7 @@ def _cancel_ready_event(f=None):
244244
ready_event_future.cancel()
245245
try:
246246
await self.api_request(
247-
'users/{}/servers/{}'.format(escaped_username, server_name),
247+
f'users/{escaped_username}/servers/{server_name}',
248248
method='POST',
249249
body=json.dumps(data).encode('utf8'),
250250
)

binderhub/log.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ def _scrub_headers(headers):
5353
else:
5454
# no space, hide the whole thing in case there was a mistake
5555
auth_type = ""
56-
headers["Authorization"] = "{} [secret]".format(auth_type)
56+
headers["Authorization"] = f"{auth_type} [secret]"
5757
if "Cookie" in headers:
5858
c = SimpleCookie(headers["Cookie"])
5959
redacted = []
6060
for name in c.keys():
61-
redacted.append("{}=[secret]".format(name))
61+
redacted.append(f"{name}=[secret]")
6262
headers["Cookie"] = "; ".join(redacted)
6363
return headers
6464

@@ -134,5 +134,5 @@ def log_request(handler):
134134
# to get headers from tornado
135135
location = handler._headers.get("Location")
136136
if location:
137-
ns["location"] = " -> {}".format(_scrub_uri(location))
137+
ns["location"] = f" -> {_scrub_uri(location)}"
138138
access_log.log(log_level, msg.format(**ns))

binderhub/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class LegacyRedirectHandler(BaseHandler):
128128

129129
@authenticated
130130
def get(self, user, repo, urlpath=None):
131-
url = '/v2/gh/{user}/{repo}/master'.format(user=user, repo=repo)
131+
url = f'/v2/gh/{user}/{repo}/master'
132132
if urlpath is not None and urlpath.strip('/'):
133133
url = url_concat(url, dict(urlpath=urlpath))
134134
self.redirect(url)

binderhub/registry.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,12 @@ def _default_password(self):
187187

188188
async def get_image_manifest(self, image, tag):
189189
client = httpclient.AsyncHTTPClient()
190-
url = "{}/v2/{}/manifests/{}".format(self.url, image, tag)
190+
url = f"{self.url}/v2/{image}/manifests/{tag}"
191191
# first, get a token to perform the manifest request
192192
if self.token_url:
193193
auth_req = httpclient.HTTPRequest(
194194
url_concat(self.token_url, {
195-
"scope": "repository:{}:pull".format(image),
195+
"scope": f"repository:{image}:pull",
196196
"service": "container_registry"
197197
}),
198198
auth_username=self.username,
@@ -207,7 +207,7 @@ async def get_image_manifest(self, image, tag):
207207
token = response_body["access_token"]
208208

209209
req = httpclient.HTTPRequest(url,
210-
headers={"Authorization": "Bearer {}".format(token)},
210+
headers={"Authorization": f"Bearer {token}"},
211211
)
212212
else:
213213
# Use basic HTTP auth (htpasswd)

binderhub/repoproviders.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ def tokenize_spec(spec):
3737

3838
spec_parts = spec.split('/', 2) # allow ref to contain "/"
3939
if len(spec_parts) != 3:
40-
msg = 'Spec is not of the form "user/repo/ref", provided: "{spec}".'.format(spec=spec)
40+
msg = f'Spec is not of the form "user/repo/ref", provided: "{spec}".'
4141
if len(spec_parts) == 2 and spec_parts[-1] != 'master':
42-
msg += ' Did you mean "{spec}/master"?'.format(spec=spec)
42+
msg += f' Did you mean "{spec}/master"?'
4343
raise ValueError(msg)
4444

4545
return spec_parts
@@ -230,7 +230,7 @@ class ZenodoProvider(RepoProvider):
230230

231231
async def get_resolved_ref(self):
232232
client = AsyncHTTPClient()
233-
req = HTTPRequest("https://doi.org/{}".format(self.spec),
233+
req = HTTPRequest(f"https://doi.org/{self.spec}",
234234
user_agent="BinderHub")
235235
r = await client.fetch(req)
236236
self.record_id = r.effective_url.rsplit("/", maxsplit=1)[1]
@@ -256,7 +256,7 @@ async def get_resolved_ref_url(self):
256256
return f"https://doi.org/{resolved_spec}"
257257

258258
def get_build_slug(self):
259-
return "zenodo-{}".format(self.record_id)
259+
return f"zenodo-{self.record_id}"
260260

261261

262262
class FigshareProvider(RepoProvider):
@@ -279,7 +279,7 @@ class FigshareProvider(RepoProvider):
279279

280280
async def get_resolved_ref(self):
281281
client = AsyncHTTPClient()
282-
req = HTTPRequest("https://doi.org/{}".format(self.spec),
282+
req = HTTPRequest(f"https://doi.org/{self.spec}",
283283
user_agent="BinderHub")
284284
r = await client.fetch(req)
285285

@@ -288,7 +288,7 @@ async def get_resolved_ref(self):
288288
article_version = match.groups()[5]
289289
if not article_version:
290290
article_version = "1"
291-
self.record_id = "{}.v{}".format(article_id, article_version)
291+
self.record_id = f"{article_id}.v{article_version}"
292292

293293
return self.record_id
294294

@@ -312,7 +312,7 @@ async def get_resolved_ref_url(self):
312312
return f"https://doi.org/{resolved_spec}"
313313

314314
def get_build_slug(self):
315-
return "figshare-{}".format(self.record_id)
315+
return f"figshare-{self.record_id}"
316316

317317

318318
class DataverseProvider(RepoProvider):
@@ -329,7 +329,7 @@ class DataverseProvider(RepoProvider):
329329

330330
async def get_resolved_ref(self):
331331
client = AsyncHTTPClient()
332-
req = HTTPRequest("https://doi.org/{}".format(self.spec),
332+
req = HTTPRequest(f"https://doi.org/{self.spec}",
333333
user_agent="BinderHub")
334334
r = await client.fetch(req)
335335

@@ -406,7 +406,7 @@ def _parse_resource_id(self, spec):
406406
async def get_resolved_ref(self):
407407
client = AsyncHTTPClient()
408408
self.resource_id = self._parse_resource_id(self.spec)
409-
req = HTTPRequest("https://www.hydroshare.org/hsapi/resource/{}/scimeta/elements".format(self.resource_id),
409+
req = HTTPRequest(f"https://www.hydroshare.org/hsapi/resource/{self.resource_id}/scimeta/elements",
410410
user_agent="BinderHub")
411411
r = await client.fetch(req)
412412

@@ -422,7 +422,7 @@ def parse_date(json_body):
422422
# truncate the timestamp
423423
return str(int(epoch))
424424
# date last updated is only good for the day... probably need something finer eventually
425-
self.record_id = "{}.v{}".format(self.resource_id, parse_date(r.body))
425+
self.record_id = f"{self.resource_id}.v{parse_date(r.body)}"
426426
return self.record_id
427427

428428
async def get_resolved_spec(self):
@@ -435,10 +435,10 @@ async def get_resolved_ref_url(self):
435435

436436
def get_repo_url(self):
437437
self.resource_id = self._parse_resource_id(self.spec)
438-
return "https://www.hydroshare.org/resource/{}".format(self.resource_id)
438+
return f"https://www.hydroshare.org/resource/{self.resource_id}"
439439

440440
def get_build_slug(self):
441-
return "hydroshare-{}".format(self.record_id)
441+
return f"hydroshare-{self.record_id}"
442442

443443

444444
class GitRepoProvider(RepoProvider):
@@ -519,7 +519,7 @@ async def get_resolved_ref(self):
519519
stdout, stderr = await proc.communicate()
520520
retcode = await proc.wait()
521521
if retcode:
522-
raise RuntimeError("Unable to run git ls-remote to get the `resolved_ref`: {}".format(stderr.decode()))
522+
raise RuntimeError(f"Unable to run git ls-remote to get the `resolved_ref`: {stderr.decode()}")
523523
if not stdout:
524524
return None
525525
resolved_ref = stdout.decode().split(None, 1)[0]
@@ -607,7 +607,7 @@ def _default_auth(self):
607607
@default('git_credentials')
608608
def _default_git_credentials(self):
609609
if self.private_token:
610-
return r'username=binderhub\npassword={token}'.format(token=self.private_token)
610+
return fr'username=binderhub\npassword={self.private_token}'
611611
return ""
612612

613613
labels = {
@@ -748,7 +748,7 @@ def _default_git_credentials(self):
748748
return r'username={client_id}\npassword={token}'.format(
749749
client_id=self.client_id, token=self.access_token)
750750
else:
751-
return r'username={token}\npassword=x-oauth-basic'.format(token=self.access_token)
751+
return fr'username={self.access_token}\npassword=x-oauth-basic'
752752
return ""
753753

754754
labels = {
@@ -783,7 +783,7 @@ async def github_api_request(self, api_url, etag=None):
783783
headers = {}
784784
# based on: https://developer.github.com/v3/#oauth2-token-sent-in-a-header
785785
if self.access_token:
786-
headers['Authorization'] = "token {token}".format(token=self.access_token)
786+
headers['Authorization'] = f"token {self.access_token}"
787787

788788
if etag:
789789
headers['If-None-Match'] = etag
@@ -905,7 +905,7 @@ async def get_resolved_spec(self):
905905
return f"{self.user}/{self.repo}/{self.resolved_ref}"
906906

907907
def get_build_slug(self):
908-
return '{user}-{repo}'.format(user=self.user, repo=self.repo)
908+
return f'{self.user}-{self.repo}'
909909

910910

911911
class GistRepoProvider(GitHubRepoProvider):

binderhub/tests/conftest.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ def pytest_terminal_summary(terminalreporter, exitstatus):
6969
hosts[host][url] = response
7070
# save records to files
7171
for host, records in hosts.items():
72-
fname = 'http-record.{}.json'.format(host)
73-
print("Recorded http responses for {} in {}".format(host, fname))
72+
fname = f'http-record.{host}.json'
73+
print(f"Recorded http responses for {host} in {fname}")
7474
print("To update the recordings used by the tests you will have"
7575
" to move or merge the newly created recordings with existing"
7676
f" recordings in {here}.")
@@ -83,7 +83,7 @@ def pytest_terminal_summary(terminalreporter, exitstatus):
8383

8484

8585
def load_mock_responses(host):
86-
fname = os.path.join(here, 'http-record.{}.json'.format(host))
86+
fname = os.path.join(here, f'http-record.{host}.json')
8787
if not os.path.exists(fname):
8888
return {}
8989
with open(fname) as f:
@@ -166,7 +166,7 @@ def _binderhub_config():
166166
return cfg
167167

168168

169-
class RemoteBinderHub(object):
169+
class RemoteBinderHub:
170170
"""Mock class for the app fixture when Binder is remote
171171
172172
Has a URL for the binder location and a configured BinderHub instance

0 commit comments

Comments
 (0)