@@ -21,8 +21,8 @@ class LBConsumersEvents(ObjectEvents):
21
21
22
22
23
23
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
+
26
26
state = StoredState ()
27
27
on = LBConsumersEvents ()
28
28
@@ -31,9 +31,11 @@ def __init__(self, charm, relation_name):
31
31
self .relation_name = relation_name
32
32
self .state .set_default (known_requests = {})
33
33
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
+ ):
37
39
self .framework .observe (event , self ._check_consumers )
38
40
39
41
def _check_consumers (self , event ):
@@ -42,8 +44,7 @@ def _check_consumers(self, event):
42
44
43
45
@cached_property
44
46
def all_requests (self ):
45
- """ A list of all current consumer requests.
46
- """
47
+ """A list of all current consumer requests."""
47
48
if not self .unit .is_leader ():
48
49
# Only the leader can process requests, so avoid mistakes
49
50
# by not even reading the requests if not the leader.
@@ -54,17 +55,15 @@ def all_requests(self):
54
55
local_data = relation .data [self .app ]
55
56
remote_data = relation .data [relation .app ]
56
57
for key , request_sdata in sorted (remote_data .items ()):
57
- if not key .startswith (' request_' ):
58
+ if not key .startswith (" request_" ):
58
59
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 )
64
63
request .relation = relation
65
64
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" )
68
67
if addr :
69
68
request .backends .append (addr )
70
69
requests .append (request )
@@ -73,53 +72,56 @@ def all_requests(self):
73
72
74
73
@property
75
74
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
+ ]
80
81
81
82
@property
82
83
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
84
85
because the relation was removed.
85
86
"""
86
87
current_ids = {request .id for request in self .all_requests }
87
88
unknown_ids = self .state .known_requests .keys () - current_ids
88
89
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
+ ]
91
94
92
95
def send_response (self , request ):
93
- """ Send a specific request's response.
94
- """
96
+ """Send a specific request's response."""
95
97
request .response .received_hash = request .sent_hash
96
- key = ' response_' + request .name
98
+ key = " response_" + request .name
97
99
request .relation .data [self .app ][key ] = request .response .dumps ()
98
100
self .state .known_requests [request .id ] = request .hash
99
101
if not self .new_requests :
100
102
try :
101
103
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" )
104
107
except ImportError :
105
108
pass # not being used in a reactive charm
106
109
107
110
def revoke_response (self , request ):
108
- """ Revoke / remove the response for a given request.
109
- """
111
+ """Revoke / remove the response for a given request."""
110
112
if request .id :
111
113
self .state .known_requests .pop (request .id , None )
112
114
if request .relation :
113
- key = ' response_' + request .name
115
+ key = " response_" + request .name
114
116
request .relation .data .get (self .app , {}).pop (key , None )
115
117
116
118
@property
117
119
def is_changed (self ):
118
120
return bool (self .new_requests or self .removed_requests )
119
121
120
122
def manage_flags (self ):
121
- """ Used to interact with charms.reactive-base charms.
122
- """
123
+ """Used to interact with charms.reactive-base charms."""
123
124
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 )
0 commit comments