示例#1
0
    def role(self, role):
        prev_role = self._role
        self._role = GROUP_EDGE_ROLES.index(role)

        # Groups should always "member".
        if not (OBJ_TYPES_IDX[self.member_type] == "User"):
            return

        # If ownership status is unchanged, no notices need to be adjusted.
        if (self._role in OWNER_ROLE_INDICES) == (prev_role in OWNER_ROLE_INDICES):
            return

        recipient = User.get(self.session, pk=self.member_pk).username
        expiring_supergroups = self.group.my_expiring_groups()
        member_name = self.group.name

        if role in ["owner", "np-owner"]:
            # We're creating a new owner, who should find out when this group
            # they now own loses its membership in larger groups.
            for supergroup_name, expiration in expiring_supergroups:
                add_expiration(self.session,
                               expiration,
                               group_name=supergroup_name,
                               member_name=member_name,
                               recipients=[recipient],
                               member_is_user=False)
        else:
            # We're removing an owner, who should no longer find out when this
            # group they no longer own loses its membership in larger groups.
            for supergroup_name, _ in expiring_supergroups:
                cancel_expiration(self.session,
                                  group_name=supergroup_name,
                                  member_name=member_name,
                                  recipients=[recipient])
示例#2
0
    def apply_changes(self, changes):
        # type: (Dict[str, Any]) -> None
        # TODO(cbguder): get around circular dependencies
        from grouper.models.group import Group

        for key, value in iteritems(changes):
            if key == "expiration":
                group_name = self.group.name
                if OBJ_TYPES_IDX[self.member_type] == "User":
                    # If affected member is a user, plan to notify that user.
                    user = User.get(self.session, pk=self.member_pk)
                    assert user
                    member_name = user.username
                    recipients = [member_name]
                    member_is_user = True
                else:
                    # Otherwise, affected member is a group, notify its owners.
                    subgroup = Group.get(self.session, pk=self.member_pk)
                    member_name = subgroup.groupname
                    recipients = subgroup.my_owners_as_strings()
                    member_is_user = False
                if getattr(self, key, None) is not None:
                    # Check for and remove pending expiration notification.
                    cancel_expiration(self.session, group_name, member_name)
                if value:
                    expiration = datetime.strptime(value, "%m/%d/%Y")
                    setattr(self, key, expiration)
                    # Avoid sending notifications for expired edges.
                    if expiration > datetime.utcnow():
                        add_expiration(
                            self.session,
                            expiration,
                            group_name,
                            member_name,
                            recipients=recipients,
                            member_is_user=member_is_user,
                        )
                else:
                    setattr(self, key, None)
            else:
                setattr(self, key, value)
示例#3
0
    def apply_changes(self, changes):
        # type: (Dict[str, Any]) -> None
        # TODO(cbguder): get around circular dependencies
        from grouper.models.group import Group

        for key, value in changes.items():
            if key == "expiration":
                group_name = self.group.name
                if OBJ_TYPES_IDX[self.member_type] == "User":
                    # If affected member is a user, plan to notify that user.
                    user = User.get(self.session, pk=self.member_pk)
                    assert user
                    member_name = user.username
                    recipients = [member_name]
                    member_is_user = True
                else:
                    # Otherwise, affected member is a group, notify its owners.
                    subgroup = Group.get(self.session, pk=self.member_pk)
                    member_name = subgroup.groupname
                    recipients = subgroup.my_owners_as_strings()
                    member_is_user = False
                if getattr(self, key, None) is not None:
                    # Check for and remove pending expiration notification.
                    cancel_expiration(self.session, group_name, member_name)
                if value:
                    expiration = datetime.strptime(value, "%m/%d/%Y")
                    setattr(self, key, expiration)
                    # Avoid sending notifications for expired edges.
                    if expiration > datetime.utcnow():
                        add_expiration(
                            self.session,
                            expiration,
                            group_name,
                            member_name,
                            recipients=recipients,
                            member_is_user=member_is_user,
                        )
                else:
                    setattr(self, key, None)
            else:
                setattr(self, key, value)