@@ -23,6 +23,7 @@ class AppSettings(UuidAuditedModel):
2323 # and user just updating other fields meaning the values needs to be copied from prev release
2424 whitelist = ArrayField (models .CharField (max_length = 50 ), default = None )
2525 autoscale = JSONField (default = {}, blank = True )
26+ label = JSONField (default = {}, blank = True )
2627
2728 class Meta :
2829 get_latest_by = 'created'
@@ -133,6 +134,38 @@ def update_autoscale(self, previous_settings):
133134 if changes :
134135 self .summary += ["{} {}" .format (self .owner , changes )]
135136
137+ def update_label (self , previous_settings ):
138+ data = getattr (previous_settings , 'label' , {}).copy ()
139+ new = getattr (self , 'label' , {}).copy ()
140+ if not previous_settings :
141+ return
142+
143+ # if nothing changed copy the settings from previous
144+ if not new and data :
145+ setattr (self , 'label' , data )
146+ elif data != new :
147+ for k , v in new .items ():
148+ if v is not None :
149+ data [k ] = v
150+ else :
151+ if k not in data :
152+ raise UnprocessableEntity ('{} does not exist under {}' .format (k , 'label' )) # noqa
153+ del data [k ]
154+ setattr (self , 'label' , data )
155+
156+ diff = dict_diff (self .label , getattr (previous_settings , 'label' , {}))
157+ added = ', ' .join (list (map (lambda x : 'default' if x == '' else x , [k for k in diff .get ('added' , {})]))) # noqa
158+ added = 'added label ' + added if added else ''
159+ changed = ', ' .join (list (map (lambda x : 'default' if x == '' else x , [k for k in diff .get ('changed' , {})]))) # noqa
160+ changed = 'changed label ' + changed if changed else ''
161+ deleted = ', ' .join (list (map (lambda x : 'default' if x == '' else x , [k for k in diff .get ('deleted' , {})]))) # noqa
162+ deleted = 'deleted label ' + deleted if deleted else ''
163+ changes = ', ' .join (i for i in (added , changed , deleted ) if i )
164+ if changes :
165+ if self .summary :
166+ self .summary += ' and '
167+ self .summary += ["{} {}" .format (self .owner , changes )]
168+
136169 def save (self , * args , ** kwargs ):
137170 self .summary = []
138171 previous_settings = None
@@ -146,6 +179,7 @@ def save(self, *args, **kwargs):
146179 self .update_routable (previous_settings )
147180 self .update_whitelist (previous_settings )
148181 self .update_autoscale (previous_settings )
182+ self .update_label (previous_settings )
149183 except (UnprocessableEntity , NotFound ):
150184 raise
151185 except Exception as e :
0 commit comments