megfile 3.1.1__py3-none-any.whl → 3.1.2__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.
Files changed (55) hide show
  1. docs/conf.py +2 -4
  2. megfile/__init__.py +394 -203
  3. megfile/cli.py +258 -238
  4. megfile/config.py +25 -21
  5. megfile/errors.py +124 -114
  6. megfile/fs.py +174 -140
  7. megfile/fs_path.py +462 -354
  8. megfile/hdfs.py +133 -101
  9. megfile/hdfs_path.py +290 -236
  10. megfile/http.py +15 -14
  11. megfile/http_path.py +111 -107
  12. megfile/interfaces.py +70 -65
  13. megfile/lib/base_prefetch_reader.py +84 -65
  14. megfile/lib/combine_reader.py +12 -12
  15. megfile/lib/compare.py +17 -13
  16. megfile/lib/compat.py +1 -5
  17. megfile/lib/fnmatch.py +29 -30
  18. megfile/lib/glob.py +46 -54
  19. megfile/lib/hdfs_prefetch_reader.py +40 -25
  20. megfile/lib/hdfs_tools.py +1 -3
  21. megfile/lib/http_prefetch_reader.py +69 -46
  22. megfile/lib/joinpath.py +5 -5
  23. megfile/lib/lazy_handler.py +7 -3
  24. megfile/lib/s3_buffered_writer.py +58 -51
  25. megfile/lib/s3_cached_handler.py +13 -14
  26. megfile/lib/s3_limited_seekable_writer.py +37 -28
  27. megfile/lib/s3_memory_handler.py +34 -30
  28. megfile/lib/s3_pipe_handler.py +24 -25
  29. megfile/lib/s3_prefetch_reader.py +71 -52
  30. megfile/lib/s3_share_cache_reader.py +37 -24
  31. megfile/lib/shadow_handler.py +7 -3
  32. megfile/lib/stdio_handler.py +9 -8
  33. megfile/lib/url.py +3 -3
  34. megfile/pathlike.py +259 -228
  35. megfile/s3.py +220 -153
  36. megfile/s3_path.py +977 -802
  37. megfile/sftp.py +190 -156
  38. megfile/sftp_path.py +540 -450
  39. megfile/smart.py +397 -330
  40. megfile/smart_path.py +100 -105
  41. megfile/stdio.py +10 -9
  42. megfile/stdio_path.py +32 -35
  43. megfile/utils/__init__.py +73 -54
  44. megfile/utils/mutex.py +11 -14
  45. megfile/version.py +1 -1
  46. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/METADATA +5 -8
  47. megfile-3.1.2.dist-info/RECORD +55 -0
  48. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/WHEEL +1 -1
  49. scripts/convert_results_to_sarif.py +45 -78
  50. scripts/generate_file.py +140 -64
  51. megfile-3.1.1.dist-info/RECORD +0 -55
  52. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/LICENSE +0 -0
  53. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/LICENSE.pyre +0 -0
  54. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/entry_points.txt +0 -0
  55. {megfile-3.1.1.dist-info → megfile-3.1.2.dist-info}/top_level.txt +0 -0
scripts/generate_file.py CHANGED
@@ -3,26 +3,86 @@ import re
3
3
 
