| 1 | #!/usr/bin/env python
|
|---|
| 2 | #
|
|---|
| 3 | ###########################################
|
|---|
| 4 | #
|
|---|
| 5 | # Script for importing .csv files
|
|---|
| 6 | #
|
|---|
| 7 | # In theory, only the -f option is needed, but for overview's sake, please use the others aswell.
|
|---|
| 8 | # -f = location of the .csv, e.g. '/home/test.csv'
|
|---|
| 9 | # -m = name of the dataset, e.g. 'Walk in park' or 'Trip with boat'
|
|---|
| 10 | # -g = your name
|
|---|
| 11 | # -e = your email address
|
|---|
| 12 | # -a = antenna
|
|---|
| 13 | # -k = network card
|
|---|
| 14 | #
|
|---|
| 15 | # (Run from project root)
|
|---|
| 16 | # ./manage.py import_csv -f <file location> -m <dataset name> -g <username> -e <email> - a <antenna> -k <network card>
|
|---|
| 17 | #
|
|---|
| 18 | # Make sure the variables in this script match the column numbers in your file e.g.;
|
|---|
| 19 | # Lat is read from the first column [0], if the lat in your file is in the 4th column, change
|
|---|
| 20 | # 'lat = row[0]' to 'lat = row[3]'.
|
|---|
| 21 | # Also, take note of the 'replace()' and 'strip()' functions. These should probably be edited aswell.
|
|---|
| 22 | #
|
|---|
| 23 | # Dennis Wagenaar
|
|---|
| 24 | # d.wagenaar@gmail.com
|
|---|
| 25 | #
|
|---|
| 26 | ###########################################
|
|---|
| 27 |
|
|---|
| 28 | from django.core.management import setup_environ
|
|---|
| 29 | from django.core.management.base import BaseCommand
|
|---|
| 30 | from optparse import OptionParser, make_option
|
|---|
| 31 | import settings
|
|---|
| 32 | setup_environ(settings)
|
|---|
| 33 | from gheat.models import *
|
|---|
| 34 | import datetime
|
|---|
| 35 | import csv
|
|---|
| 36 |
|
|---|
| 37 | # Function that imports a csv and processes it.
|
|---|
| 38 | def import_file(location, meetrondje, gebruiker, email, antenne, kaart):
|
|---|
| 39 |
|
|---|
| 40 | # Creating some objects that have to be created only once. Uses 'get_or_create' to rule out duplicates.
|
|---|
| 41 | # Creating user object. Depends on basecommand options.
|
|---|
| 42 | g, created = Gebruiker.objects.get_or_create(naam=gebruiker , email=email)
|
|---|
| 43 | # Creating equipment object. Depends on basecomand options.
|
|---|
| 44 | a, created = Apparatuur.objects.get_or_create(antenne=antenne , kaart=kaart)
|
|---|
| 45 | # Creating dataset object. Depends on baseommand options.
|
|---|
| 46 | mr = MeetRondje.objects.create(datum=datetime.datetime.now() , naam=meetrondje , gebruiker=g , apparatuur=a)
|
|---|
| 47 |
|
|---|
| 48 | # Open the csv.
|
|---|
| 49 | csvfile = csv.reader(open(location, 'rb'), delimiter='\t')
|
|---|
| 50 | # Read every row individually and extract the required data.
|
|---|
| 51 | for row in csvfile:
|
|---|
| 52 | # '.replace' & '.strip' are for replacing and stripping some unwished characters. Edit where necessary.
|
|---|
| 53 | lat = row[0].replace('N ', '')
|
|---|
| 54 | lon = row[1].replace('E ', '')
|
|---|
| 55 | ssid = row[2].strip('( )')
|
|---|
| 56 | bssid = row[4].strip('( )')
|
|---|
| 57 | enc = row[8]
|
|---|
| 58 | if enc[2] == '1': enc = True
|
|---|
| 59 | else: enc = False
|
|---|
| 60 | sig = 100 # Get's fix soon
|
|---|
| 61 | print lat, lon, ssid, bssid, enc, sig
|
|---|
| 62 |
|
|---|
| 63 | # Simple check for bad values
|
|---|
| 64 | if lat.startswith('0.'):
|
|---|
| 65 | print 'Bad lat'
|
|---|
| 66 | continue
|
|---|
| 67 | elif lon.startswith('0.'):
|
|---|
| 68 | print 'Bad lon'
|
|---|
| 69 | continue
|
|---|
| 70 | elif sig not in range(1,101):
|
|---|
| 71 | print 'Bad sig'
|
|---|
| 72 | continue
|
|---|
| 73 | else:
|
|---|
| 74 | print 'No bad values'
|
|---|
| 75 |
|
|---|
| 76 | # Creating accespoint objects. Avoiding duplicates.
|
|---|
| 77 | ap, created = Accespoint.objects.get_or_create(mac=bssid, ssid=ssid, encryptie=enc)
|
|---|
| 78 | # Creating the measurement objects.
|
|---|
| 79 | m = Meting.objects.create(meetrondje=mr, accespoint=ap, latitude=lat, longitude=lon, signaal=sig)
|
|---|
| 80 |
|
|---|
| 81 | # Basecommand with options. This gives the user some control over the execution of this script.
|
|---|
| 82 | class Command(BaseCommand):
|
|---|
| 83 | option_list = BaseCommand.option_list + (
|
|---|
| 84 | make_option('-f', '--location', dest='location', default='location'),
|
|---|
| 85 | make_option('-m', '--meetrondje', dest='meetrondje', default='rondje'),
|
|---|
| 86 | make_option('-g', '--gebruiker', dest='gebruiker', default='username'),
|
|---|
| 87 | make_option('-e', '--email', dest='email', default='foo@bar.org'),
|
|---|
| 88 | make_option('-a', '--antenne', dest='antenne', default='geen'),
|
|---|
| 89 | make_option('-k', '--kaart', dest='kaart', default='interne kaart'),
|
|---|
| 90 | )
|
|---|
| 91 |
|
|---|
| 92 | # The function 'import_file' will be executed with the default option values, or the values specified by the user.
|
|---|
| 93 | def handle(self, *args, **options):
|
|---|
| 94 | import_file(options['location'],options['meetrondje'],options['gebruiker'],options['email'],options['antenne'],options['kaart'])
|
|---|