Ignore:
Timestamp:
Sep 17, 2012, 1:26:01 AM (13 years ago)
Author:
Alex Dehnert <adehnert@…>
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)
Message:

Update finboard-groups-only (ASA-#121)

Note that this doesn't bother to kinit, so it depends on KRB5CCNAME being set
already. Fixing that will come next.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asadb/groups/diffs.py

    r2c9e652 rac9b167  
    2323import settings
    2424import util.emails
    25 import util.mailman
     25import util.mailinglist
    2626
    2727if 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')
    2930else:
    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')
    3133
    3234class DiffCallback(object):
     
    167169
    168170class 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
    169177    def start_run(self, since, now, ):
    170178        self.add = []
     
    174182    def end_run(self, ):
    175183        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, )
    178187            if errors:
    179188                subject = "ERROR: " + subject
    180189            context = {
    181                 'listname': asa_all_groups_list.name,
     190                'listname': listname,
    182191                'add': self.add,
    183192                'delete': self.delete,
     
    191200            ).send()
    192201
     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
    193221    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)
    194224        before_addr = before_fields['officer_email']
    195225        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:
    197232            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)
    207235
    208236    def new_group(self, after, after_fields, ):
    209237        name = after_fields['name']
    210238        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
     243def 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
    213252
    214253
     
    251290    sao_callback.care_about_groups = False
    252291    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    ))
    254297    return callbacks
    255298
Note: See TracChangeset for help on using the changeset viewer.