Revision 5fdaf331 tools/migrate-users

b/tools/migrate-users
36 36
from lib.migrate import Migration
37 37

  
38 38
from sqlalchemy import Table
39
from sqlalchemy.sql import select
40

  
39 41
from pithos.im.models import User
40 42

  
41 43
import base64
......
61 63
            user.active = 'ACTIVE' if u['active'] else 'SUSPENDED'
62 64
            print '#', user
63 65
            user.save(update_timestamps=False)
66
            
67
            #create user groups
68
            for (owner, group, members) in self.retrieve_groups(u['username']):
69
                self.backend.permissions.group_addmany(owner, group, members)
70
    
64 71
    
65 72
    def retrieve_users(self):
66 73
        s = self.gss_users.select()
......
70 77
            yield user
71 78
            user = rp.fetchone()
72 79
        rp.close()
80
    
81
    def retrieve_groups(self, owner):
82
        gss_group = Table('gss_group', self.metadata, autoload=True)
83
        gss_user = Table('gss_user', self.metadata, autoload=True)
84
        group_user = Table('gss_group_gss_user', self.metadata, autoload=True)
85
        j1 = gss_group.join(gss_user, gss_group.c.owner_id == gss_user.c.id)
86
        j2 = group_user.join(gss_user, group_user.c.members_id == gss_user.c.id)
87
        s = select([gss_group.c.id, gss_group.c.name, gss_user.c.username], from_obj=j1)
88
        s = s.where(gss_user.c.username == owner)
89
        rp = self.conn.execute(s)
90
        gr = rp.fetchone()
91
        while gr:
92
            id, group, owner = gr
93
            s = select([gss_user.c.username], from_obj=j2)
94
            s = s.where(group_user.c.groupsmember_id == id)
95
            rp2 = self.conn.execute(s)
96
            members = rp2.fetchall()
97
            rp2.close()
98
            yield owner, group, (m[0] for m in members)
99
            gr = rp.fetchone()
100
        rp.close()
73 101

  
74 102
if __name__ == "__main__":
75
    db = 'postgresql://gss@127.0.0.1/pithos'
103
    db = ''
76 104
    m = UserMigration(db)
77 105
    m.execute()

Also available in: Unified diff