Skip to content

Commit

Permalink
filename generation tests #102
Browse files Browse the repository at this point in the history
  • Loading branch information
clach04 committed Dec 9, 2023
1 parent ef1acf8 commit ad58d52
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 8 deletions.
31 changes: 24 additions & 7 deletions puren_tonbo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1103,6 +1103,7 @@ def note_contents_save_native_filename(note_text, filename=None, original_filena
"""Uses native/local file system IO api
@handler is the encryption file handler to use, that is already initialized with a password
@note_encoding if None, assume note_text is bytes, if a string use as the encoding, can also be a list, e.g. ['utf8', 'cp1252'] in which case use the first one
folder - if specified (new) filename and original_filename are relative. if missing filename and original_filename are absolute
"""
# Start - restrictions/checks that should be removed
if original_filename is not None:
Expand All @@ -1113,15 +1114,30 @@ def note_contents_save_native_filename(note_text, filename=None, original_filena
if handler is None:
raise NotImplementedError('handler is required')
if filename is None:
if folder:
# relative path names for files as given as input to this function
if original_filename:
original_filename = os.path.join(folder, original_filename) # TODO abspath for safety?
folder = os.path.dirname(original_filename)
else:
# folder not set, so absolute paths given as input to this function
folder = os.path.dirname(original_filename)

validate_filename_generator(filename_generator)
filename_generator_func = filename_generators[filename_generator]
file_extension = handler.extensions[0] # pick the first one
filename_without_path_and_extension = filename_generator_func(note_text)

filename = os.path.join(folder, filename_without_path_and_extension + file_extension)
# now check if generated filename already exists, if so need to make unique
unique_counter = 1
while os.path.exists(filename):
#log.warn('generated filename %r already exists', filename)
unique_part = '(%d)' % unique_counter # match Tombo duplicate names avoidance
filename = os.path.join(folder, filename_without_path_and_extension + unique_part + file_extension)
unique_counter += 1

# TODO handle format conversion (e.g. original text, new encrypted)
if original_filename:
filename = os.path.join(os.path.dirname(original_filename), filename_without_path_and_extension + file_extension)
else:
filename = os.path.join(folder, filename_without_path_and_extension + file_extension)
log.debug('generated filename: %r', filename)
else:
filename = unicode_path(filename)
Expand Down Expand Up @@ -1730,13 +1746,14 @@ def note_contents_save(self, note_text, filename=None, original_filename=None, f
raise NotImplementedError('incompatible/inconsistent original_filename: %r folder: %r ' % (original_filename, folder))
if filename is None and original_filename:
raise NotImplementedError('renaming files base on content - incompatible/inconsistent original_filename: %r filename: %r ' % (original_filename, filename))
validate_filename_generator(filename_generator)
filename_generator_func = filename_generators[filename_generator]
if filename_generator:
validate_filename_generator(filename_generator)
filename_generator_func = filename_generators[filename_generator]


if original_filename:
# TODO just use the old name? or handle rename. rename depends on filename generator
if filename_generator in (FILENAME_TIMESTAMP, FILENAME_UUID4):
if filename_generator in (None, FILENAME_TIMESTAMP, FILENAME_UUID4):
# do not rename... or they could have passed in the "new name"
filename = original_filename

Expand Down
17 changes: 16 additions & 1 deletion puren_tonbo/tests/testsuite.py
Original file line number Diff line number Diff line change
Expand Up @@ -641,10 +641,10 @@ def do_one_test(self, buffer_plain_str, new_filename=None, original_filename=Non
"""
if password:
kwargs['get_pass'] = password
#import pdb ; pdb.set_trace()
if handler_class:
kwargs['handler_class'] = handler_class

#pdb.set_trace()
note_root = puren_tonbo.FileSystemNotes(folder, self.note_encoding)
note_root.note_contents_save(buffer_plain_str, **kwargs)

Expand All @@ -668,6 +668,20 @@ def do_one_test(self, buffer_plain_str, new_filename=None, original_filename=Non
if os.path.exists(full_pathname):
os.remove(full_pathname) # TODO ignore does not exist errors (only), for now skip attempt

def test_filename_gen_one_with_password_already_exist(self):
buffer_plain_str = '''one
file one.
'''
#pdb.set_trace()
file_extension = self.handler_class.extensions[0] # pick the first one
folder = self.data_folder
note_root = puren_tonbo.FileSystemNotes(folder, self.note_encoding)
note_root.note_contents_save('junk', filename='one' + file_extension, filename_generator=None)

self.do_one_test(buffer_plain_str, dos_newlines=False, test_password_bytes=self.test_password_bytes, expected_filenames=['one(1)' + file_extension, 'one' + file_extension])

def test_filename_gen_one_with_password(self):
buffer_plain_str = '''one
Expand Down Expand Up @@ -722,6 +736,7 @@ def do_one_test(self, buffer_plain_str, new_filename=None, original_filename=Non
if handler:
kwargs['handler'] = handler

#pdb.set_trace()
puren_tonbo.note_contents_save_filename(buffer_plain_str, **kwargs)

# load / decrypt / validation
Expand Down

0 comments on commit ad58d52

Please sign in to comment.