forked from expo/troggle
Bulk_create working for team on a survexblock
This commit is contained in:
@@ -67,12 +67,16 @@ def store_data_issues():
|
|||||||
global dataissues
|
global dataissues
|
||||||
print(f" - Storing {len(dataissues)} Data Issues into database")
|
print(f" - Storing {len(dataissues)} Data Issues into database")
|
||||||
|
|
||||||
|
# make a list of objects, but don't commit to database yet
|
||||||
|
di_list = []
|
||||||
for issue in dataissues:
|
for issue in dataissues:
|
||||||
parser, message, url, sb = issue
|
parser, message, url, sb = issue
|
||||||
if url is None:
|
if url is None:
|
||||||
if sb is not None:
|
if sb is not None:
|
||||||
url = get_offending_filename(sb)
|
url = get_offending_filename(sb)
|
||||||
DataIssue.objects.create(parser=parser, message=message, url=url)
|
di_list.append(DataIssue(parser=parser, message=message, url=url))
|
||||||
|
# Now commit to db
|
||||||
|
DataIssue.objects.bulk_create(di_list)
|
||||||
dataissues = [] # in database now, so empty cache
|
dataissues = [] # in database now, so empty cache
|
||||||
|
|
||||||
def get_offending_filename(path):
|
def get_offending_filename(path):
|
||||||
@@ -105,17 +109,19 @@ def get_people_on_trip(survexblock):
|
|||||||
|
|
||||||
return list(set(people))
|
return list(set(people))
|
||||||
|
|
||||||
trip_person_cache = {} # per survexblock, so robust wrt PUSH/POP begin/end
|
trip_person_record = {} # per survexblock, so robust wrt PUSH/POP begin/end
|
||||||
|
trip_team_cache = {} # per survexblock, so robust wrt PUSH/POP begin/end
|
||||||
def put_person_on_trip(survexblock, personexpedition, tm):
|
def put_person_on_trip(survexblock, personexpedition, tm):
|
||||||
"""Uses a cache to avoid a database query if it doesn't need to.
|
"""Uses a cache to avoid a database query if it doesn't need to.
|
||||||
Only used for a single person"""
|
Only used for a single person"""
|
||||||
global trip_person_cache
|
global trip_person_record
|
||||||
|
global trip_team_cache
|
||||||
|
|
||||||
if (survexblock, personexpedition) in trip_person_cache:
|
if (survexblock, personexpedition) in trip_person_record:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
personrole = SurvexPersonRole.objects.create(
|
personrole = SurvexPersonRole( # does not commit to db yet
|
||||||
survexblock=survexblock,
|
survexblock=survexblock,
|
||||||
person = personexpedition.person,
|
person = personexpedition.person,
|
||||||
personexpedition=personexpedition,
|
personexpedition=personexpedition,
|
||||||
@@ -128,9 +134,33 @@ def put_person_on_trip(survexblock, personexpedition, tm):
|
|||||||
parser="survex", message=message, url=None, sb=(survexblock.survexfile.path)
|
parser="survex", message=message, url=None, sb=(survexblock.survexfile.path)
|
||||||
)
|
)
|
||||||
|
|
||||||
trip_person_cache[(survexblock, personexpedition)] = 1
|
if survexblock not in trip_team_cache:
|
||||||
|
trip_team_cache[survexblock] = []
|
||||||
|
trip_team_cache[survexblock].append(personrole)
|
||||||
|
|
||||||
|
trip_person_record[(survexblock, personexpedition)] = 1
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def confirm_team_on_trip(survexblock):
|
||||||
|
global trip_team_cache
|
||||||
|
|
||||||
|
if survexblock not in trip_team_cache:
|
||||||
|
return
|
||||||
|
# Now commit to db
|
||||||
|
SurvexPersonRole.objects.bulk_create(trip_team_cache[survexblock])
|
||||||
|
trip_team_cache[survexblock] = [] # in database now, so empty cache
|
||||||
|
|
||||||
|
def check_team_cache():
|
||||||
|
global trip_team_cache
|
||||||
|
|
||||||
|
message = f"! *team CACHEFAIL check_team_cache() called "
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
for block in trip_team_cache:
|
||||||
|
message = f"! *team CACHEFAIL, already created {block.survexfile.path} ({block}) "
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
person_pending_cache = {} # per survexblock, so robust wrt PUSH/POP begin/end
|
person_pending_cache = {} # per survexblock, so robust wrt PUSH/POP begin/end
|
||||||
def add_to_pending(survexblock, tm):
|
def add_to_pending(survexblock, tm):
|
||||||
"""Collects team names before we have a date so cannot validate against
|
"""Collects team names before we have a date so cannot validate against
|
||||||
@@ -493,7 +523,7 @@ class LoadingSurvex:
|
|||||||
"""Either *date comes before any *team, in which case there are no prior
|
"""Either *date comes before any *team, in which case there are no prior
|
||||||
PersonRoles attached, or
|
PersonRoles attached, or
|
||||||
*team came before this *date, in which case the names are only in 'pending'"""
|
*team came before this *date, in which case the names are only in 'pending'"""
|
||||||
global trip_person_cache
|
global trip_person_record
|
||||||
|
|
||||||
expo = self.get_expo_from_year(year)
|
expo = self.get_expo_from_year(year)
|
||||||
survexblock.expedition = expo
|
survexblock.expedition = expo
|
||||||
@@ -529,7 +559,7 @@ class LoadingSurvex:
|
|||||||
if len(line) > 10:
|
if len(line) > 10:
|
||||||
message = "! DATE Warning LONG DATE '{}' ({}) {}".format(oline, survexblock, survexblock.survexfile.path)
|
message = "! DATE Warning LONG DATE '{}' ({}) {}".format(oline, survexblock, survexblock.survexfile.path)
|
||||||
print(self.insp+message)
|
print(self.insp+message)
|
||||||
stash_data_issue(parser='survex', message=message, url=None, sb=(survexblock.survexfile.path))
|
stash_data_issue(parser='svxdate', message=message, url=None, sb=(survexblock.survexfile.path))
|
||||||
if line[10] == "-": # ie a range, just look at first date
|
if line[10] == "-": # ie a range, just look at first date
|
||||||
line = line[0:10]
|
line = line[0:10]
|
||||||
if len(line) == 10:
|
if len(line) == 10:
|
||||||
@@ -1412,7 +1442,6 @@ class LoadingSurvex:
|
|||||||
nlegstotal += self.legsnumber
|
nlegstotal += self.legsnumber
|
||||||
|
|
||||||
self.fix_anonymous(survexblock)
|
self.fix_anonymous(survexblock)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
survexblock.parent.save() # django insists on this although it is already saved !?
|
survexblock.parent.save() # django insists on this although it is already saved !?
|
||||||
except:
|
except:
|
||||||
@@ -1423,6 +1452,7 @@ class LoadingSurvex:
|
|||||||
except:
|
except:
|
||||||
print(survexblock, file=sys.stderr)
|
print(survexblock, file=sys.stderr)
|
||||||
raise
|
raise
|
||||||
|
confirm_team_on_trip(survexblock)
|
||||||
# POP state ++++++++++++++
|
# POP state ++++++++++++++
|
||||||
popblock()
|
popblock()
|
||||||
self.inheritteam = self.teaminheritstack.pop()
|
self.inheritteam = self.teaminheritstack.pop()
|
||||||
@@ -1875,6 +1905,7 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
f"\n - {len(unseens)} survex files found which were not included in main tree. ({len(svx_scan.svxfileslist)} in main tree)",
|
f"\n - {len(unseens)} survex files found which were not included in main tree. ({len(svx_scan.svxfileslist)} in main tree)",
|
||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
)
|
)
|
||||||
|
check_team_cache()
|
||||||
print(" -- Now loading the previously-omitted survex files.", file=sys.stderr)
|
print(" -- Now loading the previously-omitted survex files.", file=sys.stderr)
|
||||||
|
|
||||||
with open(Path(settings.SURVEX_DATA, "_unseens.svx"), "w") as u:
|
with open(Path(settings.SURVEX_DATA, "_unseens.svx"), "w") as u:
|
||||||
@@ -1921,6 +1952,9 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
|
|
||||||
flinear.write(f"{omit_scan.depthinclude:2} {indent} *edulcni _unseens\n")
|
flinear.write(f"{omit_scan.depthinclude:2} {indent} *edulcni _unseens\n")
|
||||||
fcollate.write(";*edulcni _unseens.svx\n")
|
fcollate.write(";*edulcni _unseens.svx\n")
|
||||||
|
|
||||||
|
check_team_cache()
|
||||||
|
|
||||||
mem1 = get_process_memory()
|
mem1 = get_process_memory()
|
||||||
flinear.write(f"\n - MEM:{mem1:.2f} MB STOP _unseens.svx OMIT\n")
|
flinear.write(f"\n - MEM:{mem1:.2f} MB STOP _unseens.svx OMIT\n")
|
||||||
flinear.write(f" - MEM:{mem1 - mem0:.3f} MB ADDITIONALLY USED OMIT\n")
|
flinear.write(f" - MEM:{mem1 - mem0:.3f} MB ADDITIONALLY USED OMIT\n")
|
||||||
|
|||||||
Reference in New Issue
Block a user