source: asadb/space/import_into_db.py

space-accessstablestage
Last change on this file was df88ee9, checked in by Alex Dehnert <adehnert@…>, 13 years ago

Use transaction.commit_on_success for imports

Fixed the following scripts:

  • forms/update_validations.py (15s->1s for 70ish validations)
  • space/import_into_db.py (67s->1s for 75 spaces and 100 assignments)
  • util/sync_moira_authz.py (65s->4s for importing ~50 new people)

util/update_old_previews.py was skipped:

  • it's dead code, I believe --- I think previews are unused
  • preview updating is slow, IIRC; it's dubious we'd get noticeably better runtime on the script, and there may even be utility to the progress updates not doing this transactionally supplies

This closes ASA Trac #59.

  • Property mode set to 100755
File size: 1.6 KB
Line 
1#!/usr/bin/python
2import csv
3import datetime
4import os
5import sys
6
7if __name__ == '__main__':
8    cur_file = os.path.abspath(__file__)
9    django_dir = os.path.abspath(os.path.join(os.path.dirname(cur_file), '..'))
10    sys.path.append(django_dir)
11    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
12
13from django.db import transaction
14
15import groups.models
16import space.models
17
18max_date = datetime.datetime.max
19today = datetime.date.today()
20
21def process_row(line):
22    group_id = int(line['group_id'])
23    if group_id < 0:
24        print "Ignoring missing group: %s: %s" % (line['group'], line, )
25        return
26    the_space, created = space.models.Space.objects.get_or_create(
27        number=line['office_number'],
28        defaults=dict(merged_acl=bool(line['locker_number'])),
29    )
30    group = groups.models.Group.objects.get(id=group_id)
31    try:
32        assignment = space.models.SpaceAssignment.objects.get(group=group, space=the_space, locker_num=line['locker_number'], end__gte=today)
33        assignment.end = max_date
34    except space.models.SpaceAssignment.DoesNotExist:
35        assignment = space.models.SpaceAssignment(
36            group=group,
37            space=the_space,
38            start=today,
39            end=max_date,
40            locker_num=line['locker_number'],
41        )
42    assignment.save()
43
44@transaction.commit_on_success
45def process_spaces(reader):
46    space.models.SpaceAssignment.objects.filter(end=max_date).update(end=today)
47    for line in reader:
48        process_row(line)
49
50if __name__ == '__main__':
51    reader = csv.DictReader(sys.stdin)
52    process_spaces(reader)
Note: See TracBrowser for help on using the repository browser.