4
4
  ALL_IGNORE_FUNC_LIST = dict(
5
5
  s3=[
6
- "open", "readlink", "iterdir", "is_mount", "is_socket", "is_fifo",
7
- "is_block_device", "is_char_device", "owner", "absolute", "rmdir",
8
- "glob", "iglob", "glob_stat", "rename", "cwd", "mkdir", "parts",
9
- "path_without_protocol", "path_with_protocol"
6
+ "open",
7
+ "readlink",
8
+ "iterdir",
9
+ "is_mount",
10
+ "is_socket",
11
+ "is_fifo",
12
+ "is_block_device",
13
+ "is_char_device",
14
+ "owner",
15
+ "absolute",
16
+ "rmdir",
17
+ "glob",
18
+ "iglob",
19
+ "glob_stat",
20
+ "rename",
21
+ "cwd",
22
+ "mkdir",
23
+ "parts",
24
+ "path_without_protocol",
25
+ "path_with_protocol",
10
26
  ],
11
27
  fs=[
12
- "open", "from_uri", "path_with_protocol", "joinpath", "readlink",
13
- "iterdir", "chmod", "group", "is_socket", "is_fifo", "is_block_device",
14
- "is_char_device", "rmdir", "owner", "absolute", "resolve", "cwd",
15
- "home", "glob", "iglob", "glob_stat", "rename", "parts", "root",
16
- "anchor", "drive", "replace", "hardlink_to", "mkdir", "utime"
28
+ "open",
29
+ "from_uri",
30
+ "path_with_protocol",
31
+ "joinpath",
32
+ "readlink",
33
+ "iterdir",
34
+ "chmod",
35
+ "group",
36
+ "is_socket",
37
+ "is_fifo",
38
+ "is_block_device",
39
+ "is_char_device",
40
+ "rmdir",
41
+ "owner",
42
+ "absolute",
43
+ "resolve",
44
+ "cwd",
45
+ "home",
46
+ "glob",
47
+ "iglob",
48
+ "glob_stat",
49
+ "rename",
50
+ "parts",
51
+ "root",
52
+ "anchor",
53
+ "drive",
54
+ "replace",
55
+ "hardlink_to",
56
+ "mkdir",
57
+ "utime",
17
58
  ],
18
59
  http=["open"],
19
60
  sftp=[
20
- "path_without_protocol", "expanduser", "iterdir", "readlink", "cwd",
21
- "glob", "iglob", "glob_stat", "resolve", "relpath", "utime", "parts"
61
+ "path_without_protocol",
62
+ "expanduser",
63
+ "iterdir",
64
+ "readlink",
65
+ "cwd",
66
+ "glob",
67
+ "iglob",
68
+ "glob_stat",
69
+ "resolve",
70
+ "relpath",
71
+ "utime",
72
+ "parts",
22
73
  ],
23
74
  hdfs=[
24
- "iterdir", "absolute", "rmdir", "glob", "iglob", "glob_stat", "rename",
25
- "mkdir", "path_without_protocol", "path_with_protocol", "parts"
75
+ "iterdir",
76
+ "absolute",
77
+ "rmdir",
78
+ "glob",
79
+ "iglob",
80
+ "glob_stat",
81
+ "rename",
82
+ "mkdir",
83
+ "path_without_protocol",
84
+ "path_with_protocol",
85
+ "parts",
26
86
  ],
27
87
  )
28
88
 
@@ -35,15 +95,14 @@ ALL_IMPORT_LINES = dict(
35
95
  "from typing import BinaryIO, Callable, Iterator, List, Optional, Tuple",
36
96
  "from megfile.interfaces import Access, FileEntry, PathLike, StatResult",
37
97
  ],
38
- http=[
39
- "from megfile.interfaces import PathLike, StatResult",
40
- ],
98
+ http=["from megfile.interfaces import PathLike, StatResult"],
41
99
  stdio=[
42
100
  "from typing import IO, AnyStr, Optional",
43
101
  "from megfile.interfaces import PathLike",
44
102
  ],
45
103
  sftp=[
46
- "from typing import IO, AnyStr, BinaryIO, Iterator, List, Tuple, Callable, Optional",
104
+ "from typing import IO, AnyStr, BinaryIO, Iterator, List, Tuple, "
105
+ "Callable, Optional",
47
106
  "from megfile.interfaces import FileEntry, PathLike, StatResult",
48
107
  ],
49
108
  hdfs=[
@@ -101,17 +160,18 @@ ALL_FUNC_NAME_MAPPING = dict(
101
160
  save="save_as",
102
161
  ),
103
162
  )
104
- PARAMETER_PATTERN = re.compile(r'\[[^:]*\]')
163
+ PARAMETER_PATTERN = re.compile(r"\[[^:]*\]")
105
164
 
106
165
 
107
166
  def get_class_name(current_file_type: str):
108
- if current_file_type == 'fs':
109
- return 'FSPath'
110
- return f'{current_file_type.capitalize()}Path'
167
+ if current_file_type == "fs":
168
+ return "FSPath"
169
+ return f"{current_file_type.capitalize()}Path"
111
170
 
112
171
 
113
172
  def insert_class_method_lines(
114
- func_params: list, annotation_lines: list, current_file_type: str):
173
+ func_params: list, annotation_lines: list, current_file_type: str
174
+ ):
115
175
  ignore_func_list = ALL_IGNORE_FUNC_LIST.get(current_file_type, [])
116
176
  func_name_mapping = ALL_FUNC_NAME_MAPPING.get(current_file_type, {})
117
177
 
