Skip to content

Commit 25e1b02

Browse files
committed
Use Python 3.6+ f-strings
1 parent e6421ac commit 25e1b02

File tree

25 files changed

+48
-103
lines changed

25 files changed

+48
-103
lines changed

docs/conf.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@
2828

2929
# -- Project information -----------------------------------------------------
3030

31-
project = 'Django REST Registration'
32-
docs_title = '{project} documentation'.format(project=project)
33-
author = 'Andrzej Pragacz'
31+
project = "Django REST Registration"
32+
docs_title = f"{project} documentation"
33+
author = "Andrzej Pragacz"
3434
datetime_now = datetime.datetime.now()
3535
current_year = datetime_now
36-
copyright = '{current_year}, {author}'.format( # noqa: E501 pylint: disable=redefined-builtin
37-
author=author, current_year=current_year)
36+
copyright = f"{current_year}, {author}" # pylint: disable=redefined-builtin
3837
version = rest_registration.__version__
3938
release = version
4039

@@ -213,8 +212,7 @@
213212
}
214213
settings_fields_groups_map = settings_fields.SETTINGS_FIELDS_GROUPS_MAP
215214
for group_name, settings_fields in settings_fields_groups_map.items():
216-
ctx_key = 'detailed_configuration__{group_name}'.format(
217-
group_name=group_name)
215+
ctx_key = f"detailed_configuration__{group_name}"
218216
jinja_contexts[ctx_key] = {
219217
'settings_fields': settings_fields,
220218
'generate_setting_refs': False,

examples/sharedlinks/sharedlinks-backend/links/models.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Link(models.Model):
1414
)
1515

1616
def __str__(self):
17-
return '{self.title} ({self.url})'.format(self=self)
17+
return f"{self.title} ({self.url})"
1818

1919
def get_num_of_positive_votes(self):
2020
return self.votes.filter(positive=True).count()
@@ -53,5 +53,4 @@ def __str__(self):
5353
else:
5454
vote = 'neutral'
5555

56-
return '{vote} vote for {self.link} by {self.voter}'.format(
57-
vote=vote, self=self)
56+
return f"{vote} vote for {self.link} by {self.voter}"

examples/sharedlinks/sharedlinks-backend/sharedlinks/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173

174174

175175
def get_frontend_url(uri):
176-
return 'http://localhost:3000{uri}'.format(uri=uri)
176+
return f"http://localhost:3000{uri}"
177177

178178

