megfile 2.0.4.post2__py3-none-any.whl → 2.0.5__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.
megfile/cli.py CHANGED
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  import os
2
3
  import shutil
3
4
  import sys
@@ -14,6 +15,9 @@ from megfile.smart_path import SmartPath
14
15
  from megfile.utils import get_human_size
15
16
  from megfile.version import VERSION
16
17
 
18
+ logging.basicConfig(level=logging.ERROR)
19
+ logging.getLogger('megfile').setLevel(level=logging.INFO)
20
+
17
21
 
18
22
  @click.group()
19
23
  def cli():
@@ -119,7 +123,7 @@ def cp(
119
123
  no_target_directory: bool,
120
124
  progress_bar: bool,
121
125
  ):
122
- if smart_isdir(dst_path) and not no_target_directory:
126
+ if not no_target_directory and smart_isdir(dst_path):
123
127
  dst_path = smart_path_join(dst_path, os.path.basename(src_path))
124
128
  if recursive:
125
129
  with ThreadPoolExecutor(max_workers=(os.cpu_count() or 1) *
megfile/fs_path.py CHANGED
@@ -842,7 +842,7 @@ class FSPath(URIPath):
842
842
  errors=None,
843
843
  newline=None,
844
844
  closefd=True,
845
- **kwargs) -> IO[AnyStr]:
845
+ **kwargs) -> IO[AnyStr]: # pytype: disable=signature-mismatch
846
846
  if not isinstance(self.path_without_protocol, int) and ('w' in mode or
847
847
  'x' in mode or
848
848
  'a' in mode):
megfile/interfaces.py CHANGED
@@ -193,7 +193,7 @@ class FileCacher(Closable):
193
193
  def cache_path(self) -> str:
194
194
  pass # pragma: no cover
195
195
 
196
- def __enter__(self) -> str:
196
+ def __enter__(self) -> str: # pytype: disable=signature-mismatch
197
197
  return self.cache_path
198
198
 
199
199
  def __del__(self):
@@ -50,7 +50,7 @@ class CombineReader(Readable, Seekable):
50
50
  def tell(self) -> int:
51
51
  return self._offset
52
52
 
53
- def _empty_bytes(self) -> AnyStr:
53
+ def _empty_bytes(self) -> AnyStr: # pytype: disable=signature-mismatch
54
54
  if 'b' in self._mode:
55
55
  return b''
56
56
  return ''
@@ -60,7 +60,7 @@ class CombineReader(Readable, Seekable):
60
60
  return BytesIO()
61
61
  return StringIO()
62
62
 
