Skip to content

Commit 1bb9b15

Browse files
committed
update manage data module api
1 parent 5e73036 commit 1bb9b15

File tree

3 files changed

+181
-129
lines changed

3 files changed

+181
-129
lines changed

database/main.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ def show_menu():
1515
print("3. new - Create a new full index database, with info and walkthrough data")
1616
print("4. update - Insert missing TRLE book basic records")
1717
print("5. update - Insert missing TRLE book records with info and walkthrough")
18-
print("6. trle - Run http TRLE")
19-
print("7. trle_local - Run TRLE local")
18+
print("6. resync all - Update or remove every record to mirror TRLE")
19+
print("7. trle - Run https TRLE")
20+
print("8. trle_local - Run TRLE local")
2021
print("0. Exit")
2122

2223

@@ -37,8 +38,10 @@ def main_menu():
3738
elif choice == "5":
3839
pass
3940
elif choice == "6":
40-
tombll_view.scrape_trle_index()
41+
pass
4142
elif choice == "7":
43+
tombll_view.scrape_trle_index()
44+
elif choice == "8":
4245
tombll_view.local_trle_index()
4346
elif choice in ("0", "q"):
4447
print("Exiting...")

database/tombll_manage_data.py

Lines changed: 172 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,172 @@ def print_info():
2828
Options:
2929
-l List level records
3030
-a [lid] Add a level record
31-
-aj [lid path] Download a level record to json file
32-
-af [path] Add from the json file
31+
-sj [lid path] Save a level record to json file
32+
-aj [path] Add a level record from a json file
3333
-ac [lid] Add a level card record without info and walkthrough
3434
-acr [lid lid] Add a range of level card records
35-
-rm [lid] Remove one level
35+
-rm [lid] Remove one level record
3636
-u [lid] Update a level record
3737
38-
-lz [Level.LevelID] List zip file records
39-
-az [Level.LevelID Zip.name Zip.size Zip.md5sum]
40-
Optional and in order [Zip.url Zip.version Zip.release] Add a zip file
38+
-ld [Level.LevelID] List download files records
39+
-ad [Level.LevelID Zip.name Zip.size Zip.md5sum]
40+
Add a local zip file to a level without a file
4141
"""
4242
print(help_text.strip())
4343

4444

45+
def list_levels():
46+
"""List all level in the database."""
47+
con = database_make_connection()
48+
print_list(con)
49+
con.close()
50+
51+
52+
def add_level(lid):
53+
"""Add a level by taking the lid number."""
54+
data = data_factory.make_trle_tombll_data()
55+
56+
soup = scrape_trle.scrape_common.get_soup(trle_level_url(lid))
57+
scrape_trle.get_trle_level(soup, data)
58+
59+
if data['title']:
60+
con = database_make_connection()
61+
database_begin_write(con)
62+
add_tombll_json_to_database(data, con)
63+
database_commit_and_close(con)
64+
print(f"lid {lid} with title \"{data['title']}\" added successfully.")
65+
else:
66+
print(f"lid {lid} was an empty page.")
67+
68+
69+
def save_json_level(lid, path):
70+
"""Save a level to a json file on disk by taking the lid number."""
71+
data = data_factory.make_trle_tombll_data()
72+
73+
soup = scrape_trle.scrape_common.get_soup(trle_level_url(lid))
74+
scrape_trle.get_trle_level(soup, data)
75+
76+
if data['title']:
77+
with open(path, mode='w', encoding='utf-8') as json_file:
78+
json.dump(data, json_file)
79+
print(
80+
f"lid {lid} with title \"{data['title']}\" "
81+
f"saved to {path} successfully."
82+
)
83+
else:
84+
print(f"lid {lid} was an empty page.")
85+
86+
87+
def add_file(path):
88+
"""Add a level from a json file on disk."""
89+
data = tombll_common.get_tombll_json(path)
90+
91+
con = database_make_connection()
92+
database_begin_write(con)
93+
add_tombll_json_to_database(data, con)
94+
database_commit_and_close(con)
95+
print(f"File {path} with title \"{data['title']}\" added successfully.")
96+
97+
98+
def add_level_card(lid):
99+
"""Add a level card by taking the lid number."""
100+
data = data_factory.make_trle_tombll_data()
101+
102+
soup = scrape_trle.scrape_common.get_soup(trle_level_url(lid))
103+
scrape_trle.get_trle_level_card(soup, data)
104+
105+
if data['title']:
106+
con = database_make_connection()
107+
database_begin_write(con)
108+
add_tombll_json_to_database(data, con)
109+
database_commit_and_close(con)
110+
print(f"lid {lid} card with title \"{data['title']}\" added successfully.")
111+
else:
112+
print(f"lid {lid} was an empty page.")
113+
114+
115+
def add_level_card_range(range_a, range_b):
116+
"""Add a level card by taking a lid range."""
117+
for i in range(min(int(range_a), int(range_b)), max(int(range_a), int(range_b)) + 1):
118+
data = data_factory.make_trle_tombll_data()
119+
soup = scrape_trle.scrape_common.get_soup(trle_level_url(i))
120+
scrape_trle.get_trle_level_card(soup, data)
121+
122+
if data['title']:
123+
con = database_make_connection()
124+
database_begin_write(con)
125+
add_tombll_json_to_database(data, con)
126+
database_commit_and_close(con)
127+
print(f"lid {i} card with title \"{data['title']}\" added successfully.")
128+
else:
129+
print(f"lid {i} was an empty page.")
130+
131+
time.sleep(5)
132+
133+
134+
def remove_level(lid):
135+
"""Remove a level from the database by taking the lid number."""
136+
con = database_make_connection()
137+
database_level_id = tombll_read.database_level_id(lid, con)
138+
139+
database_begin_write(con)
140+
tombll_delete.database_level(database_level_id, con)
141+
database_commit_and_close(con)
142+
print(f"lid {lid} removed successfully.")
143+
144+
145+
def update_level(lid):
146+
"""Update a level by taking the lid number."""
147+
data = data_factory.make_trle_tombll_data()
148+
149+
soup = scrape_trle.scrape_common.get_soup(trle_level_url(lid))
150+
scrape_trle.get_trle_level(soup, data)
151+
152+
if data['title']:
153+
con = database_make_connection()
154+
level_id = tombll_read.database_level_id(lid, con)
155+
156+
database_begin_write(con)
157+
update_tombll_json_to_database(data, level_id, con)
158+
database_commit_and_close(con)
159+
print(f"lid {lid} with title \"{data['title']}\" updated successfully.")
160+
else:
161+
print(f"lid {lid} was an empty page.")
162+
163+
164+
def add_download(lid, name, size, md5):
165+
"""Add a download file to a level by taking the lid number."""
166+
data = data_factory.make_zip_file()
167+
data["name"] = name
168+
data["size"] = size
169+
data["md5"] = md5
170+
data["url"] = None
171+
data["release"] = None
172+
data["version"] = None
173+
174+
con = database_make_connection()
175+
database_begin_write(con)
176+
tombll_create.database_zip_file(data, lid, con)
177+
database_commit_and_close(con)
178+
179+
180+
def list_downloads(lid):
181+
"""List all download files for a level by taking the lid number."""
182+
con = database_make_connection()
183+
print_download_list(lid, con)
184+
con.close()
185+
186+
187+
def get_local_page(offset, con):
188+
"""Pass down API to get a TRLE page from the database."""
189+
return tombll_read.trle_page(offset, con, sort_latest_first=True)
190+
191+
192+
def get_trle_page(offset):
193+
"""Pass down API to scrape a TRLE page from "trle.net"."""
194+
return scrape_trle.get_trle_page(offset, sort_created_first=True)
195+
196+
45197
def database_make_connection():
46198
"""
47199
Get a connection to the database.
@@ -343,136 +495,34 @@ def update_tombll_json_to_database(data, level_id, con):
343495
sys.exit(1)
344496

