-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupload.py
103 lines (81 loc) · 2.82 KB
/
upload.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
import argparse
import sys
import uuid
from sqlalchemy import create_engine
CONN_STR = """postgresql://codephil:[email protected]:5432/lavazaresdb"""
parser = argparse.ArgumentParser()
engine = create_engine(CONN_STR)
conn = engine.connect()
class GameContentTypes():
"""
Game content types.
PSQL Requires commas to be doubled ie. Won't -> Won''t
"""
WORD = "word"
SENTENCE = "sentence"
PASSAGE = "passage"
def upload_content_from_file(file_path, upload_type):
with open(file_path) as file:
if upload_type == GameContentTypes.WORD:
words = newline_splitter(file)
word_uploader(words)
elif upload_type == GameContentTypes.SENTENCE:
sentences = newline_splitter(file)
sentence_uploader(sentences)
else:
passages = passage_splitter(file)
passage_uploader(passages)
def newline_splitter(file):
return [line.rstrip('\n') for line in file]
def passage_splitter(file):
"""// is the delimiter
line right after // is the title of the passage
everything else after that is the body of the passage
"""
data = file.read().split("//")[1:]
passages = []
for passage in data:
lines = passage.splitlines()[1:]
passage_content = {}
passage_content["name"] = lines[0]
passage_content["body"] = "".join(lines[1:])
passages.append(passage_content)
return passages
def passage_uploader(passages):
for passage in passages:
conn.execute(
"""INSERT INTO game_content(id, content, title, type)
VALUES('{}', '{}', '{}', '{}')
""".format(
uuid.uuid4(),
passage["body"],
passage["name"],
GameContentTypes.PASSAGE
)
)
def word_uploader(words):
for word in words:
conn.execute(
"""INSERT INTO game_content(id, content, type)
VALUES('{}', '{}', '{}')
""".format(uuid.uuid4(), word, GameContentTypes.WORD)
)
def sentence_uploader(sentences):
for sentence in sentences:
conn.execute(
"""INSERT INTO game_content(id, content, type)
VALUES('{}', '{}', '{}')
""".format(uuid.uuid4(), sentence, GameContentTypes.SENTENCE)
)
if __name__ == "__main__":
parser.add_argument("-f", "--filepath", help="Path of file to upload")
parser.add_argument("-t", "--type", help="Content type being uploaded")
args = parser.parse_args()
if (
args.type != GameContentTypes.WORD
and args.type != GameContentTypes.SENTENCE
and args.type != GameContentTypes.PASSAGE
):
print("Invalid GameContentType")
sys.exit(1)
upload_content_from_file(args.filepath, args.type)