summaryrefslogtreecommitdiffstats
path: root/core/views/cave_kataster.py
blob: 48aad7d26410fec35191f13df84ac9fdf7fae6b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import re
from pathlib import Path

import django.forms as forms
from django.http import HttpResponseRedirect

from django.shortcuts import redirect, render

import troggle.settings as settings

from troggle.core.utils import (
    COOKIE_MAX_AGE,
    WriteAndCommitError,
    current_expo,
    get_cookie,
    git_string,
    write_and_commit,
)
from troggle.core.views.caves import get_cave_from_slug

"""Forms to handle renaming files and editing contents when a cave
is 'katastered', ie.e moves from an informal number, such as
1623-2024-BL-10 to 1623-999
"""

def kataster(request, slug):
    """Create the page which analyses how to rename a cave and all the files from the unofficial_number
    identifier, e.g. 1623-2023-mg-03 to the kataster number e.g. 1623-999
    """
    def do_file_finding():
        
        global cavefilename, cave_data, entrance_data, loser_name, loser_data
        
        cavefilename = str(cave) + ".html"
        
        cave_data = Path( "cave_data", cavefilename  )
        if not (settings.CAVEDESCRIPTIONS / cavefilename).is_file: # settings.EXPOWEB / cave_data
            cave_data = "does not exist"

        ent_dir = settings.ENTRANCEDESCRIPTIONS # settings.EXPOWEB / "entrance_data"

        entrance_data = []
        for ent in ent_dir.iterdir():
            if str(ent.name).startswith(str(cave)):
                print(ent.name)
                entrance_data.append("entrance_data/"+ent.name)    

        loser_name = f"caves-{str(cave.areacode)}/{str(cave.unofficial_number)}"
        loser_dir = settings.SURVEX_DATA / loser_name
        loser_data = []
        if (loser_dir).is_dir():
            print(loser_dir)
            for svx in loser_dir.iterdir():
                print(svx)
                loser_data.append(Path(loser_dir , svx).name)    
                


    if cave := get_cave_from_slug(slug.lower()):
        pass
    elif cave := get_cave_from_slug(slug.upper()):
        pass
    else:
        return HttpResponseRedirect("/caves")   

    knum = 9999
    do_file_finding()

    try:
        # this is a python generator idiom.
        # see https://realpython.com/introduction-to-python-generators/
        with open(settings.CAVEDESCRIPTIONS / cavefilename, 'r') as f:
            for line in f: 
                if match := re.search(r'<entranceslug>(.*?)</entranceslug>', line):
                    entrance = match.group(1)
                    print(entrance)
               
    except PermissionError as e:
        msg=f"CANNOT  save this file.\nPERMISSIONS incorrectly set on server for this file {filepath}. Ask a nerd to fix this: {e}"
        print(msg)
        raise
    except Exception as e:
        msg=f"CANNOT  write this file {filepath}. Ask a nerd to fix this: {e}"
        print(msg)

    if request.method == "POST":  # If the form has been submitted...
        form = KatasterForm(request.POST)  # A form bound to the POST data
        if form.is_valid(): 
            clean = form.cleaned_data
            knum = clean['kataster_number']
            print(f" # kataster_number {clean['kataster_number']}")
    else: # GET and fall-through if POST is not valid        
        form = KatasterForm()
        
    return render(
        request,
        "cave_kataster.html",
        {
            "form": form,
            "cave": cave,
            "cave_data": cave_data, "entrance_data": entrance_data,
            "loser_name": loser_name, "loser_data": loser_data,
            "knum": knum,
         }, )    
    
class KatasterForm(forms.Form):
    # areacode = forms.CharField(label='Full name', max_length=4, widget=forms.TextInput(attrs={'tabindex': 1, 'placeholder': '1623'}))
    # official_name = forms.CharField(label='CUCC name', max_length=160,widget=forms.TextInput(attrs={'tabindex': 2, 'placeholder': '2012-ns-07'}))
    kataster_number= forms.IntegerField(label="New kataster no.", widget=forms.TextInput(attrs={'tabindex': 1, 'size':1, 'placeholder': '9999'}))
    
"""
    areacode = models.CharField(max_length=4, blank=True, null=True) # could use models.IntegerChoices
    entrances = models.ManyToManyField("Entrance", through="CaveAndEntrance")
    filename = models.CharField(max_length=200) # if a cave is 'pending' this is not set. Otherwise it is.
    kataster_code = models.CharField(max_length=20, blank=True, null=True)
    kataster_number = models.CharField(max_length=10, blank=True, null=True)
    kataster_status = models.TextField(blank=True, null=True)
    official_name = models.CharField(max_length=160)
    survex_file = models.CharField(max_length=100, blank=True, null=True) # should be a foreign key?
    unofficial_number = models.CharField(max_length=60, blank=True, null=True)
    url = models.CharField(max_length=300, blank=True, null=True, unique = True)

SURVEX_DATA = REPOS_ROOT_PATH / "loser"
EXPOWEB = REPOS_ROOT_PATH / "expoweb"
CAVEDESCRIPTIONS = EXPOWEB / "cave_data"
ENTRANCEDESCRIPTIONS = EXPOWEB / "entrance_data"
    
"""