Sorted data transfer sources for menu_select
This commit is contained in:
parent
b0068e0dce
commit
26c1a47fec
1 changed files with 32 additions and 11 deletions
|
|
@ -391,6 +391,8 @@ def select_destination(folder_path, prompt='Select destination'):
|
||||||
def select_source(ticket_number):
|
def select_source(ticket_number):
|
||||||
"""Select backup from those found on the BACKUP_SERVERS for the ticket."""
|
"""Select backup from those found on the BACKUP_SERVERS for the ticket."""
|
||||||
selected_source = None
|
selected_source = None
|
||||||
|
local_sources = []
|
||||||
|
remote_sources = []
|
||||||
sources = []
|
sources = []
|
||||||
mount_backup_shares()
|
mount_backup_shares()
|
||||||
|
|
||||||
|
|
@ -401,36 +403,41 @@ def select_source(ticket_number):
|
||||||
for d in os.scandir(r'\\{IP}\{Share}'.format(**server)):
|
for d in os.scandir(r'\\{IP}\{Share}'.format(**server)):
|
||||||
if (d.is_dir()
|
if (d.is_dir()
|
||||||
and d.name.lower().startswith(ticket_number.lower())):
|
and d.name.lower().startswith(ticket_number.lower())):
|
||||||
# Add folder to sources
|
# Add folder to remote_sources
|
||||||
sources.append({
|
remote_sources.append({
|
||||||
'Name': '{:9}| File-Based: [DIR] {}'.format(
|
'Name': '{:9}| File-Based: [DIR] {}'.format(
|
||||||
server['Name'], d.name),
|
server['Name'], d.name),
|
||||||
'Server': server,
|
'Server': server,
|
||||||
|
'Sort': d.name,
|
||||||
'Source': d})
|
'Source': d})
|
||||||
|
|
||||||
# Check for images and subfolders
|
# Check for images and subfolders
|
||||||
for ticket_path in sources.copy():
|
for ticket_path in remote_sources.copy():
|
||||||
for item in os.scandir(ticket_path['Source'].path):
|
for item in os.scandir(ticket_path['Source'].path):
|
||||||
if item.is_dir():
|
if item.is_dir():
|
||||||
# Add folder to sources
|
# Add folder to remote_sources
|
||||||
sources.append({
|
remote_sources.append({
|
||||||
'Name': r'{:9}| File-Based: [DIR] {}\{}'.format(
|
'Name': r'{:9}| File-Based: [DIR] {}\{}'.format(
|
||||||
ticket_path['Server']['Name'], # Server
|
ticket_path['Server']['Name'], # Server
|
||||||
ticket_path['Source'].name, # Ticket folder
|
ticket_path['Source'].name, # Ticket folder
|
||||||
item.name, # Sub-folder
|
item.name, # Sub-folder
|
||||||
),
|
),
|
||||||
'Server': ticket_path['Server'],
|
'Server': ticket_path['Server'],
|
||||||
|
'Sort': r'{}\{}'.format(
|
||||||
|
ticket_path['Source'].name, # Ticket folder
|
||||||
|
item.name, # Sub-folder
|
||||||
|
),
|
||||||
'Source': item})
|
'Source': item})
|
||||||
|
|
||||||
# Check for images in folder
|
# Check for images in folder
|
||||||
for subitem in os.scandir(item.path):
|
for subitem in os.scandir(item.path):
|
||||||
if REGEX_WIM_FILE.search(item.name):
|
if REGEX_WIM_FILE.search(item.name):
|
||||||
# Add image to sources
|
# Add image to remote_sources
|
||||||
try:
|
try:
|
||||||
size = human_readable_size(item.stat().st_size)
|
size = human_readable_size(item.stat().st_size)
|
||||||
except Exception:
|
except Exception:
|
||||||
size = ' ? ?' # unknown
|
size = ' ? ?' # unknown
|
||||||
sources.append({
|
remote_sources.append({
|
||||||
'Disabled': bool(not is_valid_wim_file(subitem)),
|
'Disabled': bool(not is_valid_wim_file(subitem)),
|
||||||
'Name': r'{:9}| Image-Based: {:>7} {}\{}\{}'.format(
|
'Name': r'{:9}| Image-Based: {:>7} {}\{}\{}'.format(
|
||||||
ticket_path['Server']['Name'], # Server
|
ticket_path['Server']['Name'], # Server
|
||||||
|
|
@ -440,14 +447,19 @@ def select_source(ticket_number):
|
||||||
subitem.name, # Image file
|
subitem.name, # Image file
|
||||||
),
|
),
|
||||||
'Server': ticket_path['Server'],
|
'Server': ticket_path['Server'],
|
||||||
|
'Sort': r'{}\{}\{}'.format(
|
||||||
|
ticket_path['Source'].name, # Ticket folder
|
||||||
|
item.name, # Sub-folder
|
||||||
|
subitem.name, # Image file
|
||||||
|
),
|
||||||
'Source': subitem})
|
'Source': subitem})
|
||||||
elif REGEX_WIM_FILE.search(item.name):
|
elif REGEX_WIM_FILE.search(item.name):
|
||||||
# Add image to sources
|
# Add image to remote_sources
|
||||||
try:
|
try:
|
||||||
size = human_readable_size(item.stat().st_size)
|
size = human_readable_size(item.stat().st_size)
|
||||||
except Exception:
|
except Exception:
|
||||||
size = ' ? ?' # unknown
|
size = ' ? ?' # unknown
|
||||||
sources.append({
|
remote_sources.append({
|
||||||
'Disabled': bool(not is_valid_wim_file(item)),
|
'Disabled': bool(not is_valid_wim_file(item)),
|
||||||
'Name': r'{:9}| Image-Based: {:>7} {}\{}'.format(
|
'Name': r'{:9}| Image-Based: {:>7} {}\{}'.format(
|
||||||
ticket_path['Server']['Name'], # Server
|
ticket_path['Server']['Name'], # Server
|
||||||
|
|
@ -456,7 +468,12 @@ def select_source(ticket_number):
|
||||||
item.name, # Image file
|
item.name, # Image file
|
||||||
),
|
),
|
||||||
'Server': ticket_path['Server'],
|
'Server': ticket_path['Server'],
|
||||||
|
'Sort': r'{}\{}'.format(
|
||||||
|
ticket_path['Source'].name, # Ticket folder
|
||||||
|
item.name, # Image file
|
||||||
|
),
|
||||||
'Source': item})
|
'Source': item})
|
||||||
|
|
||||||
# Check for local sources
|
# Check for local sources
|
||||||
print_standard('Scanning for local sources...')
|
print_standard('Scanning for local sources...')
|
||||||
set_thread_error_mode(silent=True) # Prevents "No disk" popups
|
set_thread_error_mode(silent=True) # Prevents "No disk" popups
|
||||||
|
|
@ -467,14 +484,18 @@ def select_source(ticket_number):
|
||||||
continue
|
continue
|
||||||
if 'fixed' in d.opts:
|
if 'fixed' in d.opts:
|
||||||
# Skip DVD, etc
|
# Skip DVD, etc
|
||||||
sources.append({
|
local_sources.append({
|
||||||
'Name': '{:9}| File-Based: [DISK] {}'.format(
|
'Name': '{:9}| File-Based: [DISK] {}'.format(
|
||||||
' Local', d.mountpoint),
|
' Local', d.mountpoint),
|
||||||
|
'Sort': d.mountpoint,
|
||||||
'Source': LocalDisk(d)})
|
'Source': LocalDisk(d)})
|
||||||
set_thread_error_mode(silent=False) # Return to normal
|
set_thread_error_mode(silent=False) # Return to normal
|
||||||
|
|
||||||
# Build Menu
|
# Build Menu
|
||||||
sources.sort(key=itemgetter('Name'))
|
local_sources.sort(key=itemgetter('Sort'))
|
||||||
|
remote_sources.sort(key=itemgetter('Sort'))
|
||||||
|
sources.extend(local_sources)
|
||||||
|
sources.extend(remote_sources)
|
||||||
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
||||||
|
|
||||||
# Select backup from sources
|
# Select backup from sources
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue