import os import time import settings os.environ['PYTHONPATH'] = settings.PYTHON_PATH os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from django.core import management from django.db import connection from django.contrib.auth.models import User from django.http import HttpResponse from django.core.urlresolvers import reverse import flatpages.models def reload_db(): if settings.DATABASE_ENGINE == 'sqlite3': try: os.remove(settings.DATABASE_NAME) except OSError: pass else: cursor = connection.cursor() cursor.execute("DROP DATABASE %s" % settings.DATABASE_NAME) cursor.execute("CREATE DATABASE %s" % settings.DATABASE_NAME) cursor.execute("ALTER DATABASE %s CHARACTER SET=utf8" % settings.DATABASE_NAME) cursor.execute("USE %s" % settings.DATABASE_NAME) management.call_command('syncdb', interactive=False) user = User.objects.create_user('expo', 'goatchurch@gmail.com', 'gosser') user.is_staff = True user.is_superuser = True user.save() def make_dirs(): """Make directories that troggle requires""" #should also deal with permissions here. if not os.path.isdir(settings.PHOTOS_ROOT): os.mkdir(settings.PHOTOS_ROOT) def import_cavetab(): import parsers.cavetab print "importing cavetab" parsers.cavetab.LoadCaveTab() def import_people(): import parsers.people parsers.people.LoadPersonsExpos() def import_logbooks(): # The below line was causing errors I didn't understand (it said LOGFILE was a string), and I couldn't be bothered to figure # what was going on so I just catch the error with a try. - AC 21 May try: settings.LOGFILE.write('\nBegun importing logbooks at ' + time.asctime() +'\n'+'-'*60) except: pass import parsers.logbooks parsers.logbooks.LoadLogbooks() def import_survex(): import parsers.survex parsers.survex.LoadAllSurvexBlocks() parsers.survex.LoadPos() def import_QMs(): import parsers.QMs def import_surveys(): import parsers.surveys parsers.surveys.parseSurveys(logfile=settings.LOGFILE) def import_surveyscans(): import parsers.surveys parsers.surveys.LoadListScans() def import_descriptions(): import parsers.descriptions parsers.descriptions.getDescriptions() def parse_descriptions(): import parsers.descriptions parsers.descriptions.parseDescriptions() parsers.descriptions.parseDescriptionsOnCaveObjects() def import_tunnelfiles(): import parsers.surveys parsers.surveys.LoadTunnelFiles() def reset(): """ Wipe the troggle database and import everything from legacy data """ reload_db() make_dirs() pageredirects() import_cavetab() import_people() import_surveyscans() import_survex() import_logbooks() import_QMs() import_tunnelfiles() import_surveys() import_descriptions() parse_descriptions() def resetdesc(): """ Wipe the troggle database and import descriptions """ import core.models for desc in core.models.CaveDescription.objects.all(): desc.delete() import_descriptions() parse_descriptions() def export_cavetab(): from export import tocavetab outfile=file(os.path.join(settings.EXPOWEB, "noinfo", "CAVETAB2.CSV"),'w') tocavetab.writeCaveTab(outfile) outfile.close() def import_auto_logbooks(): import parsers.logbooks import os for pt in core.models.PersonTrip.objects.all(): pt.delete() for lbe in core.models.LogbookEntry.objects.all(): lbe.delete() for expedition in core.models.Expedition.objects.all(): directory = os.path.join(settings.EXPOWEB, "years", expedition.year, "autologbook") for root, dirs, filenames in os.walk(directory): for filename in filenames: print os.path.join(root, filename) parsers.logbooks.parseAutoLogBookEntry(os.path.join(root, filename)) #Temporary function until definative source of data transfered. from django.template.defaultfilters import slugify from django.template import Context, loader def dumplogbooks(): def get_name(pe): if pe.nickname: return pe.nickname else: return pe.person.first_name for lbe in core.models.LogbookEntry.objects.all(): dateStr = lbe.date.strftime("%Y-%m-%d") directory = os.path.join(settings.EXPOWEB, "years", lbe.expedition.year, "autologbook") if not os.path.isdir(directory): os.mkdir(directory) filename = os.path.join(directory, dateStr + "." + slugify(lbe.title)[:50] + ".html") if lbe.cave: print lbe.cave.reference() trip = {"title": lbe.title, "html":lbe.text, "cave": lbe.cave.reference(), "caveOrLocation": "cave"} else: trip = {"title": lbe.title, "html":lbe.text, "location":lbe.place, "caveOrLocation": "location"} pts = [pt for pt in lbe.persontrip_set.all() if pt.personexpedition] persons = [{"name": get_name(pt.personexpedition), "TU": pt.time_underground, "author": pt.is_logbook_entry_author} for pt in pts] f = open(filename, "wb") template = loader.get_template('dataformat/logbookentry.html') context = Context({'trip': trip, 'persons': persons, 'date': dateStr, 'expeditionyear': lbe.expedition.year}) output = template.render(context) f.write(unicode(output).encode( "utf-8" )) f.close() def pageredirects(): for oldURL, newURL in [("indxal.htm", reverse("caveindex"))]: f = flatpages.models.Redirect(originalURL = oldURL, newURL = newURL) f.save() if __name__ == "__main__": import core.models import sys if "desc" in sys.argv: resetdesc() elif "scans" in sys.argv: import_surveyscans() elif "caves" in sys.argv: reload_db() make_dirs() pageredirects() import_cavetab() elif "QMs" in sys.argv: import_QMs() elif "tunnel" in sys.argv: import_tunnelfiles() elif "reset" in sys.argv: reset() elif "survex" in sys.argv: management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex import_survex() elif "logbooks" in sys.argv: management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex import_logbooks() elif "autologbooks" in sys.argv: import_auto_logbooks() elif "dumplogbooks" in sys.argv: dumplogbooks() else: print "Do 'python databaseReset.py reset'"