def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions nid = self.inputs.getvalue('note') pos = self.inputs.getvalue('position') # --- Database note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid)) # Get page id tmp = note.single('SELECT * FROM Pages WHERE position=?', pos) pid = tmp['id'] # Delete page note.delete('Pages', 'id=?', pid) # Update following pages position note.update('Pages', 'position', 'position-1', 'position>=?', pos, encode=False) # Delete page elements note.delete('Elements', 'page=?', pid)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions nid = self.inputs.getvalue('note') pid = self.inputs.getvalue('id') pos = self.inputs.getvalue('position') # --- Database note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid)) # Update following pages position note.update('Pages', 'position', 'position+1', 'position>=?', pos, encode=False) # Insert element note.insert('Pages', id=pid, position=pos)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions pid = self.inputs.getvalue('page') eid = self.inputs.getvalue('elm') tid = self.inputs.getvalue('target') # --- Update Note # Access DB db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note'))) # Get source and target positions tmp = db.single('SELECT position as pos FROM Elements WHERE id=?', eid) src = int(tmp['pos']) if tid is '0': tmp = db.single('SELECT MAX(position) as pos FROM Elements WHERE page=?', pid) pos = int(tmp['pos'])+1 else: tmp = db.single('SELECT position as pos FROM Elements WHERE id=?', tid) pos = int(tmp['pos']) # Store source element db.update('Elements', 'position', 0, 'id=?', eid) # Update in-between elements if src<pos: # Update in-between elements db.update('Elements', 'position', 'position-1', 'position>? AND position<?', src, pos, encode=False) # Restore element db.update('Elements', 'position', pos-1, 'id=?', eid) else: # Update in-between elements db.update('Elements', 'position', 'position+1', 'position>=? AND position<?', pos, src, encode=False) # Restore element db.update('Elements', 'position', pos, 'id=?', eid)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions pid = self.inputs.getvalue('page') eid = self.inputs.getvalue('elm') type_elm = self.inputs.getvalue('type') # --- Update Note # Access DB db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note'))) # Get inserting position if eid is '0': tmp = db.single('SELECT MAX(position) as mp FROM Elements WHERE page=?', pid) if tmp['mp'] is None: pos = 1 else: pos = int(tmp['mp']) + 1 else: elm = db.single('SELECT * FROM Elements WHERE id=?', eid) pos = int(elm['position']) # Update remaining elements db.update('Elements', 'position', 'position+1', 'position>=?', pos, encode=False) # Insert element db.insert('Elements', page=pid, position=pos, type=type_elm) newid = db.lastid('Elements') if type_elm in ('header', 'text', 'equation'): db.insert(type_elm, id=newid, text='') if type_elm in ('media'): db.insert(type_elm, id=newid) print('OK {{"newid": {0}}}'.format(newid))
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions eid = self.inputs.getvalue('elm') # --- Update Note db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note'))) db.update('Elements', 'highlight', 'NOT highlight', 'id=?', eid, encode=False)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions nid = self.inputs.getvalue('note') eid = self.inputs.getvalue('elm') # --- Update Note # Access DB db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid)) # Get element elm = db.single('SELECT * FROM Elements WHERE id=?', eid) # Remove equation (if any) if elm['type'] in ('equation'): path = '../Notes/{0}/{1}/Medias/{2}.svg'.format(self.session.user['id'], nid, eid) if os.path.isfile(path): os.remove(path) # Remove media file (if any) if elm['type'] in ('media'): frow = db.single('SELECT ext FROM media WHERE id=?', eid); path = '../Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, frow['ext']) if os.path.isfile(path): os.remove(path) # Delete element db.delete('Elements', 'id=?', eid) db.delete(elm['type'], 'id=?', eid) # Update remaining elements db.update('Elements', 'position', 'position-1', 'position>?', elm['position'], encode=False)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions typ = self.inputs.getvalue('type') val = self.inputs.getvalue('value') # --------------------------------------- # RENAME # --------------------------------------- if typ == 'page': nid = self.inputs.getvalue('note') pid = self.inputs.getvalue('page') # --- Update page name note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid)) note.update('Pages', 'name', val, 'id=?', pid) if typ == 'note': nid = self.inputs.getvalue('note') # --- Update note name note = DB('../Notes/{0}/Tree.db'.format(self.session.user['id'])) note.update('Elements', 'name', val, 'id=?', nid) if typ == 'group': gid = self.inputs.getvalue('group') # --- Update note name note = DB('../Notes/{0}/Tree.db'.format(self.session.user['id'])) note.update('Elements', 'name', val, 'id=?', gid)
def pre_process(self): ''' Pre-processing method Inputs: - Output: None ''' # --- Definitions nid = self.inputs.getvalue('note') eid = self.inputs.getvalue('elm') # --- Update Note db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid)) res = db.single('SELECT type FROM Elements WHERE id=?', eid); # --------------------------------------- # HEADER # --------------------------------------- if res['type'] in ('header'): key = self.inputs.getvalue('key') value = self.inputs.getvalue('value') if key in ('level'): db.update(res['type'], key, value, 'id=?', eid) else: if not isinstance(value, str): value = '' db.update(res['type'], 'text', value, 'id=?', eid) # --------------------------------------- # TEXT # --------------------------------------- if res['type'] in ('text'): value = self.inputs.getvalue('value') if not isinstance(value, str): value = '' db.update(res['type'], 'text', value, 'id=?', eid) # --------------------------------------- # EQUATION # --------------------------------------- if res['type'] in ('equation'): # Get value value = self.inputs.getvalue('value').strip() if not isinstance(value, str): value = '' # Image name fname = '../Notes/{0}/{1}/Medias/{2}.svg'.format(self.session.user['id'], nid, eid) prev = db.single('SELECT text FROM equation WHERE id=?', eid); if prev['text']!=value: # --- Update DB db.update(res['type'], 'text', value, 'id=?', eid) # --- Recompute image import tempfile import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt fig = plt.figure() F = re.sub("\n+", "\n", value) F = '$'+F.replace('\n', '$\n$')+'$' text = fig.text(0, 0, F) # Saving the figure will render the text dpi = 100 tmp = tempfile.NamedTemporaryFile() fig.savefig(tmp.name, dpi=dpi) tmp.close() # Now we can work with text's bounding box bbox = text.get_window_extent() width, height = bbox.size / float(dpi) + 0.005 # Adjust the figure size so it can hold the entire text fig.set_size_inches((width, height)) # Adjust text's vertical position dy = (bbox.ymin/float(dpi))/height text.set_position((0, -dy)) # Save the adjusted text fig.savefig(fname, transparent=True) # Get image width w = None ifile = open(fname, 'r') for line in ifile: m = re.search('width="([0-9]*)pt"', line) if m is not None: w = float(m.group(1)) break print('OK {{"src": "{0}", "width": {1}}}'.format(fname, w*float(self.settings.get('equation_display_factor')))) # --------------------------------------- # IMAGE, MOVIE # --------------------------------------- if res['type'] in ('media'): # Upload file F = self.inputs['file'] if not F.filename: print('Error during file upload.') return # --- Check file information # Get name and extension name, ext = os.path.splitext(F.filename) ext = ext[1:] # Check extension if ext in self.settings.IMAGE: type = 'image' elif ext in self.settings.VIDEO: type = 'video' else: print("Couldn't recognize the file type during upload.") return # --- Remove previous file prev = db.single('SELECT ext FROM {0} WHERE id=?'.format(res['type']), eid); path = '../Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, prev['ext']) if os.path.isfile(path): os.remove(path) # --- Save new file path = 'Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, ext) open('../{0}'.format(path), 'wb').write(F.file.read()) db.update(res['type'], 'name', name, 'id=?', eid) db.update(res['type'], 'ext', ext, 'id=?', eid) db.update(res['type'], 'type', type, 'id=?', eid) print('OK {{"type": "{0}", "src": "{1}"}}'.format(type, path)) # --- Update last modification timestamp now = str(datetime.now())[0:19] db.update('Elements', 't_modification', now, 'id=?', eid)