-
Notifications
You must be signed in to change notification settings - Fork 0
/
datastore_queries_admin.py
110 lines (84 loc) · 2.83 KB
/
datastore_queries_admin.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
import calendar
import datetime
import locale
from google.cloud import datastore
def get_configs():
client = datastore.Client()
query = client.query(kind='Config')
return query.fetch()
def get_config_by_id(config_id):
client = datastore.Client()
key = client.key('Config', config_id)
return client.get(key)
def update_config(config_id, request_form):
client = datastore.Client()
if config_id != 'new':
key = client.key('Config', config_id)
config = client.get(key)
else:
key = client.key('Config', request_form['name'])
config = datastore.Entity(key=key)
config['value'] = request_form['value']
client.put(config)
return config
def update_post(post_id, request_form):
client = datastore.Client()
post_date = datetime.datetime.now()
if post_id != 'new':
key = client.key('Post', int(post_id))
post = client.get(key)
else:
key = client.key('Post')
post = datastore.Entity(key=key)
post['date'] = post_date
# comment_count needed only for imported posts
post['title'] = request_form['title']
post['slug'] = request_form['slug']
post['content'] = request_form['content']
post['post_type'] = request_form['post_type']
post['modified'] = post_date
post['year'] = post['date'].year
post['month'] = post['date'].month
client.put(post)
insert_archive_by_post(client, post)
return post
def insert_archive_by_post(client, post):
key = client.key('Archive', f"{post['year']}-{post['month']:02d}")
item = datastore.Entity(key=key)
item['year'] = post['year']
item['month'] = post['month']
item['month_name'] = calendar.month_name[post['month']]
client.put(item)
def delete_post(post_id):
client = datastore.Client()
key = client.key('Post', int(post_id))
client.delete(key)
def delete_config(config_id):
client = datastore.Client()
key = client.key('Config', config_id)
client.delete(key)
def insert_archives(posts):
client = datastore.Client()
try:
locale.setlocale(locale.LC_ALL, 'en_US')
except:
print('en_US locale could not be found')
for post in posts:
insert_archive_by_post(client, post)
def get_post_by_id(post_id):
client = datastore.Client()
key = client.key('Post', int(post_id))
return client.get(key)
def get_users():
client = datastore.Client()
query = client.query(kind='User')
return query.fetch()
def delete_all_blog_entities():
client = datastore.Client()
delete_all_entities_by_kind(client, 'Config')
delete_all_entities_by_kind(client, 'Post')
delete_all_entities_by_kind(client, 'Archive')
def delete_all_entities_by_kind(client, kind):
entities = client.query(kind=kind).fetch()
for entity in entities:
client.delete(entity.key)