Beispiel #1
0
 def __init__(self, db):
     self.db = db
     
     self.registration_service = Registration(self.db)
Beispiel #2
0
class Initializer(object):
    def __init__(self, db):
        self.db = db
        
        self.registration_service = Registration(self.db)
    
    def get_by_alias(self, kind, alias):
        try:
            session = self.db.session()
            
            return session.query(kind).filter_by(alias=alias).one()
        except NoResultFound:
            return None
    
    def get_groups(self, xml):
        group_xml_list = xml.find('groups group')
        
        # Create default data.
        groups = {
            'root':   Group(name = 'Root',   alias = 'root'),
            'public': Group(name = 'Public', alias = 'public')
        }
        
        # Added any additional groups.
        for group_xml in group_xml_list:
            group = {
                'alias': group_xml.attribute('alias'),
                'name':  group_xml.data()
            }
            
            assert group['alias'] and group['name']
            
            if group['alias'] in groups:
                raise KeyError, 'Group "%s" is duplicated in the initial directory data.' % alias
            
            groups[group['alias']] = Group(**group)
        
        return groups
    
    def get_users(self, xml):
        user_xml_list  = xml.find('users user')
        
        # Create default data.
        users = {}
        
        # Added users.
        for user_xml in user_xml_list:
            user = {
                'alias': user_xml.attribute('alias'),
                'email': None
            }
            
            required_fields = user.keys()
            
            for field in user_xml.children():
                user[field.name()] = field.data()
            
            for key in required_fields:
                assert user[key]
            
            if user['alias'] in users:
                raise KeyError, 'User "%s" is duplicated in the initial directory data.' % alias
            
            users[user['alias']] = self.registration_service.make_user(**user)
        
        return users
    
    def load(self, initial_directory_data_location):
        xml = load_from_file(initial_directory_data_location)
        
        queued_entities = self.get_groups(xml).values() + self.get_users(xml).values()
        
        entities = []
        
        for queued_entity in queued_entities:
            registered_entity = self.get_by_alias(queued_entity.__class__, queued_entity.alias)
            
            if registered_entity: return
            
            entities.append(queued_entity)
        
        self.db.post(*entities)
        
        return entities