-
Notifications
You must be signed in to change notification settings - Fork 0
/
budayaKB_controller.py
executable file
·183 lines (166 loc) · 7.89 KB
/
budayaKB_controller.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
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/env python3
"""
TEMPLATE TP4 DDP1 Semester Gasal 2019/2020
Author:
Ika Alfina ([email protected])
Evi Yulianti ([email protected])
Meganingrum Arista Jiwanggi ([email protected])
Gita Permatasari Sujatmiko ([email protected])
Nama : Gita Permatasari Sujatmiko
Kelas : DDP1-C
Kode Asods : YAS
"""
from budayaKB_model import BudayaItem, BudayaCollection
from flask import Flask, request, render_template
import string
app = Flask(__name__)
app.secret_key ="tp4"
#inisialisasi objek budayaData
databasefilename = ""
budayaData = BudayaCollection()
#merender tampilan default(index.html)
@app.route('/')
def index():
index_page = True
return render_template("index.html", index_page=index_page)
# Bagian ini adalah implementasi fitur Impor Budaya, yaitu:
# - merender tampilan saat menu Impor Budaya diklik
# - melakukan pemrosesan terhadap isian form setelah tombol "Import Data" diklik
# - menampilkan notifikasi bahwa data telah berhasil diimport
@app.route('/imporBudaya', methods=['GET', 'POST'])
def importData():
if request.method == "GET":
return render_template("imporBudaya.html")
elif request.method == "POST":
f = request.files['file']
global databasefilename
databasefilename=f.filename
try:
if databasefilename[-3:] == "csv": # hanya bisa file berformat csv
budayaData.importFromCSV(f.filename)
n_data = len(budayaData.koleksi)
error = False
else: # selain file berformat csv tidak bisa
error = True
except FileNotFoundError: # file di directory beda dengan controller juga tidak bisa
error = True
try:
return render_template("imporBudaya.html", result=n_data, fname=f.filename, error=error)
except UnboundLocalError:
return render_template("imporBudaya.html", fname=f.filename, error=error)
# Bagian ini adalah implementasi fitur Tambah Budaya, yaitu:
# - merender tampilan saat menu Tambah Budaya diklik
# - melakukan pemrosesan terhadap isian form setelah tombol "Tambah Data" diklik
# - jika data belum ada dalam sistem maka akan menampilkan notifikasi bahwa data telah berhasil ditambahkan
# - jika data sudah ada dalam sistem atau input dari user berupa whitespace maka akan menampilkan notif bahwa data tidak berhasil ditambahkan
# - jika data masih kosong, akan menampilkan notifikasi bahwa data masih kosong
@app.route('/tambahBudaya', methods=['GET', 'POST'])
def tambahBudaya():
if request.method == "GET":
return render_template("tambahBudaya.html")
elif request.method == "POST":
nama, tipe, prov, url = request.form['nama'], request.form['tipe'], request.form['prov'], request.form['url']
nama, tipe, prov = nama.strip().title(), tipe.strip().title(), prov.strip().title()
if nama not in budayaData.koleksi and nama not in string.whitespace and tipe not in string.whitespace and prov not in string.whitespace:
budayaData.tambah(nama, tipe, prov, url)
added = True
elif nama in string.whitespace or tipe in string.whitespace or prov in string.whitespace:
added = "whitespace detected"
else:
added = False
n_data = len(budayaData.koleksi)
try:
budayaData.exportToCSV(databasefilename)
except FileNotFoundError:
pass
return render_template("tambahBudaya.html", result=n_data, namaBudaya=nama, added=added)
# Bagian ini adalah implementasi fitur Ubah Budaya, yaitu:
# - merender tampilan saat menu Ubah Budaya diklik
# - melakukan pemrosesan terhadap isian form setelah tombol "Ubah Data" diklik
# - jika data ada dalam sistem maka akan menampilkan notifikasi bahwa data telah berhasil diubah
# - jika data tidak ada dalam sistem maka akan menampilkan notif bahwa data tidak berhasil diubah
# - jika data masih kosong, akan menampilkan notifikasi bahwa data masih kosong
@app.route('/ubahBudaya', methods=['GET', 'POST'])
def ubahBudaya():
if request.method == "GET":
return render_template("ubahBudaya.html")
elif request.method == "POST":
nama, tipe, prov, url = request.form['nama'], request.form['tipe'], request.form['prov'], request.form['url']
nama, tipe, prov = nama.strip().title(), tipe.strip().title(), prov.strip().title()
changed = budayaData.ubah(nama, tipe, prov, url)
n_data = len(budayaData.koleksi)
try:
budayaData.exportToCSV(databasefilename)
except FileNotFoundError:
pass
return render_template("ubahBudaya.html", result=n_data, namaBudaya=nama, changed=changed)
# Bagian ini adalah implementasi fitur Hapus Budaya, yaitu:
# - merender tampilan saat menu Hapus Budaya diklik
# - melakukan pemrosesan terhadap isian form setelah tombol "Hapus Data" diklik
# - jika data ada salam sistem maka akan menampilkan notifikasi bahwa data telah berhasil dihapus
# - jika data tidak ada dalam sistem maka akan menampilkan notif bahwa data tidak berhasil dihapus
# - jika data masih kosong, akan menampilkan notifikasi bahwa data masih kosong
@app.route('/hapusBudaya', methods=['GET', 'POST'])
def hapusBudaya():
if request.method == "GET":
return render_template("hapusBudaya.html")
elif request.method == "POST":
nama = request.form['nama']
nama = nama.strip().title()
hapus = budayaData.hapus(nama)
n_data = len(budayaData.koleksi)
try:
budayaData.exportToCSV(databasefilename)
except FileNotFoundError:
pass
return render_template("hapusBudaya.html", result=n_data, hapus=hapus, namaBudaya=nama)
# Bagian ini adalah implementasi fitur Cari Budaya, yaitu:
# - merender tampilan saat menu Cari Budaya diklik
# - melakukan pemrosesan terhadap isian form dengan kriteria yang dipilih setelah tombol "Cari" diklik
# - jika data yang dicari ada dalam sistem maka akan menampilkan notifikasi berapa banyak data yang ditemukan dan tabel berisi kumpulan data yang dicari
# - jika data yang dicari tidak ada dalam sistem maka akan menampilkan notifikasi bahwa data tidak ada dalam sistem
# - jika data masih kosong, akan menampilkan notifikasi bahwa data masih kosong
@app.route('/cariBudaya', methods=['GET', 'POST'])
def cariBudaya():
if request.method == "GET":
return render_template("cariBudaya.html")
elif request.method == "POST":
kriteria = request.form.get('kriteria')
user_input = request.form['user_input']
if kriteria == 'nama':
data = budayaData.cariByNama(user_input)
elif kriteria == 'tipe':
data = budayaData.cariByTipe(user_input)
elif kriteria == 'prov':
data = budayaData.cariByProv(user_input)
data_len = len(data)
n_data = len(budayaData.koleksi)
return render_template("cariBudaya.html", result=n_data, data=data, data_len=data_len, user_input=user_input, kriteria=kriteria)
# Bagian ini adalah implementasi fitur Statistik Budaya, yaitu:
# - merender tampilan saat menu Statistik Budaya diklik
# - melakukan pemrosesan terhadap isian form (select) setelah tombol "Tampilkan" diklik
# - jika yang dipilih oleh user adalah 'All' maka akan menampilkan banyaknya data budaya yang ada dalam sistem
# - jika yang dipilih oleh user adalah 'Tipe Budaya' maka akan menampilkan tabel berisi masing-masing tipe budaya dengan jumlahnya dalam sistem
# - jika yang dipilih oleh user adalah 'Asal Provinsi Budaya' maka akan menampilkan tabel berisi masing-masing asal prov budaya dengan jumlahnya dalam sistem
# - jika data masih kosong, akan menampilkan notifikasi bahwa data masih kosong
@app.route('/statsBudaya', methods=['GET', 'POST'])
def statBudaya():
if request.method == "GET":
return render_template("statBudaya.html")
elif request.method == "POST":
kriteria = request.form.get('kriteria')
if kriteria == 'all':
data = budayaData.stat()
sorted_jml = None
elif kriteria == 'tipe':
data = budayaData.statByTipe()
sorted_jml = sorted(data.items(), key = lambda k:(k[1], k[0]))[::-1]
elif kriteria == 'prov':
data = budayaData.statByProv()
sorted_jml = sorted(data.items(), key = lambda k:(k[1], k[0]))[::-1]
data_is_dict = isinstance(data, dict)
n_data = len(budayaData.koleksi)
return render_template("statBudaya.html", result=n_data, data=data, data_is_dict=data_is_dict, sorted_jml=sorted_jml, kriteria=kriteria)
# run main app
if __name__ == "__main__":
app.run()