345497
if (sys.argv[1] == "-l" and number_of_argument == 2):
346-
main_con = database_make_connection()
347-
print_list(main_con)
348-
main_con.close()
498+
list_levels()
349499

350500
elif (sys.argv[1] == "-a" and number_of_argument == 3):
351-
main_lid = sys.argv[2]
352-
main_data = data_factory.make_trle_tombll_data()
353-
354-
main_soup = scrape_trle.scrape_common.get_soup(trle_level_url(main_lid))
355-
scrape_trle.get_trle_level(main_soup, main_data)
356-
357-
if main_data['title']:
358-
main_con = database_make_connection()
359-
database_begin_write(main_con)
360-
add_tombll_json_to_database(main_data, main_con)
361-
database_commit_and_close(main_con)
362-
print(f"lid {main_lid} with title \"{main_data['title']}\" added successfully.")
363-
else:
364-
print(f"lid {main_lid} was an empty page.")
365-
366-
elif (sys.argv[1] == "-aj" and number_of_argument == 4):
367-
main_lid = sys.argv[2]
368-
main_path = sys.argv[3]
369-
main_data = data_factory.make_trle_tombll_data()
370-
371-
main_soup = scrape_trle.scrape_common.get_soup(trle_level_url(main_lid))
372-
scrape_trle.get_trle_level(main_soup, main_data)
373-
374-
if main_data['title']:
375-
with open(main_path, mode='w', encoding='utf-8') as json_file:
376-
json.dump(main_data, json_file)
377-
print(
378-
f"lid {main_lid} with title \"{main_data['title']}\" "
379-
f"saved to {main_path} successfully."
380-
)
381-
else:
382-
print(f"lid {main_lid} was an empty page.")
501+
add_level(sys.argv[2])
383502

