if linked_sws: # just grab 1st URL; perhaps later add interface for # downloading multiple linked .sws try: filename = my_urlretrieve(linked_sws[0]['url'], backlinks=backlinks)[0] print 'Importing {0}, linked to from {1}'.format(linked_sws[0]['url'], url) except RetrieveError as err: return current_app.message(str(err)) W = g.notebook.import_worksheet(filename, g.username) except Exception, msg: print 'error uploading worksheet', msg s = _('There was an error uploading the worksheet. It could be an old unsupported format or worse. If you desperately need its contents contact the <a href="http://groups.google.com/group/sage-support">sage-support group</a> and post a link to your worksheet. Alternatively, an sws file is just a bzip2 tarball; take a look inside!\n%(backlinks)s', backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username)) finally: # Clean up the temporarily uploaded filename. os.unlink(filename) # if a temp directory was created, we delete it now. if dir: import shutil shutil.rmtree(dir) except ValueError, msg: s = _("Error uploading worksheet '%(msg)s'.%(backlinks)s", msg=msg, backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username)) if new_name: W.set_name(new_name) from worksheet import url_for_worksheet return redirect(url_for_worksheet(W))
def live_history(): W = g.notebook.create_new_worksheet_from_history(gettext('Log'), g.username, 100) from worksheet import url_for_worksheet return redirect(url_for_worksheet(W))
print 'Importing {0}, linked to from {1}'.format( linked_sws[0]['url'], url) except RetrieveError as err: return current_app.message(str(err)) W = g.notebook.import_worksheet(filename, g.username) except Exception, msg: print 'error uploading worksheet', msg s = _( 'There was an error uploading the worksheet. It could be an old unsupported format or worse. If you desperately need its contents contact the <a href="http://groups.google.com/group/sage-support">sage-support group</a> and post a link to your worksheet. Alternatively, an sws file is just a bzip2 tarball; take a look inside!\n%(backlinks)s', backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username)) finally: # Clean up the temporarily uploaded filename. os.unlink(filename) # if a temp directory was created, we delete it now. if dir: import shutil shutil.rmtree(dir) except ValueError, msg: s = _("Error uploading worksheet '%(msg)s'.%(backlinks)s", msg=msg, backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username)) if new_name: W.set_name(new_name) from worksheet import url_for_worksheet return redirect(url_for_worksheet(W))
def upload_worksheet(): from sage.misc.all import tmp_filename, tmp_dir from werkzeug.utils import secure_filename import zipfile if g.notebook.readonly_user(g.username): return current_app.message(_("Account is in read-only mode"), cont=url_for('home', username=g.username), username=g.username) backlinks = _("""Return to <a href="/upload" title="Upload a worksheet"><strong>Upload File</strong></a>.""") url = request.values['url'].strip() dir = '' if url != '': #Downloading a file from the internet # The file will be downloaded from the internet and saved # to a temporary file with the same extension path = urlparse.urlparse(url).path extension = os.path.splitext(path)[1].lower() if extension not in ["", ".txt", ".sws", ".zip", ".html", ".rst"]: # Or shall we try to import the document as an sws when in doubt? return current_app.message(_("Unknown worksheet extension: %(ext)s. %(links)s", ext=extension, links=backlinks), username=g.username) filename = tmp_filename()+extension try: import re matches = re.match("file://(?:localhost)?(/.+)", url) if matches: if g.notebook.interface != 'localhost': return current_app.message(_("Unable to load file URL's when not running on localhost.\n%(backlinks)s",backlinks=backlinks), username=g.username) import shutil shutil.copy(matches.group(1),filename) else: my_urlretrieve(url, filename, backlinks=backlinks) except RetrieveError as err: return current_app.message(str(err), username=g.username) else: #Uploading a file from the user's computer dir = tmp_dir() file = request.files['file'] if file.filename is None: return current_app.message(_("Please specify a worksheet to load.\n%(backlinks)s",backlinks=backlinks), username=g.username) filename = secure_filename(file.filename) if len(filename)==0: return current_app.message(_("Invalid filename.\n%(backlinks)s",backlinks=backlinks), username=g.username) filename = os.path.join(dir, filename) file.save(filename) new_name = request.values.get('name', None) try: try: if filename.endswith('.zip'): # Extract all the .sws files from a zip file. zip_file = zipfile.ZipFile(filename) for subfilename in zip_file.namelist(): prefix, extension = os.path.splitext(subfilename) # Mac zip files contain files like __MACOSX/._worksheet.sws # which are metadata files, so we skip those as # well as any other files we won't understand if extension in ['.sws', '.html', '.txt', '.rst'] and not prefix.startswith('__MACOSX/'): tmpfilename = os.path.join(dir, "tmp" + extension) try: tmpfilename = zip_file.extract(subfilename, tmpfilename) except AttributeError: open(tmpfilename, 'w').write(zip_file.read(subfilename)) W = g.notebook.import_worksheet(tmpfilename, g.username) if new_name: W.set_name("%s - %s" % (new_name, W.name())) else: print("Unknown extension, file %s is ignored" % subfilename) return redirect(url_for('home', username=g.username)) else: if url and extension in ['', '.html']: linked_sws = parse_link_rel(url, filename) if linked_sws: # just grab 1st URL; perhaps later add interface for # downloading multiple linked .sws try: filename = my_urlretrieve(linked_sws[0]['url'], backlinks=backlinks)[0] print('Importing {0}, linked to from {1}'.format(linked_sws[0]['url'], url)) except RetrieveError as err: return current_app.message(str(err), username=g.username) W = g.notebook.import_worksheet(filename, g.username) except Exception as msg: print('error uploading worksheet {}'.format(msg)) s = _('There was an error uploading the worksheet. It could be an old unsupported format or worse. If you desperately need its contents contact the <a href="http://groups.google.com/group/sage-support">sage-support group</a> and post a link to your worksheet. Alternatively, an sws file is just a bzip2 tarball; take a look inside!\n%(backlinks)s', backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username), username=g.username) finally: # Clean up the temporarily uploaded filename. os.unlink(filename) # if a temp directory was created, we delete it now. if dir: import shutil shutil.rmtree(dir) except ValueError as msg: s = _("Error uploading worksheet '%(msg)s'.%(backlinks)s", msg=msg, backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username), username=g.username) if new_name: W.set_name(new_name) from worksheet import url_for_worksheet return redirect(url_for_worksheet(W))
def upload_worksheet(): from sage.misc.all import tmp_filename, tmp_dir from werkzeug.utils import secure_filename import zipfile if g.notebook.readonly_user(g.username): return current_app.message(_("Account is in read-only mode"), cont=url_for('home', username=g.username), username=g.username) backlinks = _( """Return to <a href="/upload" title="Upload a worksheet"><strong>Upload File</strong></a>.""" ) url = request.values['url'].strip() dir = '' if url != '': #Downloading a file from the internet # The file will be downloaded from the internet and saved # to a temporary file with the same extension path = urlparse.urlparse(url).path extension = os.path.splitext(path)[1].lower() if extension not in ["", ".txt", ".sws", ".zip", ".html", ".rst"]: # Or shall we try to import the document as an sws when in doubt? return current_app.message(_( "Unknown worksheet extension: %(ext)s. %(links)s", ext=extension, links=backlinks), username=g.username) filename = tmp_filename() + extension try: import re matches = re.match("file://(?:localhost)?(/.+)", url) if matches: if g.notebook.interface != 'localhost': return current_app.message(_( "Unable to load file URL's when not running on localhost.\n%(backlinks)s", backlinks=backlinks), username=g.username) import shutil shutil.copy(matches.group(1), filename) else: my_urlretrieve(url, filename, backlinks=backlinks) except RetrieveError as err: return current_app.message(str(err), username=g.username) else: #Uploading a file from the user's computer dir = tmp_dir() file = request.files['file'] if file.filename is None: return current_app.message(_( "Please specify a worksheet to load.\n%(backlinks)s", backlinks=backlinks), username=g.username) filename = secure_filename(file.filename) if len(filename) == 0: return current_app.message(_("Invalid filename.\n%(backlinks)s", backlinks=backlinks), username=g.username) filename = os.path.join(dir, filename) file.save(filename) new_name = request.values.get('name', None) try: try: if filename.endswith('.zip'): # Extract all the .sws files from a zip file. zip_file = zipfile.ZipFile(filename) for subfilename in zip_file.namelist(): prefix, extension = os.path.splitext(subfilename) # Mac zip files contain files like __MACOSX/._worksheet.sws # which are metadata files, so we skip those as # well as any other files we won't understand if extension in ['.sws', '.html', '.txt', '.rst' ] and not prefix.startswith('__MACOSX/'): tmpfilename = os.path.join(dir, "tmp" + extension) try: tmpfilename = zip_file.extract( subfilename, tmpfilename) except AttributeError: open(tmpfilename, 'w').write(zip_file.read(subfilename)) W = g.notebook.import_worksheet( tmpfilename, g.username) if new_name: W.set_name("%s - %s" % (new_name, W.name())) else: print("Unknown extension, file %s is ignored" % subfilename) return redirect(url_for('home', username=g.username)) else: if url and extension in ['', '.html']: linked_sws = parse_link_rel(url, filename) if linked_sws: # just grab 1st URL; perhaps later add interface for # downloading multiple linked .sws try: filename = my_urlretrieve(linked_sws[0]['url'], backlinks=backlinks)[0] print('Importing {0}, linked to from {1}'.format( linked_sws[0]['url'], url)) except RetrieveError as err: return current_app.message(str(err), username=g.username) W = g.notebook.import_worksheet(filename, g.username) except Exception as msg: print('error uploading worksheet {}'.format(msg)) s = _( 'There was an error uploading the worksheet. It could be an old unsupported format or worse. If you desperately need its contents contact the <a href="http://groups.google.com/group/sage-support">sage-support group</a> and post a link to your worksheet. Alternatively, an sws file is just a bzip2 tarball; take a look inside!\n%(backlinks)s', backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username), username=g.username) finally: # Clean up the temporarily uploaded filename. os.unlink(filename) # if a temp directory was created, we delete it now. if dir: import shutil shutil.rmtree(dir) except ValueError as msg: s = _("Error uploading worksheet '%(msg)s'.%(backlinks)s", msg=msg, backlinks=backlinks) return current_app.message(s, url_for('home', username=g.username), username=g.username) if new_name: W.set_name(new_name) from worksheet import url_for_worksheet return redirect(url_for_worksheet(W))