dcicutils 8.8.4.1b24__py3-none-any.whl → 8.8.4.1b27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
dcicutils/file_utils.py CHANGED
@@ -97,28 +97,35 @@ def normalize_path(value: Union[str, pathlib.Path], absolute: bool = False, expa
97
97
  return ""
98
98
  if expand_home is True:
99
99
  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):]
100
+ elif (expand_home is False) and (os.name == "posix"):
101
+ if value.startswith(home := HOME_DIRECTORY + os.sep):
102
+ value = "~/" + value[len(home):]
103
+ elif value == HOME_DIRECTORY:
104
+ value = "~"
102
105
  if absolute is True:
103
106
  value = os.path.abspath(value)
104
107
  return value
105
108
 
106
109
 
107
- def get_file_size(file: str) -> Optional[int]:
110
+ def get_file_size(file: str, raise_exception: bool = True) -> Optional[int]:
108
111
  try:
109
112
  return os.path.getsize(file) if isinstance(file, str) else None
110
113
  except Exception:
114
+ if raise_exception is True:
115
+ raise
111
116
  return None
112
117
 
113
118
 
114
- def get_file_modified_datetime(file: str) -> Optional[datetime]:
119
+ def get_file_modified_datetime(file: str, raise_exception: bool = True) -> Optional[datetime]:
115
120
  try:
116
121
  return datetime.fromtimestamp(os.path.getmtime(file)) if isinstance(file, str) else None
117
122
  except Exception:
123
+ if raise_exception is True:
124
+ raise
118
125
  return None
119
126
 
120
127
 
121
- def are_files_equal(filea: str, fileb: str) -> bool:
128
+ def are_files_equal(filea: str, fileb: str, raise_exception: bool = True) -> bool:
122
129
  """
123
130
  Returns True iff the contents of the two given files are exactly the same.
124
131
  """
@@ -135,10 +142,12 @@ def are_files_equal(filea: str, fileb: str) -> bool:
135
142
  break
136
143
  return True
137
144
  except Exception:
145
+ if raise_exception is True:
146
+ raise
138
147
  return False
139
148
 
140
149
 
141
- def compute_file_md5(file: str) -> str:
150
+ def compute_file_md5(file: str, raise_exception: bool = True) -> str:
142
151
  """
143
152
  Returns the md5 checksum for the given file.
144
153
  """
@@ -151,10 +160,12 @@ def compute_file_md5(file: str) -> str:
151
160
  md5.update(chunk)
152
161
  return md5.hexdigest()
153
162
  except Exception:
163
+ if raise_exception is True:
164
+ raise
154
165
  return ""
155
166
 
156
167
 
157
- def compute_file_etag(file: str) -> Optional[str]:
168
+ def compute_file_etag(file: str, raise_exception: bool = True) -> Optional[str]:
158
169
  """
159
170
  Returns the AWS S3 "etag" for the given file; this value is md5-like but
160
171
  not the same as a normal md5. We use this to compare that a file in S3
@@ -164,6 +175,8 @@ def compute_file_etag(file: str) -> Optional[str]:
164
175
  with io.open(file, "rb") as f:
165
176
  return _compute_file_etag(f)
166
177
  except Exception:
178
+ if raise_exception is True:
179
+ raise
167
180
  return None
168
181
 
169
182
 
dcicutils/http_utils.py CHANGED
@@ -8,24 +8,32 @@ from dcicutils.tmpfile_utils import temporary_file
8
8
  def download(url: str, suffix: Optional[str] = None, binary: bool = True,
9
9
  progress: Optional[Callable] = None) -> Optional[str]:
10
10
  """
