@@ -25,8 +25,8 @@ class LBProviderEvents(ObjectEvents):
2525
2626
2727class 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