-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiary.py
More file actions
executable file
·95 lines (75 loc) · 2.35 KB
/
diary.py
File metadata and controls
executable file
·95 lines (75 loc) · 2.35 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
#!/usr/bin/env python3
import datetime
import sys
import os
from collections import OrderedDict
from peewee import *
db = SqliteDatabase('diary.db')
class Entry(Model):
content = TextField()
timestamp = DateTimeField(default = datetime.datetime.now)
class Meta:
database = db
def initialize():
'''Create the database and the table if they don't exist'''
db.connect()
db.create_tables([Entry], safe = True)
def clear():
os.system('cls' if os.name == 'nt' else 'clear')
def menu_loop():
'''Show the menu'''
choice = None
while choice != 'q':
clear()
print("Enter q to quit.")
for key, value in menu.items():
# Display the value and display the docstring for the method
print('{}) {}'.format(key, value.__doc__))
choice = input('Action: ').lower().strip()
if choice in menu:
clear()
menu[choice]()
def add_entry():
'''Add an entry.'''
print("Enter your entry. Press control+d when finished.")
data = sys.stdin.read().strip()
if data:
if input('Save entry? [Yn] ').lower() != 'n':
Entry.create(content = data)
print("Saved!")
def view_entries(search_query = None):
'''View entries.'''
entries = Entry.select().order_by(Entry.timestamp.desc())
if search_query:
entries = entries.where(Entry.content.contains(search_query))
for entry in entries:
timestamp = entry.timestamp.strftime('%A %B %d, %Y %I:%M%p')
clear()
print(timestamp)
print('=' *len(timestamp))
print(entry.content)
print('\n\n' + '=' * len(timestamp))
print('n) for next entry')
print('d) to delete entry')
print('q) return to main menu')
next_action = input('Action [Ndq]: ').lower().strip()
if next_action == 'q':
break
elif next_action == 'd':
delete_entry(entry)
def delete_entry(entry):
'''Delete an entry.'''
if input("Are you sure?! [yN] ").lower() == 'y':
entry.delete_instance()
print("Entry deleted!")
def search_entries():
'''Search entries for a matching string'''
view_entries(input('Search query: '))
menu = OrderedDict([
('a', add_entry),
('v', view_entries),
('s', search_entries)
])
if __name__ == '__main__':
initialize()
menu_loop()