Changeset ac9b167 for asadb/groups/diffs.py
- Timestamp:
- Sep 17, 2012, 1:26:01 AM (13 years ago)
- Branches:
- master, space-access, stable, stage
- Children:
- b42118c
- Parents:
- 2c9e652
- git-author:
- Alex Dehnert <adehnert@…> (09/17/12 01:26:01)
- git-committer:
- Alex Dehnert <adehnert@…> (09/17/12 01:26:01)
- File:
-
- 1 edited
-
asadb/groups/diffs.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
asadb/groups/diffs.py
r2c9e652 rac9b167 23 23 import settings 24 24 import util.emails 25 import util.mail man25 import util.mailinglist 26 26 27 27 if settings.PRODUCTION_DEPLOYMENT: 28 asa_all_groups_list = util.mailman.MailmanList('asa-official') 28 asa_all_groups_list = util.mailinglist.MailmanList('asa-official') 29 finboard_groups_list = util.mailinglist.MoiraList('finboard-groups-only') 29 30 else: 30 asa_all_groups_list = util.mailman.MailmanList('asa-test-mailman') 31 asa_all_groups_list = util.mailinglist.MailmanList('asa-test-mailman') 32 finboard_groups_list = util.mailinglist.MoiraList('asa-test-moira') 31 33 32 34 class DiffCallback(object): … … 167 169 168 170 class UpdateOfficerListCallback(DiffCallback): 171 def __init__(self, listobj, include_pred=None): 172 self.listobj = listobj 173 if not include_pred: 174 include_pred = lambda version, fields: True 175 self.include_pred = include_pred 176 169 177 def start_run(self, since, now, ): 170 178 self.add = [] … … 174 182 def end_run(self, ): 175 183 if self.add or self.delete: 176 errors = asa_all_groups_list.change_members(self.add, self.delete) 177 subject = "asa-official updater" 184 errors = self.listobj.change_members(self.add, self.delete) 185 listname = self.listobj.name 186 subject = "[ASA DB] %s updater" % (listname, ) 178 187 if errors: 179 188 subject = "ERROR: " + subject 180 189 context = { 181 'listname': asa_all_groups_list.name,190 'listname': listname, 182 191 'add': self.add, 183 192 'delete': self.delete, … … 191 200 ).send() 192 201 202 def update_changes(self, change_list, phase_name, name, addr, include, force_note=False, ): 203 """ 204 Given an address and whether to process this item, update a list as appropriate and supply appropriate diagnostic notes. 205 """ 206 207 note = None 208 if addr and include: 209 change_list.append((name, addr, )) 210 if force_note: 211 note = "email address is %s" % (addr, ) 212 elif not include: 213 note = "doesn't pass predicate" 214 elif not addr: 215 note = "address is blank" 216 else: 217 note = "Something weird happened while adding (addr='%s', include=%s)" % (addr, include) 218 if note: 219 self.notes.append("%8s: %s: %s" % (phase_name, name, note, )) 220 193 221 def handle_group(self, before, after, before_fields, after_fields, ): 222 before_include = self.include_pred(before, before_fields) 223 after_include = self.include_pred(after, after_fields) 194 224 before_addr = before_fields['officer_email'] 195 225 after_addr = after_fields['officer_email'] 196 if before_addr != after_addr: 226 227 # check if a change is appropriate 228 effective_before_addr = before_addr if before_include else None 229 effective_after_addr = after_addr if after_include else None 230 231 if effective_before_addr != effective_after_addr: 197 232 name = after_fields['name'] 198 if after_addr: 199 self.add.append((name, after_addr, )) 200 else: 201 self.notes.append("%s: Not adding because address is blank." % (name, )) 202 if before_addr and after_addr: 203 # Don't remove an address unless there's a replacement 204 self.delete.append(before_fields['officer_email']) 205 else: 206 self.notes.append("%s: Not removing '%s' (to add '%s') because at least one is blank." % (name, before_addr, after_addr, )) 233 self.update_changes(self.delete, "Delete", name, before_addr, before_include) 234 self.update_changes(self.add, "Add", name, after_addr, after_include) 207 235 208 236 def new_group(self, after, after_fields, ): 209 237 name = after_fields['name'] 210 238 email = after_fields['officer_email'] 211 self.add.append(email) 212 self.notes.append("%s: New group (email %s)" % (name, email, )) 239 include = self.include_pred(after, after_fields) 240 self.update_changes(self.add, "New", name, email, include, force_note=True) 241 242 243 def funded_pred(funding_slug): 244 classes = groups.models.GroupClass.objects 245 class_pk = classes.get(slug='mit-funded').pk 246 fundings = groups.models.GroupFunding.objects 247 fund_pk = fundings.get(slug=funding_slug).pk 248 print "funded_pred: %s %s" % (class_pk, fund_pk) 249 def pred(version, fields): 250 return fields['group_class'] == class_pk and fields['group_funding'] == fund_pk 251 return pred 213 252 214 253 … … 251 290 sao_callback.care_about_groups = False 252 291 callbacks.append(sao_callback) 253 callbacks.append(UpdateOfficerListCallback()) 292 callbacks.append(UpdateOfficerListCallback(asa_all_groups_list)) 293 callbacks.append(UpdateOfficerListCallback( 294 listobj=finboard_groups_list, 295 include_pred=funded_pred('undergrad'), 296 )) 254 297 return callbacks 255 298
Note: See TracChangeset
for help on using the changeset viewer.