2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-21 23:01:52 +00:00

check pre exisiting scan files for proposed new wallet

This commit is contained in:
Philip Sargent 2024-08-04 10:39:18 +03:00
parent 3bfb082e83
commit e97d60a1c4

View File

@ -306,20 +306,46 @@ def walletedit(request, path=None):
filesaved = False filesaved = False
actual_saved = [] actual_saved = []
def no_surveyscans(year, next):
"""Detect if a folder of scans exists, even if no wallet Object has been created
"""
id = f"{year}#{next:02d}"
dirpath = Path(settings.SCANS_ROOT, year, id)
if not dirpath.is_dir():
return True
# if the folder exists, but has nothing in it, we treat it as available
if len(os.listdir(dirpath)) == 0:
return True
else:
return False
def get_next_empty(): def get_next_empty():
"""Gets the next most number for a new wallet just after the most recent one in the """Gets the next most number for a new wallet just after the most recent one in the
db. But if it has no date set, then ignore it as it was only just created db. But if it has no date set, then ignore it as it was only just created - is this a race condition?
This assumes we are still in the same year as the most wallet. This assumes we are still in the same year as the most recent wallet.
This just looks at the wallets in the db initially, then
checks the sub folders ofexpofiles/surveyscans/[year]/
""" """
latest = Wallet.objects.filter(walletname__startswith="20",walletdate__isnull=False).latest('walletname') # last VALID wallet latest = Wallet.objects.filter(walletname__startswith="20",walletdate__isnull=False).latest('walletname') # last VALID wallet
# print(f"latest is {latest}") # print(f"==latest wallet number is {latest}")
next = int(latest.walletname[5:]) + 1 next = int(latest.walletname[5:]) + 1
return f"{latest.walletname[:4]}:{next:02d}" year = latest.walletname[:4]
id = f"{year}:{next:02d}"
if no_surveyscans(year, next):
# print(f"==No scanned files found for {year=} # {next=}")
return id
else:
walletname=id.replace(':','#')
# print(f"==making wallet {walletname}")
make_wallet(walletname, date=True)
return get_next_empty() # recursive call
def get_last_wallet(): def get_last_wallet():
last = Wallet.objects.all().order_by('walletyear').last() last = Wallet.objects.all().order_by('walletyear').last()
# print(f"last wallet {last}") # print(f"==last wallet updated {last}")
return last return last
def are_we_next_year(): def are_we_next_year():
@ -397,7 +423,7 @@ def walletedit(request, path=None):
recent_year = recent_name[:4] recent_year = recent_name[:4]
recent_number = recent_name[5:] recent_number = recent_name[5:]
print(f"---identify_most_recent_wallet: {recent_year=} {recent_number=}") # print(f"---identify_most_recent_wallet: {recent_year=} {recent_number=}")
return recent_year, recent_number return recent_year, recent_number
def create_nav_links(wallet): def create_nav_links(wallet):
@ -462,12 +488,13 @@ def walletedit(request, path=None):
"""We need a wallet Object so that the django template stuff can find the files """We need a wallet Object so that the django template stuff can find the files
BUT we must restrict this to logged-in users otherwise spiderbots get at BUT we must restrict this to logged-in users otherwise spiderbots get at
the hidden Submit button and create zillions of the buggers""" the hidden Submit button and create zillions of the buggers"""
# print(f"Making new wallet {walletname}") # print(f"== make_wallet() Making new wallet {walletname}")
try: try:
w, created = Wallet.objects.get_or_create(walletname=walletname) w, created = Wallet.objects.get_or_create(walletname=walletname)
# print(f"--- Wallet string {walletname}, wallet object {w} created new?: {created}") print(f"--- Wallet string {walletname}, wallet object {w} created new?: {created}")
if date: if date:
w.walletdate = datetime.datetime.now() w.walletdate = datetime.datetime.now()
w.save()
if created: if created:
w.fpath = Path(settings.SCANS_ROOT, walletname[0:4], walletname) w.fpath = Path(settings.SCANS_ROOT, walletname[0:4], walletname)
_ = w.year() # sets the walletyear property as a side-effect _ = w.year() # sets the walletyear property as a side-effect