Skip to content

Commit 2e33ee6

Browse files
committed
Disable folder creation if no write permission
1 parent e753146 commit 2e33ee6

1 file changed

Lines changed: 30 additions & 9 deletions

File tree

tkfilebrowser/filebrowser.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323

2424
import psutil
25-
from os import walk, mkdir, stat
25+
from os import walk, mkdir, stat, access, W_OK
2626
from os.path import exists, join, getmtime, realpath, split, expanduser, \
2727
abspath, isabs, splitext, dirname, getsize, isdir, isfile, islink
2828
try:
@@ -909,7 +909,9 @@ def _display_folder_walk(self, folder, reset=True, update_bar=True):
909909
* reset (boolean): forget all the part of the history right of self._hist_index
910910
* update_bar (boolean): update the buttons in path bar
911911
"""
912-
folder = abspath(folder) # remove trailing / if any
912+
# remove trailing / if any
913+
folder = abspath(folder)
914+
# reorganize display if previous was 'recent'
913915
if not self.path_bar.winfo_ismapped():
914916
self.path_bar.grid()
915917
self.right_tree.configure(displaycolumns=("size", "date"))
@@ -921,14 +923,22 @@ def _display_folder_walk(self, folder, reset=True, update_bar=True):
921923
self.right_tree.column("date", width=120)
922924
if self.foldercreation:
923925
self.b_new_folder.grid()
924-
if reset: # reset history
926+
# reset history
927+
if reset:
925928
if not self._hist_index == -1:
926929
self.history = self.history[:self._hist_index + 1]
927930
self._hist_index = -1
928931
self.history.append(folder)
929-
if update_bar: # update path bar
932+
# update path bar
933+
if update_bar:
930934
self._update_path_bar(folder)
931935
self.path_var.set(folder)
936+
# disable new folder creation if no write access
937+
if self.foldercreation:
938+
if access(folder, W_OK):
939+
self.b_new_folder.state(('!disabled',))
940+
else:
941+
self.b_new_folder.state(('disabled',))
932942
# clear self.right_tree
933943
self.right_tree.delete(*self.right_tree.get_children(""))
934944
self.right_tree.delete(*self.hidden)
@@ -1033,7 +1043,9 @@ def _display_folder_scandir(self, folder, reset=True, update_bar=True):
10331043
* reset (boolean): forget all the part of the history right of self._hist_index
10341044
* update_bar (boolean): update the buttons in path bar
10351045
"""
1036-
folder = abspath(folder) # remove trailing / if any
1046+
# remove trailing / if any
1047+
folder = abspath(folder)
1048+
# reorganize display if previous was 'recent'
10371049
if not self.path_bar.winfo_ismapped():
10381050
self.path_bar.grid()
10391051
self.right_tree.configure(displaycolumns=("size", "date"))
@@ -1045,14 +1057,22 @@ def _display_folder_scandir(self, folder, reset=True, update_bar=True):
10451057
self.right_tree.column("date", width=120)
10461058
if self.foldercreation:
10471059
self.b_new_folder.grid()
1048-
if reset: # reset history
1060+
# reset history
1061+
if reset:
10491062
if not self._hist_index == -1:
10501063
self.history = self.history[:self._hist_index + 1]
10511064
self._hist_index = -1
10521065
self.history.append(folder)
1053-
if update_bar: # update path bar
1066+
# update path bar
1067+
if update_bar:
10541068
self._update_path_bar(folder)
10551069
self.path_var.set(folder)
1070+
# disable new folder creation if no write access
1071+
if self.foldercreation:
1072+
if access(folder, W_OK):
1073+
self.b_new_folder.state(('!disabled',))
1074+
else:
1075+
self.b_new_folder.state(('disabled',))
10561076
# clear self.right_tree
10571077
self.right_tree.delete(*self.right_tree.get_children(""))
10581078
self.right_tree.delete(*self.hidden)
@@ -1101,7 +1121,6 @@ def ok(event):
11011121
name = e.get()
11021122
e.destroy()
11031123
if name:
1104-
path = self.history[self._hist_index]
11051124
folder = join(path, name)
11061125
try:
11071126
mkdir(folder)
@@ -1114,7 +1133,9 @@ def cancel(event):
11141133
e.destroy()
11151134
self.right_tree.delete("tmp")
11161135

1117-
if self.path_bar.winfo_ismapped():
1136+
path = self.path_var.get()
1137+
1138+
if self.path_bar.winfo_ismapped() and access(path, W_OK):
11181139
self.right_tree.insert("", 0, "tmp", tags=("folder", "1"))
11191140
self.right_tree.see("tmp")
11201141
e = ttk.Entry(self)

0 commit comments

Comments
 (0)