~m4v/scratbot-plugins/spaces

« back to all changes in this revision

Viewing changes to scripts/updatedb_0.5to0.6

  • Committer: Elián Hanisch
  • Date: 2009-12-16 16:05:08 UTC
  • Revision ID: lambdae2@gmail.com-20091216160508-y1bwhbq6u0w2oocw
script for update old database

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
# -*- Encoding: UTF-8 -*-
 
3
###
 
4
# Copyright (c) 2008-2009, Elián Hanisch
 
5
#
 
6
# This program is free software: you can redistribute it and/or modify
 
7
# it under the terms of the GNU General Public License as published by
 
8
# the Free Software Foundation, either version 3 of the License, or
 
9
# (at your option) any later version.
 
10
#
 
11
# This program is distributed in the hope that it will be useful,
 
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
# GNU General Public License for more details.
 
15
#
 
16
# You should have received a copy of the GNU General Public License
 
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
###
 
19
# This script is for convert old Pruebot's database to the new format that is
 
20
# used in Factos 0.5. It shouldn't be needed anymore once this is done, but
 
21
# is good reference for using Factos's classes outside the plugin scope.
 
22
###
 
23
 
 
24
 
 
25
import os, sys
 
26
sys.path.append('..')
 
27
import objects
 
28
from databases import *
 
29
 
 
30
oldTblFact = (
 
31
        ('name',            'TEXT'),
 
32
        ('created_by',      'INTEGER'),
 
33
        ('created_at',      'TIMESTAMP'),
 
34
        ('edited_by',       'INTEGER'),
 
35
        ('edited_at',       'TIMESTAMP'),
 
36
        ('flags',           'INTEGER'),
 
37
        ('flags_set_by',    'INTEGER'),
 
38
        ('flags_set_at',    'TIMESTAMP'),
 
39
        ('last_request_by', 'TEXT'),
 
40
        ('last_request_at', 'TIMESTAMP'),
 
41
        ('request_count',   'INTEGER'),
 
42
        ('fact',            'TEXT'),
 
43
        )
 
44
oldTblHist = (
 
45
                ('name',       'TEXT'),
 
46
                ('history_id', 'INTEGER'),
 
47
                ('edited_by',  'INTEGER'),
 
48
                ('edited_at',  'TIMESTAMP'),
 
49
                ('fact',       'TEXT'),
 
50
                )
 
51
 
 
52
Table = objects.Table
 
53
 
 
54
oldTableFact = Table(oldTblFact, 'factos', tableIndex='name')
 
55
oldTableHist = Table(oldTblHist, 'historial', tableIndex='name')
 
56
 
 
57
tableFact = Table(objects.tblFactStruct, 'factos', tableIndex='name')
 
58
tableHist = Table(objects.tblHistStruct, 'historial')
 
59
tableUser = Table(objects.tblUserStruct, 'usuarios', tableIndex='user_id')
 
60
 
 
61
def convertAlias(values):
 
62
    values['data'] = values['data'][7:]
 
63
    values['flags'] = values['flags'] | objects.Fact.f['alias']
 
64
 
 
65
    return values
 
66
 
 
67
 
 
68
if __name__ == '__main__':
 
69
 
 
70
    import optparse
 
71
    parser = optparse.OptionParser(usage='Usage: %prog old_db_file new_db_file')
 
72
    (options, args) = parser.parse_args()
 
73
    if not args or len(args) < 2:
 
74
        parser.print_help()
 
75
        sys.exit(-1)
 
76
 
 
77
    old_filename = args[0]
 
78
    new_filename = args[1]
 
79
 
 
80
    olddb = objects.SqliteDB(old_filename, oldTableFact, oldTableHist, tableUser)
 
81
    newdb = objects.SqliteDB(new_filename, tableFact, tableHist, tableUser)
 
82
 
 
83
    # Facts
 
84
    # change alias to use the alias status flag, instead of the prefixed '<alias>'
 
85
    # also change field 'fact' to 'data'
 
86
    tables = olddb.getTables(all=tableFact.name)
 
87
    for table in tables:
 
88
        print
 
89
        print 'Table: %s' %table.name
 
90
        newtable = Table(tableFact, name=table.name)
 
91
        facts = olddb.get(table=table)
 
92
        for fact in facts:
 
93
            fact = newtable.row(fact)
 
94
            if fact['data'].startswith('<alias>'):
 
95
                fact = convertAlias(fact)
 
96
                print 'Alias: %s : %s' %(fact['name'], fact['data'])
 
97
            print 'fact: %s' %fact['name']
 
98
 
 
99
            newdb.add(fact, table=newtable)
 
100
    
 
101
    # History record
 
102
    # change alias edits to use the alias status flag, instead of the prefixed '<alias>'
 
103
    # also change field 'fact' to 'data'
 
104
    tables = olddb.getTables(all=tableHist.name)
 
105
    for table in tables:
 
106
        print
 
107
        print 'Table: %s' %table.name
 
108
        newtable = Table(tableHist, name=table.name)
 
109
        facts = olddb.get(table=table)
 
110
        for fact in facts:
 
111
            fact_new = (fact[0], fact[1], fact[2], fact[3], 0, fact[4])
 
112
            fact = newtable.row(fact_new)
 
113
            if fact['data'].startswith('<alias>'):
 
114
                fact = convertAlias(fact)
 
115
                print 'Alias: %s : %s' %(fact['name'], fact['data'])
 
116
            print 'fact: %s' %fact['name']
 
117
 
 
118
            newdb.add(fact, table=newtable)
 
119
    
 
120
    #Users
 
121
    # nothing to change, just copy
 
122
    tables = olddb.getTables(all=tableUser.name)
 
123
    for table in tables:
 
124
        print
 
125
        print 'Table: %s' %table.name
 
126
        facts = olddb.get(table=table)
 
127
        for fact in facts:
 
128
            print 'User: %s' %fact['host']
 
129
            newdb.add(fact, table=table)
 
130
        
 
131
    olddb.close()
 
132
    newdb.close()