Statistics
| Branch: | Tag: | Revision:

root / tools / migrate-users @ 2f14c43c

History | View | Annotate | Download (2.9 kB)

1
#!/usr/bin/env python
2

    
3
# Copyright 2011 GRNET S.A. All rights reserved.
4
# 
5
# Redistribution and use in source and binary forms, with or
6
# without modification, are permitted provided that the following
7
# conditions are met:
8
# 
9
#   1. Redistributions of source code must retain the above
10
#      copyright notice, this list of conditions and the following
11
#      disclaimer.
12
# 
13
#   2. Redistributions in binary form must reproduce the above
14
#      copyright notice, this list of conditions and the following
15
#      disclaimer in the documentation and/or other materials
16
#      provided with the distribution.
17
# 
18
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
# POSSIBILITY OF SUCH DAMAGE.
30
# 
31
# The views and conclusions contained in the software and
32
# documentation are those of the authors and should not be
33
# interpreted as representing official policies, either expressed
34
# or implied, of GRNET S.A.
35

    
36
from lib.migrate import Migration
37

    
38
from sqlalchemy import Table
39
from pithos.im.models import User
40

    
41
import base64
42

    
43
class UserMigration(Migration):
44
    def __init__(self, db):
45
        Migration.__init__(self, db)
46
        self.gss_users = Table('gss_user', self.metadata, autoload=True)
47
    
48
    def execute(self):
49
        for u in self.retrieve_users():
50
            user = User()
51
            user.pk = u['id']
52
            user.uniq = u['username']
53
            user.realname = u['name']
54
            user.affiliation = u['homeorganization'] if u['homeorganization'] else ''
55
            user.auth_token = base64.b64encode(u['authtoken'])
56
            user.auth_token_created = u['creationdate']
57
            user.auth_token_expires = u['authtokenexpirydate']
58
            user.created = u['creationdate']
59
            user.updated = u['modificationdate']
60
            user.email = u['email']
61
            user.active = 'ACTIVE' if u['active'] else 'SUSPENDED'
62
            print '#', user
63
            user.save(update_timestamps=False)
64
    
65
    def retrieve_users(self):
66
        s = self.gss_users.select()
67
        rp = self.conn.execute(s)
68
        user = rp.fetchone()
69
        while user:
70
            yield user
71
            user = rp.fetchone()
72
        rp.close()
73

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