-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprf_session_data.py
86 lines (74 loc) · 3.37 KB
/
prf_session_data.py
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
import time
import re
import pandas as pd
class Session:
def __init__(self):
self.day = ['월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일']
self.ab_data = ['W-MON', 'W-TUE', 'W-WED', 'W-THU', 'W-FRI', 'W-SAT', 'W-SUN']
def session_data(self, prf_id, dtguidance, prf_start_date, prf_end_date, hol_list):
data = []
prf_hol_list = []
hol_pop_list = []
hol_flag = False
if 'HOL' in dtguidance:
hol_flag = True
# ['토요일 ~ 일요일(13:00,15:00)', 'HOL(11:00,14:00,16:00)']
sp = dtguidance.split(', ')
hol_idx = [i for i in range(len(sp)) if 'HOL' in sp[i]]
if len(hol_idx) == 1:
hol_pop = sp.pop(hol_idx[0]).replace(')', '')
hol_pop_list = re.split('[(,]', hol_pop)
for i in sp:
i = i.replace(')', '')
# ['토요일 ~ 일요일', '13:00', '15:00']
# ['HOL', '11:00', '14:00', '16:00']
sp_time = re.split('[(,]', i)
if '~' not in sp_time[0] and sp_time[0] != 'HOL':
idx = self.day.index(sp_time[0])
self.add_session(sp_time, prf_start_date, prf_end_date, idx, hol_flag, hol_list, prf_hol_list, prf_id,
data)
elif '~' in sp_time[0]:
sp_tilde = sp_time[0].split(' ~ ')
start_idx = self.day.index(sp_tilde[0])
cnt = start_idx
for idx in range(start_idx, start_idx + 7):
self.add_session(sp_time, prf_start_date, prf_end_date, cnt, hol_flag, hol_list, prf_hol_list,
prf_id,
data)
if self.day[cnt] == sp_tilde[1]:
break
cnt += 1
cnt = cnt % 7
start_date = time.strptime(prf_start_date, '%Y-%m-%d')
end_date = time.strptime(prf_end_date, '%Y-%m-%d')
if hol_flag:
for h in hol_list:
if start_date <= time.strptime(h, '%Y-%m-%d') <= end_date:
prf_hol_list.append(h)
for hol_idx in range(1, len(hol_pop_list)):
for holiday in prf_hol_list:
date_time = {
'performance_id': prf_id,
'prf_session_date': holiday,
'prf_session_time': hol_pop_list[hol_idx],
'remaining_seat': 200,
'total_seat': 200
}
data.append(date_time)
return data
def add_session(self, sp_time, prf_start_date, prf_end_date, idx, hol_flag, hol_list, prf_hol_list, prf_id, data):
for j in range(1, len(sp_time)):
day = pd.date_range(prf_start_date, prf_end_date, freq=self.ab_data[idx]).format(
formatter=lambda x: x.strftime('%Y-%m-%d'))
for k in day:
if hol_flag and k in hol_list:
prf_hol_list.append(k)
continue
date_time = {
'performance_id': prf_id,
'prf_session_date': k,
'prf_session_time': sp_time[j],
'remaining_seat': 200,
'total_seat': 200
}
data.append(date_time)