def get(self, alias=None): """ check required data """ if alias is None: return self.redirect('http://www.knonce.com/') """ get unit """ unit = Unit.query(Unit.alias==alias.lower()).get() if unit is None: return self.redirect('http://www.knonce.com/') """ grab latest ten notes """ notes, cursor, more = Note.query(ancestor=unit.key).order(Note.date).fetch_page(10, projection=['date', 'short', 'title', 'summary']) pageval = { 'unit': unit, 'host': 'www.%s'%HOST, 'cursor': cursor.urlsafe() if cursor else None, 'more': more, 'notes': OrderedDict() } for note in notes: if note.date.date() not in pageval['notes']: pageval['notes'][note.date.date()] = [] pageval['notes'][note.date.date()].append(note) self.render('unit/home.html', pageval)
def reset_unit(self, alias): unit = Unit.query(Unit.alias==alias).get() unit.notebook_name = None unit.notebook_guid = None unit.status == UnitStatus.Active unit.put() self.response.write('done!')
def update_info(self, client, user, token): unit = Unit.get_by_user_key(self.current_user.key) if unit is None: unit = Unit(id='en', parent=self.current_user.key) logging.info('Create new Unit') try: user_store = client.get_user_store() en_user = user_store.getUser() except (EDAMUserException, EDAMSystemException) as e: logging.error('Evernote Error: %s %s, parm: %s' % (str(e.errorCode), EDAMErrorCode._VALUES_TO_NAMES[e.errorCode], e.parameter)) return False unit.token = token unit.username = en_user.username unit.user_id = en_user.id #generate an initial id for the unit if alias is already used unit.alias = unit.username.lower() x = 0 while Unit.query(Unit.alias==unit.alias).count(1) > 0 or helper.is_reserved_name(unit.alias): if x >= 10: logging.info('Failed to generate valid alias.') return False unit.alias = helper.code_generator(size=8, chars=string.ascii_lowercase + string.digits) x += 1 logging.info('Generated alias is %s' % unit.alias) """ save Unit """ try: unit.put() except: return False # update user information if user.en_name != en_user.name: user.en_name = en_user.name user.put() return True
def get(self, alias=None, short=None): """ check required data """ if alias is None: return self.redirect('http://www.knonce.com/') """ get unit """ unit = Unit.query(Unit.alias==alias.lower()).get() if unit is None: return self.redirect('http://www.knonce.com/') """ check required data """ if short is None: return self.redirect('/') """ get note """ logging.info(short.lower()) note = Note.query(Note.short==short.lower()).get() if note is None: return self.redirect('/') pageval = { 'host': 'www.%s'%HOST, 'unit': unit, 'note': note } self.render('unit/post.html', pageval)
def put(self, target): if not self.logged_in: self.response.status = '401 Unauthorized' return if not self.current_user.active: self.response.status = '401 Unauthorized' return user = self.current_user if target == 'account': user.email = helper.escape(self.request.get('email')) try: user.put() except TransactionFailedError: self.response.status = '500 Database Error' return elif target == 'notebook': unit = Unit.get_by_user_key(user.key) if unit is None: self.response.status = '404 Not Found' return """ check alias """ if self.request.get('alias'): alias = helper.escape(self.request.get('alias')).lower() if alias != ''.join(re.findall('[a-z0-9]+', alias.lower())): self.response.status = '400 Bad Request' self.response.write('Invalid alias name.') return if unit.alias != alias and (Unit.query(Unit.alias==alias).count(1) > 0 or helper.is_reserved_name(alias)): self.response.status = '400 Bad Request' self.response.write('Value of \'alias\' is taken.') return if alias == '': self.response.status = '400 Bad Request' self.response.write('Value of \'alias\' can\'t be empty.') return put = False if unit.title != helper.escape(self.request.get('title')): unit.title = helper.escape(self.request.get('title')) put = True if unit.sub_title != helper.escape(self.request.get('sub_title')): unit.sub_title = helper.escape(self.request.get('sub_title')) put = True if unit.alias != helper.escape(self.request.get('alias')): unit.alias = helper.escape(self.request.get('alias')) put = True if unit.display != helper.escape(self.request.get('display')): unit.display = helper.escape(self.request.get('display')) put = True if unit.bio != helper.escape(self.request.get('bio')): unit.bio = helper.escape(self.request.get('bio')) put = True if put: try: unit.put() except TransactionFailedError: self.response.status = '500 Internal Server Error' return
def note(self): """ verify parameters """ names = ['user_id', 'guid', 'reason'] for name in names: if self.request.get(name) is None or self.request.get(name) == '': logging.error('en-note-guid = %s, not enough parameters.' % self.request.get('guid')) return """ get unit info """ try: unit_arr = Unit.query(Unit.user_id==int(self.request.get('user_id'))).fetch(1, projection=['notebook_guid', 'token', 'status']) except ValueError: logging.error('en-user-id = %s, wrong user_id format.' % self.request.get('user_id')) return if len(unit_arr) <= 0: logging.info('en-note-guid = %s, unit don\t exist in database.' % self.request.get('guid')) return unit = unit_arr[0] if unit.token is None or unit.token == '': logging.info('en-note-guid = %s, unit token is none.' % self.request.get('guid')) return if unit.status != UnitStatus.Active: logging.info('en-note-guid = %s, unit not active.' % self.request.get('guid')) return """ get note metadata """ try: client = helper.get_evernote_client(token=unit.token) note_store = client.get_note_store() en_note = note_store.getNote(unit.token, self.request.get('guid'), False, False, False, False) except (EDAMUserException, EDAMSystemException) as e: return self.en_user_system_exception(unit, e, self.request.get('guid')) except EDAMNotFoundException as e: return self.en_not_found_exception(e, self.request.get('guid')) """ start sync """ if self.request.get('reason') == 'create': """ check notebook """ if en_note.notebookGuid != unit.notebook_guid: """ skip sync """ logging.info('skipped: not in notebook') return """ check length """ if en_note.contentLength > SyncSettings.max_length: """ skip sync """ logging.info('skipped: length exceed limit, do not create note') return """ SYNC: create a new note """ try: en_content = note_store.getNoteContent(unit.token, self.request.get('guid')) except (EDAMUserException, EDAMSystemException) as e: return self.en_user_system_exception(unit, e, self.request.get('guid')) except EDAMNotFoundException as e: return self.en_not_found_exception(e, self.request.get('guid')) self.make_note(None, unit, en_note, en_content) logging.info('en-note-guid = %s, created and synced.' % self.request.get('guid')) elif self.request.get('reason') == 'update': note = ndb.Key(flat=list(unit.key.flat())+['Note', 'en-%s' % en_note.guid]).get() if en_note.notebookGuid == unit.notebook_guid: if note is not None: if en_note.deleted is not None: """ deleted """ note.key.delete() logging.info('en-note-guid = %s, deleted from notebook.' % self.request.get('guid')) return if en_note.contentLength > SyncSettings.max_length: """ check length """ note.key.delete() logging.info('skipped: length exceed limit, delete current note') return else: if note is None: logging.info('note is none %s'%str(list(unit.key.flat())+['Note', 'en-%s'%en_note.guid])) return if en_note.deleted is not None: """ deleted """ note.key.delete() logging.info('en-note-guid = %s, deleted from notebook.' % self.request.get('guid')) return elif en_note.notebookGuid != unit.notebook_guid: """ moved to other notebook """ note.key.delete() logging.info('en-note-guid = %s, delete note since moved out of notebook.' % self.request.get('guid')) return else: """ moved to other notebook """ note.key.delete() logging.warning('en-note-guid = %s, action cause note to be deleted.' % self.request.get('guid')) return try: en_content = note_store.getNoteContent(unit.token, self.request.get('guid')) except (EDAMUserException, EDAMSystemException) as e: return self.en_user_system_exception(unit, e, self.request.get('guid')) except EDAMNotFoundException as e: return self.en_not_found_exception(e, self.request.get('guid')) """ SYNC: check if the note is in database, if not, create one """ add = False if note is None: add = True """ MAKE NOTE """ self.make_note(note, unit, en_note, en_content) if add: logging.info('en-note-guid = %s, created and synced in update.' % self.request.get('guid')) else: logging.info('en-note-guid = %s, synced.' % self.request.get('guid'))