Skip to content

Commit aa7228c

Browse files
committed
Add Python Black format check and apply format changes
Bring this repo in line with our standards to use Python Black formatting conventions, and enforce it in the lint checks.
1 parent be92518 commit aa7228c

File tree

10 files changed

+254
-230
lines changed

10 files changed

+254
-230
lines changed

loadbalancer_interface/base.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,40 @@ def __init__(self, charm, relation_name):
1919
# Future-proof against the need to evolve the relation protocol
2020
# by ensuring that we agree on a version number before starting.
2121
# This may or may not be made moot by a future feature in Juju.
22-
for event in (charm.on[relation_name].relation_created,
23-
charm.on.leader_elected,
24-
charm.on.upgrade_charm):
22+
for event in (
23+
charm.on[relation_name].relation_created,
24+
charm.on.leader_elected,
25+
charm.on.upgrade_charm,
26+
):
2527
self.framework.observe(event, self._set_version)
2628

2729
def _set_version(self, event):
2830
if self.unit.is_leader():
29-
if hasattr(event, 'relation'):
31+
if hasattr(event, "relation"):
3032
relations = [event.relation]
3133
else:
3234
relations = self.model.relations.get(self.relation_name, [])
3335
for relation in relations:
34-
relation.data[self.app]['version'] = str(schemas.max_version)
36+
relation.data[self.app]["version"] = str(schemas.max_version)
3537

3638
@cached_property
3739
def relations(self):
3840
relations = self.model.relations.get(self.relation_name, [])
39-
return [relation
40-
for relation in sorted(relations, key=attrgetter('id'))
41-
if self._schema(relation)]
41+
return [
42+
relation
43+
for relation in sorted(relations, key=attrgetter("id"))
44+
if self._schema(relation)
45+
]
4246

4347
def _schema(self, relation=None):
4448
if relation is None:
4549
return schemas.versions[schemas.max_version]
4650
if relation.app not in relation.data:
4751
return None
4852
data = relation.data[relation.app]
49-
if 'version' not in data:
53+
if "version" not in data:
5054
return None
51-
remote_version = int(data['version'])
55+
remote_version = int(data["version"])
5256
return schemas.versions[min((schemas.max_version, remote_version))]
5357

5458
@property

loadbalancer_interface/consumer.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class LBConsumersEvents(ObjectEvents):
2121

2222

2323
class LBConsumers(VersionedInterface):
24-
""" API used to interact with consumers of a loadbalancer provider.
25-
"""
24+
"""API used to interact with consumers of a loadbalancer provider."""
25+
2626
state = StoredState()
2727
on = LBConsumersEvents()
2828

@@ -31,9 +31,11 @@ def __init__(self, charm, relation_name):
3131
self.relation_name = relation_name
3232
self.state.set_default(known_requests={})
3333

34-
for event in (charm.on[relation_name].relation_created,
35-
charm.on[relation_name].relation_joined,
36-
charm.on[relation_name].relation_changed):
34+
for event in (
35+
charm.on[relation_name].relation_created,
36+
charm.on[relation_name].relation_joined,
37+
charm.on[relation_name].relation_changed,
38+
):
3739
self.framework.observe(event, self._check_consumers)
3840

3941
def _check_consumers(self, event):
@@ -42,8 +44,7 @@ def _check_consumers(self, event):
4244

4345
@cached_property
4446
def all_requests(self):
45-
""" A list of all current consumer requests.
46-
"""
47+
"""A list of all current consumer requests."""
4748
if not self.unit.is_leader():
4849
# Only the leader can process requests, so avoid mistakes
4950
# by not even reading the requests if not the leader.
@@ -54,17 +55,15 @@ def all_requests(self):
5455
local_data = relation.data[self.app]
5556
remote_data = relation.data[relation.app]
5657
for key, request_sdata in sorted(remote_data.items()):
57-
if not key.startswith('request_'):
58+
if not key.startswith("request_"):
5859
continue
59-
name = key[len('request_'):]
60-
response_sdata = local_data.get('response_' + name)
61-
request = schema.Request.loads(name,
62-
request_sdata,
63-
response_sdata)
60+
name = key[len("request_") :]
61+
response_sdata = local_data.get("response_" + name)
62+
request = schema.Request.loads(name, request_sdata, response_sdata)
6463
request.relation = relation
6564
if not request.backends:
66-
for unit in sorted(relation.units, key=attrgetter('name')):
67-
addr = relation.data[unit].get('ingress-address')
65+
for unit in sorted(relation.units, key=attrgetter("name")):
66+
addr = relation.data[unit].get("ingress-address")
6867
if addr:
6968
request.backends.append(addr)
7069
requests.append(request)
@@ -73,53 +72,56 @@ def all_requests(self):
7372

7473
@property
7574
def new_requests(self):
76-
""" A list of requests with changes or no response.
77-
"""
78-
return [request for request in self.all_requests
79-
if request.hash != self.state.known_requests[request.id]]
75+
"""A list of requests with changes or no response."""
76+
return [
77+
request
78+
for request in self.all_requests
79+
if request.hash != self.state.known_requests[request.id]
80+
]
8081

