-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmodels.py
65 lines (48 loc) · 2 KB
/
models.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
import datetime
import hashlib
import pytz
from google.appengine.ext import ndb
TIMEZONE = pytz.timezone('US/Eastern')
class Workspace(ndb.Model):
name = ndb.StringProperty()
nextNoteNum = ndb.IntegerProperty(required=True)
time = ndb.DateTimeProperty(required=True)
@staticmethod
def get_by_wsName(wsName):
key_id = hashlib.sha1(wsName.encode('ascii')).hexdigest()
return Workspace.get_by_id(key_id)
@staticmethod
def create(wsName, nextNoteNum, time):
key_id = hashlib.sha1(wsName.encode('ascii')).hexdigest()
return Workspace(id=key_id, name=wsName, nextNoteNum=nextNoteNum,
time=time)
def localtime_str(self):
local_datetime = pytz.utc.localize(self.time).astimezone(TIMEZONE)
return local_datetime.strftime('%Y-%m-%d %H:%M:%S')
def get_notes_list(self, request):
dt = self.time
load_time = request and request.get('time')
if load_time:
try:
dt = datetime.datetime.strptime(load_time, '%Y-%m-%d %H:%M:%S')
dt = TIMEZONE.localize(dt).astimezone(pytz.utc)
except ValueError:
pass
notes_entity = Notes.query(
Notes.workspaceKey == self.key and
Notes.time == dt).get()
if notes_entity:
return notes_entity.notesJsonArray
return []
class Notes(ndb.Model):
JSKEYS = ('id', 'xPos', 'yPos', 'height', 'width',
'bgcolor', 'zIndex', 'text')
DBKEYS = ('noteid', 'xposition', 'yposition', 'height', 'width',
'bgcolor', 'zindex', 'text')
DB2JS = dict(zip(DBKEYS, JSKEYS))
workspaceKey = ndb.KeyProperty(kind='Workspace', required=True)
time = ndb.DateTimeProperty(required=True)
notesJsonArray = ndb.JsonProperty(compressed=True, required=True)
def localtime_str(self):
local_datetime = pytz.utc.localize(self.time).astimezone(TIMEZONE)
return local_datetime.strftime('%Y-%m-%d %H:%M:%S')