root/trunk/clinicaltrials/diagnostic/views.py @ 370

Revision 370, 4.4 kB (checked in by fabio.montefuscolo, 3 years ago)

provide a view to export fixtures, refs #106

  • Property svn:executable set to *
Line 
1import os
2from datetime import date
3from django.conf import settings
4from django.http import HttpResponse
5from django.contrib.auth.decorators import user_passes_test
6from django.contrib.admin.views.decorators import staff_member_required
7
8from django.core import serializers
9from django.core.exceptions import ImproperlyConfigured
10from django.core.management.commands.dumpdata import sort_dependencies
11from django.db import router, DEFAULT_DB_ALIAS
12from django.db.models import get_apps, get_app
13
14from django.shortcuts import render_to_response
15from django.utils.datastructures import SortedDict
16
17@staff_member_required
18def export_database(request):
19    #output backup
20    stdin,stdout = os.popen2(r'which mysqldump')
21    stdin.close()
22
23    mysqldump_bin = stdout.readline().replace('\n','')
24    stdout.close()
25   
26    cmd = mysqldump_bin+' --opt --compact --skip-add-locks -u %s -p%s %s | bzip2 -c' % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
27    print cmd
28    stdin, stdout = os.popen2(cmd)
29    stdin.close()
30   
31    response = HttpResponse(stdout, mimetype="application/octet-stream")
32    response['Content-Disposition'] = 'attachment; filename=%s' % date.today().__str__()+'_db.sql.bz2'
33    return response
34
35@staff_member_required
36def dump_data(request,appname):
37    app_list = SortedDict()
38   
39    try:
40        app = get_app(appname)
41        app_list[app] = None
42    except ImproperlyConfigured:
43        if appname == 'all':
44            for app in get_apps():
45                app_list[app] = None
46
47    if(len(app_list) > 0):
48        objects = []
49        for model in sort_dependencies(app_list.items()):
50            if not model._meta.proxy and router.allow_syncdb(DEFAULT_DB_ALIAS, model):
51                objects.extend(model._default_manager.using(DEFAULT_DB_ALIAS).all())
52        serializers.get_serializer('json')
53        json = serializers.serialize('json', objects, indent=2,use_natural_keys=True)
54        response = HttpResponse(json, mimetype='application/json');
55        response['Content-Disposition'] = 'attachment; filename=%s_%s_fixture.json' % (date.today().__str__(),appname)
56        return response
57
58    return render_to_response('diagnostic/dumpdata.html')
59
60def smoke_test(request):
61    from datetime import datetime
62    return HttpResponse(datetime.now().strftime('%H:%M:%S'))
63
64@user_passes_test(lambda u: u.is_staff)
65def req_dump(request):
66    template = '''
67    <form action="./" method="POST">
68    <input type="text" name="word" value="mitochondrial">
69    <input type="submit" name="btn1" value="one">
70    <input type="submit" name="btn2" value="two">
71    </form>
72    <table border="1">
73       <tr><th>key</th><th>POST[key]</th></tr>
74    %s
75    </table>
76    <hr>
77    <p>
78      <a href="this_is_a_broken_link">Click to test broken link notification</a>
79    </p>
80    '''
81    rows = []
82    for k in request.POST.keys():
83        rows.append('<tr><th>%s</th><td>%s</td></tr>' % (k, request.POST[k]))
84    return HttpResponse(template % ('\n'.join(rows)))
85
86@user_passes_test(lambda u: u.is_staff)
87def sys_info(request):
88    template = u'''
89    <h1>Site.objects.get_current()</h1>
90    <table>
91       <tr><th>id</th><td>%(site.pk)s</td></tr>
92       <tr><th>domain</th><td>%(site.domain)s</td></tr>
93       <tr><th>name</th><td>%(site.name)s</td></tr>
94    </table>
95    <h1>settings path</h1>
96    <pre>%(settingspath)s</pre>
97    <h1>svn info</h1>
98    <pre>%(svninfo)s</pre>
99    <h1>sys.path</h1>
100    <pre>%(syspath)s</pre>
101    '''
102    import sys
103    import settings
104    from django.contrib.sites.models import Site
105    from subprocess import Popen, PIPE
106    site = Site.objects.get_current()
107    svnout, svnerr = Popen(['svn', 'info', '-r', 'HEAD', settings.PROJECT_PATH], stdout=PIPE).communicate()
108    svnout = svnout.decode('utf-8') if svnout else u''
109    svnerr = svnerr.decode('utf-8') if svnerr else u''
110    return HttpResponse(template % {'site.pk':site.pk,
111                                    'site.domain':site.domain,
112                                    'site.name':site.name,
113                                    'settingspath': settings.PROJECT_PATH,
114                                    'syspath':'\n'.join(sys.path),
115                                    'svninfo':svnout + svnerr})
116
117@user_passes_test(lambda u: u.is_staff)
118def raise_error(request):
119    class FakeError(StandardError):
120        ''' this is just to test error e-mails and logging '''
121    raise FakeError('This is not really an error')
122
123
Note: See TracBrowser for help on using the browser.