dcicutils 8.8.4.1b26__py3-none-any.whl → 8.8.4.1b28__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
dcicutils/file_utils.py CHANGED
@@ -16,7 +16,8 @@ HOME_DIRECTORY = str(pathlib.Path().home())
16
16
  def search_for_file(file: str,
17
17
  location: Union[str, Optional[List[str]]] = None,
18
18
  recursive: bool = False,
19
- single: bool = False) -> Union[List[str], Optional[str]]:
19
+ single: bool = False,
20
+ order: bool = True) -> Union[List[str], Optional[str]]:
20
21
  """
21
22
  Searches for the existence of the given file name, first directly in the given directory or list
22
23
  of directories, if specified, and if not then just in the current (working) directory; if the
@@ -25,6 +26,11 @@ def search_for_file(file: str,
25
26
  first file which is found is returns (as a string), or None if none; if the single flag
26
27
  is False, then all matched files are returned in a list, or and empty list if none.
27
28
  """
29
+ def order_by_fewest_number_of_paths_and_then_alphabetically(paths: List[str]) -> List[str]:
30
+ def order_by(path: str):
31
+ return len(path.split(os.path.sep)), path
32
+ return sorted(paths, key=order_by)
33
+
28
34
  if not (file and isinstance(file, (str, pathlib.PosixPath))):
29
35
  return None if single is True else []
30
36
  if os.path.isabs(file):
@@ -74,9 +80,12 @@ def search_for_file(file: str,
74
80
  return file_found
75
81
  if file_found not in files_found:
76
82
  files_found.append(file_found)
77
- if files_found:
78
- return files_found[0] if single is True else files_found
79
- return None if single is True else []
83
+ if single is True:
84
+ return files_found[0] if files_found else None
85
+ elif order is True:
86
+ return order_by_fewest_number_of_paths_and_then_alphabetically(files_found)
87
+ else:
88
+ return files_found
80
89
 
81
90
 
82
91
  def normalize_path(value: Union[str, pathlib.Path], absolute: bool = False, expand_home: Optional[bool] = None) -> str:
@@ -97,8 +106,11 @@ def normalize_path(value: Union[str, pathlib.Path], absolute: bool = False, expa
97
106
  return ""
98
107
  if expand_home is True:
99
108
  value = os.path.expanduser(value)
100
- elif (expand_home is False) and (os.name == "posix") and value.startswith(home := HOME_DIRECTORY + os.sep):
101
- value = "~/" + value[len(home):]
109
+ elif (expand_home is False) and (os.name == "posix"):
110
+ if value.startswith(home := HOME_DIRECTORY + os.sep):
111
+ value = "~/" + value[len(home):]
112
+ elif value == HOME_DIRECTORY:
113
+ value = "~"
102
114
  if absolute is True:
103
115
  value = os.path.abspath(value)
104
116
  return value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.8.4.1b26
3
+ Version: 8.8.4.1b28
4
4
  Summary: Utility package for interacting with the 4DN Data Portal and other 4DN resources
5
5
  Home-page: https://github.com/4dn-dcic/utils
6
6
  License: MIT
@@ -28,7 +28,7 @@ dcicutils/es_utils.py,sha256=ZksLh5ei7kRUfiFltk8sd2ZSfh15twbstrMzBr8HNw4,7541
28
28
  dcicutils/exceptions.py,sha256=4giQGtpak-omQv7BP6Ckeu91XK5fnDosC8gfdmN_ccA,9931
29
29
  dcicutils/ff_mocks.py,sha256=6RKS4eUiu_Wl8yP_8V0CaV75w4ZdWxdCuL1CVlnMrek,36918
30
30
  dcicutils/ff_utils.py,sha256=oIhuZPnGtfwj6bWyCc1u23JbMB_6InPp01ZqUOljd8M,73123
31
- dcicutils/file_utils.py,sha256=sAWOMzP-6B5WcudFhsEigW_ow20Tvzn-KMMbSUmejN0,10390
31
+ dcicutils/file_utils.py,sha256=eJ3aErsNPoh9pTsuIiCphQdLB7UFBMr5lAr3s20zGpM,10827
32
32
  dcicutils/function_cache_decorator.py,sha256=XMyiEGODVr2WoAQ68vcoX_9_Xb9p8pZXdXl7keU8i2g,10026
33
33
  dcicutils/glacier_utils.py,sha256=Q4CVXsZCbP-SoZIsZ5NMcawDfelOLzbQnIlQn-GdlTo,34149
34
34
  dcicutils/http_utils.py,sha256=tNfH5JA-OwbQKEvD5HPJ3lcp2TSIZ4rnl__4d4JO8Gw,1583
@@ -73,8 +73,8 @@ dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769
73
73
  dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
74
74
  dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
75
75
  dcicutils/zip_utils.py,sha256=_Y9EmL3D2dUZhxucxHvrtmmlbZmK4FpSsHEb7rGSJLU,3265
76
- dcicutils-8.8.4.1b26.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
- dcicutils-8.8.4.1b26.dist-info/METADATA,sha256=sCYQvCovlXbMTOECG1ptQS_QUk5mld085Pke5YzLrEk,3440
78
- dcicutils-8.8.4.1b26.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
- dcicutils-8.8.4.1b26.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
- dcicutils-8.8.4.1b26.dist-info/RECORD,,
76
+ dcicutils-8.8.4.1b28.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
+ dcicutils-8.8.4.1b28.dist-info/METADATA,sha256=zSzr_ul8wG_uJihBWWF4byeivbtgiGZpFAibziXrstg,3440
78
+ dcicutils-8.8.4.1b28.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
+ dcicutils-8.8.4.1b28.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
+ dcicutils-8.8.4.1b28.dist-info/RECORD,,