11
- Context manager to ownload the given URL into a temporary file and yields the file
12
- path to it. An optional file suffix may be specified. Defaults to binary file mode;
13
- if this is not desired then pass False as the binary argument.
11
+ Context manager to download the given URL into a temporary file and yields the file
12
+ path to it. An optional file suffix may be specified for this temporary file name.
13
+ Defaults to binary file mode; if not desired then pass False as the binary argument.
14
14
  """
15
- if not callable(progress):
16
- progress = None
17
15
  with temporary_file(suffix=suffix) as file:
18
- response = requests.get(url, stream=True)
19
- if progress:
20
- nbytes = 0
21
- nbytes_total = None
22
- if isinstance(content_length := response.headers.get("Content-Length"), str) and content_length.isdigit():
23
- nbytes_total = int(content_length)
24
- with open(file, "wb" if binary is True else "w") as f:
25
- for chunk in response.iter_content(chunk_size=8192):
26
- if chunk:
27
- f.write(chunk)
28
- if progress:
29
- nbytes += len(chunk)
30
- progress(nbytes, nbytes_total)
16
+ download_to(url, file, binary=binary, progress=progress)
31
17
  yield file
18
+
19
+
20
+ def download_to(url: str, file: str, binary: bool = True, progress: Optional[Callable] = None) -> None:
21
+ """
22
+ Download the given URL into the given file. Defaults to binary
23
+ file mode; if not desired then pass False as the binary argument.
24
+ """
25
+ if not callable(progress):
26
+ progress = None
27
+ response = requests.get(url, stream=True)
28
+ if progress:
29
+ nbytes = 0
30
+ nbytes_total = None
31
+ if isinstance(content_length := response.headers.get("Content-Length"), str) and content_length.isdigit():
32
+ nbytes_total = int(content_length)
33
+ with open(file, "wb" if binary is True else "w") as f:
34
+ for chunk in response.iter_content(chunk_size=8192):
35
+ if chunk:
36
+ f.write(chunk)
37
+ if progress:
38
+ nbytes += len(chunk)
39
+ progress(nbytes, nbytes_total)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.8.4.1b24
3
+ Version: 8.8.4.1b27
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,10 +28,10 @@ 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=WKEe985ioa9QNHVllRp8gxaKxB7hAnN-anKnz4CPfv4,9970
31
+ dcicutils/file_utils.py,sha256=9JRyXciF7AoDKWRBryglsMg5f3VGL_ymg_hSMnxUVKk,10464
32
32
  dcicutils/function_cache_decorator.py,sha256=XMyiEGODVr2WoAQ68vcoX_9_Xb9p8pZXdXl7keU8i2g,10026
33
33
  dcicutils/glacier_utils.py,sha256=Q4CVXsZCbP-SoZIsZ5NMcawDfelOLzbQnIlQn-GdlTo,34149
34
- dcicutils/http_utils.py,sha256=Je5ErNjR5e6lfSXGRncK_lcR_-zP38PIpmHjApy9Wi4,1289
34
+ dcicutils/http_utils.py,sha256=tNfH5JA-OwbQKEvD5HPJ3lcp2TSIZ4rnl__4d4JO8Gw,1583
35
35
  dcicutils/jh_utils.py,sha256=Gpsxb9XEzggF_-Eq3ukjKvTnuyb9V1SCSUXkXsES4Kg,11502
36
36
  dcicutils/kibana/dashboards.json,sha256=wHMB_mpJ8OaYhRRgvpZuihaB2lmSF64ADt_8hkBWgQg,16225
37
37
  dcicutils/kibana/readme.md,sha256=3KmHF9FH6A6xwYsNxRFLw27q0XzHYnjZOlYUnn3VkQQ,2164
@@ -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.1b24.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
- dcicutils-8.8.4.1b24.dist-info/METADATA,sha256=H9ymET-TyxVVJIAbebjNgrUh3CKcsveWK4ptxbhC5bo,3440
78
- dcicutils-8.8.4.1b24.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
- dcicutils-8.8.4.1b24.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
- dcicutils-8.8.4.1b24.dist-info/RECORD,,
76
+ dcicutils-8.8.4.1b27.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
+ dcicutils-8.8.4.1b27.dist-info/METADATA,sha256=j8Dc5eU279IAbIgHb1k4afO4eElDYIPF7zGZ9k9Dppo,3440
78
+ dcicutils-8.8.4.1b27.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
+ dcicutils-8.8.4.1b27.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
+ dcicutils-8.8.4.1b27.dist-info/RECORD,,