179179
REST_REGISTRATION = {

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ disable = [
111111
"line-too-long",
112112
"ungrouped-imports",
113113
"fixme",
114-
"consider-using-f-string",
115114
]
116115

117116
[tool.pylint.reports]

rest_registration/api/views/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ def get_serializer_class(self) -> Type[Serializer]:
2727
(Eg. admins get full serialization, others get basic serialization)
2828
"""
2929
assert self.serializer_class is not None, (
30-
"'%s' should either include a `serializer_class` attribute, "
31-
"or override the `get_serializer_class()` method."
32-
% self.__class__.__name__
30+
f"'{self.__class__.__name__}' should either include a "
31+
f"`serializer_class` attribute, "
32+
f"or override the `get_serializer_class()` method."
3333
)
3434

3535
return self.serializer_class

rest_registration/enums.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ErrorCode(_BaseCheckCodeMixin, Enum):
3232
INVALID_AUTH_BACKENDS_CONFIG = 14
3333

3434
def get_code_id(self) -> str:
35-
return 'E{self.value:03d}'.format(self=self)
35+
return f"E{self.value:03d}"
3636

3737
def get_check_message_class(self) -> Type[CheckMessage]:
3838
return checks.Error
@@ -46,7 +46,7 @@ class WarningCode(_BaseCheckCodeMixin, Enum):
4646
DEPRECATION = 2
4747

4848
def get_code_id(self) -> str:
49-
return 'W{self.value:03d}'.format(self=self)
49+
return f"W{self.value:03d}"
5050

5151
def get_check_message_class(self) -> Type[CheckMessage]:
5252
return checks.Warning

rest_registration/signers/register.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ def _calculate_salt(self, data):
2323
# implies changed salt used when verifying the input data.
2424
verification_flag_field = get_user_setting('VERIFICATION_FLAG_FIELD')
2525
verification_flag = getattr(user, verification_flag_field)
26-
salt = '{self.SALT_BASE}:{verification_flag}'.format(
27-
self=self, verification_flag=verification_flag)
26+
salt = f"{self.SALT_BASE}:{verification_flag}"
2827
else:
2928
salt = self.SALT_BASE
3029
return salt

rest_registration/signers/reset_password.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ def _calculate_salt(self, data):
2222
# was caused by previous password reset and the signature
2323
# is not valid anymore because changed password hash implies
2424
# changed salt used when verifying the input data.
25-
salt = '{self.SALT_BASE}:{user_password_hash}'.format(
26-
self=self, user_password_hash=user_password_hash)
25+
salt = f"{self.SALT_BASE}:{user_password_hash}"
2726
else:
2827
salt = self.SALT_BASE
2928
return salt

rest_registration/utils/checks.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CheckCode:
1717
def get_full_code_id(self) -> str:
1818
app_name = self.get_app_name()
1919
code_id = self.get_code_id()
20-
return '{app_name}.{code_id}'.format(app_name=app_name, code_id=code_id)
20+
return f"{app_name}.{code_id}"
2121

2222
def get_app_name(self) -> str:
2323
raise NotImplementedError()
@@ -81,8 +81,7 @@ def check_fun(
8181
fun()
8282
except Exception as exc: # pylint: disable=broad-except
8383
exc_str = str(exc)
84-
msg = '{error_message}: {exc_str}'.format(
85-
error_message=error_message, exc_str=exc_str)
84+
msg = f"{error_message}: {exc_str}"
8685
return [
8786
message_cls(
8887
msg,

rest_registration/utils/email.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ def parse_template_config(template_config_data: Dict[str, Any]) -> EmailTemplate
9090
)
9191
else:
9292
raise ImproperlyConfigured(
93-
'Could not parse template config data: {template_config_data}'.format( # noqa: E501
94-
template_config_data=template_config_data))
93+
f"Could not parse template config data: {template_config_data}",
94+
)
9595

9696
_validate_template_name_existence(config.subject_template_name)
9797
_validate_template_name_existence(config.text_body_template_name)
@@ -109,6 +109,6 @@ def _validate_template_name_existence(template_name: str) -> None:
109109
get_template(template_name)
110110
except TemplateDoesNotExist:
111111
raise ImproperlyConfigured(
112-
'Template {template_name!r} does not exist; ensure that your'
113-
' Django TEMPLATES setting is configured correctly'.format(
114-
template_name=template_name)) from None
112+
f"Template {template_name!r} does not exist; ensure that your"
113+
f" Django TEMPLATES setting is configured correctly",
114+
) from None

rest_registration/utils/html.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def handle_endtag(self, tag: str) -> None:
4343
last_segment = last_paragraph[-1] if last_paragraph else None
4444
if (self._preserve_urls and
4545
tag_info.name == 'a' and href and href != last_segment):
46-
self._append_segment('({href})'.format(href=href))
46+
self._append_segment(f"({href})")
4747

4848
if tag == 'p':
4949
self._paragraphs.append([])
@@ -58,8 +58,7 @@ def handle_data(self, data: str) -> None:
5858
self._append_segment(data)
5959

6060
def error(self, message: str) -> None:
61-
raise ValueError("HTML parse error: {message}".format(
62-
message=message))
61+
raise ValueError(f"HTML parse error: {message}")
6362

6463
def get_data(self) -> str:
6564
paragraph_texts = []

rest_registration/utils/nested_settings.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ def is_default(self, attr: str) -> bool:
4343

4444
def __getattr__(self, attr: str) -> Any:
4545
if attr not in self.defaults.keys():
46-
raise AttributeError(
47-
"Invalid {self.root_setting_name} setting: '{attr}'".format(
48-
self=self, attr=attr))
46+
raise AttributeError(f"Invalid {self.root_setting_name} setting: '{attr}'")
4947

5048
try:
5149
# Check if present in user settings

rest_registration/utils/users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def get_user_field_obj(name: str) -> 'UserField':
177177

178178

179179
def get_user_setting(name: str) -> Any:
180-
setting_name = 'USER_{name}'.format(name=name)
180+
setting_name = f"USER_{name}"
181181
user_class = get_user_model()
182182
placeholder = object()
183183
value = getattr(user_class, name, placeholder)

rest_registration/utils/verification.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def verify_signer_or_bad_request(signer: URLParamsSigner) -> None:
3636
def build_default_verification_url(signer: URLParamsSigner) -> str:
3737
base_url = signer.get_base_url()
3838
params = urlencode(signer.get_signed_data())
39-
url = '{base_url}?{params}'.format(base_url=base_url, params=params)
39+
url = f"{base_url}?{params}"
4040
if signer.request:
4141
url = signer.request.build_absolute_uri(url)
4242
return url

tests/doctest_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ def _print_operator_test(first, second, op, fail_message_fmt): # noqa: E501 pyl
1414
first=first,
1515
second=second,
1616
operator=op)
17-
print('FAIL:\n{fail_msg}'.format(fail_msg=fail_msg)) # noqa: T201
17+
print(f"FAIL:\n{fail_msg}") # noqa: T201

tests/helpers/api_views.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,15 @@ def _assert_response(
114114
expected_status_code=None):
115115
status_code = response.status_code
116116
if expected_status_code is not None:
117-
msg_format = dedent("""\
117+
msg = dedent(f"""\
118118
Response returned with HTTP code {status_code} but code {expected_status_code} was expected.
119119
120120
Response body was {response.data}.""") # noqa: E501
121121
else:
122-
msg_format = dedent("""\
122+
msg = dedent(f"""\
123123
Response unexpectedly returned with HTTP code {status_code}
124124
125125
Response body was {response.data}.""")
126-
msg = msg_format.format(
127-
status_code=status_code,
128-
expected_status_code=expected_status_code,
129-
response=response,
130-
)
131126
if expected_status_code is not None:
132127
assert status_code == expected_status_code, msg
133128
elif expected_valid_response:

tests/helpers/common.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,14 @@ def create_test_user(**kwargs):
3535

3636

3737
def assert_len_equals(collection, expected_len, msg=None):
38-
std_msg = "{collection} does not have length {expected_len}".format(
39-
collection=collection,
40-
expected_len=expected_len,
41-
)
38+
std_msg = f"{collection} does not have length {expected_len}"
4239
assert len(collection) == expected_len, format_assert_message(msg, std_msg)
4340

4441

4542
def format_assert_message(msg, standard_msg="assertion failed"):
4643
if msg is None:
4744
return standard_msg
48-
return "{standard_msg} : {msg}".format(standard_msg=standard_msg, msg=msg)
45+
return f"{standard_msg} : {msg}"
4946

5047

5148
USER_DEFAULT_FIELD_VALUES = {

tests/helpers/email.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,5 @@ def is_set(self):
4949

5050
def _assert_emails_sent(sent_emails, expected_num):
5151
num_of_sent_emails = len(sent_emails)
52-
msg_format = "Expected {expected_num} emails to be sent, but found {num_of_sent_emails}" # noqa: E501
53-
msg = msg_format.format(
54-
expected_num=expected_num,
55-
num_of_sent_emails=num_of_sent_emails,
56-
)
52+
msg = f"Expected {expected_num} emails to be sent, but found {num_of_sent_emails}"
5753
assert num_of_sent_emails == expected_num, msg

tests/helpers/testcases.py

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,17 @@ def create_test_user(self, **kwargs):
2424
return create_test_user(**kwargs)
2525

2626
def assert_len_equals(self, collection, expected_len, msg=None):
27-
std_msg_format = "{collection} does not have length {expected_len}"
28-
std_msg = std_msg_format.format(
29-
collection=collection,
30-
expected_len=expected_len,
31-
)
27+
std_msg = f"{collection} does not have length {expected_len}"
3228
if len(collection) != expected_len:
3329
self.fail(self._formatMessage(msg, std_msg))
3430

3531
def assert_is_between(self, value, start, end, msg=None):
36-
std_msg_format = "{value} is not in range [{start}, {end})"
37-
std_msg = std_msg_format.format(
38-
value=value,
39-
start=start,
40-
end=end,
41-
)
32+
std_msg = f"{value} is not in range [{start}, {end})"
4233
if not start <= value < end:
4334
self.fail(self._formatMessage(msg, std_msg))
4435

4536
def assert_is_not_between(self, value, start, end, msg=None):
46-
std_msg_format = "{value} is unexpectedly in range [{start}, {end})"
47-
std_msg = std_msg_format.format(
48-
value=value,
49-
start=start,
50-
end=end,
51-
)
37+
std_msg = f"{value} is unexpectedly in range [{start}, {end})"
5238
if start <= value < end:
5339
self.fail(self._formatMessage(msg, std_msg))
5440

@@ -62,11 +48,7 @@ def _assert_mails_sent(self, expected_num):
6248
with self.capture_sent_emails() as sent_emails:
6349
yield sent_emails
6450
num_of_sent_emails = len(sent_emails)
65-
msg_format = "Expected {expected_num} emails to be sent, but found {num_of_sent_emails}" # noqa: E501
66-
msg = msg_format.format(
67-
expected_num=expected_num,
68-
num_of_sent_emails=num_of_sent_emails,
69-
)
51+
msg = f"Expected {expected_num} emails to be sent, but found {num_of_sent_emails}" # noqa: E501
7052
self.assertEqual(num_of_sent_emails, expected_num, msg=msg)
7153

7254
@contextlib.contextmanager
@@ -98,12 +80,7 @@ def _assert_urls_in_text(self, text, expected_num, line_url_pattern):
9880
match_groupdict = match.groupdict()
9981
urls.append(match_groupdict['url'])
10082
num_of_urls = len(urls)
101-
msg_format = "Found {num_of_urls} urls instead of {expected_num} in:\n{text}" # noqa: E501
102-
msg = msg_format.format(
103-
num_of_urls=num_of_urls,
104-
expected_num=expected_num,
105-
text=text,
106-
)
83+
msg = f"Found {num_of_urls} urls instead of {expected_num} in:\n{text}"
10784
self.assertEqual(num_of_urls, expected_num, msg=msg)
10885
return urls
10986

@@ -133,7 +110,7 @@ def setUp(self):
133110
def full_view_name(self):
134111
assert self.APP_NAME
135112
assert self.VIEW_NAME
136-
return '{self.APP_NAME}:{self.VIEW_NAME}'.format(self=self)
113+
return f"{self.APP_NAME}:{self.VIEW_NAME}"
137114

138115
@property
139116
def view_url(self):

tests/helpers/text.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ def _assert_urls_in_text(text, expected_num, line_url_pattern):
2323
match_groupdict = match.groupdict()
2424
urls.append(match_groupdict['url'])
2525
num_of_urls = len(urls)
26-
msg_format = "Found {num_of_urls} urls instead of {expected_num} in:\n{text}" # noqa: E501
27-
msg = msg_format.format(
28-
num_of_urls=num_of_urls,
29-
expected_num=expected_num,
30-
text=text,
31-
)
26+
msg = f"Found {num_of_urls} urls instead of {expected_num} in:\n{text}"
3227
assert num_of_urls == expected_num, msg
3328
return urls

tests/helpers/verification.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def _parse_verification_url(
4747

4848
for key, values in query.items():
4949
if not values:
50-
raise ValueError("no values for '{key}".format(key=key))
50+
raise ValueError(f"no values for {key!r}")
5151
if len(values) > 1:
52-
raise ValueError("multiple values for '{key}'".format(key=key))
52+
raise ValueError(f"multiple values for {key!r}")
5353

5454
verification_data = {key: values[0] for key, values in query.items()}
5555
return parsed_url.path, verification_data

tests/helpers/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def __init__(self, view_name, app_name='rest_registration'):
1111

1212
@property
1313
def full_view_name(self):
14-
return '{self.app_name}:{self.view_name}'.format(self=self)
14+
return f"{self.app_name}:{self.view_name}"
1515

1616
@property
1717
def view_url(self):

tests/unit_tests/api/views/base.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ def assert_response(
3838
self, response, expected_valid_response=True,
3939
expected_status_code=None):
4040
status_code = response.status_code
41-
msg_format = "Response returned with code {status_code}, body {response.data}" # noqa: E501
42-
msg = msg_format.format(
43-
status_code=status_code,
44-
response=response,
45-
)
41+
msg = f"Response returned with code {status_code}, body {response.data}"
4642
if expected_status_code is not None:
4743
self.assertEqual(status_code, expected_status_code, msg=msg)
4844
elif expected_valid_response:
@@ -102,9 +98,9 @@ def _parse_verification_url(self, url, verification_field_names):
10298

10399
for key, values in query.items():
104100
if not values:
105-
raise ValueError("no values for '{key}".format(key=key))
101+
raise ValueError(f"no values for {key!r}")
106102
if len(values) > 1:
107-
raise ValueError("multiple values for '{key}'".format(key=key))
103+
raise ValueError(f"multiple values for {key!r}")
108104

109105
verification_data = {key: values[0] for key, values in query.items()}
110106
return parsed_url.path, verification_data

tests/unit_tests/api/views/register/test_register.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def parse_custom_verification_url(url, verification_field_names):
6262
url_path = parsed_url.path.rstrip('/')
6363
url_segments = url_path.rsplit('/', num_of_fields)
6464
if len(url_segments) != num_of_fields + 1:
65-
raise ValueError("Could not parse {url}".format(url=url))
65+
raise ValueError(f"Could not parse {url!r}")
6666

6767
data_segments = url_segments[1:]
6868
url_path = url_segments[0] + '/'

0 commit comments

Comments
 (0)