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 +5 -1
- megfile/fs_path.py +1 -1
- megfile/interfaces.py +1 -1
- megfile/lib/combine_reader.py +3 -3
- megfile/lib/lazy_handler.py +3 -3
- megfile/lib/shadow_handler.py +3 -3
- megfile/lib/stdio_handler.py +3 -3
- megfile/s3_path.py +18 -8
- megfile/sftp.py +13 -5
- megfile/sftp_path.py +23 -19
- megfile/smart.py +3 -2
- megfile/stdio.py +1 -1
- megfile/stdio_path.py +1 -1
- megfile/version.py +1 -1
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/METADATA +2 -1
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/RECORD +21 -21
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/LICENSE +0 -0
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/LICENSE.pyre +0 -0
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/WHEEL +0 -0
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/entry_points.txt +0 -0
- {megfile-2.0.4.post2.dist-info → megfile-2.0.5.dist-info}/top_level.txt +0 -0
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)
|
|
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
megfile/lib/combine_reader.py
CHANGED
|
@@ -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:
|
megfile/lib/lazy_handler.py
CHANGED
|
@@ -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):
|
megfile/lib/shadow_handler.py
CHANGED
|
@@ -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
|
|
megfile/lib/stdio_handler.py
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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) ->
|
|
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
|
-
|
|
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
|
-
|
|
501
|
-
|
|
502
|
-
|
|
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
|
-
|
|
518
|
-
|
|
519
|
-
|
|
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
|
-
|
|
876
|
-
|
|
877
|
-
|
|
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.
|
|
883
|
-
raise
|
|
884
|
-
'
|
|
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) ->
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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
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.
|
|
1
|
+
VERSION = "2.0.5"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: megfile
|
|
3
|
-
Version: 2.0.
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
12
|
-
megfile/sftp.py,sha256=
|
|
13
|
-
megfile/sftp_path.py,sha256=
|
|
14
|
-
megfile/smart.py,sha256=
|
|
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=
|
|
17
|
-
megfile/stdio_path.py,sha256=
|
|
18
|
-
megfile/version.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
34
|
-
megfile/lib/stdio_handler.py,sha256=
|
|
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.
|
|
38
|
-
megfile-2.0.
|
|
39
|
-
megfile-2.0.
|
|
40
|
-
megfile-2.0.
|
|
41
|
-
megfile-2.0.
|
|
42
|
-
megfile-2.0.
|
|
43
|
-
megfile-2.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|