8182
@property
8283
def removed_requests(self):
83-
""" A list of requests which have been removed, either explicitly or
84+
"""A list of requests which have been removed, either explicitly or
8485
because the relation was removed.
8586
"""
8687
current_ids = {request.id for request in self.all_requests}
8788
unknown_ids = self.state.known_requests.keys() - current_ids
8889
schema = self._schema()
89-
return [schema.Request._from_id(req_id, self.relations)
90-
for req_id in sorted(unknown_ids)]
90+
return [
91+
schema.Request._from_id(req_id, self.relations)
92+
for req_id in sorted(unknown_ids)
93+
]
9194

9295
def send_response(self, request):
93-
""" Send a specific request's response.
94-
"""
96+
"""Send a specific request's response."""
9597
request.response.received_hash = request.sent_hash
96-
key = 'response_' + request.name
98+
key = "response_" + request.name
9799
request.relation.data[self.app][key] = request.response.dumps()
98100
self.state.known_requests[request.id] = request.hash
99101
if not self.new_requests:
100102
try:
101103
from charms.reactive import clear_flag
102-
prefix = 'endpoint.' + self.relation_name
103-
clear_flag(prefix + '.requests_changed')
104+
105+
prefix = "endpoint." + self.relation_name
106+
clear_flag(prefix + ".requests_changed")
104107
except ImportError:
105108
pass # not being used in a reactive charm
106109

107110
def revoke_response(self, request):
108-
""" Revoke / remove the response for a given request.
109-
"""
111+
"""Revoke / remove the response for a given request."""
110112
if request.id:
111113
self.state.known_requests.pop(request.id, None)
112114
if request.relation:
113-
key = 'response_' + request.name
115+
key = "response_" + request.name
114116
request.relation.data.get(self.app, {}).pop(key, None)
115117

116118
@property
117119
def is_changed(self):
118120
return bool(self.new_requests or self.removed_requests)
119121

120122
def manage_flags(self):
121-
""" Used to interact with charms.reactive-base charms.
122-
"""
123+
"""Used to interact with charms.reactive-base charms."""
123124
from charms.reactive import toggle_flag
124-
prefix = 'endpoint.' + self.relation_name
125-
toggle_flag(prefix + '.requests_changed', self.is_changed)
125+
126+
prefix = "endpoint." + self.relation_name
127+
toggle_flag(prefix + ".requests_changed", self.is_changed)

loadbalancer_interface/provider.py

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class LBProviderEvents(ObjectEvents):
2525

2626

2727
class LBProvider(VersionedInterface):
28-
""" API used to interact with the provider of loadbalancers.
29-
"""
28+
"""API used to interact with the provider of loadbalancers."""
29+
3030
state = StoredState()
3131
on = LBProviderEvents()
3232

@@ -35,14 +35,15 @@ def __init__(self, charm, relation_name):
3535
self.relation_name = relation_name
3636
# just call this to enforce that only one app can be related
3737
self.model.get_relation(relation_name)
38-
self.state.set_default(response_hashes={},
39-
was_available=False)
40-
41-
for event in (charm.on[relation_name].relation_created,
42-
charm.on[relation_name].relation_joined,
43-
charm.on[relation_name].relation_changed,
44-
charm.on[relation_name].relation_departed,
45-
charm.on[relation_name].relation_broken):
38+
self.state.set_default(response_hashes={}, was_available=False)
39+
40+
for event in (
41+
charm.on[relation_name].relation_created,
42+
charm.on[relation_name].relation_joined,
43+
charm.on[relation_name].relation_changed,
44+
charm.on[relation_name].relation_departed,
45+
charm.on[relation_name].relation_broken,
46+
):
4647
self.framework.observe(event, self._check_provider)
4748

4849
def _check_provider(self, event):
@@ -63,19 +64,19 @@ def relation(self):
6364
return self.relations[0] if self.relations else None
6465

6566
def get_request(self, name):
66-
""" Get or create a Load Balancer Request object.
67+
"""Get or create a Load Balancer Request object.
6768
6869
May raise a ModelError if unable to create a request.
6970
"""
7071
if not self.charm.unit.is_leader():
71-
raise ModelError('Unit is not leader')
72+
raise ModelError("Unit is not leader")
7273
if not self.relation:
73-
raise ModelError('Relation not available')
74+
raise ModelError("Relation not available")
7475
schema = self._schema(self.relation)
7576
local_data = self.relation.data[self.app]
7677
remote_data = self.relation.data[self.relation.app]
77-
request_key = 'request_' + name
78-
response_key = 'response_' + name
78+
request_key = "request_" + name
79+
response_key = "response_" + name
7980
if request_key in local_data:
8081
request_sdata = local_data[request_key]
8182
response_sdata = remote_data.get(response_key)
@@ -85,7 +86,7 @@ def get_request(self, name):
8586
return request
8687

8788
def get_response(self, name):
88-
""" Get a specific Load Balancer Response by name.
89+
"""Get a specific Load Balancer Response by name.
8990
9091
This is equivalent to `get_request(name).response`, except that it
9192
will return `None` if the response is not available.
@@ -98,85 +99,85 @@ def get_response(self, name):
9899
return request.response
99100

100101
def send_request(self, request):
101-
""" Send a specific request.
102+
"""Send a specific request.
102103
103104
May raise a ModelError if unable to send the request.
104105
"""
105106
if not self.charm.unit.is_leader():
106-
raise ModelError('Unit is not leader')
107+
raise ModelError("Unit is not leader")
107108
if not self.relation:
108-
raise ModelError('Relation not available')
109+
raise ModelError("Relation not available")
109110
# The sent_hash is used to tell when the provider's response has been
110111
# updated to match our request. We can't used the request hash computed
111112
# on the providing side because it may not match due to default values
112113
# being filled in on that side (e.g., the backend addresses).
113114
request.sent_hash = request.hash
114-
key = 'request_' + request.name
115+
key = "request_" + request.name
115116
self.relation.data[self.app][key] = request.dumps()
116117

