ASGIWebDAV 1.4.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Rex Zhang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.1
2
+ Name: ASGIWebDAV
3
+ Version: 1.4.0
4
+ Summary: An asynchronous WebDAV server implementation, support multi-provider.
5
+ Author: Rex Zhang
6
+ Author-email: rex.zhang@gmail.com
7
+ License: MIT
8
+ Project-URL: homepage, https://github.com/rexzhang/asgi-webdav
9
+ Project-URL: documentation, https://rexzhang.github.io/asgi-webdav/
10
+ Project-URL: repository, https://github.com/rexzhang/asgi-webdav
11
+ Project-URL: changelog, https://github.com/rexzhang/asgi-webdav/blob/main/docs/changelog.en.md
12
+ Keywords: webdav,asgi,asyncio
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: aiofiles ~=23.2.0
22
+ Requires-Dist: ASGIMiddlewareStaticFile ~=0.6.0
23
+ Requires-Dist: xmltodict ~=0.13.0
24
+ Requires-Dist: pydantic >=2.4
25
+ Requires-Dist: arrow
26
+ Requires-Dist: chardet
27
+ Requires-Dist: click
28
+ Provides-Extra: full
29
+ Requires-Dist: uvicorn ; extra == 'full'
30
+ Requires-Dist: uvloop ; extra == 'full'
31
+ Requires-Dist: httptools ; extra == 'full'
32
+ Requires-Dist: brotli ; extra == 'full'
33
+ Requires-Dist: bonsai ~=1.5.0 ; extra == 'full'
34
+ Provides-Extra: ldap
35
+ Requires-Dist: bonsai ~=1.5.0 ; extra == 'ldap'
36
+ Provides-Extra: standalone
37
+ Requires-Dist: uvicorn ; extra == 'standalone'
38
+ Requires-Dist: uvloop ; extra == 'standalone'
39
+ Requires-Dist: httptools ; extra == 'standalone'
40
+ Requires-Dist: brotli ; extra == 'standalone'
41
+
42
+ # ASGI WebDAV Server
43
+
44
+ ![GitHub](https://img.shields.io/github/license/rexzhang/asgi-webdav)
45
+ [![PyPI](https://img.shields.io/pypi/v/ASGIWebDAV)](https://pypi.org/project/ASGIWebDAV)
46
+ ![Pytest Workflow Status](https://github.com/rexzhang/asgi-webdav/actions/workflows/check-pytest.yml/badge.svg)
47
+ [![codecov](https://codecov.io/gh/rexzhang/asgi-webdav/branch/main/graph/badge.svg?token=6D961MCCWN)](https://codecov.io/gh/rexzhang/asgi-webdav)
48
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
49
+ [![Docker Pulls](https://img.shields.io/docker/pulls/ray1ex/asgi-webdav)](https://hub.docker.com/r/ray1ex/asgi-webdav)
50
+ ![[PyPI - Downloads](https://pypi.org/project/ASGIWebDAV/)](https://img.shields.io/pypi/dm/ASGIWebDAV)
51
+ [![GitHub Downloads](https://img.shields.io/github/downloads/rexzhang/asgi-webdav/total)](https://github.com/rexzhang/asgi-webdav/releases)
52
+
53
+ An asynchronous WebDAV server implementation, Support multi-provider, multi-account and permission control.
54
+
55
+ ## Features
56
+
57
+ - [ASGI](https://asgi.readthedocs.io) standard
58
+ - WebDAV standard: [RFC4918](https://www.ietf.org/rfc/rfc4918.txt)
59
+ - Support multi-provider: FileSystemProvider, MemoryProvider
60
+ - Support multi-account and permission control
61
+ - Support optional home directory
62
+ - Support store password in raw/hashlib/LDAP(experimental) mode
63
+ - Full asyncio file IO
64
+ - Passed all [litmus(0.13)](http://www.webdav.org/neon/litmus) test, except 3 warning
65
+ - Browse the file directory in the browser
66
+ - Support HTTP Basic/Digest authentication
67
+ - Support response in Gzip/Brotli
68
+ - Compatible with macOS finder and Window10 Explorer
69
+
70
+ ## Python Version
71
+
72
+ v3.10+
73
+
74
+ ## Quickstart
75
+
76
+ [中文手册](https://rexzhang.github.io/asgi-webdav/zh/)
77
+
78
+ ```shell
79
+ docker pull ray1ex/asgi-webdav
80
+ docker run -dit --restart unless-stopped \
81
+ -p 8000:8000 \
82
+ -e UID=1000 -e GID=1000 \
83
+ -v /your/data:/data \
84
+ --name asgi-webdav ray1ex/asgi-webdav
85
+ ```
86
+
87
+ ## Default Account
88
+
89
+ | | value | description |
90
+ | ---------- | ---------- | ------------------------------- |
91
+ | username | `username` | - |
92
+ | password | `password` | - |
93
+ | permission | `["+"]` | Allow access to all directories |
94
+
95
+ ## View in Browser
96
+
97
+ ![View in Browser](docs/web-dir-browser-screenshot.png)
98
+
99
+ ## Documentation
100
+
101
+ [Documentation at GitHub Page](https://rexzhang.github.io/asgi-webdav/)
102
+
103
+ ## TODO
104
+
105
+ - Digest auth support neon
106
+ - SQL database provider
107
+ - Test big(1GB+) file in MemoryProvider
108
+ - display server info in page `/_/admin` or `/_/`
109
+ - Fail2ban(docker)
110
+ - NFSProvider
111
+ - logout at the web page
112
+ - Fix MemoryProvider with macOS finder(create new file)
113
+ - rewrite MemoryProvider with mmap
114
+ - generate template URL for share(read only)
115
+
116
+ ## Related Projects
117
+
118
+ - <https://github.com/bootrino/reactoxide>
@@ -0,0 +1,33 @@
1
+ asgi_webdav/__init__.py,sha256=iDypE1m1L6iv9HlT3ravzXbHod-Af02vVdX2UMvcrxY,345
2
+ asgi_webdav/__main__.py,sha256=fKik9hO4i5pY1qVRU9Ix_dRvHcZglxl2UfhgE2LdI6A,324
3
+ asgi_webdav/auth.py,sha256=Zghx2GOmtC1qGAg14n4dUPsACmdcMJvWSwM5CBNyoKU,20063
4
+ asgi_webdav/cli.py,sha256=nU3Yu4as0AlSZEt7LHHhPF0e_qexo00pEBfsvvi4gdI,2886
5
+ asgi_webdav/config.py,sha256=MClSi7GiZeNgCDwb4BUqDUWWLt47Hdx2wkViUeGOq2g,6980
6
+ asgi_webdav/constants.py,sha256=hb0TxSmIOkStCXT7qKgLlNXeo3W-7FchnRzu-mrJ9W4,11729
7
+ asgi_webdav/core.py,sha256=Bz0Z_KyVZyJaOebnf18Cqn8E8OvllItG7lVv8L16HLE,59
8
+ asgi_webdav/exception.py,sha256=cdkpfZ0GJYuRLbxdGFoT3Qn28B2JTxrzGa8sVA7VjZc,261
9
+ asgi_webdav/helpers.py,sha256=yTomWJ-tZTDgwnytReZO7XiujwPF4Cg9SA1EWXwETXY,4257
10
+ asgi_webdav/lock.py,sha256=S317BRLzSMpXJm2hVR6cOHKV_y49zhfitl4Bkppt4aw,4828
11
+ asgi_webdav/log.py,sha256=ZDfR0i302tv6xHELH6KnqEqav5YQ99C1v_rUl_DGXfE,4124
12
+ asgi_webdav/property.py,sha256=tLyN5898Pl1JZGk94ql_thIRbrwxfB3wc1jOHifIXEs,3182
13
+ asgi_webdav/request.py,sha256=mUY3HN0ZemvPqTi3gg5PuAm8qi4yaDHApQHqH2UfMrs,17465
14
+ asgi_webdav/response.py,sha256=tR3A_X-TZ0tzf67wbuzHerIkDyyCvcnAQd3d0lF_Zag,12483
15
+ asgi_webdav/server.py,sha256=9apLxm8z83Y0AKX-6KEkKPv-eLjoraiR1WGvSPu38cQ,6167
16
+ asgi_webdav/web_dav.py,sha256=X9cAG1QvU3dOdZHV6HpQsWyg2Szu2Q4kmS0I3SEzKsY,13648
17
+ asgi_webdav/web_page.py,sha256=mTqgZiz7ps9iUIPmRbSQXkC1uqDh6cuts7cHH2Tq1DA,1155
18
+ asgi_webdav/dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ asgi_webdav/dev/dev.py,sha256=leYw_sTXASShlvE_RfswJD8uHBjxt7AR5ZwtGJyGpMY,2588
20
+ asgi_webdav/dev/litmus.py,sha256=Eb8zeXo9RfVIv_o2bppkH8BHnHOD0LouJ56ao_GUdJM,840
21
+ asgi_webdav/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ asgi_webdav/middleware/cors.py,sha256=j2OoL7oGWy-x7ei2M7K29GlN9LcwnN3HkYLmhrebzMc,9346
23
+ asgi_webdav/middleware/debug.py,sha256=B2Kn5yobeF31_0kbM7wOzXdScGS2vcGiBm-Od6I1V10,1239
24
+ asgi_webdav/provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ asgi_webdav/provider/dev_provider.py,sha256=YynelMq_ROjhBasbS3LmghzJiRMFLIIEPuN_A_6zow4,36912
26
+ asgi_webdav/provider/file_system.py,sha256=rjYKk-f_TuIsx9VrKjKkFwkYKH65PvxRFCuilX6US1g,18629
27
+ asgi_webdav/provider/memory.py,sha256=XBhzgSOxOON2tl4iITxwzwlWhaiE9XM_Xk8VFhRV6bo,15036
28
+ ASGIWebDAV-1.4.0.dist-info/LICENSE,sha256=MCC2EV4rryc4M1gRogsemKBRr3P_OZe0HcTFxmRY4Uw,1066
29
+ ASGIWebDAV-1.4.0.dist-info/METADATA,sha256=_9fWylPCtUvlqHWnegX5VgM4_K4YxnpM5clIOoIZVus,4449
30
+ ASGIWebDAV-1.4.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
31
+ ASGIWebDAV-1.4.0.dist-info/entry_points.txt,sha256=ufJw-jQfjyjtd2a4Z9YcLsAPTyeD-FsiszpV0LWYqWc,53
32
+ ASGIWebDAV-1.4.0.dist-info/top_level.txt,sha256=P9Wmz-GKGpRyAGFobVBax1zYACE_TL97o5ADnW-Rwdk,12
33
+ ASGIWebDAV-1.4.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.43.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ asgi-webdav = asgi_webdav.cli:main
@@ -0,0 +1 @@
1
+ asgi_webdav
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python
2
+
3
+
4
+ """
5
+ ASGI WebDAV Server
6
+ """
7
+
8
+
9
+ __name__ = "ASGIWebDAV"
10
+ __version__ = "1.4.0"
11
+
12
+ __author__ = "Rex Zhang"
13
+ __author_email__ = "rex.zhang@gmail.com"
14
+ __licence__ = "MIT"
15
+
16
+ __description__ = (
17
+ "An asynchronous WebDAV server implementation, support multi-provider."
18
+ )
19
+ __project_url__ = "https://github.com/rexzhang/asgi-webdav"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env python
2
+
3
+
4
+ """
5
+ The main entry point.
6
+ Invoke as `python_module_project' or `python -m python_module_project'.
7
+ """
8
+
9
+
10
+ def main():
11
+ import sys
12
+
13
+ from .cli import main as cli_main
14
+
15
+ try:
16
+ sys.exit(cli_main())
17
+
18
+ except KeyboardInterrupt:
19
+ sys.exit(1)
20
+
21
+
22
+ if __name__ == "__main__":
23
+ main()