-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathviews.py
More file actions
99 lines (83 loc) · 3.29 KB
/
views.py
File metadata and controls
99 lines (83 loc) · 3.29 KB
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
from datetime import datetime, timedelta
import re
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
import oscn
from alerts.models import Alert
@csrf_exempt
def case(request):
if request.method == 'GET':
year = request.GET.get('year', 'NOT PROVIDED')
county = request.GET.get('county', 'NOT PROVIDED')
case_num = request.GET.get('case_num', 'NOT PROVIDED')
try:
case = oscn.request.Case(year=year, county=county, number=case_num)
except Exception as exc:
print(exc)
err_msg = (
f'Unable to find case with the following information: '
f'year {year}, county {county}, case number {case_num}')
return JsonResponse({'error': err_msg})
arraignment_event = find_arraignment_or_return_False(case.events)
if not arraignment_event:
err_msg = (
f'Unable to find arraignment event with the following '
f'year {year}, county {county}, case number {case_num}')
return JsonResponse({'error': err_msg})
arraignment_datetime = parse_datetime_from_oscn_event_string(
arraignment_event
)
return JsonResponse({
'case': {
'type': case.type,
'year': case.year,
'county': case.county,
'number': case.number,
},
'arraignment_datetime': arraignment_datetime
})
return HttpResponse(status=405)
@csrf_exempt
def reminders(request):
case_num = request.POST['case_num']
phone_num = request.POST['phone_num']
arraignment_datetime = datetime.strptime(
request.POST['arraignment_datetime'], "%Y-%m-%dT%H:%M:%S"
)
week_alert_datetime = arraignment_datetime - timedelta(days=7)
day_alert_datetime = arraignment_datetime - timedelta(days=1)
message = {
"status":"201 Created"
}
if week_alert_datetime > datetime.today():
Alert.objects.get_or_create(
when=week_alert_datetime,
what=f'Arraignment for case {case_num} in 1 week at {arraignment_datetime}',
to=phone_num
)
message['week_before_datetime'] = week_alert_datetime
if day_alert_datetime > datetime.today():
Alert.objects.get_or_create(
when=day_alert_datetime,
what=f'Arraignment for case {case_num} in 1 day at {arraignment_datetime}',
to=phone_num
)
message['day_before_datetime'] = day_alert_datetime
return JsonResponse(message, status=201)
else:
return JsonResponse({
"status":"410 Gone", #https://www.codetinkerer.com/2015/12/04/choosing-an-http-status-code.html
"error":f'Arraignment for case {case_num} has already passed'
}, status=410)
def find_arraignment_or_return_False(events):
for event in events:
if "description" in event.keys():
if event['description'] == 'ARRAIGNMENT':
return event
return False
def parse_datetime_from_oscn_event_string(event):
if 'date' in event.keys():
date_str = event['date']
return datetime.strptime(date_str, "%A, %B %d, %Y at %I:%M %p")
return False