117118
def remove_request(self, name):
118-
""" Remove a specific request.
119+
"""Remove a specific request.
119120
120121
May raise a ModelError if unable to remove the request.
121122
"""
122123
if not self.charm.unit.is_leader():
123-
raise ModelError('Unit is not leader')
124+
raise ModelError("Unit is not leader")
124125
if not self.relation:
125126
return
126-
key = 'request_' + name
127+
key = "request_" + name
127128
self.relation.data[self.app].pop(key, None)
128129
self.state.response_hashes.pop(name, None)
129130

130131
@property
131132
def all_requests(self):
132-
""" A list of all requests which have been made.
133-
"""
133+
"""A list of all requests which have been made."""
134134
requests = []
135135
if self.relation:
136136
for key in sorted(self.relation.data[self.app].keys()):
137-
if not key.startswith('request_'):
137+
if not key.startswith("request_"):
138138
continue
139-
requests.append(self.get_request(key[len('request_'):]))
139+
requests.append(self.get_request(key[len("request_") :]))
140140
return requests
141141

142142
@property
143143
def revoked_responses(self):
144-
""" A list of responses which are no longer available.
145-
"""
146-
return [request.response
147-
for request in self.all_requests
148-
if not request.response
149-
and request.name in self.state.response_hashes]
144+
"""A list of responses which are no longer available."""
145+
return [
146+
request.response
147+
for request in self.all_requests
148+
if not request.response and request.name in self.state.response_hashes
149+
]
150150

151151
@cached_property
152152
def all_responses(self):
153-
""" A list of all responses which are available.
154-
"""
155-
return [request.response
156-
for request in self.all_requests
157-
if request.response]
153+
"""A list of all responses which are available."""
154+
return [request.response for request in self.all_requests if request.response]
158155

159156
@cached_property
160157
def complete_responses(self):
161-
""" A list of all responses which are up to date with their associated
158+
"""A list of all responses which are up to date with their associated
162159
request.
163160
"""
164-
return [request.response
165-
for request in self.all_requests
166-
if request.response.received_hash == request.sent_hash]
161+
return [
162+
request.response
163+
for request in self.all_requests
164+
if request.response.received_hash == request.sent_hash
165+
]
167166

168167
@property
169168
def new_responses(self):
170-
""" A list of complete responses which have not yet been acknowledged as
169+
"""A list of complete responses which have not yet been acknowledged as
171170
handled or which have changed.
172171
"""
173172
acked_responses = self.state.response_hashes
174-
return [response
175-
for response in self.complete_responses
176-
if response.hash != acked_responses.get(response.name)]
173+
return [
174+
response
175+
for response in self.complete_responses
176+
if response.hash != acked_responses.get(response.name)
177+
]
177178

178179
def ack_response(self, response):
179-
""" Acknowledge that a given response has been handled.
180+
"""Acknowledge that a given response has been handled.
180181
181182
Can be called on a revoked response as well to remove it
182183
from the revoked_responses list.
@@ -188,8 +189,9 @@ def ack_response(self, response):
188189
if not self.is_changed:
189190
try:
190191
from charms.reactive import clear_flag
191-
prefix = 'endpoint.' + self.relation_name
192-
clear_flag(prefix + '.responses_changed')
192+
193+
prefix = "endpoint." + self.relation_name
194+
clear_flag(prefix + ".responses_changed")
193195
except ImportError:
194196
pass # not being used in a reactive charm
195197

@@ -206,9 +208,9 @@ def can_request(self):
206208
return self.is_available and self.unit.is_leader()
207209

208210
def manage_flags(self):
209-
""" Used to interact with charms.reactive-base charms.
210-
"""
211+
"""Used to interact with charms.reactive-base charms."""
211212
from charms.reactive import toggle_flag
212-
prefix = 'endpoint.' + self.relation_name
213-
toggle_flag(prefix + '.available', self.is_available)
214-
toggle_flag(prefix + '.responses_changed', self.is_changed)
213+
214+
prefix = "endpoint." + self.relation_name
215+
toggle_flag(prefix + ".available", self.is_available)
216+
toggle_flag(prefix + ".responses_changed", self.is_changed)

0 commit comments

Comments
 (0)