@@ -120,8 +180,8 @@ def insert_class_method_lines(
120
180
  func_first_line = "".join(func_params)
121
181
  path_param_name = "path"
122
182
  current_params_line = PARAMETER_PATTERN.sub(
123
- "",
124
- func_first_line.split("(", maxsplit=1)[1].split(")", maxsplit=1)[0])
183
+ "", func_first_line.split("(", maxsplit=1)[1].split(")", maxsplit=1)[0]
184
+ )
125
185
  current_params = []
126
186
  kwargs_mode = False
127
187
  for params_words in current_params_line.split(","):
@@ -131,88 +191,101 @@ def insert_class_method_lines(
131
191
  param = params_words.split("=", maxsplit=1)[0].strip()
132
192
  else:
133
193
  param = params_words.strip()
134
- if param == '*':
194
+ if param == "*":
135
195
  kwargs_mode = True
136
196
  continue
137
197
 
138
- if param and param != '**kwargs':
139
- if 'dst' in param:
198
+ if param and param != "**kwargs":
199
+ if "dst" in param:
140
200
  path_param_name = param.replace("dst", "src")
141
201
  if kwargs_mode:
142
202
  param = f"{param}={param}"
143
203
  current_params.append(param)
144
- func_name = func_first_line.strip().split(
145
- "def ", maxsplit=1)[1].split(
146
- "(", maxsplit=1)[0]
147
- if func_name == 'save':
204
+ func_name = (
205
+ func_first_line.strip()
206
+ .split("def ", maxsplit=1)[1]
207
+ .split("(", maxsplit=1)[0]
208
+ )
209
+ if func_name == "save":
148
210
  func_first_line = func_first_line.replace(
149
- "self", f"{path_param_name}: PathLike")
211
+ "self", f"{path_param_name}: PathLike"
212
+ )
150
213
  special_order_params = [
151
- param.strip() for param in func_first_line.split('(', 1)
152
- [1].split(')', 1)[0].split(',')
214
+ param.strip()
215
+ for param in func_first_line.split("(", 1)[1]
216
+ .split(")", 1)[0]
217
+ .split(",")
153
218
  ]
154
- special_order_params[0], special_order_params[
155
- 1] = special_order_params[1], special_order_params[0]
219
+ special_order_params[0], special_order_params[1] = (
220
+ special_order_params[1],
221
+ special_order_params[0],
222
+ )
156
223
  func_first_line = "".join(
157
224
  [
158
- func_first_line.split('(', 1)[0], "(",
159
- ", ".join(special_order_params), ")",
160
- func_first_line.split(')', 1)[1]
161
- ])
225
+ func_first_line.split("(", 1)[0],
226
+ "(",
227
+ ", ".join(special_order_params),
228
+ ")",
229
+ func_first_line.split(")", 1)[1],
230
+ ]
231
+ )
162
232
  else:
163
233
  func_first_line = func_first_line.replace(
164
- "self", f"{path_param_name}: PathLike")
234
+ "self", f"{path_param_name}: PathLike"
235
+ )
165
236
 
166
237
  if not func_name.startswith("_") and func_name not in ignore_func_list:
167
- real_func_name = f"{current_file_type}_{func_name_mapping.get(func_name, func_name)}"
238
+ real_func_name = (
239
+ f"{current_file_type}_{func_name_mapping.get(func_name, func_name)}"
240
+ )
168
241
  func_content_lines.append(
169
242
  func_first_line.replace(func_name, real_func_name).replace(
170
- ', **kwargs', ''))
243
+ ", **kwargs", ""
244
+ )
245
+ )
171
246
 
172
247
  insert_log = False
173
248
  for annotation_line in annotation_lines:
174
- if insert_log is False and annotation_line.strip().startswith(
175
- ":"):
249
+ if insert_log is False and annotation_line.strip().startswith(":"):
176
250
  func_content_lines.append(
177
- f" :param {path_param_name}: Given path")
251
+ f" :param {path_param_name}: Given path"
252
+ )
178
253
  insert_log = True
179
254
  func_content_lines.append(annotation_line)
180
255
 
181
256
  class_name = get_class_name(current_file_type)
182
- if class_name == 'StdioPath':
257
+ if class_name == "StdioPath":
183
258
  func_content_lines.append(
184
- f" return {class_name}({path_param_name}).{func_name}({', '.join(current_params[1:])}) # pyre-ignore[6]\n\n"
259
+ f" return {class_name}({path_param_name}).{func_name}({', '.join(current_params[1:])}) # pyre-ignore[6]\n\n" # noqa: E501
185
260
  )
