2009-01-15 06:22:54 +00:00
import sys
import os
2009-01-17 23:25:59 +00:00
import urllib
2009-01-15 06:22:54 +00:00
import types
2009-01-15 23:21:55 +00:00
sys . path . append ( ' C: \\ Expo \\ expoweb ' )
from troggle import *
os . environ [ ' DJANGO_SETTINGS_MODULE ' ] = ' troggle.settings '
2009-01-15 06:22:54 +00:00
import troggle . settings as settings
import troggle . expo . models as models
2009-01-18 00:45:56 +00:00
import fileAbstraction
2009-01-15 06:22:54 +00:00
#import settings
#import expo.models as models
import csv
import re
import datetime
2009-01-17 23:25:59 +00:00
def openFileOrWeb ( name ) :
try :
2009-01-18 00:45:56 +00:00
f = open ( os . path . join ( settings . FILES , name ) )
2009-01-17 23:25:59 +00:00
except :
2009-01-18 00:45:56 +00:00
f = urllib . urlopen ( settings . FILES + " download/ " + name )
2009-01-17 23:25:59 +00:00
return f . readlines ( )
surveytab = openFileOrWeb ( " Surveys.csv " )
dialect = csv . Sniffer ( ) . sniff ( reduce ( lambda x , y : x + " \n " + y , surveytab ) )
2009-01-15 06:22:54 +00:00
surveyreader = csv . reader ( surveytab , dialect = dialect )
2009-01-17 23:25:59 +00:00
print surveyreader
2009-01-15 06:22:54 +00:00
headers = surveyreader . next ( )
header = dict ( zip ( headers , range ( len ( headers ) ) ) ) #set up a dictionary where the indexes are header names and the values are column numbers
2009-01-17 23:25:59 +00:00
print header
2009-01-15 06:22:54 +00:00
# test if the expeditions have been added yet
if len ( models . Expedition . objects . all ( ) ) == 0 :
print " There are no expeditions in the database. Please run the logbook parser. "
sys . exit ( )
models . ScannedImage . objects . all ( ) . delete ( )
models . Survey . objects . all ( ) . delete ( )
for survey in surveyreader :
2009-01-17 23:25:59 +00:00
print type ( survey ) , survey
2009-01-15 06:22:54 +00:00
walletNumberLetter = re . match ( r ' (?P<number> \ d*)(?P<letter>[a-zA-Z]*) ' , survey [ header [ ' Survey Number ' ] ] ) #I hate this, but some surveys have a letter eg 2000#34a. This line deals with that.
# print walletNumberLetter.groups()
2009-01-17 23:25:59 +00:00
2009-01-15 06:22:54 +00:00
surveyobj = models . Survey (
2009-01-16 19:50:23 +00:00
expedition = models . Expedition . objects . filter ( year = survey [ header [ ' Year ' ] ] ) [ 0 ] ,
2009-01-15 06:22:54 +00:00
wallet_number = walletNumberLetter . group ( ' number ' ) ,
comments = survey [ header [ ' Comments ' ] ] ,
location = survey [ header [ ' Location ' ] ]
)
surveyobj . wallet_letter = walletNumberLetter . group ( ' letter ' )
if survey [ header [ ' Finished ' ] ] == ' Yes ' :
#try and find the sketch_scan
pass
surveyobj . save ( )
print " added survey " + survey [ header [ ' Year ' ] ] + " # " + surveyobj . wallet_number
2009-01-17 23:25:59 +00:00
2009-01-15 06:22:54 +00:00
# add survey scans
def parseSurveyScans ( year ) :
2009-01-18 00:45:56 +00:00
yearDirList = [ d for d in fileAbstraction . listdir ( year . year ) . split ( " \n " ) if d [ - 1 ] == " / " ]
for surveyFolder in yearDirList :
print surveyFolder
2009-01-15 06:22:54 +00:00
try :
surveyNumber = re . match ( r ' \ d \ d \ d \ d#0*( \ d+) ' , surveyFolder ) . groups ( )
2009-01-18 00:45:56 +00:00
scanList = fileAbstraction . listdir ( yearPath , surveyFolder ) . split ( " \n " )
2009-01-15 06:22:54 +00:00
except AttributeError :
print surveyFolder + " ignored "
continue
for scan in scanList :
try :
2009-01-16 19:50:23 +00:00
scanChopped = re . match ( r ' (?i).*(notes|elev|plan|elevation|extend)( \ d*) \ .(png|jpg|jpeg) ' , scan ) . groups ( )
2009-01-15 06:22:54 +00:00
scanType , scanNumber , scanFormat = scanChopped
except AttributeError :
2009-01-16 19:50:23 +00:00
print " Adding scans: " + scan + " ignored "
2009-01-15 06:22:54 +00:00
continue
2009-01-16 19:50:23 +00:00
if scanType == ' elev ' or scanType == ' extend ' :
scanType = ' elevation '
2009-01-15 06:22:54 +00:00
if scanNumber == ' ' :
scanNumber = 1
if type ( surveyNumber ) == types . TupleType :
surveyNumber = surveyNumber [ 0 ]
try :
2009-01-16 19:50:23 +00:00
survey = models . Survey . objects . get_or_create ( wallet_number = surveyNumber , expedition = year ) [ 0 ]
2009-01-15 06:22:54 +00:00
except models . Survey . MultipleObjectsReturned :
2009-01-16 19:50:23 +00:00
survey = models . Survey . objects . filter ( wallet_number = surveyNumber , expedition = year ) [ 0 ]
2009-01-15 06:22:54 +00:00
scanObj = models . ScannedImage (
2009-01-15 23:21:55 +00:00
file = os . path . join ( year . year , surveyFolder , scan ) ,
2009-01-15 06:22:54 +00:00
contents = scanType ,
number_in_wallet = scanNumber ,
survey = survey
)
2009-01-16 19:50:23 +00:00
#print "Added scanned image at " + str(scanObj)
2009-01-15 06:22:54 +00:00
scanObj . save ( )
for year in models . Expedition . objects . filter ( year__gte = 2000 ) : #expos since 2000, because paths and filenames were nonstandard before then
parseSurveyScans ( year )