megfile 5.0.0__py3-none-any.whl → 5.0.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.
- megfile/__init__.py +47 -21
- megfile/cli.py +46 -20
- megfile/config.py +25 -0
- megfile/lib/webdav_memory_handler.py +2 -2
- megfile/smart_path.py +17 -11
- megfile/version.py +1 -1
- megfile/webdav_path.py +4 -3
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/METADATA +1 -1
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/RECORD +14 -14
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/WHEEL +0 -0
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/entry_points.txt +0 -0
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/licenses/LICENSE +0 -0
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/licenses/LICENSE.pyre +0 -0
- {megfile-5.0.0.dist-info → megfile-5.0.2.dist-info}/top_level.txt +0 -0
megfile/__init__.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import megfile.config # noqa: F401 # make sure env config is loaded
|
|
2
|
+
from megfile.fs_path import FSPath, fs_copy, is_fs
|
|
2
3
|
from megfile.hdfs_path import HdfsPath, is_hdfs
|
|
3
4
|
from megfile.http_path import HttpPath, HttpsPath, is_http
|
|
4
5
|
from megfile.s3_path import (
|
|
@@ -6,12 +7,26 @@ from megfile.s3_path import (
|
|
|
6
7
|
is_s3,
|
|
7
8
|
s3_buffered_open,
|
|
8
9
|
s3_cached_open,
|
|
10
|
+
s3_concat,
|
|
11
|
+
s3_copy,
|
|
12
|
+
s3_download,
|
|
13
|
+
s3_load_content,
|
|
9
14
|
s3_memory_open,
|
|
15
|
+
s3_open,
|
|
10
16
|
s3_pipe_open,
|
|
11
17
|
s3_prefetch_open,
|
|
12
18
|
s3_share_cache_open,
|
|
19
|
+
s3_upload,
|
|
20
|
+
)
|
|
21
|
+
from megfile.sftp_path import (
|
|
22
|
+
SftpPath,
|
|
23
|
+
is_sftp,
|
|
24
|
+
sftp_add_host_key,
|
|
25
|
+
sftp_concat,
|
|
26
|
+
sftp_copy,
|
|
27
|
+
sftp_download,
|
|
28
|
+
sftp_upload,
|
|
13
29
|
)
|
|
14
|
-
from megfile.sftp_path import SftpPath, is_sftp, sftp_add_host_key
|
|
15
30
|
from megfile.smart import (
|
|
16
31
|
smart_access,
|
|
17
32
|
smart_cache,
|
|
@@ -71,9 +86,12 @@ except ImportError:
|
|
|
71
86
|
__all__ = [
|
|
72
87
|
"smart_access",
|
|
73
88
|
"smart_cache",
|
|
89
|
+
"smart_cache",
|
|
74
90
|
"smart_combine_open",
|
|
91
|
+
"smart_concat",
|
|
75
92
|
"smart_copy",
|
|
76
93
|
"smart_exists",
|
|
94
|
+
"smart_getmd5",
|
|
77
95
|
"smart_getmtime",
|
|
78
96
|
"smart_getsize",
|
|
79
97
|
"smart_glob_stat",
|
|
@@ -84,54 +102,62 @@ __all__ = [
|
|
|
84
102
|
"smart_islink",
|
|
85
103
|
"smart_listdir",
|
|
86
104
|
"smart_load_content",
|
|
87
|
-
"smart_save_content",
|
|
88
105
|
"smart_load_from",
|
|
89
106
|
"smart_load_text",
|
|
90
|
-
"
|
|
107
|
+
"smart_lstat",
|
|
91
108
|
"smart_makedirs",
|
|
109
|
+
"smart_move",
|
|
92
110
|
"smart_open",
|
|
93
111
|
"smart_path_join",
|
|
112
|
+
"smart_readlink",
|
|
94
113
|
"smart_realpath",
|
|
95
114
|
"smart_remove",
|
|
96
|
-
"smart_move",
|
|
97
115
|
"smart_rename",
|
|
98
116
|
"smart_save_as",
|
|
117
|
+
"smart_save_content",
|
|
118
|
+
"smart_save_text",
|
|
99
119
|
"smart_scan_stat",
|
|
100
120
|
"smart_scan",
|
|
101
121
|
"smart_scandir",
|
|
102
122
|
"smart_stat",
|
|
123
|
+
"smart_symlink",
|
|
103
124
|
"smart_sync",
|
|
104
125
|
"smart_touch",
|
|
105
126
|
"smart_unlink",
|
|
106
127
|
"smart_walk",
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"smart_lstat",
|
|
112
|
-
"smart_concat",
|
|
128
|
+
"is_fs",
|
|
129
|
+
"fs_copy",
|
|
130
|
+
"is_hdfs",
|
|
131
|
+
"is_http",
|
|
113
132
|
"is_s3",
|
|
114
133
|
"s3_buffered_open",
|
|
115
134
|
"s3_cached_open",
|
|
135
|
+
"s3_concat",
|
|
136
|
+
"s3_copy",
|
|
137
|
+
"s3_download",
|
|
138
|
+
"s3_load_content",
|
|
116
139
|
"s3_memory_open",
|
|
140
|
+
"s3_open",
|
|
117
141
|
"s3_pipe_open",
|
|
118
142
|
"s3_prefetch_open",
|
|
119
143
|
"s3_share_cache_open",
|
|
120
|
-
"
|
|
121
|
-
"is_http",
|
|
122
|
-
"is_stdio",
|
|
123
|
-
"stdio_open",
|
|
144
|
+
"s3_upload",
|
|
124
145
|
"is_sftp",
|
|
125
146
|
"sftp_add_host_key",
|
|
126
|
-
"
|
|
147
|
+
"sftp_concat",
|
|
148
|
+
"sftp_copy",
|
|
149
|
+
"sftp_download",
|
|
150
|
+
"sftp_upload",
|
|
151
|
+
"is_stdio",
|
|
152
|
+
"stdio_open",
|
|
127
153
|
"is_webdav",
|
|
128
|
-
"WebdavPath",
|
|
129
|
-
"S3Path",
|
|
130
154
|
"FSPath",
|
|
155
|
+
"HdfsPath",
|
|
131
156
|
"HttpPath",
|
|
132
157
|
"HttpsPath",
|
|
133
|
-
"
|
|
134
|
-
"SmartPath",
|
|
158
|
+
"S3Path",
|
|
135
159
|
"SftpPath",
|
|
136
|
-
"
|
|
160
|
+
"SmartPath",
|
|
161
|
+
"StdioPath",
|
|
162
|
+
"WebdavPath",
|
|
137
163
|
]
|
megfile/cli.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import configparser
|
|
2
1
|
import os
|
|
3
2
|
import shutil
|
|
4
3
|
import signal
|
|
@@ -14,7 +13,13 @@ from click import ParamType
|
|
|
14
13
|
from click.shell_completion import CompletionItem, ZshComplete
|
|
15
14
|
from tqdm import tqdm
|
|
16
15
|
|
|
17
|
-
from megfile.config import
|
|
16
|
+
from megfile.config import (
|
|
17
|
+
CONFIG_PATH,
|
|
18
|
+
READER_BLOCK_SIZE,
|
|
19
|
+
SFTP_HOST_KEY_POLICY,
|
|
20
|
+
CaseSensitiveConfigParser,
|
|
21
|
+
set_log_level,
|
|
22
|
+
)
|
|
18
23
|
from megfile.hdfs_path import DEFAULT_HDFS_TIMEOUT
|
|
19
24
|
from megfile.interfaces import FileEntry
|
|
20
25
|
from megfile.lib.glob import get_non_glob_dir, has_magic
|
|
@@ -841,7 +846,7 @@ def hdfs(path, url, profile_name, user, root, token, timeout, no_cover):
|
|
|
841
846
|
"timeout": timeout,
|
|
842
847
|
}
|
|
843
848
|
profile_name = f"{profile_name}.alias"
|
|
844
|
-
config =
|
|
849
|
+
config = CaseSensitiveConfigParser()
|
|
845
850
|
if os.path.exists(path):
|
|
846
851
|
config.read(path)
|
|
847
852
|
if "global" not in config.sections():
|
|
@@ -865,37 +870,58 @@ def hdfs(path, url, profile_name, user, root, token, timeout, no_cover):
|
|
|
865
870
|
@click.option(
|
|
866
871
|
"-p",
|
|
867
872
|
"--path",
|
|
868
|
-
default=
|
|
869
|
-
help="
|
|
873
|
+
default=CONFIG_PATH,
|
|
874
|
+
help=f"megfile config file, default is {CONFIG_PATH}",
|
|
870
875
|
)
|
|
871
876
|
@click.argument("name")
|
|
872
877
|
@click.argument("protocol_or_path")
|
|
873
878
|
@click.option("--no-cover", is_flag=True, help="Not cover the same-name config")
|
|
874
879
|
def alias(path, name, protocol_or_path, no_cover):
|
|
875
880
|
path = os.path.expanduser(path)
|
|
876
|
-
config =
|
|
881
|
+
config = CaseSensitiveConfigParser()
|
|
877
882
|
if os.path.exists(path):
|
|
878
883
|
config.read(path)
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
config[name] = {
|
|
885
|
-
"protocol": protocol,
|
|
886
|
-
"prefix": prefix,
|
|
887
|
-
}
|
|
888
|
-
else:
|
|
889
|
-
config[name] = {
|
|
890
|
-
"protocol": protocol_or_path,
|
|
891
|
-
}
|
|
892
|
-
|
|
884
|
+
config.setdefault("alias", {})
|
|
885
|
+
if config.has_option("alias", name) and no_cover:
|
|
886
|
+
value = config.get("alias", name)
|
|
887
|
+
raise NameError(f"alias-name has been used: {name} = {value}")
|
|
888
|
+
config.set("alias", name, protocol_or_path)
|
|
893
889
|
_safe_makedirs(os.path.dirname(path)) # make sure dirpath exist
|
|
894
890
|
with open(path, "w") as fp:
|
|
895
891
|
config.write(fp)
|
|
896
892
|
click.echo(f"Your alias config has been saved into {path}")
|
|
897
893
|
|
|
898
894
|
|
|
895
|
+
@config.command(short_help="Update the config file for envs")
|
|
896
|
+
@click.option(
|
|
897
|
+
"-p",
|
|
898
|
+
"--path",
|
|
899
|
+
default=CONFIG_PATH,
|
|
900
|
+
help=f"megfile config file, default is {CONFIG_PATH}",
|
|
901
|
+
)
|
|
902
|
+
@click.argument("expr")
|
|
903
|
+
@click.option("--no-cover", is_flag=True, help="Not cover the same-name config")
|
|
904
|
+
def env(path, expr, no_cover):
|
|
905
|
+
if "=" not in expr:
|
|
906
|
+
raise ValueError("Invalid env format: {}".format(expr))
|
|
907
|
+
name, value = expr.split("=", 1)
|
|
908
|
+
|
|
909
|
+
path = os.path.expanduser(path)
|
|
910
|
+
|
|
911
|
+
config = CaseSensitiveConfigParser()
|
|
912
|
+
if os.path.exists(path):
|
|
913
|
+
config.read(path)
|
|
914
|
+
config.setdefault("env", {})
|
|
915
|
+
if config.has_option("env", name) and no_cover:
|
|
916
|
+
value = config.get("env", name)
|
|
917
|
+
raise NameError(f"env has been set: {name} = {value}")
|
|
918
|
+
config.set("env", name, value)
|
|
919
|
+
_safe_makedirs(os.path.dirname(path)) # make sure dirpath exist
|
|
920
|
+
with open(path, "w") as fp:
|
|
921
|
+
config.write(fp)
|
|
922
|
+
click.echo(f"Your env config has been saved into {path}")
|
|
923
|
+
|
|
924
|
+
|
|
899
925
|
@cli.group(short_help="Return the completion file")
|
|
900
926
|
def completion():
|
|
901
927
|
pass
|
megfile/config.py
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import configparser
|
|
1
2
|
import logging
|
|
2
3
|
import os
|
|
3
4
|
import typing as T
|
|
4
5
|
|
|
5
6
|
|
|
7
|
+
class CaseSensitiveConfigParser(configparser.ConfigParser):
|
|
8
|
+
def optionxform(self, optionstr: str) -> str:
|
|
9
|
+
return optionstr
|
|
10
|
+
|
|
11
|
+
|
|
6
12
|
def parse_quantity(quantity: T.Union[str, int]) -> int:
|
|
7
13
|
"""
|
|
8
14
|
Parse kubernetes canonical form quantity like 200Mi to a int number.
|
|
@@ -75,6 +81,25 @@ def set_log_level(level: T.Optional[T.Union[int, str]] = None):
|
|
|
75
81
|
logging.getLogger("megfile").setLevel(level)
|
|
76
82
|
|
|
77
83
|
|
|
84
|
+
CONFIG_PATH = "~/.config/megfile/megfile.conf"
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def load_megfile_config(section) -> T.Dict[str, str]:
|
|
88
|
+
path = os.path.expanduser(CONFIG_PATH)
|
|
89
|
+
if not os.path.isfile(path):
|
|
90
|
+
return {}
|
|
91
|
+
config = CaseSensitiveConfigParser()
|
|
92
|
+
if os.path.exists(path):
|
|
93
|
+
config.read(path)
|
|
94
|
+
if not config.has_section(section):
|
|
95
|
+
return {}
|
|
96
|
+
return dict(config.items(section))
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
for key, value in load_megfile_config("env").items():
|
|
100
|
+
os.environ.setdefault(key.upper(), value)
|
|
101
|
+
|
|
102
|
+
|
|
78
103
|
READER_BLOCK_SIZE = parse_quantity(os.getenv("MEGFILE_READER_BLOCK_SIZE") or 8 * 2**20)
|
|
79
104
|
if READER_BLOCK_SIZE <= 0:
|
|
80
105
|
raise ValueError(
|
|
@@ -19,7 +19,7 @@ def _webdav_stat(client: WebdavClient, remote_path: str):
|
|
|
19
19
|
info = WebDavXmlUtils.parse_info_response(
|
|
20
20
|
response.content, path, client.webdav.hostname
|
|
21
21
|
)
|
|
22
|
-
info["
|
|
22
|
+
info["isdir"] = WebDavXmlUtils.parse_is_dir_response(
|
|
23
23
|
response.content, path, client.webdav.hostname
|
|
24
24
|
)
|
|
25
25
|
return info
|
|
@@ -60,7 +60,7 @@ class WebdavMemoryHandler(BaseMemoryHandler):
|
|
|
60
60
|
|
|
61
61
|
def _file_exists(self) -> bool:
|
|
62
62
|
try:
|
|
63
|
-
return not _webdav_stat(self._client, self._remote_path)["
|
|
63
|
+
return not _webdav_stat(self._client, self._remote_path)["isdir"]
|
|
64
64
|
except RemoteResourceNotFound:
|
|
65
65
|
return False
|
|
66
66
|
|
megfile/smart_path.py
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from configparser import ConfigParser
|
|
3
2
|
from functools import cached_property
|
|
4
3
|
from pathlib import PurePath
|
|
5
4
|
from typing import Dict, Optional, Tuple, Union
|
|
6
5
|
|
|
6
|
+
from megfile.config import load_megfile_config
|
|
7
7
|
from megfile.lib.compat import fspath
|
|
8
8
|
from megfile.lib.url import get_url_scheme
|
|
9
9
|
from megfile.pathlike import URIPathParents
|
|
10
10
|
from megfile.utils import cached_classproperty
|
|
11
11
|
|
|
12
|
+
from .config import CaseSensitiveConfigParser
|
|
12
13
|
from .errors import ProtocolExistsError, ProtocolNotFoundError
|
|
13
14
|
from .interfaces import BasePath, PathLike
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
LEGACY_ALIASES_CONFIG = "~/.config/megfile/aliases.conf"
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
def _bind_function(name, after_callback=None, before_callback=None):
|
|
@@ -54,14 +55,20 @@ def _bind_property(name, callback=None):
|
|
|
54
55
|
return smart_property
|
|
55
56
|
|
|
56
57
|
|
|
57
|
-
def _load_aliases_config(
|
|
58
|
-
if not os.path.exists(config_path):
|
|
59
|
-
return {}
|
|
60
|
-
parser = ConfigParser()
|
|
61
|
-
parser.read(config_path)
|
|
58
|
+
def _load_aliases_config() -> Dict[str, Dict[str, str]]:
|
|
62
59
|
configs = {}
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
config_path = os.path.expanduser(LEGACY_ALIASES_CONFIG)
|
|
61
|
+
if os.path.isfile(config_path):
|
|
62
|
+
parser = CaseSensitiveConfigParser()
|
|
63
|
+
parser.read(config_path)
|
|
64
|
+
for section in parser.sections():
|
|
65
|
+
configs[section] = dict(parser.items(section))
|
|
66
|
+
for name, protocol_or_path in load_megfile_config("alias").items():
|
|
67
|
+
if "://" in protocol_or_path:
|
|
68
|
+
protocol, prefix = protocol_or_path.split("://", maxsplit=1)
|
|
69
|
+
configs[name] = {"protocol": protocol, "prefix": prefix}
|
|
70
|
+
else:
|
|
71
|
+
configs[name] = {"protocol": protocol_or_path}
|
|
65
72
|
return configs
|
|
66
73
|
|
|
67
74
|
|
|
@@ -151,8 +158,7 @@ class SmartPath(BasePath):
|
|
|
151
158
|
|
|
152
159
|
@cached_classproperty
|
|
153
160
|
def _aliases(cls) -> Dict[str, Dict[str, str]]:
|
|
154
|
-
|
|
155
|
-
return _load_aliases_config(config_path)
|
|
161
|
+
return _load_aliases_config()
|
|
156
162
|
|
|
157
163
|
@classmethod
|
|
158
164
|
def _split_protocol(cls, path: Union[PathLike, int]) -> Tuple[str, Union[str, int]]:
|
megfile/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
VERSION = "5.0.
|
|
1
|
+
VERSION = "5.0.2"
|
megfile/webdav_path.py
CHANGED
|
@@ -78,7 +78,7 @@ def _make_stat(info: dict) -> StatResult:
|
|
|
78
78
|
except Exception:
|
|
79
79
|
mtime = 0.0
|
|
80
80
|
|
|
81
|
-
isdir = info.get("
|
|
81
|
+
isdir = info.get("isdir", False)
|
|
82
82
|
|
|
83
83
|
return StatResult(
|
|
84
84
|
size=size,
|
|
@@ -144,6 +144,7 @@ def _patch_execute_request(
|
|
|
144
144
|
cmds = shlex.split(client.webdav.token_command)
|
|
145
145
|
client.webdav.token_command_last_call = time.time()
|
|
146
146
|
client.webdav.token = subprocess.check_output(cmds).decode().strip()
|
|
147
|
+
_logger.debug("update webdav token by command: %s", client.webdav.token_command)
|
|
147
148
|
|
|
148
149
|
def webdav_should_retry(error: Exception) -> bool:
|
|
149
150
|
if http_should_retry(error):
|
|
@@ -457,7 +458,7 @@ class WebdavPath(URIPath):
|
|
|
457
458
|
:returns: True if the path is a directory, else False
|
|
458
459
|
"""
|
|
459
460
|
try:
|
|
460
|
-
return _webdav_stat(self._client, self._remote_path)["
|
|
461
|
+
return _webdav_stat(self._client, self._remote_path)["isdir"]
|
|
461
462
|
except RemoteResourceNotFound:
|
|
462
463
|
return False
|
|
463
464
|
|
|
@@ -469,7 +470,7 @@ class WebdavPath(URIPath):
|
|
|
469
470
|
:returns: True if the path is a file, else False
|
|
470
471
|
"""
|
|
471
472
|
try:
|
|
472
|
-
return not _webdav_stat(self._client, self._remote_path)["
|
|
473
|
+
return not _webdav_stat(self._client, self._remote_path)["isdir"]
|
|
473
474
|
except RemoteResourceNotFound:
|
|
474
475
|
return False
|
|
475
476
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
megfile/__init__.py,sha256=
|
|
2
|
-
megfile/cli.py,sha256=
|
|
3
|
-
megfile/config.py,sha256=
|
|
1
|
+
megfile/__init__.py,sha256=4XbMsR-lM7MxbnPGBI16m2sq6ghuA2-zZj2XF4bbX2Y,3291
|
|
2
|
+
megfile/cli.py,sha256=HdOIAMFXdZw79kayVIri5-_rbq_KwOGSdMYTx51ABp0,30204
|
|
3
|
+
megfile/config.py,sha256=K3B_o2dnI7qGsGnK8Jg18-S5YYLYuzskfNJowlSMkQM,5065
|
|
4
4
|
megfile/errors.py,sha256=eC7z-2-QqE12pYgTGAOIlEBsemqcMyeBFVUEDz3gBS0,15585
|
|
5
5
|
megfile/fs_path.py,sha256=tt2__W6E4vep0lmVreTLIW63njl-EzyQEEkEGziyAb4,41015
|
|
6
6
|
megfile/hdfs_path.py,sha256=OmUe3vA3Qoxnqtcq0Rs3ygBvzAtqUz3fGo8iP5sWneE,26058
|
|
@@ -11,10 +11,10 @@ megfile/s3_path.py,sha256=LINHnHnpesXnf9wxbV6n0xQVT0wPwyjLc7xAasakefU,94467
|
|
|
11
11
|
megfile/sftp2_path.py,sha256=K90bnMVAx0MQPGXP6LogGuDRzaD4MPR6lMOfdY9C9-0,37942
|
|
12
12
|
megfile/sftp_path.py,sha256=_KU7_-Mq2m7lcLY1mpiGrju0SP-OsdEXlRjFhZH25UA,51223
|
|
13
13
|
megfile/smart.py,sha256=Lab2jxprj-zvPw5GqUWlWiEY8bcpRlviks_qp9r-km8,38224
|
|
14
|
-
megfile/smart_path.py,sha256=
|
|
14
|
+
megfile/smart_path.py,sha256=kGidkM5S58ChE3LVZMcUACs3IQgsqh9m04sp6-wxuhk,12615
|
|
15
15
|
megfile/stdio_path.py,sha256=cxaDr8rtisTPnN-rjtaEpqQnshwiqwXFUJBM9xWY7Cg,2711
|
|
16
|
-
megfile/version.py,sha256=
|
|
17
|
-
megfile/webdav_path.py,sha256=
|
|
16
|
+
megfile/version.py,sha256=2z_YV6M_rFsVnaPW0uk4dTnt4IynxvGR09iBXCfO_Po,19
|
|
17
|
+
megfile/webdav_path.py,sha256=xQmZMt-hDA7PfHzuSjRYaIoJA_Nbi1jsg952KZJhs-E,31364
|
|
18
18
|
megfile/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
megfile/lib/base_memory_handler.py,sha256=i5-YHpL0k2tuFBnP9VMzb3_OsaU6D6j6thkmWgptnFg,2680
|
|
20
20
|
megfile/lib/base_prefetch_reader.py,sha256=MYaWOkXc3geZMYNPHlPZmmpOR6uSz-AMuCZwYdoz7t0,13296
|
|
@@ -38,14 +38,14 @@ megfile/lib/s3_share_cache_reader.py,sha256=8uip5IdVjPXCquXrskjocsZx2-TiXqWZPY0g
|
|
|
38
38
|
megfile/lib/shadow_handler.py,sha256=TntewlvIW9ZxCfmqASDQREHoiZ8v42faOe9sovQYQz0,2779
|
|
39
39
|
megfile/lib/stdio_handler.py,sha256=IDdgENLQlhigEwkLL4zStueVSzdWg7xVcTF_koof_Ek,1987
|
|
40
40
|
megfile/lib/url.py,sha256=ER32pWy9Q2MAk3TraAaNEBWIqUeBmLuM57ol2cs7-Ks,103
|
|
41
|
-
megfile/lib/webdav_memory_handler.py,sha256=
|
|
41
|
+
megfile/lib/webdav_memory_handler.py,sha256=_UccPYPpvfTd4gSEhBFL1BHeyFtsBJdhVINkjNNtyaw,2506
|
|
42
42
|
megfile/lib/webdav_prefetch_reader.py,sha256=M0X6E6t-DS5q9KiLvjVZx_AZuiW9SaIkBnIPLc774GQ,3941
|
|
43
43
|
megfile/utils/__init__.py,sha256=4hBVSXbNTbDj7Je0y9SbwgcPm_s41H9v3eHUMr9JNGo,12700
|
|
44
44
|
megfile/utils/mutex.py,sha256=asb8opGLgK22RiuBJUnfsvB8LnMmodP8KzCVHKmQBWA,2561
|
|
45
|
-
megfile-5.0.
|
|
46
|
-
megfile-5.0.
|
|
47
|
-
megfile-5.0.
|
|
48
|
-
megfile-5.0.
|
|
49
|
-
megfile-5.0.
|
|
50
|
-
megfile-5.0.
|
|
51
|
-
megfile-5.0.
|
|
45
|
+
megfile-5.0.2.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
46
|
+
megfile-5.0.2.dist-info/licenses/LICENSE.pyre,sha256=9lf5nT-5ZH25JijpYAequ0bl8E8z5JmZB1qrjiUMp84,1080
|
|
47
|
+
megfile-5.0.2.dist-info/METADATA,sha256=TvjBMScDXQdbke5lhUufQg2B-KY7XywLn-VpQkfQsfw,9225
|
|
48
|
+
megfile-5.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
49
|
+
megfile-5.0.2.dist-info/entry_points.txt,sha256=M6ZWSSv5_5_QtIpZafy3vq7WuOJ_5dSGQQnEZbByt2Q,49
|
|
50
|
+
megfile-5.0.2.dist-info/top_level.txt,sha256=i3rMgdU1ZAJekAceojhA-bkm3749PzshtRmLTbeLUPQ,8
|
|
51
|
+
megfile-5.0.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|