186
261
  else:
187
262
  func_content_lines.append(
188
- f" return {class_name}({path_param_name}).{func_name}({', '.join(current_params[1:])})\n\n"
263
+ f" return {class_name}({path_param_name}).{func_name}({', '.join(current_params[1:])})\n\n" # noqa: E501
189
264
  )
190
265
  return real_func_name, func_content_lines
191
266
 
192
267
 
193
268
  def get_methods_from_path_file(current_file_type: str):
194
- all_func_list = importlib.import_module(
195
- f'megfile.{current_file_type}_path').__all__
269
+ all_func_list = importlib.import_module(f"megfile.{current_file_type}_path").__all__
196
270
  methods_content = []
197
271
  import_lines = ALL_IMPORT_LINES.get(current_file_type, [])
198
272
  import_lines.append(
199
273
  f"from megfile.{current_file_type}_path import {', '.join(all_func_list)}"
200
274
  )
201
- with open(f'megfile/{current_file_type}_path.py', 'r') as f:
275
+ with open(f"megfile/{current_file_type}_path.py", "r") as f:
202
276
  class_start = False
203
277
  func_start = False
204
278
  func_params = []
205
279
  annotation_lines = []
206
280
  annotation_start = False
207
281
  for line in f.readlines():
208
- if line.strip().startswith(
209
- f'class {get_class_name(current_file_type)}('):
282
+ if line.strip().startswith(f"class {get_class_name(current_file_type)}("):
210
283
  class_start = True
211
284
  elif class_start is True:
212
285
  if line.strip() and not line.startswith(" " * 4):
213
286
  break
214
287
  elif func_start is True:
215
- if line.rsplit('#', maxsplit=1)[0].strip().endswith(":"):
288
+ if line.rsplit("#", maxsplit=1)[0].strip().endswith(":"):
216
289
  func_start = False
217
290
  func_params.append(line.strip())
218
291
  elif "'''" in line or '"""' in line:
@@ -222,12 +295,13 @@ def get_methods_from_path_file(current_file_type: str):
222
295
  elif annotation_start is True:
223
296
  annotation_lines.append(line[4:].rstrip())
224
297
  elif line.startswith(" def"):
225
- if line.rsplit('#', maxsplit=1)[0].strip().endswith(":"):
298
+ if line.rsplit("#", maxsplit=1)[0].strip().endswith(":"):
226
299
  func_start = False
227
300
  else:
228
301
  func_start = True
229
302
  func_name, func_content_lines = insert_class_method_lines(
230
- func_params, annotation_lines, current_file_type)
303
+ func_params, annotation_lines, current_file_type
304
+ )
231
305
  if func_name:
232
306
  all_func_list.append(func_name)
233
307
  if func_content_lines:
@@ -235,7 +309,8 @@ def get_methods_from_path_file(current_file_type: str):
235
309
  func_params = [line.strip()]
236
310
  annotation_lines = []
237
311
  func_name, func_content_lines = insert_class_method_lines(
238
- func_params, annotation_lines, current_file_type)
312
+ func_params, annotation_lines, current_file_type
313
+ )
239
314
  if func_name:
240
315
  all_func_list.append(func_name)
241
316
  if func_content_lines:
@@ -246,23 +321,24 @@ def get_methods_from_path_file(current_file_type: str):
246
321
  def generate_file(current_file_type: str):
247
322
  current_class_name = get_class_name(current_file_type)
248
323
  import_lines, all_func_list, methods_content = get_methods_from_path_file(
249
- current_file_type)
250
- with open(f"megfile/{current_file_type}.py", 'w') as f:
324
+ current_file_type
325
+ )
326
+ with open(f"megfile/{current_file_type}.py", "w") as f:
251
327
  for line in import_lines:
252
- f.write('\n')
328
+ f.write("\n")
253
329
  f.write(line)
254
330
 
255
331
  f.write("\n\n__all__ = [\n")
256
332
  for func_name in all_func_list:
257
- if func_name != current_class_name and func_name != 'HttpsPath':
333
+ if func_name != current_class_name and func_name != "HttpsPath":
258
334
  f.write(f" '{func_name}',\n")
259
335
  f.write("]\n\n")
260
336
 
261
337
  for line in methods_content:
262
- f.write('\n')
338
+ f.write("\n")
263
339
  f.write(line)
264
340
 
265
341
 
266
342
  if __name__ == "__main__":
