reykit 1.1.74__py3-none-any.whl → 1.1.77__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.
- reykit/rnet.py +52 -18
- reykit/ros.py +22 -35
- {reykit-1.1.74.dist-info → reykit-1.1.77.dist-info}/METADATA +1 -1
- {reykit-1.1.74.dist-info → reykit-1.1.77.dist-info}/RECORD +6 -6
- {reykit-1.1.74.dist-info → reykit-1.1.77.dist-info}/WHEEL +0 -0
- {reykit-1.1.74.dist-info → reykit-1.1.77.dist-info}/licenses/LICENSE +0 -0
reykit/rnet.py
CHANGED
@@ -31,8 +31,8 @@ from filetype import guess as filetype_guess
|
|
31
31
|
from datetime import datetime
|
32
32
|
|
33
33
|
from .rbase import Base, throw, check_response_code
|
34
|
-
from .ros import File
|
35
|
-
from .rre import search
|
34
|
+
from .ros import File, get_md5
|
35
|
+
from .rre import search, split
|
36
36
|
|
37
37
|
|
38
38
|
__all__ = (
|
@@ -42,6 +42,7 @@ __all__ = (
|
|
42
42
|
'split_cookie',
|
43
43
|
'get_content_type',
|
44
44
|
'request',
|
45
|
+
'get_response_file_name',
|
45
46
|
'download',
|
46
47
|
'compute_stream_time',
|
47
48
|
'listen_socket',
|
@@ -402,6 +403,52 @@ def request(
|
|
402
403
|
return response
|
403
404
|
|
404
405
|
|
406
|
+
def get_response_file_name(response: Response, default_name: str | None = None) -> str:
|
407
|
+
"""
|
408
|
+
Get file name from response.
|
409
|
+
|
410
|
+
Parameters
|
411
|
+
----------
|
412
|
+
response : `Response` instance.
|
413
|
+
default_name : Default file name.
|
414
|
+
- `None`: Use MD5 value join automatic judge file type.
|
415
|
+
|
416
|
+
Returns
|
417
|
+
-------
|
418
|
+
File name.
|
419
|
+
"""
|
420
|
+
|
421
|
+
# Handle parameter.
|
422
|
+
content = response.content
|
423
|
+
|
424
|
+
# Get.
|
425
|
+
file_name = None
|
426
|
+
Content_disposition = response.headers.get('Content-Disposition', '')
|
427
|
+
if 'filename' in Content_disposition:
|
428
|
+
file_name: str | None = search(
|
429
|
+
'filename=[\'"]?([^\\s\'"]+)',
|
430
|
+
Content_disposition
|
431
|
+
)
|
432
|
+
if file_name is None:
|
433
|
+
pattern = r'[/\\]'
|
434
|
+
url_parts = split(pattern, response.request.url)
|
435
|
+
if (
|
436
|
+
len(url_parts) != 1
|
437
|
+
and '.' in url_parts[-1]
|
438
|
+
):
|
439
|
+
file_name = url_parts[-1]
|
440
|
+
if file_name is None:
|
441
|
+
if default_name is None:
|
442
|
+
default_name = get_md5(content)
|
443
|
+
file_type_obj = filetype_guess(content)
|
444
|
+
if file_type_obj is not None:
|
445
|
+
default_name += f'.{file_type_obj.EXTENSION}'
|
446
|
+
file_name = f'{default_name}.' + file_type_obj.EXTENSION
|
447
|
+
file_name = default_name
|
448
|
+
|
449
|
+
return file_name
|
450
|
+
|
451
|
+
|
405
452
|
def download(url: str, path: str | None = None) -> str:
|
406
453
|
"""
|
407
454
|
Download file from URL.
|
@@ -410,7 +457,7 @@ def download(url: str, path: str | None = None) -> str:
|
|
410
457
|
----------
|
411
458
|
url : Download URL.
|
412
459
|
path : Save path.
|
413
|
-
- `None`: File name
|
460
|
+
- `None`: File name use MD5 value join automatic judge file type.
|
414
461
|
|
415
462
|
Returns
|
416
463
|
-------
|
@@ -419,28 +466,15 @@ def download(url: str, path: str | None = None) -> str:
|
|
419
466
|
|
420
467
|
# Download.
|
421
468
|
response = request(url)
|
422
|
-
content = response.content
|
423
469
|
|
424
470
|
# File name.
|
425
471
|
if path is None:
|
426
|
-
file_name =
|
427
|
-
Content_disposition = response.headers.get('Content-Disposition', '')
|
428
|
-
if 'filename' in Content_disposition:
|
429
|
-
file_name: str | None = search(
|
430
|
-
'filename=[\'"]?([^\\s\'"]+)',
|
431
|
-
Content_disposition
|
432
|
-
)
|
433
|
-
if file_name is None:
|
434
|
-
file_type_obj = filetype_guess(content)
|
435
|
-
if file_type_obj is not None:
|
436
|
-
file_name = 'download.' + file_type_obj.EXTENSION
|
437
|
-
else:
|
438
|
-
file_name = 'download'
|
472
|
+
file_name = get_response_file_name(response)
|
439
473
|
path = os_abspath(file_name)
|
440
474
|
|
441
475
|
# Save.
|
442
476
|
file = File(path)
|
443
|
-
file(content)
|
477
|
+
file(response.content)
|
444
478
|
|
445
479
|
return path
|
446
480
|
|
reykit/ros.py
CHANGED
@@ -63,7 +63,7 @@ __all__ = (
|
|
63
63
|
'Folder',
|
64
64
|
'TempFile',
|
65
65
|
'TempFolder',
|
66
|
-
'
|
66
|
+
'FileStore',
|
67
67
|
'doc_to_docx',
|
68
68
|
'extract_docx_content',
|
69
69
|
'extract_pdf_content',
|
@@ -1922,13 +1922,13 @@ class TempFolder(Base):
|
|
1922
1922
|
__add__ = __radd__ = join
|
1923
1923
|
|
1924
1924
|
|
1925
|
-
class
|
1925
|
+
class FileStore(Base):
|
1926
1926
|
"""
|
1927
|
-
File
|
1927
|
+
File Store type.
|
1928
1928
|
"""
|
1929
1929
|
|
1930
1930
|
|
1931
|
-
def __init__(self, path: str = '
|
1931
|
+
def __init__(self, path: str = 'file') -> None:
|
1932
1932
|
"""
|
1933
1933
|
Build instance attributes.
|
1934
1934
|
|
@@ -1949,29 +1949,29 @@ class FileCache(Base):
|
|
1949
1949
|
Make cache directory and subdirectories.
|
1950
1950
|
"""
|
1951
1951
|
|
1952
|
-
#
|
1952
|
+
# Handle parameter.
|
1953
1953
|
chars = '0123456789abcdef'
|
1954
|
-
|
1955
|
-
|
1954
|
+
subdir_names = [
|
1955
|
+
char1 + char2
|
1956
|
+
for char1 in chars
|
1957
|
+
for char2 in chars
|
1958
|
+
]
|
1956
1959
|
paths = [self.folder.path]
|
1957
|
-
|
1958
|
-
## Second layer.
|
1959
1960
|
paths.extend(
|
1960
1961
|
[
|
1961
|
-
self.folder +
|
1962
|
-
for
|
1962
|
+
self.folder + name
|
1963
|
+
for name in subdir_names
|
1963
1964
|
]
|
1964
1965
|
)
|
1965
|
-
|
1966
|
-
## Third layer.
|
1967
1966
|
paths.extend(
|
1968
1967
|
[
|
1969
|
-
self.folder + f'{
|
1970
|
-
for
|
1971
|
-
for
|
1968
|
+
self.folder + f'{name1}/{name2}'
|
1969
|
+
for name1 in subdir_names
|
1970
|
+
for name2 in subdir_names
|
1972
1971
|
]
|
1973
1972
|
)
|
1974
1973
|
|
1974
|
+
# Make.
|
1975
1975
|
make_dir(*paths)
|
1976
1976
|
|
1977
1977
|
|
@@ -1995,7 +1995,7 @@ class FileCache(Base):
|
|
1995
1995
|
name = name or md5
|
1996
1996
|
|
1997
1997
|
# Not exist md5.
|
1998
|
-
md5_relpath = f'{md5[
|
1998
|
+
md5_relpath = f'{md5[:2]}/{md5[2:4]}/{md5}'
|
1999
1999
|
if md5_relpath not in self.folder:
|
2000
2000
|
return
|
2001
2001
|
|
@@ -2051,7 +2051,7 @@ class FileCache(Base):
|
|
2051
2051
|
return path
|
2052
2052
|
|
2053
2053
|
# Store.
|
2054
|
-
md5_relpath = f'{file_md5[
|
2054
|
+
md5_relpath = f'{file_md5[:2]}/{file_md5[2:4]}/{file_md5}'
|
2055
2055
|
md5_path = self.folder + md5_relpath
|
2056
2056
|
folder = Folder(md5_path)
|
2057
2057
|
folder.make()
|
@@ -2078,7 +2078,7 @@ class FileCache(Base):
|
|
2078
2078
|
----------
|
2079
2079
|
url : Download URL.
|
2080
2080
|
name : File name.
|
2081
|
-
- `None`:
|
2081
|
+
- `None`: Use MD5 value join automatic judge file type.
|
2082
2082
|
|
2083
2083
|
Returns
|
2084
2084
|
-------
|
@@ -2086,30 +2086,17 @@ class FileCache(Base):
|
|
2086
2086
|
"""
|
2087
2087
|
|
2088
2088
|
# Import.
|
2089
|
-
from .rnet import request
|
2089
|
+
from .rnet import request, get_response_file_name
|
2090
2090
|
|
2091
2091
|
# Download.
|
2092
2092
|
response = request(url)
|
2093
|
-
content = response.content
|
2094
2093
|
|
2095
2094
|
# File name.
|
2096
2095
|
if name is None:
|
2097
|
-
|
2098
|
-
if 'filename' in Content_disposition:
|
2099
|
-
name: str | None = search(
|
2100
|
-
'filename=[\'"]?([^\\s\'"]+)',
|
2101
|
-
Content_disposition
|
2102
|
-
)
|
2103
|
-
if name is None:
|
2104
|
-
file_md5 = get_md5(content)
|
2105
|
-
file_type_obj = filetype_guess(content)
|
2106
|
-
if file_type_obj is not None:
|
2107
|
-
name = f'{file_md5}.{file_type_obj.EXTENSION}'
|
2108
|
-
else:
|
2109
|
-
name = file_md5
|
2096
|
+
name = get_response_file_name(response)
|
2110
2097
|
|
2111
2098
|
# Store.
|
2112
|
-
path = self.store(content, name)
|
2099
|
+
path = self.store(response.content, name)
|
2113
2100
|
|
2114
2101
|
return path
|
2115
2102
|
|
@@ -6,9 +6,9 @@ reykit/remail.py,sha256=l4HGKXdfHNBxyBT3YxeZyQhfecbElqTqSAGInwWhap8,6723
|
|
6
6
|
reykit/rimage.py,sha256=lNN2iMpvSMqh-nPTpxrA9yHy43EA5WoYdxKYhqPwMgk,6154
|
7
7
|
reykit/rlog.py,sha256=TRAWaVG9KTgzeNjN-FXkcvBmvq1IhICgawllQEGoUdg,25745
|
8
8
|
reykit/rmonkey.py,sha256=Dj2GBzBDFXbo0Z-5f8Zep4dfbaIw1bo1FUmC31xvDuk,7929
|
9
|
-
reykit/rnet.py,sha256=
|
9
|
+
reykit/rnet.py,sha256=ql1L-QCoa_nZ2Vp8cpZrWl4AoxfZq9dhPdistiAdM64,17767
|
10
10
|
reykit/rnum.py,sha256=PhG4V_BkVfCJUsbpMDN1umGZly1Hsus80TW8bpyBtyY,3653
|
11
|
-
reykit/ros.py,sha256=
|
11
|
+
reykit/ros.py,sha256=Gs_g8d-RVBfBWxj6V2bLHzhYc0CrLZ5Nj09djmCHOJw,47756
|
12
12
|
reykit/rrand.py,sha256=4VwooITgox54_GonELcJfcIpStDi-UJchpnyWKnyeIA,8606
|
13
13
|
reykit/rre.py,sha256=1qva7xatKVE9qC2j7IujjXSM59qxHWwTYpiizFFQ8Xo,6024
|
14
14
|
reykit/rschedule.py,sha256=HuQRSNF6yd397P9knIX9-z8Ii1tUXFUL_-zxTIkxir0,14804
|
@@ -22,7 +22,7 @@ reykit/rwrap.py,sha256=FEmeK_fboJ-OyXeJf8bilc7U2ph8xIbZGNHb6fLCy2c,15063
|
|
22
22
|
reykit/rzip.py,sha256=BGEONswuBZxQ-zcgd_xp2fcvYesC9AmKaaXWvnT3bTI,3456
|
23
23
|
reykit/rdll/__init__.py,sha256=nLSb8onBm2ilyoxzpDzUeGfSCKwkLEesIhzK3LiJ8mk,701
|
24
24
|
reykit/rdll/rdll_core.py,sha256=o6-rKcTQgxZQe0kD3GnwyNb3KL9IogzgCQNOmYLMm7A,5086
|
25
|
-
reykit-1.1.
|
26
|
-
reykit-1.1.
|
27
|
-
reykit-1.1.
|
28
|
-
reykit-1.1.
|
25
|
+
reykit-1.1.77.dist-info/METADATA,sha256=Db5CuuhZqvh1VfqsCJjyi0cx1P0cQAc0byTkAUTT0FI,1872
|
26
|
+
reykit-1.1.77.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
27
|
+
reykit-1.1.77.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
|
28
|
+
reykit-1.1.77.dist-info/RECORD,,
|
File without changes
|
File without changes
|