commit script to copy jumpgate sqlite database to felcat postgres
[htsworkflow.git] / pgmigration
1 #!/usr/bin/python
2 """Migrate from sqlite to postgresql
3 """
4 import logging
5 import os
6 import tempfile
7 from subprocess import check_call, call
8
9 logger = logging.getLogger('pgmigrate')
10
11 if not 'DJANGO_SETTINGS_MODULE' in os.environ:
12     os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings.felcat'
13
14 import django
15 from django.conf import settings
16 from django.core import management
17
18 def main():
19     # needed for django 1.7
20     django.setup()
21
22     kinit()
23     recreate_database()
24     move_app_data('contenttypes')
25     move_app_data('auth')
26     move_app_data('admin')
27
28     move_app_data('eland_config')
29     move_app_data('samples')
30     move_app_data('experiments')
31     move_app_data('bcmagic')
32     move_app_data('inventory')
33     move_app_data('labels')
34
35 def kinit():
36     check_call(['kinit', '-l', '10m', 
37                 '-k', '-t', '/var/htsworkflow/jumpgate.keytab', 
38                 'jumpgate@WOLDLAB.CALTECH.EDU'])
39
40 def recreate_database():
41     dbserver = settings.DATABASES['default']['HOST']
42     dbname = settings.DATABASES['default']['NAME']
43     dbuser = settings.DATABASES['default']['USER']
44     call(['dropdb', '-U', dbuser, '-h', dbserver, dbname])
45     check_call(['createdb', '-U', dbuser, '-h', dbserver, dbname])
46     management.call_command('migrate', noinput=True)
47     #management.call_command('syncdb', '--noinput', '--no-initial-data')
48
49 def move_app_data(appname):
50     cwd = os.getcwd()
51     tempdir = tempfile.mkdtemp(prefix='htsw-migrate-')
52     logger.info('migrate dir: %s', tempdir)
53     os.chdir(tempdir)
54     with tempfile.NamedTemporaryFile(prefix=appname+'-', suffix='.json', dir=tempdir) as f:
55         logger.info('tempfile: %s', f.name)
56         management.call_command('dumpdata', appname, database='fctracker', stdout=f)
57         f.flush()
58         dumpstat = os.stat(f.name)
59         if dumpstat.st_size > 5:
60             management.call_command('loaddata', f.name)
61         f.close()
62     os.chdir(cwd)
63     os.rmdir(tempdir)
64
65 if __name__ == "__main__":
66     logging.basicConfig(level=logging.INFO)
67     main()