You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.6 KiB
80 lines
3.6 KiB
from sodapy import Socrata
|
|
from core.models import CalgaryAddress
|
|
from download.models import PDF, Address
|
|
from django.shortcuts import render, HttpResponse, redirect
|
|
from django.urls import reverse_lazy
|
|
import json
|
|
from .forms import PDFForm
|
|
from django.forms import formset_factory
|
|
|
|
c = Socrata('data.calgary.ca', None)
|
|
SHORT_NAME_MAPPING = {'ALLEY': 'AL', 'AVENUE': 'AV',
|
|
'BAY': 'BA', 'BOULEVARD': 'BV',
|
|
'CAPE': 'CA', 'CENTRE': 'CE', 'CIRCLE': 'CI', 'CLOSE': 'CL', 'COMMON': 'CM', 'COURT': 'CO', 'CRESCENT': 'CR', 'COVE': 'CV',
|
|
'DRIVE': 'DR',
|
|
'GATE': 'GA', 'GARDENS': 'GD', 'GREEN': 'GR', 'GROVE': 'GV',
|
|
'HEATH': 'HE', 'HIGHWAY': 'HI', 'HILL': 'HL', 'HEIGHTS': 'HT',
|
|
'ISLAND': 'IS', 'LANDING': 'LD', 'LINK': 'LI', 'LANE': 'LN',
|
|
'MEWS': 'ME', 'MANOR': 'MR', 'MOUNT': 'MT',
|
|
'PARK': 'PA', 'PATH': 'PH', 'PLACE': 'PL', 'PARADE': 'PR', 'PASSAGE': 'PS', 'POINT': 'PT', 'PARKWAY': 'PY', 'PLAZA': 'PZ',
|
|
'ROAD': 'RD', 'RISE': 'RI', 'ROW': 'RO',
|
|
'SQUARE': 'SQ', 'STREET': 'ST',
|
|
'TERRACE': 'TC', 'TRAIL': 'TR',
|
|
'VILLAS': 'VI', 'VIEW': 'VW',
|
|
'WALKWAY': 'WK', 'WALK': 'WK', 'WAY': 'WY'}
|
|
|
|
def sanitize_address(addr):
|
|
new_addr = addr.upper()
|
|
for k,v in SHORT_NAME_MAPPING.items():
|
|
new_addr = new_addr.replace(' ' + k, ' ' + v)
|
|
return new_addr
|
|
|
|
# TODO: Fix auth: use Permission
|
|
def upload(request):
|
|
if request.user.is_authenticated:
|
|
if request.method == 'POST':
|
|
upload_form = PDFForm(request.POST, request.FILES)
|
|
files = request.FILES.getlist('files')
|
|
if upload_form.is_valid():
|
|
for pdf_file in files:
|
|
print(pdf_file)
|
|
filename = pdf_file.name
|
|
code = filename.split(".")[0].split(" ")[-1]
|
|
city = filename.split(".")[0].split(" ")[-2]
|
|
address = ' '.join(filename.split(" ")[:-1])
|
|
name = 'quote_'+code+'.pdf'
|
|
possible_match = Address.objects.filter(address=address)
|
|
# if address already entered
|
|
if len(possible_match) > 0:
|
|
pdf = PDF.objects.create(
|
|
path=name,
|
|
code=code,
|
|
upload_file=pdf_file,
|
|
address=possible_match[0],
|
|
valid=True
|
|
)
|
|
pdf.save()
|
|
else:
|
|
# Save new address
|
|
addr = Address.objects.create(
|
|
address=address,
|
|
city=city
|
|
)
|
|
# code is currently changable per file
|
|
pdf = PDF.objects.create(
|
|
path=name,
|
|
code=code,
|
|
upload_file=pdf_file,
|
|
address=addr,
|
|
valid=True
|
|
)
|
|
addr.save()
|
|
pdf.save()
|
|
return HttpResponse("File(s) saved") # TODO: "x Files Saved"
|
|
elif request.method == "GET":
|
|
return render(request, 'upload/upload.html', {
|
|
'form': PDFForm()
|
|
})
|
|
else:
|
|
return redirect(reverse_lazy('login'))
|