267
- for t in ['s3', 'fs', 'http', 'stdio', 'sftp', 'hdfs']:
343
+ for t in ["s3", "fs", "http", "stdio", "sftp", "hdfs"]:
268
344
  generate_file(t)
@@ -1,55 +0,0 @@
1
- docs/conf.py,sha256=oypYf1FkqYtFfjhWlDtX3y2UCfplHqwm6kYloW2XuYM,2454
2
- megfile/__init__.py,sha256=MT8SIXsmEUvtSpd1GHv6e3fFfR1gRnlEdkNNqv3gngo,6534
3
- megfile/cli.py,sha256=PITdtme1mW6Dr0VRvMaeLy4t8AexAlpLVF5H6VVGTNk,22411
4
- megfile/config.py,sha256=8rbkxa8kcbxHUMzvds3gdN9sxhyCvLsW9Sf4DfS9Ih4,2307
5
- megfile/errors.py,sha256=w3f-B3-epz-d9sP8KmWn1ytdmD97q7wABsCOOuQe0no,13625
6
- megfile/fs.py,sha256=Hij6xE273rU5YRxECT1hklVYZgaiuzK0wZcKHs9NDWE,11879
7
- megfile/fs_path.py,sha256=A3WwSi34ddhyiPcT0sBIUMrliFPWF_4GHktPuS33GWg,40921
8
- megfile/hdfs.py,sha256=824qbjkRcOS5uqDqOD54-kEC0P7CRHxSOFuVHsMquAw,9174
9
- megfile/hdfs_path.py,sha256=SbZPAiSK55S3dkcrZDxHjA6F6_Nt8aCL_rXpVrm2Uuw,27085
10
- megfile/http.py,sha256=ZN5U_otx7H-WqX4Fn04T0zAwxCqQq017u0-7j4cD5Sg,2021
11
- megfile/http_path.py,sha256=mnoN5hHJro23cLny1r5ePMJ28r2gnBrzqA0S-grpwrE,16215
12
- megfile/interfaces.py,sha256=PLNv0hDBTrTFJGTwT5mbDKYTsCjNryrHHMJCYhL9Wp0,8522
13
- megfile/pathlike.py,sha256=FjY88X1IA4-ue5jcekwlIO740D0oT_wNo95y3eo6vNA,30685
14
- megfile/s3.py,sha256=JfYWFHNJrBAoncB5RPDMyhjrIwVYGZ2lh8prGst-L_M,12874
15
- megfile/s3_path.py,sha256=UV-rOV-j1uWhTjsClqNmYbqpPrrBd0CZldo717pd63o,93107
16
- megfile/sftp.py,sha256=cXS1LZh4gtJgDCmR9p2_uM1wlycV34ebuTJGaceatVE,12984
17
- megfile/sftp_path.py,sha256=QcV4DK192c5GL2CeK07JgpELpBXpGVAKswQ1JtZ2DZQ,53336
18
- megfile/smart.py,sha256=jOTBBbDKpLuRbob9-Omj_GRsk66Vpql7LPJX4xCm5fs,36024
19
- megfile/smart_path.py,sha256=OMTM9JeowIa6j2Yn8XEH-HS4gWD3gBkKgSj8GBD08Bk,6734
20
- megfile/stdio.py,sha256=rsBMGr4LaFYOQjL-6k4GE_WznLsa8cPzMhSVNEEDh5o,671
21
- megfile/stdio_path.py,sha256=2n3gTEN1-7d8cCRsQJ7zj8rdP1VPlgr78oSClYndxXI,2806
22
- megfile/version.py,sha256=_DO4G2zWDcG7gSWIzdTDMHAx4XjUc5Vq4U89Oj2xeWY,19
23
- megfile/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- megfile/lib/base_prefetch_reader.py,sha256=Di2xCkf-Pci7BvJs5sosymKT8sJfdgYY8fTHIk_LEBc,13471
25
- megfile/lib/combine_reader.py,sha256=ePUMwDxdL1oPqgZLAj7RvHeJ5NROcjPWNwLMuiv7Z5M,4641
26
- megfile/lib/compare.py,sha256=yG2fZve_gMg32rQVCdwixBdqgYRsjn-24TqhALQaOrA,2233
27
- megfile/lib/compat.py,sha256=0wt3_atcYhSLCxUj_WuDlQa3E1atjZfwJQ12thiFh5Q,234
28
- megfile/lib/fnmatch.py,sha256=qtlTdOoowgUvQuZNDrzvEl7hA4Sdtifa9eXd47LEJZY,4082
29
- megfile/lib/glob.py,sha256=imsjV_lgCLteEacrId0uJU7w77A0tpRrAcKtWfUrzDU,10149
30
- megfile/lib/hdfs_prefetch_reader.py,sha256=ytp0td83M8NheMCBtQjrQpvGaBvConpRqgd8xSqdi-E,2092
31
- megfile/lib/hdfs_tools.py,sha256=t4GeoBxO0HPahIQDrsK17WBsLZtcfAaNwWfappzZ5q8,442
32
- megfile/lib/http_prefetch_reader.py,sha256=Owc_eaDGS752QnzatOnZ3zp19DuuftxWPS8kTXidi1A,4359
33
- megfile/lib/joinpath.py,sha256=D4Px6-lnDDpYs1LMUHkTIGqMPJQ0oCBGfTzREs373iU,929
34
- megfile/lib/lazy_handler.py,sha256=V_dQR2ac7LXJ6u__R5_VauvmxqQVdjydNIKwJjYUBeQ,1862
35
- megfile/lib/s3_buffered_writer.py,sha256=UW_C6dtvzIEydapsHnPYWMn2xmz0Ah0jD7hrdUxqcoM,7127
36
- megfile/lib/s3_cached_handler.py,sha256=1laCBQxG_PMp7Tk9_wY9XXDF-Ev4EREt1LPojetiA6A,1530
37
- megfile/lib/s3_limited_seekable_writer.py,sha256=6Hzy8sdiRDQMQ0os175weu5vYUfcEP-L4ztknCQETf8,6318
38
- megfile/lib/s3_memory_handler.py,sha256=02yivynhVWLKWtdf0_3N1-ipYOSGgFEmutYkpXzrXUU,4225
39
- megfile/lib/s3_pipe_handler.py,sha256=9dcW0WKmjETLjK-m6QW4EvuvaEjCqUI9BavOeWmuB6Y,3705
40
- megfile/lib/s3_prefetch_reader.py,sha256=ofzSn_MC6INAZY83oA3Dq1QNI0SS2b-NP6Ov8ajjLos,4283
41
- megfile/lib/s3_share_cache_reader.py,sha256=AFwpyFQq4y-PXTnbFoXxLMQOJFIcJXUgVTrDMCuAMUg,3629
42
- megfile/lib/shadow_handler.py,sha256=Kb4CcfoMBdp822A5teSjNVG_6waAy5AUUHrW1qaRqEI,2722
43
- megfile/lib/stdio_handler.py,sha256=t2hxBE1vo25-kS6QQRMiDEG95rdMVx2z6wTnwuN6NUc,1968
44
- megfile/lib/url.py,sha256=VbQLjo0s4AaV0iSk66BcjI68aUTcN9zBZ5x6-cM4Qvs,103
45
- megfile/utils/__init__.py,sha256=5gf_KfoqCvX6sVNLLZYUsGJL_zzesuQPj0znGC-HG8I,8946
46
- megfile/utils/mutex.py,sha256=-2KH3bNovKRd9zvsXq9n3bWM7rQdoG9hO7tUPxVG_Po,2538
47
- scripts/convert_results_to_sarif.py,sha256=SI0vw4TrpJ9gAZ2pH8ywu-lXMYeZ-TYW2dLEHw5Rx84,4218
48
- scripts/generate_file.py,sha256=OLAH9iZKQlHTjuV8zpC6exCXLS6bNdu4Njoc3IKO9Sc,10173
49
- megfile-3.1.1.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
50
- megfile-3.1.1.dist-info/LICENSE.pyre,sha256=9lf5nT-5ZH25JijpYAequ0bl8E8z5JmZB1qrjiUMp84,1080
51
- megfile-3.1.1.dist-info/METADATA,sha256=honpFcwkQykVvHhlx_PQlEfOh6TgkPgk2FbdspMjc64,9106
52
- megfile-3.1.1.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
53
- megfile-3.1.1.dist-info/entry_points.txt,sha256=M6ZWSSv5_5_QtIpZafy3vq7WuOJ_5dSGQQnEZbByt2Q,49
54
- megfile-3.1.1.dist-info/top_level.txt,sha256=oTnYXo1Z3V61qSWAKtnY9RkDgRSHvfRN38FQae6E0W0,50
55
- megfile-3.1.1.dist-info/RECORD,,