forked from expo/troggle
a4edfca30e
Started scripts for exporting to old expo format. Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8269 by aaron @ 3/12/2009 2:22 PM
68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
import csv
|
|
import settings
|
|
from expo.models import QM, LogbookEntry, Cave
|
|
from datetime import *
|
|
import re
|
|
|
|
#sorry that the below code is ugly. I'll fix it sometime, really! - AC
|
|
|
|
QM.objects.all().delete()
|
|
|
|
def parseCaveQMs(cave,pathToCSV):
|
|
if cave=='stein':
|
|
try:
|
|
steinBr=Cave.objects.get(official_name="Steinbrückenhöhle")
|
|
except Cave.DoesNotExist:
|
|
print "Steinbruckenhoehle is not in the database. Please run parsers.cavetab first."
|
|
return
|
|
elif cave=='hauch':
|
|
try:
|
|
hauchHl=Cave.objects.get(official_name="Hauchhöhle")
|
|
except Cave.DoesNotExist:
|
|
print "Steinbruckenhoehle is not in the database. Please run parsers.cavetab first."
|
|
return
|
|
|
|
qmPath = settings.EXPOWEB+pathToCSV
|
|
qmCSVContents = open(qmPath,'r')
|
|
dialect=csv.Sniffer().sniff(qmCSVContents.read())
|
|
qmCSVContents.seek(0,0)
|
|
qmReader = csv.reader(qmCSVContents,dialect=dialect)
|
|
qmReader.next() # Skip header row
|
|
for line in qmReader:
|
|
try:
|
|
year=int(line[0][1:5])
|
|
#check if placeholder exists for given year, create it if not
|
|
if cave=='stein':
|
|
placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, text="placeholder for QMs in 204", defaults={"date": date(year, 1, 1),"cave":steinBr})
|
|
elif cave=='hauch':
|
|
placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, text="placeholder for QMs in 234", defaults={"date": date(year, 1, 1),"cave":hauchHl})
|
|
if hadToCreate:
|
|
print cave+" placeholder logbook entry for " + str(year) + " added to database"
|
|
QMnum=re.match(r".*?-\d*?-X?(?P<numb>\d*)",line[0]).group("numb")
|
|
newQM = QM()
|
|
newQM.found_by=placeholder
|
|
newQM.number=QMnum
|
|
if line[1]=="Dig":
|
|
newQM.grade="D"
|
|
else:
|
|
newQM.grade=line[1]
|
|
newQM.area=line[2]
|
|
newQM.location_description=line[3]
|
|
|
|
newQM.completion_description=line[4]
|
|
newQM.nearest_station_description=line[5]
|
|
if newQM.completion_description: # Troggle checks if QMs are completed by checking if they have a ticked_off_by trip. In the table, completion is indicated by the presence of a completion discription.
|
|
newQM.ticked_off_by=placeholder
|
|
|
|
newQM.comment=line[6]
|
|
newQM.save()
|
|
print "QM "+str(newQM) + ' added to database\r',
|
|
except KeyError:
|
|
continue
|
|
# except IndexError:
|
|
# print "Index error in " + str(line)
|
|
# continue
|
|
|
|
parseCaveQMs(cave='stein',pathToCSV=r"smkridge/204/qm.csv")
|
|
parseCaveQMs(cave='hauch',pathToCSV=r"smkridge/234/qm.csv")
|