dcicutils 8.8.4.1b10__py3-none-any.whl → 8.8.4.1b12__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
@@ -1,10 +1,12 @@
1
1
  import glob
2
2
  import os
3
3
  import pathlib
4
+ from datetime import datetime
4
5
  import random
5
6
  import string
7
+ from tempfile import gettempdir as get_temporary_directory
6
8
  from typing import List, Optional, Union
7
- from dcicutils.tmpfile_utils import create_temporary_file_name
9
+ from uuid import uuid4 as uuid
8
10
 
9
11
 
10
12
  def search_for_file(file: str,
@@ -103,7 +105,7 @@ def are_files_equal(filea: str, fileb: str) -> bool:
103
105
 
104
106
  def create_random_file(file: Optional[str] = None,
105
107
  prefix: Optional[str] = None, suffix: Optional[str] = None,
106
- nbytes: int = 1024, binary: bool = False) -> str:
108
+ nbytes: int = 1024, binary: bool = False, line_length: Optional[int] = None) -> str:
107
109
  if not isinstance(nbytes, int) or nbytes < 0:
108
110
  nbytes = 0
109
111
  if not isinstance(file, str) or not file:
@@ -111,16 +113,19 @@ def create_random_file(file: Optional[str] = None,
111
113
  prefix = ""
112
114
  if not isinstance(suffix, str):
113
115
  suffix = ""
114
- file = create_temporary_file_name(prefix=prefix, suffix=suffix)
116
+ file = f"{datetime.utcnow().strftime('%Y%m%d%H%M%S')}{str(uuid()).replace('-', '')}"
117
+ file = os.path.join(get_temporary_directory(), file)
115
118
  with open(file, "wb" if binary is True else "w") as f:
116
119
  if binary is True:
117
120
  f.write(os.urandom(nbytes))
118
121
  else:
119
- nchars = 81
120
- nlines = nbytes // nchars
121
- nremainder = nbytes % nchars
122
+ if (not isinstance(line_length, int)) or (line_length < 1):
123
+ line_length = 80
124
+ line_length += 1
125
+ nlines = nbytes // line_length
126
+ nremainder = nbytes % line_length
122
127
  for n in range(nlines):
123
- f.write("".join(random.choices(string.ascii_letters + string.digits, k=nchars - 1)))
128
+ f.write("".join(random.choices(string.ascii_letters + string.digits, k=line_length - 1)))
124
129
  f.write("\n")
125
130
  if nremainder > 1:
126
131
  f.write("".join(random.choices(string.ascii_letters + string.digits, k=nremainder - 1)))
@@ -1,8 +1,11 @@
1
1
  from contextlib import contextmanager
2
+ from datetime import datetime
2
3
  import os
3
4
  import shutil
4
5
  import tempfile
6
+ from uuid import uuid4 as uuid
5
7
  from typing import List, Optional, Union
8
+ from dcicutils.file_utils import create_random_file
6
9
 
7
10
 
8
11
  @contextmanager
@@ -25,6 +28,23 @@ def temporary_file(name: Optional[str] = None, suffix: Optional[str] = None,
25
28
  yield tmp_file_name
26
29
 
27
30
 
31
+ def create_temporary_file_name(prefix: Optional[str] = None, suffix: Optional[str] = None) -> str:
32
+ """
33
+ Generates and returns the full path to file within the system temporary directory.
34
+ """
35
+ tmp_file_name = f"{datetime.utcnow().strftime('%Y%m%d%H%M%S')}{str(uuid()).replace('-', '')}"
36
+ return os.path.join(tempfile.gettempdir(), tmp_file_name)
37
+
38
+
39
+ @contextmanager
40
+ def temporary_random_file(prefix: Optional[str] = None, suffix: Optional[str] = None,
41
+ nbytes: int = 1024, binary: bool = False, line_length: Optional[int] = None) -> str:
42
+ with temporary_file() as tmp_file_path:
43
+ create_random_file(tmp_file_path, prefix=prefix, suffix=suffix,
44
+ nbytes=nbytes, binary=binary, line_length=line_length)
45
+ yield tmp_file_path
46
+
47
+
28
48
  def remove_temporary_directory(tmp_directory_name: str) -> None:
29
49
  """
30
50
  Removes the given directory, recursively; but ONLY if it is (somewhere) within the system temporary directory.
@@ -39,15 +59,6 @@ def remove_temporary_directory(tmp_directory_name: str) -> None:
39
59
  shutil.rmtree(tmp_directory_name)
40
60
 
41
61
 
42
- def create_temporary_file_name(prefix: Optional[str] = None, suffix: Optional[str] = None) -> str:
43
- """
44
- Generates and returns the full path to file within the system temporary directory.
45
- """
46
- with tempfile.NamedTemporaryFile(prefix=prefix, suffix=suffix, delete=False) as tmp_file:
47
- tmp_file_name = tmp_file.name
48
- return tmp_file_name
49
-
50
-
51
62
  def remove_temporary_file(tmp_file_name: str) -> bool:
52
63
  """
53
64
  Removes the given file; but ONLY if it is (somewhere) within the system temporary directory.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.8.4.1b10
3
+ Version: 8.8.4.1b12
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=LTqazsGmGeaWdtlCzocAPi9AKQnSCmqJBWeqm58sQN4,5496
31
+ dcicutils/file_utils.py,sha256=JPM5bo871RpO7-hSTmckomTUpb5Zd21CzqktJadi_Cw,5795
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=RB0x9hRMZM9Xd1x00c5J0iUzUdYzIQR0XKFiQ94HWO0,807
@@ -68,13 +68,13 @@ dcicutils/structured_data.py,sha256=BQuIMv6OPySsn6YxtXE2Er-zLE2QJuCYhEQ3V0u_UXY,
68
68
  dcicutils/submitr/progress_constants.py,sha256=5bxyX77ql8qEJearfHEvsvXl7D0GuUODW0T65mbRmnE,2895
69
69
  dcicutils/submitr/ref_lookup_strategy.py,sha256=Js2cVznTmgjciLWBPLCvMiwLIHXjDn3jww-gJPjYuFw,3467
70
70
  dcicutils/task_utils.py,sha256=MF8ujmTD6-O2AC2gRGPHyGdUrVKgtr8epT5XU8WtNjk,8082
71
- dcicutils/tmpfile_utils.py,sha256=6p9aw8xZn4aQqhX26Vt3aJj-3POcLYM5A9SVD-SUqsY,2340
71
+ dcicutils/tmpfile_utils.py,sha256=AU1B2_iE_WmTAqXUokGc44NmPG7Zj_gf2FDTFByes2Q,2897
72
72
  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.1b10.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
- dcicutils-8.8.4.1b10.dist-info/METADATA,sha256=2Y1QUrGrECPLgGQlX6m4l6xqf_nQLu8mFPp9zTbIRg8,3397
78
- dcicutils-8.8.4.1b10.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
- dcicutils-8.8.4.1b10.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
- dcicutils-8.8.4.1b10.dist-info/RECORD,,
76
+ dcicutils-8.8.4.1b12.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
77
+ dcicutils-8.8.4.1b12.dist-info/METADATA,sha256=gzkj0v2tEtiiYCs4-1M5eUBEO-h7ObOIE0IcnbumBFQ,3397
78
+ dcicutils-8.8.4.1b12.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
79
+ dcicutils-8.8.4.1b12.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
80
+ dcicutils-8.8.4.1b12.dist-info/RECORD,,