def test_readable_timestamp(self): """ Check readable_timestamp works as expected. """ # Check formatting works as expected. self.assertEquals("12:01:02AM", readable_timestamp( time.mktime(datetime.now().replace(hour=0, minute=1, second=2).timetuple()))) self.assertEquals("1999-01-02", readable_timestamp( time.mktime(datetime.now().replace(year=1999, month=1, day=2).timetuple())))
def _populate_list(self, value): """ Populate the current multi-column list with the contents of the selected directory. :param value: The new value to use. """ # Nothing to do if the value is rubbish. if value is None: return # Stop any recursion - no more returns from here to end of fn please! if self._in_update: return self._in_update = True # We need to update the tree view. self._root = os.path.abspath(value if os.path.isdir(value) else os.path.dirname(value)) # The absolute expansion of "/" or "\" is the root of the disk, so is a cross-platform # way of spotting when to insert ".." or not. tree_view = [] if len(self._root) > len(os.path.abspath(os.sep)): tree_view.append((["|-+ .."], os.path.abspath(os.path.join(self._root, "..")))) tree_dirs = [] tree_files = [] try: files = os.listdir(self._root) except OSError: # Can fail on Windows due to access permissions files = [] for my_file in files: full_path = os.path.join(self._root, my_file) try: details = os.lstat(full_path) except OSError: # Can happen on Windows due to access permissions details = namedtuple("stat_type", "st_size st_mtime") details.st_size = 0 details.st_mtime = 0 name = "|-- {}".format(my_file) tree = tree_files if os.path.isdir(full_path): tree = tree_dirs if os.path.islink(full_path): # Show links separately for directories real_path = os.path.realpath(full_path) name = "|-+ {} -> {}".format(my_file, real_path) else: name = "|-+ {}".format(my_file) elif self._file_filter and not self._file_filter.match(my_file): # Skip files that don't match the filter (if present) continue elif os.path.islink(full_path): # Check if link target exists and if it does, show statistics of the # linked file, otherwise just display the link try: real_path = os.path.realpath(full_path) except OSError: # Can fail on Linux prof file system. real_path = None if real_path and os.path.exists(real_path): details = os.stat(real_path) name = "|-- {} -> {}".format(my_file, real_path) else: # Both broken directory and file links fall to this case. # Actually using the files will cause a FileNotFound exception name = "|-- {} -> {}".format(my_file, real_path) # Normalize names for MacOS and then add to the list. tree.append(([unicodedata.normalize("NFC", name), readable_mem(details.st_size), readable_timestamp(details.st_mtime)], full_path)) tree_view.extend(sorted(tree_dirs)) tree_view.extend(sorted(tree_files)) self.options = tree_view self._titles[0] = self._root # We're out of the function - unset recursion flag. self._in_update = False