384-
elif (sys.argv[1] == "-af" and number_of_argument == 3):
385-
main_path = sys.argv[2]
386-
main_data = tombll_common.get_tombll_json(main_path)
503+
elif (sys.argv[1] == "-sj" and number_of_argument == 4):
504+
save_json_level(sys.argv[2], sys.argv[3])
387505

388-
main_con = database_make_connection()
389-
database_begin_write(main_con)
390-
add_tombll_json_to_database(main_data, main_con)
391-
database_commit_and_close(main_con)
392-
print(f"File {main_path} with title \"{main_data['title']}\" added successfully.")
506+
elif (sys.argv[1] == "-aj" and number_of_argument == 3):
507+
add_file(sys.argv[2])
393508

394509
elif (sys.argv[1] == "-ac" and number_of_argument == 3):
395-
main_lid = sys.argv[2]
396-
main_data = data_factory.make_trle_tombll_data()
397-
398-
main_soup = scrape_trle.scrape_common.get_soup(trle_level_url(main_lid))
399-
scrape_trle.get_trle_level_card(main_soup, main_data)
400-
401-
if main_data['title']:
402-
main_con = database_make_connection()
403-
database_begin_write(main_con)
404-
add_tombll_json_to_database(main_data, main_con)
405-
database_commit_and_close(main_con)
406-
print(f"lid {main_lid} card with title \"{main_data['title']}\" added successfully.")
407-
else:
408-
print(f"lid {main_lid} was an empty page.")
510+
add_level_card(sys.argv[2])
409511

410512
elif (sys.argv[1] == "-acr" and number_of_argument == 4):
411-
main_range_a = int(sys.argv[2])
412-
main_range_b = int(sys.argv[3])
413-
414-
for i in range(min(main_range_a, main_range_b), max(main_range_a, main_range_b) + 1):
415-
main_data = data_factory.make_trle_tombll_data()
416-
main_soup = scrape_trle.scrape_common.get_soup(trle_level_url(i))
417-
scrape_trle.get_trle_level_card(main_soup, main_data)
418-
419-
if main_data['title']:
420-
main_con = database_make_connection()
421-
database_begin_write(main_con)
422-
add_tombll_json_to_database(main_data, main_con)
423-
database_commit_and_close(main_con)
424-
print(f"lid {i} card with title \"{main_data['title']}\" added successfully.")
425-
else:
426-
print(f"lid {i} was an empty page.")
427-
428-
time.sleep(5)
513+
add_level_card_range(sys.argv[2], sys.argv[3])
429514

