From f5fa0c180e92d35b4cbfa1cc20b41e9d1d9dfabe Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 18 Oct 2017 11:00:48 -0500 Subject: [PATCH 1/5] Handle a compound extension in new_untitled --- notebook/services/contents/manager.py | 21 +++++++++++++------ .../services/contents/tests/test_manager.py | 6 ++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/notebook/services/contents/manager.py b/notebook/services/contents/manager.py index e8b34e6840..af645a8519 100644 --- a/notebook/services/contents/manager.py +++ b/notebook/services/contents/manager.py @@ -4,7 +4,6 @@ # Distributed under the terms of the Modified BSD License. from fnmatch import fnmatch -import gettext import itertools import json import os @@ -32,6 +31,7 @@ from ipython_genutils.py3compat import string_types from notebook.base.handlers import IPythonHandler + copy_pat = re.compile(r'\-Copy\d*\.') @@ -317,22 +317,31 @@ def increment_filename(self, filename, path='', insert=''): The name of a file, including extension path : unicode The API path of the target's directory + insert: unicode + The characters to insert after the base filename Returns ------- name : unicode A filename that is unique, based on the input filename. """ - path = path.strip('/') - basename, ext = os.path.splitext(filename) + # Extract the full suffix from the filename (e.g. .tar.gz) + dirname = os.path.dirname(filename) + basename = os.path.basename(filename) + parts = basename.split('.') + basename = os.path.join(dirname, parts[0]) + suffix = '.' + '.'.join(parts[1:]) + if suffix == '.': + suffix = '' + for i in itertools.count(): if i: insert_i = '{}{}'.format(insert, i) else: insert_i = '' - name = u'{basename}{insert}{ext}'.format(basename=basename, - insert=insert_i, ext=ext) - if not self.exists(u'{}/{}'.format(path, name)): + name = u'{basename}{insert}{suffix}'.format(basename=basename, + insert=insert_i, suffix=suffix) + if not self.exists(os.path.join(path, name)): break return name diff --git a/notebook/services/contents/tests/test_manager.py b/notebook/services/contents/tests/test_manager.py index 0b4e5a4eac..0e6b0fb2b2 100644 --- a/notebook/services/contents/tests/test_manager.py +++ b/notebook/services/contents/tests/test_manager.py @@ -300,6 +300,12 @@ def test_new_untitled(self): self.assertEqual(model['name'], 'untitled') self.assertEqual(model['path'], '%s/untitled' % sub_dir) + # Test with a compound extension + model = cm.new_untitled(path=sub_dir, ext='.foo.bar') + self.assertEqual(model['name'], 'untitled.foo.bar') + model = cm.new_untitled(path=sub_dir, ext='.foo.bar') + self.assertEqual(model['name'], 'untitled1.foo.bar') + def test_modified_date(self): cm = self.contents_manager From 915146ab3fa338a9ff88666a19835dacd70fea1a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Oct 2017 05:51:32 -0500 Subject: [PATCH 2/5] Clean up logic --- notebook/services/contents/manager.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/notebook/services/contents/manager.py b/notebook/services/contents/manager.py index af645a8519..34b91693e4 100644 --- a/notebook/services/contents/manager.py +++ b/notebook/services/contents/manager.py @@ -328,11 +328,9 @@ def increment_filename(self, filename, path='', insert=''): # Extract the full suffix from the filename (e.g. .tar.gz) dirname = os.path.dirname(filename) basename = os.path.basename(filename) - parts = basename.split('.') - basename = os.path.join(dirname, parts[0]) - suffix = '.' + '.'.join(parts[1:]) - if suffix == '.': - suffix = '' + name, dot, ext = basename.partition('.') + basename = os.path.join(dirname, name) + suffix = dot + ext for i in itertools.count(): if i: From e95cd6d820c418eba8defa639b93c3979a4ed086 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Oct 2017 05:55:53 -0500 Subject: [PATCH 3/5] More logic cleanup --- notebook/services/contents/manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notebook/services/contents/manager.py b/notebook/services/contents/manager.py index 34b91693e4..0bf9da81c1 100644 --- a/notebook/services/contents/manager.py +++ b/notebook/services/contents/manager.py @@ -326,8 +326,8 @@ def increment_filename(self, filename, path='', insert=''): A filename that is unique, based on the input filename. """ # Extract the full suffix from the filename (e.g. .tar.gz) - dirname = os.path.dirname(filename) - basename = os.path.basename(filename) + path = path.strip('/') + dirname, basename = os.path.split(filename) name, dot, ext = basename.partition('.') basename = os.path.join(dirname, name) suffix = dot + ext From e1533d53982eeaca6ed75cfee805f7c60eeef02d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Oct 2017 07:48:51 -0500 Subject: [PATCH 4/5] Clean up logic --- notebook/services/contents/manager.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/notebook/services/contents/manager.py b/notebook/services/contents/manager.py index 0bf9da81c1..48b56728c8 100644 --- a/notebook/services/contents/manager.py +++ b/notebook/services/contents/manager.py @@ -327,9 +327,7 @@ def increment_filename(self, filename, path='', insert=''): """ # Extract the full suffix from the filename (e.g. .tar.gz) path = path.strip('/') - dirname, basename = os.path.split(filename) - name, dot, ext = basename.partition('.') - basename = os.path.join(dirname, name) + name, dot, ext = filename.partition('.') suffix = dot + ext for i in itertools.count(): @@ -337,9 +335,9 @@ def increment_filename(self, filename, path='', insert=''): insert_i = '{}{}'.format(insert, i) else: insert_i = '' - name = u'{basename}{insert}{suffix}'.format(basename=basename, + name = u'{name}{insert}{suffix}'.format(name=name, insert=insert_i, suffix=suffix) - if not self.exists(os.path.join(path, name)): + if not self.exists(u'{}/{}'.format(path, name)): break return name From 7e71c000b0fafb81413471c6455bddf5bbbca015 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Oct 2017 07:50:48 -0500 Subject: [PATCH 5/5] Rename variable --- notebook/services/contents/manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notebook/services/contents/manager.py b/notebook/services/contents/manager.py index 48b56728c8..3cbcbb147c 100644 --- a/notebook/services/contents/manager.py +++ b/notebook/services/contents/manager.py @@ -327,7 +327,7 @@ def increment_filename(self, filename, path='', insert=''): """ # Extract the full suffix from the filename (e.g. .tar.gz) path = path.strip('/') - name, dot, ext = filename.partition('.') + basename, dot, ext = filename.partition('.') suffix = dot + ext for i in itertools.count(): @@ -335,7 +335,7 @@ def increment_filename(self, filename, path='', insert=''): insert_i = '{}{}'.format(insert, i) else: insert_i = '' - name = u'{name}{insert}{suffix}'.format(name=name, + name = u'{basename}{insert}{suffix}'.format(basename=basename, insert=insert_i, suffix=suffix) if not self.exists(u'{}/{}'.format(path, name)): break