63
- def read(self, size: Optional[int] = None) -> AnyStr:
63
+ def read(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
64
64
  if self._offset >= self._content_size:
65
65
  return self._empty_bytes()
66
66
  if size is None or size < 0:
@@ -75,7 +75,7 @@ class CombineReader(Readable, Seekable):
75
75
  self._offset += len(data)
76
76
  return buffer.getvalue()
77
77
 
78
- def readline(self, size: Optional[int] = None) -> AnyStr:
78
+ def readline(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
79
79
  if self._offset >= self._content_size:
80
80
  return self._empty_bytes()
81
81
  if size is None or size < 0:
@@ -41,16 +41,16 @@ class LazyHandler(Readable, Seekable, Writable):
41
41
  def readable(self) -> bool:
42
42
  return self._file_object.readable()
43
43
 
44
- def read(self, size: Optional[int] = None) -> AnyStr:
44
+ def read(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
45
45
  return self._file_object.read(size)
46
46
 
47
- def readline(self, size: Optional[int] = None) -> AnyStr:
47
+ def readline(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
48
48
  return self._file_object.readline(size)
49
49
 
50
50
  def writable(self) -> bool:
51
51
  return self._file_object.writable()
52
52
 
53
- def write(self, data: AnyStr):
53
+ def write(self, data: AnyStr): # pytype: disable=signature-mismatch
54
54
  return self._file_object.write(data)
55
55
 
56
56
  def _close(self):
@@ -58,18 +58,18 @@ class ShadowHandler(Readable, Seekable, Writable, BaseShadowHandler):
58
58
  def readable(self) -> bool:
59
59
  return is_readable(self._file_object)
60
60
 
61
- def read(self, size: Optional[int] = None) -> AnyStr:
61
+ def read(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
62
62
  with self._ensure_offset():
63
63
  return self._file_object.read(size)
64
64
 
65
- def readline(self, size: Optional[int] = None) -> AnyStr:
65
+ def readline(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
66
66
  with self._ensure_offset():
67
67
  return self._file_object.readline(size)
68
68
 
69
69
  def writable(self) -> bool:
70
70
  return is_writable(self._file_object)
71
71
 
72
- def write(self, data: AnyStr):
72
+ def write(self, data: AnyStr): # pytype: disable=signature-mismatch
73
73
  with self._ensure_offset():
74
74
  return self._file_object.write(data)
75
75
 
@@ -40,10 +40,10 @@ class STDReader(STDHandler, Readable):
40
40
  def name(self) -> str:
41
41
  return "stdin"
42
42
 
43
- def read(self, size: Optional[int] = None) -> AnyStr:
43
+ def read(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
44
44
  return self._handler.read(size)
45
45
 
46
- def readline(self, size: Optional[int] = None) -> AnyStr:
46
+ def readline(self, size: Optional[int] = None) -> AnyStr: # pytype: disable=signature-mismatch
47
47
  return self._handler.readline()
48
48
 
49
49
 
@@ -79,5 +79,5 @@ class STDWriter(STDHandler, Writable):
79
79
  def name(self) -> str:
80
80
  return self._name
81
81
 
82
- def write(self, data: AnyStr) -> int:
82
+ def write(self, data: AnyStr) -> int: # pytype: disable=signature-mismatch
83
83
  return self._handler.write(data)
megfile/s3_path.py CHANGED
@@ -130,6 +130,11 @@ def get_scoped_config(profile_name: Optional[str] = None) -> Dict:
130
130
  profile_name=profile_name)._session.get_scoped_config()
131
131
 
132
132
 
133
+ @lru_cache()
134
+ def warning_endpoint_url(key: str, endpoint_url: str):
135
+ _logger.info("using %s: %s" % (key, endpoint_url))
136
+
137
+
133
138
  def get_endpoint_url(profile_name: Optional[str] = None) -> str:
134
139
  '''Get the endpoint url of S3
135
140
 
@@ -139,14 +144,13 @@ def get_endpoint_url(profile_name: Optional[str] = None) -> str:
139
144
  ) if profile_name else 'OSS_ENDPOINT'
140
145
  environ_endpoint_url = os.environ.get(environ_key)
141
146
  if environ_endpoint_url:
142
- _logger.info("using %s: %s" % (environ_key, environ_endpoint_url))
147
+ warning_endpoint_url(environ_key, environ_endpoint_url)
143
148
  return environ_endpoint_url
144
149
  try:
145
150
  config_endpoint_url = get_scoped_config(profile_name=profile_name).get(
146
151
  's3', {}).get('endpoint_url')
147
152
  if config_endpoint_url:
148
- _logger.info(
149
- "using ~/.aws/config: endpoint_url=%s" % config_endpoint_url)
153
+ warning_endpoint_url('~/.aws/config', config_endpoint_url)
150
154
  return config_endpoint_url
151
155
  except botocore.exceptions.ProfileNotFound: # pragma: no cover
152
156
  pass
@@ -1223,7 +1227,10 @@ class S3Path(URIPath):
1223
1227
  resp = self._client.head_object(Bucket=bucket, Key=key)
1224
1228
  return dict(
1225
1229
  (key.lower(), value) for key, value in resp['Metadata'].items())
1226
- except Exception:
1230
+ except Exception as error:
1231
+ if isinstance(error,
1232
+ (S3UnknownError, S3ConfigError, S3PermissionError)):
1233
+ raise error
1227
1234
  return {}
1228
1235
 
1229
1236
  def access(
@@ -1403,7 +1410,8 @@ class S3Path(URIPath):
1403
1410
  Bucket=bucket, Prefix=prefix, Delimiter='/', MaxKeys=1)
1404
1411
  except Exception as error:
1405
1412
  error = translate_s3_error(error, self.path_with_protocol)
1406
- if isinstance(error, (S3UnknownError, S3ConfigError)):
1413
+ if isinstance(error,
1414
+ (S3UnknownError, S3ConfigError, S3PermissionError)):
1407
1415
  raise error
1408
1416
  return False
1409
1417
 
@@ -1436,7 +1444,8 @@ class S3Path(URIPath):
1436
1444
  self._client.head_object(Bucket=bucket, Key=key)
1437
1445
  except Exception as error:
1438
1446
  error = translate_s3_error(error, s3_url)
1439
- if isinstance(error, (S3UnknownError, S3ConfigError)):
1447
+ if isinstance(error,
1448
+ (S3UnknownError, S3ConfigError, S3PermissionError)):
1440
1449
  raise error
1441
1450
  return False
1442
1451
  return True
@@ -1500,7 +1509,8 @@ class S3Path(URIPath):
1500
1509
  self._client.head_bucket(Bucket=bucket)
1501
1510
  except Exception as error:
1502
1511
  error = translate_s3_error(error, self.path_with_protocol)
1503
- if isinstance(error, (S3UnknownError, S3ConfigError)):
1512
+ if isinstance(error,
1513
+ (S3UnknownError, S3ConfigError, S3PermissionError)):
1504
1514
  raise error
1505
1515
  if isinstance(error, S3FileNotFoundError):
1506
1516
  return False
@@ -2081,7 +2091,7 @@ class S3Path(URIPath):
2081
2091
  mode: str = 'r',
2082
2092
  *,
2083
2093
  s3_open_func: Callable[[str, str], BinaryIO] = s3_open,
2084
- **kwargs) -> IO[AnyStr]:
2094
+ **kwargs) -> IO[AnyStr]: # pytype: disable=signature-mismatch
2085
2095
  return s3_open_func(
2086
2096
  self.path_with_protocol, mode,
2087
2097
  **necessary_params(s3_open_func, **kwargs))
megfile/sftp.py CHANGED
@@ -331,7 +331,7 @@ def sftp_save_as(file_object: BinaryIO, path: PathLike):
331
331
  return SftpPath(path).save(file_object)
332
332
 
333
333
 
334
- def sftp_open(path: PathLike, mode: str = 'r', buffering=-1) -> IO[AnyStr]:
334
+ def sftp_open(path: PathLike, mode: str = 'r', buffering=-1) -> IO[AnyStr]: # pytype: disable=signature-mismatch
335
335
  return SftpPath(path).open(mode, buffering)
336
336
 
337
337
 
@@ -346,7 +346,7 @@ def sftp_chmod(path: PathLike, mode: int, follow_symlinks: bool = True):
346
346
  return SftpPath(path).chmod(mode, follow_symlinks)
347
347
 
348
348
 
349
- def sftp_absolute(path: PathLike) -> str:
349
+ def sftp_absolute(path: PathLike) -> 'SftpPath':
350
350
  '''
351
351
  Make the path absolute, without normalization or resolving symlinks. Returns a new path object
352
352
  '''
@@ -365,9 +365,17 @@ def sftp_copy(
365
365
  dst_path: PathLike,
366
366
  callback: Optional[Callable[[int], None]] = None,
367
367
  followlinks: bool = False):
368
- '''
369
- File copy
370
- '''
368
+ """
369
+ Copy the file to the given destination path.
370
+
371
+ :param src_path: Given path
372
+ :param dst_path: The destination path to copy the file to.
373
+ :param callback: An optional callback function that takes an integer parameter and is called
374
+ periodically during the copy operation to report the number of bytes copied.
375
+ :param followlinks: Whether to follow symbolic links when copying directories.
376
+ :raises IsADirectoryError: If the source is a directory.
377
+ :raises OSError: If there is an error copying the file.
378
+ """
371
379
  return SftpPath(src_path).copy(dst_path, callback, followlinks)
372
380
 
373
381
 
megfile/sftp_path.py CHANGED
@@ -2,6 +2,7 @@ import atexit
2
2
  import hashlib
3
3
  import io
4
4
  import os
5
+ import shlex
5
6
  import subprocess
6
7
  from functools import lru_cache
7
8
  from logging import getLogger as get_logger
@@ -497,9 +498,12 @@ class SftpPath(URIPath):
497
498
  :returns: True if the path is a directory, else False
498
499
 
499
500
  '''
500
- stat = self.stat(follow_symlinks=followlinks)
501
- if S_ISDIR(stat.st_mode):
502
- return True
501
+ try:
502
+ stat = self.stat(follow_symlinks=followlinks)
503
+ if S_ISDIR(stat.st_mode):
504
+ return True
505
+ except FileNotFoundError:
506
+ pass
503
507
  return False
504
508
 
505
509
  def is_file(self, followlinks: bool = False) -> bool:
@@ -514,9 +518,12 @@ class SftpPath(URIPath):
514
518
  :returns: True if the path is a file, else False
515
519
 
516
520
  '''
517
- stat = self.stat(follow_symlinks=followlinks)
518
- if S_ISREG(stat.st_mode):
519
- return True
521
+ try:
522
+ stat = self.stat(follow_symlinks=followlinks)
523
+ if S_ISREG(stat.st_mode):
524
+ return True
525
+ except FileNotFoundError:
526
+ pass
520
527
  return False
521
528
 
522
529
  def listdir(self) -> List[str]:
@@ -870,18 +877,15 @@ class SftpPath(URIPath):
870
877
  with self.open(mode='wb') as output:
871
878
  output.write(file_object.read())
872
879
 
873
- def open(self, mode: str = 'r', buffering=-1, **kwargs) -> IO[AnyStr]:
880
+ def open(self, mode: str = 'r', buffering=-1, **kwargs) -> IO[AnyStr]: # pytype: disable=signature-mismatch
874
881
  if 'w' in mode or 'x' in mode or 'a' in mode:
875
- try:
876
- if self.is_dir():
877
- raise IsADirectoryError(
878
- 'Is a directory: %r' % self.path_with_protocol)
879
- except FileNotFoundError:
880
- pass
882
+ if self.is_dir():
883
+ raise IsADirectoryError(
884
+ 'Is a directory: %r' % self.path_with_protocol)
881
885
  self.parent.mkdir(parents=True, exist_ok=True)
882
- elif not self.is_file():
883
- raise IsADirectoryError(
884
- 'Is a directory: %r' % self.path_with_protocol)
886
+ elif not self.exists():
887
+ raise FileNotFoundError(
888
+ 'No such file: %r' % self.path_with_protocol)
885
889
  fileobj = self._client.open(self._real_path, mode, bufsize=buffering)
886
890
  if 'r' in mode and 'b' not in mode:
887
891
  return io.TextIOWrapper(fileobj) # type: ignore
@@ -896,11 +900,11 @@ class SftpPath(URIPath):
896
900
  '''
897
901
  return self._client.chmod(path=self._real_path, mode=mode)
898
902
 
899
- def absolute(self) -> str:
903
+ def absolute(self) -> 'SftpPath':
900
904
  '''
901
905
  Make the path absolute, without normalization or resolving symlinks. Returns a new path object
902
906
  '''
903
- return self.realpath()
907
+ return self.resolve()
904
908
 
905
909
  def rmdir(self):
906
910
  '''
@@ -930,7 +934,7 @@ class SftpPath(URIPath):
930
934
  chan.settimeout(timeout)
931
935
  if environment:
932
936
  chan.update_environment(environment)
933
- chan.exec_command(" ".join(command))
937
+ chan.exec_command(' '.join(shlex.quote(arg) for arg in command))
934
938
  stdout = chan.makefile("r", bufsize)
935
939
  stderr = chan.makefile_stderr("r", bufsize)
936
940
  return subprocess.CompletedProcess(
megfile/smart.py CHANGED
@@ -405,7 +405,8 @@ def smart_sync(
405
405
  callback_after_copy_file=callback_after_copy_file,
406
406
  )
407
407
 
408
- list(map_func(_smart_sync_single_file, create_generator()))
408
+ for _ in map_func(_smart_sync_single_file, create_generator()):
409
+ pass
409
410
 
410
411
 
411
412
  def smart_sync_with_progress(
@@ -516,7 +517,7 @@ def smart_open(
516
517
  s3_open_func: Callable[[str, str], BinaryIO] = s3_open,
517
518
  encoding: Optional[str] = None,
518
519
  errors: Optional[str] = None,
519
- **options) -> IO[AnyStr]:
520
+ **options) -> IO[AnyStr]: # pytype: disable=signature-mismatch
520
521
  '''
521
522
  Open a file on the path
522
523
 
megfile/stdio.py CHANGED
@@ -9,7 +9,7 @@ __all__ = [
9
9
  ]
10
10
 
11
11
 
12
- def stdio_open(path: PathLike, mode: str) -> IO[AnyStr]:
12
+ def stdio_open(path: PathLike, mode: str) -> IO[AnyStr]: # pytype: disable=signature-mismatch
13
13
  '''Used to read or write stdio
14
14
 
15
15
  .. note ::
megfile/stdio_path.py CHANGED
@@ -72,7 +72,7 @@ class StdioPath(BaseURIPath):
72
72
  return STDReader(mode)
73
73
  return STDWriter(self.path_with_protocol, mode)
74
74
 
75
- def open(self, mode: str, **kwargs) -> IO[AnyStr]:
75
+ def open(self, mode: str, **kwargs) -> IO[AnyStr]: # pytype: disable=signature-mismatch
76
76
  '''Used to read or write stdio
77
77
 
78
78
  .. note ::
megfile/version.py CHANGED
@@ -1 +1 @@
1
- VERSION = "2.0.4.post2"
1
+ VERSION = "2.0.5"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: megfile
3
- Version: 2.0.4.post2
3
+ Version: 2.0.5
4
4
  Summary: Megvii file operation library
5
5
  Home-page: https://github.com/megvii-research/megfile
6
6
  Author: megvii
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.7
20
20
  Classifier: Programming Language :: Python :: 3.8
21
21
  Classifier: Programming Language :: Python :: 3.9
22
22
  Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
23
24
  Requires-Python: >=3.6
24
25
  Description-Content-Type: text/markdown
25
26
  License-File: LICENSE
@@ -1,28 +1,28 @@
1
1
  megfile/__init__.py,sha256=wlijLJS6F8Vdm1xjpsjd9fKBeDGpgIMrVsXYSeOQ4Xw,5434
2
- megfile/cli.py,sha256=xQVArkn1uernhWy7K9z2QaVIQ0rQhVbirHBd58DV4rA,9918
2
+ megfile/cli.py,sha256=t299Wo9lA0EbZlS5k3tCxW19liCqY7-i7zbu8oHOwHo,10033
3
3
  megfile/errors.py,sha256=FE9mGMxnNFpsQdtNJWiL-BuZbPGbbx8es9eAo8osyio,11584
4
4
  megfile/fs.py,sha256=sjkm_LsvNCw8hj9Ee-1HSNzvg7bRHTPem8KTDDBQlCw,11621
5
- megfile/fs_path.py,sha256=-AcwwvifUeq6skQolWBFFeTqohCKCMyewJDC0CnYwE4,37313
5
+ megfile/fs_path.py,sha256=xdMkmH0mVAWnP2yfhxudvfuI-7tEgCzk9CzbN08-8O4,37351
6
6
  megfile/http.py,sha256=EtyFazgenIhEvkwMpX6ga32POKUG21969Y2cRQbFn58,1852
7
7
  megfile/http_path.py,sha256=up1gB0Yk1a3ZbmHoJV-XWzOTiKh66hmm5p_Kzy3GMHo,4483
8
- megfile/interfaces.py,sha256=sRLQxyucY8f3Y5_7g6h8qHDZ8xLoTbcWu-Ofh15mlDc,6181
8
+ megfile/interfaces.py,sha256=h3tWE8hVt5S-HopaMAX6lunPJ97vzhv6jH_2HubcDNc,6219
9
9
  megfile/pathlike.py,sha256=EKVSfr13IFYTyUIfkTxzli93UJXkxtTH3IXdv946DhE,28741
10
10
  megfile/s3.py,sha256=hlXqQvZuXuDJbLjsrK23LD25cblThO9f-r78eWFsYZ8,12456
11
- megfile/s3_path.py,sha256=ZvJeTO7XPfVgWmB0Z8FqdWWWJWHO3aspEOeD6N1CLqU,84371
12
- megfile/sftp.py,sha256=3BcPcIW2QLhKDs7Bn6m3O5pH9NVr2m0EYn6KudQNinc,11369
13
- megfile/sftp_path.py,sha256=Qp8AVnDmVJI4Dtofqbbo3PI7FzpOnnXpQIsX4wziT8o,40199
14
- megfile/smart.py,sha256=cqCBMuXw6Ljc3HrYaebjE7XoO9DEWw0gOVfR-TrQGGs,30429
11
+ megfile/s3_path.py,sha256=WrKby1hDJPa8JGRWVggOWrakjvPtHlk6VmHMqlHkOiw,84774
12
+ megfile/sftp.py,sha256=qzfgI-MGzNsr7adUQaiVKS7zRHGuK-Hs6o45wNIAcww,11943
13
+ megfile/sftp_path.py,sha256=1DH_we_ygn7oYc4S_uh-mXZjbXleWaZDnNINxzuNIU4,40345
14
+ megfile/smart.py,sha256=InlLZHUCjSuUo9MYgEmz0Q_2UuFKiD5ckwH5oag2SBo,30484
15
15
  megfile/smart_path.py,sha256=OPFfRgv-wtdSgakt7eN01d3Sne4qGNe4_nL_9a4AyzA,6613
16
- megfile/stdio.py,sha256=DmSdL-f1A0SBoOBFhOqZSaHk5MuZVWRyUZJlYpzRppA,521
17
- megfile/stdio_path.py,sha256=g2Sv7tOkYNANK_vAN7p6oxTvr3MOEM1gwEpHkha9PFg,2634
18
- megfile/version.py,sha256=5Ns42Ibmoy5mbsuktzzFfe5hbP2KuvwpXuLKS5eOjXM,25
16
+ megfile/stdio.py,sha256=qmi1c7VTll6Y6ya9MCd-dSKffocX2GafA-YUncZRU1Y,559
17
+ megfile/stdio_path.py,sha256=77P-SEFy5EONViTe-J7gK8ID9VkfACLvB-7WXrWry6s,2672
18
+ megfile/version.py,sha256=V8tafegt5EJPpw_OdTJ2xlmX0IbL6epFkgwbhD7aB-M,19
19
19
  megfile/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- megfile/lib/combine_reader.py,sha256=nOQ7kJhQwwIqA8thZE7red7AjmVpwMhLrzIq4y84StI,4466
20
+ megfile/lib/combine_reader.py,sha256=TkjvYvM5ZBVCh3tA7cOmTe8dYZc_eI7XbpPhnzqaNvU,4580
21
21
  megfile/lib/compat.py,sha256=ro07M9GU9hmqnSBu-IV13qKQQ9ktiMNDxaGGw9I9W3k,228
22
22
  megfile/lib/fnmatch.py,sha256=HgdlnEWBsdFUOZqnW_v1kj1jeH_9lMcCqW85pyMu4vM,4054
23
23
  megfile/lib/glob.py,sha256=XOENsZS5aLJk1WDqDkBJl62CICxgarmqlKjCAWvixMg,9478
24
24
  megfile/lib/joinpath.py,sha256=D4Px6-lnDDpYs1LMUHkTIGqMPJQ0oCBGfTzREs373iU,929
25
- megfile/lib/lazy_handler.py,sha256=FFyVO4OdG9Hi0j0moELW2z8Nq8D3f3PGEROM6IKCwUM,1801
25
+ megfile/lib/lazy_handler.py,sha256=f1rip2_T57vVo0WRNXve2bAa4LArvVheMfQg1S0vFzg,1915
26
26
  megfile/lib/s3_buffered_writer.py,sha256=AGjCNQ1X16kjFbEJouavkO6ykmlAtfVKBPAD-yYwAT0,6934
27
27
  megfile/lib/s3_cached_handler.py,sha256=e4KamTLMIPKa96yp7HGF05wDl2Yfoizz9pBrz-uAQ5w,1322
28
28
  megfile/lib/s3_limited_seekable_writer.py,sha256=OEh_HCbxNt8hsF2Y5OAQ9puikvzDfNkzluHjXtThegg,6057
@@ -30,14 +30,14 @@ megfile/lib/s3_memory_handler.py,sha256=jLBA5HVuI-UBPYMYN-B8iX_VGr8bC9brAqY-KbEG
30
30
  megfile/lib/s3_pipe_handler.py,sha256=6r0rmLQp6VlJ4ZpBAvurfkaY0-qxKIuNpi5wMe1sDJ4,3404
31
31
  megfile/lib/s3_prefetch_reader.py,sha256=zSd_gmpDtQCDA-Rrh7Nxh2WOb0Z8Q1QZZg1g7WO6JNg,15053
32
32
  megfile/lib/s3_share_cache_reader.py,sha256=q3MVEDUgOvalO7js6S_LWQ-eJS4xFHiio8ZoJZt40e4,3791
33
- megfile/lib/shadow_handler.py,sha256=qbew6o1FLv4WKY6xAK05Ei9jQpNUK_E06iSIU_2AE0o,2569
34
- megfile/lib/stdio_handler.py,sha256=M9mAfG7EUR8a4yL-BwcU_025BVwNC0iI_lSIA8xNVa8,1930
33
+ megfile/lib/shadow_handler.py,sha256=IbFyTw107t-yWH0cGrDjAJX-CS3xeEr77_PTGsnSgk4,2683
34
+ megfile/lib/stdio_handler.py,sha256=QDWtcZxz-hzi-rqQUiSlR3NrihX1fjK_Rj9T2mdTFEg,2044
35
35
  megfile/utils/__init__.py,sha256=gWplPIHzpSqV9AiQiRvUrBCkD737caNYyudsgwQBbKk,9025
36
36
  megfile/utils/mutex.py,sha256=BE16gbmZxr0RgU0ULaAFVDTZGwiOA-Jven-fDeG3ltQ,2461
37
- megfile-2.0.4.post2.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
38
- megfile-2.0.4.post2.dist-info/LICENSE.pyre,sha256=9lf5nT-5ZH25JijpYAequ0bl8E8z5JmZB1qrjiUMp84,1080
39
- megfile-2.0.4.post2.dist-info/METADATA,sha256=y80WxBxAWLzEQ4MP3tcLUTX70JWuk6HvalybxBfQ4eQ,10146
40
- megfile-2.0.4.post2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
41
- megfile-2.0.4.post2.dist-info/entry_points.txt,sha256=O8y31sCLdgUkNujumqaC4GDjJDOq55SJQ_uc7s1FeYw,50
42
- megfile-2.0.4.post2.dist-info/top_level.txt,sha256=i3rMgdU1ZAJekAceojhA-bkm3749PzshtRmLTbeLUPQ,8
43
- megfile-2.0.4.post2.dist-info/RECORD,,
37
+ megfile-2.0.5.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
38
+ megfile-2.0.5.dist-info/LICENSE.pyre,sha256=9lf5nT-5ZH25JijpYAequ0bl8E8z5JmZB1qrjiUMp84,1080
39
+ megfile-2.0.5.dist-info/METADATA,sha256=eXUyzBLc4ihdouSq74YpP8co_MyR55xQL8WLAzmSZn8,10191
40
+ megfile-2.0.5.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
41
+ megfile-2.0.5.dist-info/entry_points.txt,sha256=O8y31sCLdgUkNujumqaC4GDjJDOq55SJQ_uc7s1FeYw,50
42
+ megfile-2.0.5.dist-info/top_level.txt,sha256=i3rMgdU1ZAJekAceojhA-bkm3749PzshtRmLTbeLUPQ,8
43
+ megfile-2.0.5.dist-info/RECORD,,