Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8035 by julian @ 10/26/2008 9:46 PM
This commit is contained in:
substantialnoninfringinguser 2009-05-13 05:13:51 +01:00
parent b503d3d588
commit 302f4a1a0f
2 changed files with 57 additions and 19 deletions

View File

@ -1,15 +1,16 @@
from django.db import models
class SurvexBlock(models.Model):
name = models.CharField(max_length=100)
name = models.CharField(max_length=100, blank=True, null=True)
parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
text = models.TextField()
notes_person = models.ManyToManyField('PersonTrip', related_name="notes")
pics_person = models.ManyToManyField('PersonTrip', related_name="pics")
tape_person = models.ManyToManyField('PersonTrip', related_name="tape")
insts_person = models.ManyToManyField('PersonTrip', related_name="insts")
notes_person = models.ManyToManyField('PersonTrip', related_name="notes", blank=True, null=True)
pics_person = models.ManyToManyField('PersonTrip', related_name="pics", blank=True, null=True)
tape_person = models.ManyToManyField('PersonTrip', related_name="tape", blank=True, null=True)
insts_person = models.ManyToManyField('PersonTrip', related_name="insts", blank=True, null=True)
begin_file = models.CharField(max_length=200)
begin_char = models.IntegerField()
end_file = models.CharField(max_length=200)
end_char = models.IntegerField()
end_file = models.CharField(max_length=200, blank=True, null=True)
end_char = models.IntegerField(blank=True, null=True)
def __unicode__(self):
return unicode(name)
return unicode(self.name)

View File

@ -3,16 +3,25 @@ import expo.models as models
import re
import os
def readFile(filename):
for line in fileIterator(settings.SURVEX_DATA, filename):
print line
re_include_extension = re.compile(r"^\s*\*include\s+([^\s]*).svx$", re.IGNORECASE)
re_include_no_extension = re.compile(r"^\s*\*include\s+([^\s]*)$", re.IGNORECASE)
re_begin = re.compile(r"^\s*\*begin\s+(.*?)\s*$", re.IGNORECASE)
re_end = re.compile(r"^\s*\*end\s+(.*?)\s*$", re.IGNORECASE)
def save(x): #There seems to be an intermitent problem with sqlite and Vista, this should fix it
try:
x.save()
except sqlite3.OperationalError:
print "Error"
time.sleep(1)
save(x)
def fileIterator(directory, filename):
f = open(os.path.join(directory, filename + ".svx"), "rb")
survex_file = os.path.join(directory, filename + ".svx")
f = open(os.path.join(settings.SURVEX_DATA, survex_file), "rb")
char = 0
for line in f.readlines():
line = unicode(line, "latin1")
include_extension = re_include_extension.match(line)
include_no_extension = re_include_no_extension.match(line)
def a(include):
@ -20,12 +29,40 @@ def fileIterator(directory, filename):
print os.path.join(directory, *link[:-1]), link[-1]
return fileIterator(os.path.join(directory, *link[:-1]), link[-1])
if include_extension:
for b in a(include_extension.groups()[0]):
yield b
for sf, c, l in a(include_extension.groups()[0]):
yield sf, c, l
elif include_no_extension:
for b in a(include_no_extension.groups()[0]):
yield b
for sf, c, l in a(include_no_extension.groups()[0]):
yield sf, c, l
else:
yield line
yield survex_file, char, line
char = char + len(line)
readFile("all")
def make_model(name, parent, iter_lines, sf, c, l):
if parent:
m = models.SurvexBlock(name = name, parent = parent, begin_file = sf, begin_char = c, text = l)
else:
m = models.SurvexBlock(name = name, begin_file = sf, begin_char = c, text = l)
save(m)
for survex_file, count, line in iter_lines:
begin = re_begin.match(line.split(";")[0])
end = re_end.match(line.split(";")[0])
if begin:
make_model(begin.groups()[0], m, iter_lines, survex_file, count, line)
elif end:
m.text = m.text + line
m.end_file = survex_file
m.end_char = count
save(m)
assert (end.groups()[0]).lower() == (name).lower()
return None
else:
m.text = m.text + line
m.text = m.text + line
m.end_file = survex_file
m.end_char = count
save(m)
filename = "all"
make_model("", None, fileIterator("", filename), filename, 0, "")