430515
elif (sys.argv[1] == "-rm" and number_of_argument == 3):
431-
main_lid = sys.argv[2]
432-
main_con = database_make_connection()
433-
main_database_level_id = tombll_read.database_level_id(main_lid, main_con)
434-
435-
database_begin_write(main_con)
436-
tombll_delete.database_level(main_database_level_id, main_con)
437-
database_commit_and_close(main_con)
438-
print(f"lid {main_lid} removed successfully.")
516+
remove_level(sys.argv[2])
439517

440518
elif (sys.argv[1] == "-u" and number_of_argument == 3):
441-
main_lid = sys.argv[2]
442-
main_data = data_factory.make_trle_tombll_data()
443-
444-
main_soup = scrape_trle.scrape_common.get_soup(trle_level_url(main_lid))
445-
scrape_trle.get_trle_level(main_soup, main_data)
519+
update_level(sys.argv[2])
446520

447-
if main_data['title']:
448-
main_con = database_make_connection()
449-
main_level_id = tombll_read.database_level_id(main_lid, main_con)
521+
elif (sys.argv[1] == "-ld" and number_of_argument == 3):
522+
list_downloads(sys.argv[2])
450523

451-
database_begin_write(main_con)
452-
update_tombll_json_to_database(main_data, main_level_id, main_con)
453-
database_commit_and_close(main_con)
454-
print(f"lid {main_lid} with title \"{main_data['title']}\" updated successfully.")
455-
else:
456-
print(f"lid {main_lid} was an empty page.")
457-
458-
elif (sys.argv[1] == "-lz" and number_of_argument == 3):
459-
main_con = database_make_connection()
460-
print_download_list(sys.argv[2], main_con)
461-
main_con.close()
462-
463-
elif (sys.argv[1] == "-az" and number_of_argument >= 6):
464-
main_data = data_factory.make_zip_file()
465-
main_data["name"] = sys.argv[3]
466-
main_data["size"] = sys.argv[4]
467-
main_data["md5"] = sys.argv[5]
468-
main_data["url"] = sys.argv[6] if number_of_argument >= 7 else None
469-
main_data["release"] = sys.argv[7] if number_of_argument >= 8 else None
470-
main_data["version"] = sys.argv[8] if number_of_argument >= 9 else None
471-
472-
main_con = database_make_connection()
473-
database_begin_write(main_con)
474-
tombll_create.database_zip_file(main_data, sys.argv[2], main_con)
475-
database_commit_and_close(main_con)
524+
elif (sys.argv[1] == "-ad" and number_of_argument == 6):
525+
add_download(sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
476526

477527
else:
478528
print_info()

database/tombll_view.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
import os
44
import sqlite3
55

6-
import scrape_trle
7-
import tombll_read
6+
import tombll_manage_data
87

98
os.chdir(os.path.dirname(os.path.abspath(__file__)))
109

@@ -13,7 +12,7 @@ def scrape_trle_index():
1312
"""Browse TRLE data by using normal https requests."""
1413
offset = 0
1514
while True:
16-
_print_trle_page(scrape_trle.get_trle_page(offset, True))
15+
_print_trle_page(tombll_manage_data.get_trle_page(offset))
1716
user_input = input("Press Enter for the next page (or type 'q' to quit: ")
1817
if user_input.lower() == 'q':
1918
print("Exiting...")
@@ -26,7 +25,7 @@ def local_trle_index():
2625
con = sqlite3.connect(os.path.dirname(os.path.abspath(__file__)) + '/tombll.db')
2726
offset = 0
2827
while True:
29-
page = tombll_read.trle_page(offset, con, sort_latest_first=True)
28+
page = tombll_manage_data.get_local_page(offset, con)
3029
_print_trle_page(page)
3130
if len(page['levels']) < 20:
3231
break

0 commit comments

Comments
 (0)