2009-05-13 05:27:43 +01:00
import sys
import os
2009-05-13 05:34:33 +01:00
import urllib
2009-05-13 05:27:43 +01:00
import types
2009-05-13 05:37:41 +01:00
#sys.path.append('C:\\Expo\\expoweb')
2009-05-13 05:28:57 +01:00
from troggle import *
2009-05-13 05:37:41 +01:00
#os.environ['DJANGO_SETTINGS_MODULE']='troggle.settings'
2009-05-13 05:27:43 +01:00
import troggle . settings as settings
import troggle . expo . models as models
2009-05-13 05:37:41 +01:00
import troggle . expo . fileAbstraction as fileAbstraction
2009-05-13 05:27:43 +01:00
#import settings
#import expo.models as models
import csv
import re
import datetime
2009-05-13 05:38:37 +01:00
import cStringIO
2009-05-13 05:27:43 +01:00
2009-05-13 05:37:41 +01:00
surveytab = fileAbstraction . readFile ( " Surveys.csv " )
dialect = csv . Sniffer ( ) . sniff ( surveytab )
2009-05-13 05:38:37 +01:00
surveyreader = csv . reader ( cStringIO . StringIO ( surveytab ) , dialect = dialect )
2009-05-13 05:34:33 +01:00
print surveyreader
2009-05-13 05:27:43 +01: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-05-13 05:34:33 +01:00
print header
2009-05-13 05:27:43 +01: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-05-13 05:34:33 +01:00
print type ( survey ) , survey
2009-05-13 05:27:43 +01: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-05-13 05:34:33 +01:00
2009-05-13 05:27:43 +01:00
surveyobj = models . Survey (
2009-05-13 05:31:21 +01:00
expedition = models . Expedition . objects . filter ( year = survey [ header [ ' Year ' ] ] ) [ 0 ] ,
2009-05-13 05:27:43 +01: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-05-13 05:34:33 +01:00
2009-05-13 05:27:43 +01:00
# add survey scans
def parseSurveyScans ( year ) :
2009-05-13 05:38:37 +01:00
yearDirList = fileAbstraction . dirsAsList ( year . year )
2009-05-13 05:34:52 +01:00
for surveyFolder in yearDirList :
print surveyFolder
2009-05-13 05:27:43 +01:00
try :
surveyNumber = re . match ( r ' \ d \ d \ d \ d#0*( \ d+) ' , surveyFolder ) . groups ( )
2009-05-13 05:38:37 +01:00
scanList = fileAbstraction . filesAsList ( year . year , surveyFolder )
print " BAR: " , year . year , surveyFolder , scanList
2009-05-13 05:27:43 +01:00
except AttributeError :
print surveyFolder + " ignored "
continue
for scan in scanList :
try :
2009-05-13 05:31:21 +01:00
scanChopped = re . match ( r ' (?i).*(notes|elev|plan|elevation|extend)( \ d*) \ .(png|jpg|jpeg) ' , scan ) . groups ( )
2009-05-13 05:38:37 +01:00
print " BAR: " , scanChopped
2009-05-13 05:27:43 +01:00
scanType , scanNumber , scanFormat = scanChopped
except AttributeError :
2009-05-13 05:31:21 +01:00
print " Adding scans: " + scan + " ignored "
2009-05-13 05:27:43 +01:00
continue
2009-05-13 05:31:21 +01:00
if scanType == ' elev ' or scanType == ' extend ' :
scanType = ' elevation '
2009-05-13 05:27:43 +01:00
if scanNumber == ' ' :
scanNumber = 1
if type ( surveyNumber ) == types . TupleType :
surveyNumber = surveyNumber [ 0 ]
try :
2009-05-13 05:31:21 +01:00
survey = models . Survey . objects . get_or_create ( wallet_number = surveyNumber , expedition = year ) [ 0 ]
2009-05-13 05:27:43 +01:00
except models . Survey . MultipleObjectsReturned :
2009-05-13 05:31:21 +01:00
survey = models . Survey . objects . filter ( wallet_number = surveyNumber , expedition = year ) [ 0 ]
2009-05-13 05:38:37 +01:00
2009-05-13 05:27:43 +01:00
scanObj = models . ScannedImage (
2009-05-13 05:28:57 +01:00
file = os . path . join ( year . year , surveyFolder , scan ) ,
2009-05-13 05:27:43 +01:00
contents = scanType ,
number_in_wallet = scanNumber ,
survey = survey
)
2009-05-13 05:38:37 +01:00
print " Added scanned image at " + str ( scanObj )
2009-05-13 05:27:43 +01: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 )