<commit_before>from saml2.attribute_resolver import AttributeResolver

class VirtualOrg(object):
    def __init__(self, sp, vorg, log=None):
        self.sp = sp # The parent SP client instance 
        self.config = sp.config
        self.vorg_name = vorg
        if log is None:
            self.log = self.sp.logger
        else:
            self.log = log
        self.vorg_conf = self.config.vo_conf(self.vorg_name)
        
    def _cache_session(self, session_info):
        return True
        
    def _affiliation_members(self):
        """
        Get the member of the Virtual Organization from the metadata, 
        more specifically from AffiliationDescriptor.
        """
        return self.config.metadata.vo_members(self.vorg_name)
    
    def _vo_conf_members(self):
        """
        Get the member of the Virtual Organization from the configuration. 
        """
        
        try:
            return self.vorg_conf["member"]
        except (KeyError, TypeError):
            return []
        
    def members_to_ask(self, subject_id):
        """Find the member of the Virtual Organization that I haven't already 
        spoken too 
        """

        vo_members = self._affiliation_members()
        for member in self._vo_conf_members():
            if member not in vo_members:
                vo_members.append(member)

        # Remove the ones I have cached data from about this subject
        vo_members = [m for m in vo_members if not self.sp.users.cache.active(
                                                                subject_id, m)]
        if self.log:
            self.log.info("VO members (not cached): %s" % vo_members)
        return vo_members
    
    def get_common_identifier(self, subject_id):
        (ava, _) = self.sp.users.get_identity(subject_id)
        if ava == {}:
            return None
            
        ident = self.vorg_conf["common_identifier"]

        try:
            return ava[ident][0]
        except KeyError:
            return None
        
    def do_aggregation(self, subject_id, log=None):
        if log is None:
            log = self.log
            
        if log:
            log.info("** Do VO aggregation **")
            log.info("SubjectID: %s, VO:%s" % (subject_id, self.vorg_name))
        
        to_ask = self.members_to_ask(subject_id)
        if to_ask:
            # Find the NameIDFormat and the SPNameQualifier
            if self.vorg_conf and "nameid_format" in self.vorg_conf:
                name_id_format = self.vorg_conf["nameid_format"]
                sp_name_qualifier = ""
            else:
                sp_name_qualifier = self.vorg_name
                name_id_format = ""
            
            com_identifier = self.get_common_identifier(subject_id)
                
            resolver = AttributeResolver(saml2client=self.sp)
            # extends returns a list of session_infos      
            for session_info in resolver.extend(com_identifier,
                                        self.sp.config.entityid, 
                                        to_ask, 
                                        name_id_format=name_id_format,
                                        sp_name_qualifier=sp_name_qualifier,
                                        log=self.log):
                _ = self._cache_session(session_info)

            if log:
                log.info(
                    ">Issuers: %s" % self.sp.users.issuers_of_info(subject_id))
                log.info(
                    "AVA: %s" % (self.sp.users.get_identity(subject_id),))
            
            return True
        else:
            return False<commit_msg>Carry the 'real' id along to lower functions<commit_after>from saml2.attribute_resolver import AttributeResolver

class VirtualOrg(object):
    def __init__(self, sp, vorg, log=None):
        self.sp = sp # The parent SP client instance 
        self.config = sp.config
        self.vorg_name = vorg
        if log is None:
            self.log = self.sp.logger
        else:
            self.log = log
        self.vorg_conf = self.config.vo_conf(self.vorg_name)
        
    def _cache_session(self, session_info):
        return True
        
    def _affiliation_members(self):
        """
        Get the member of the Virtual Organization from the metadata, 
        more specifically from AffiliationDescriptor.
        """
        return self.config.metadata.vo_members(self.vorg_name)
    
    def _vo_conf_members(self):
        """
        Get the member of the Virtual Organization from the configuration. 
        """
        
        try:
            return self.vorg_conf["member"]
        except (KeyError, TypeError):
            return []
        
    def members_to_ask(self, subject_id):
        """Find the member of the Virtual Organization that I haven't already 
        spoken too 
        """

        vo_members = self._affiliation_members()
        for member in self._vo_conf_members():
            if member not in vo_members:
                vo_members.append(member)

        # Remove the ones I have cached data from about this subject
        vo_members = [m for m in vo_members if not self.sp.users.cache.active(
                                                                subject_id, m)]
        if self.log:
            self.log.info("VO members (not cached): %s" % vo_members)
        return vo_members
    
    def get_common_identifier(self, subject_id):
        (ava, _) = self.sp.users.get_identity(subject_id)
        if ava == {}:
            return None
            
        ident = self.vorg_conf["common_identifier"]

        try:
            return ava[ident][0]
        except KeyError:
            return None
        
    def do_aggregation(self, subject_id, log=None):
        if log is None:
            log = self.log
            
        if log:
            log.info("** Do VO aggregation **")
            log.info("SubjectID: %s, VO:%s" % (subject_id, self.vorg_name))
        
        to_ask = self.members_to_ask(subject_id)
        if to_ask:
            # Find the NameIDFormat and the SPNameQualifier
            if self.vorg_conf and "nameid_format" in self.vorg_conf:
                name_id_format = self.vorg_conf["nameid_format"]
                sp_name_qualifier = ""
            else:
                sp_name_qualifier = self.vorg_name
                name_id_format = ""
            
            com_identifier = self.get_common_identifier(subject_id)
                
            resolver = AttributeResolver(saml2client=self.sp)
            # extends returns a list of session_infos      
            for session_info in resolver.extend(com_identifier,
                                        self.sp.config.entityid, 
                                        to_ask, 
                                        name_id_format=name_id_format,
                                        sp_name_qualifier=sp_name_qualifier,
                                        log=self.log, real_id=subject_id):
                _ = self._cache_session(session_info)

            if log:
                log.info(
                    ">Issuers: %s" % self.sp.users.issuers_of_info(subject_id))
                log.info(
                    "AVA: %s" % (self.sp.users.get_identity(subject_id),))
            
            return True
        else:
            return False
{'fraction_non_alphanumeric': 0.0759972954699121, 'fraction_numerical': 0.0008113590263691683, 'mean_word_length': 1.469449081803005, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 14, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2194072', 'n_tokens_mistral': 1991, 'n_tokens_neox': 1934, 'n_words': 471}