Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. import os
  2. from collections import OrderedDict
  3. import panel as pn
  4.  
  5. path = os.getcwd()
  6.  
  7. down = '│'
  8. right = '└──'
  9.  
  10. def expand_dir(event):
  11. """For a dir - populate with subdirs"""
  12. def has_children(parent):
  13. return os.path.isdir(parent)
  14.  
  15. def get_children(parent):
  16. return sorted(os.listdir(got))
  17.  
  18. def populate_value(parent, child):
  19. return os.path.join(parent, child)
  20.  
  21. got = event.new[0]
  22. obj = event.obj
  23. old = list(event.obj.options.items())
  24. name = next(k for k, v in old if v == got)
  25. index = next(i for i, (k, v) in enumerate(old) if v == got)
  26. if right in name:
  27. prefix = f'{name.split(right)[0]}{down} {right}'
  28. else:
  29. prefix = right
  30.  
  31. if has_children(got):
  32. items = get_children(got)
  33. for i, item in enumerate(items):
  34. value = populate_value(got, item)
  35. old.insert(index+i+1, (f'{prefix} {item}', value))
  36. event.obj.options = dict(old)
  37.  
  38. items = [p for p in sorted(os.listdir(path)) if not p.startswith('.')]
  39. options = OrderedDict(zip(items, (os.path.join(path, item) for item in items)))
  40. select = pn.widgets.MultiSelect(options=options, size=14)
  41. select.param.watch(expand_dir, 'value')
  42.  
  43. row = pn.Row(select)
  44. row.servable()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement