Skip to content

Commit

Permalink
FIX wsl conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgWa committed Jan 11, 2024
1 parent 157c3b4 commit 3c0b378
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 12 deletions.
20 changes: 10 additions & 10 deletions alphadia/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,14 @@ def parse_output_directory(args: argparse.Namespace, config: dict) -> str:
output_directory = None
if "output_directory" in config:
output_directory = (
utils.wsl_to_windows(config["output_directory"])
utils.windows_to_wsl(config["output_directory"])
if args.wsl
else config["output_directory"]
)

if args.output is not None:
output_directory = (
utils.wsl_to_windows(args.output) if args.wsl else args.output
utils.windows_to_wsl(args.output) if args.wsl else args.output
)

return output_directory
Expand Down Expand Up @@ -205,13 +205,13 @@ def parse_raw_path_list(args: argparse.Namespace, config: dict) -> list:
"""
config_raw_path_list = config["raw_path_list"] if "raw_path_list" in config else []
raw_path_list = (
utils.wsl_to_windows(config_raw_path_list) if args.wsl else config_raw_path_list
utils.windows_to_wsl(config_raw_path_list) if args.wsl else config_raw_path_list
)
raw_path_list += utils.wsl_to_windows(args.file) if args.wsl else args.file
raw_path_list += utils.windows_to_wsl(args.file) if args.wsl else args.file

config_directory = config["directory"] if "directory" in config else None
directory = utils.wsl_to_windows(config_directory) if args.wsl else config_directory
directory = utils.wsl_to_windows(args.directory) if args.wsl else args.directory
directory = utils.windows_to_wsl(config_directory) if args.wsl else config_directory
directory = utils.windows_to_wsl(args.directory) if args.wsl else args.directory

if directory is not None:
raw_path_list += [os.path.join(directory, f) for f in os.listdir(directory)]
Expand Down Expand Up @@ -253,11 +253,11 @@ def parse_library(args: argparse.Namespace, config: dict) -> str:
library = None
if "library" in config:
library = (
utils.wsl_to_windows(config["library"]) if args.wsl else config["library"]
utils.windows_to_wsl(config["library"]) if args.wsl else config["library"]
)

if args.library is not None:
library = utils.wsl_to_windows(args.library) if args.wsl else args.library
library = utils.windows_to_wsl(args.library) if args.wsl else args.library

return library

Expand Down Expand Up @@ -285,11 +285,11 @@ def parse_fasta(args: argparse.Namespace, config: dict) -> list:

config_fasta_path_list = config["fasta_list"] if "fasta_list" in config else []
fasta_path_list = (
utils.wsl_to_windows(config_fasta_path_list)
utils.windows_to_wsl(config_fasta_path_list)
if args.wsl
else config_fasta_path_list
)
fasta_path_list += utils.wsl_to_windows(args.fasta) if args.wsl else args.fasta
fasta_path_list += utils.windows_to_wsl(args.fasta) if args.wsl else args.fasta

return fasta_path_list

Expand Down
43 changes: 42 additions & 1 deletion alphadia/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import logging
from ctypes import Structure, c_double
import typing
import re

# alphadia imports

Expand Down Expand Up @@ -66,11 +67,51 @@ def wsl_to_windows(
"""
if isinstance(path, str):
return path.replace("/mnt/", "").replace("/", "\\")

disk_match = re.search(r'^/mnt/[a-z]', path)

if len(disk_match.group()) == 0:
raise ValueError('Could not find disk in path during wsl to windows conversion')

disk_letter = disk_match.group()[5].upper()

return re.sub(r'^/mnt/[a-z]', f'{disk_letter}:', path).replace('/', '\\')

elif isinstance(path, (list, tuple)):
return [wsl_to_windows(p) for p in path]
else:
raise ValueError(f"Unsupported type {type(path)}")

def windows_to_wsl(
path: typing.Union[str, list, tuple]
) -> typing.Union[str, list, tuple]:
"""Converts a Windows path to a WSL path.
Parameters
----------
path : str, list, tuple
Windows path.
Returns
-------
str, list, tuple
WSL path.
"""
if isinstance(path, str):
disk_match = re.search(r'^[A-Z]:', path)

if len(disk_match.group()) == 0:
raise ValueError('Could not find disk in path during windows to wsl conversion')

disk_letter = disk_match.group()[0].lower()

return re.sub(r'^[A-Z]:', f'/mnt/{disk_letter}', path.replace('\\', '/'))

elif isinstance(path, (list, tuple)):
return [windows_to_wsl(p) for p in path]
else:
raise ValueError(f"Unsupported type {type(path)}")


def recursive_update(full_dict: dict, update_dict: dict):
Expand Down
16 changes: 15 additions & 1 deletion tests/unit_tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import unittest

# local
from alphadia.utils import amean0, amean1, calculate_score_groups
from alphadia.utils import amean0, amean1, calculate_score_groups, wsl_to_windows, windows_to_wsl


# global
Expand Down Expand Up @@ -88,3 +88,17 @@ def test_score_groups():
assert np.allclose(
sample_df["score_group_idx"].values, np.array([0, 0, 1, 1, 2, 3, 4, 4, 5, 5])
)


def test_wsl_conversion():
test_path = "/mnt/c/Users/username/Documents/test.txt"
expected_path = "C:\\Users\\username\\Documents\\test.txt"

assert wsl_to_windows(test_path) == expected_path
assert windows_to_wsl(expected_path) == test_path

test_path = "/mnt/d/Users/us__.sdername/D ocuments/test.txt"
expected_path = "D:\\Users\\us__.sdername\\D ocuments\\test.txt"

assert wsl_to_windows(test_path) == expected_path
assert windows_to_wsl(expected_path) == test_path

0 comments on commit 3c0b378

Please sign in to comment.