added completly new version for haslach 2025
This commit is contained in:
@@ -0,0 +1,355 @@
|
||||
Python WebDAV Client 3
|
||||
=========
|
||||
[](https://travis-ci.com/ezhov-evgeny/webdav-client-python-3)
|
||||
[](https://sonarcloud.io/dashboard?id=ezhov-evgeny_webdav-client-python-3)
|
||||
[](https://sonarcloud.io/dashboard?id=ezhov-evgeny_webdav-client-python-3)
|
||||
[](https://pypi.org/project/webdavclient3/) 
|
||||
|
||||
Package webdavclient3 based on https://github.com/designerror/webdav-client-python but uses `requests` instead of `PyCURL`.
|
||||
It provides easy way to work with WebDAV-servers.
|
||||
|
||||
Installation
|
||||
------------
|
||||
```bash
|
||||
$ pip install webdavclient3
|
||||
```
|
||||
|
||||
Sample Usage
|
||||
------------
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password"
|
||||
}
|
||||
client = Client(options)
|
||||
client.verify = False # To not check SSL certificates (Default = True)
|
||||
client.session.proxies(...) # To set proxy directly into the session (Optional)
|
||||
client.session.auth(...) # To set proxy auth directly into the session (Optional)
|
||||
client.execute_request("mkdir", 'directory_name')
|
||||
```
|
||||
|
||||
Webdav API
|
||||
==========
|
||||
|
||||
Webdav API is a set of webdav actions of work with cloud storage. This set includes the following actions:
|
||||
`check`, `free`, `info`, `list`, `mkdir`, `clean`, `copy`, `move`, `download`, `upload`, `publish` and `unpublish`.
|
||||
|
||||
**Configuring the client**
|
||||
|
||||
Required key is host name or IP address of the WevDAV-server with param name `webdav_hostname`.
|
||||
For authentication in WebDAV server use `webdav_login`, `webdav_password`.
|
||||
For an anonymous login do not specify auth properties.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
If your server does not support `HEAD` method or there are other reasons to override default WebDAV methods for actions use a dictionary option `webdav_override_methods`.
|
||||
The key should be in the following list: `check`, `free`, `info`, `list`, `mkdir`, `clean`, `copy`, `move`, `download`, `upload`,
|
||||
`publish` and `unpublish`. The value should a string name of WebDAV method, for example `GET`.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password",
|
||||
'webdav_override_methods': {
|
||||
'check': 'GET'
|
||||
}
|
||||
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
For configuring a requests timeout you can use an option `webdav_timeout` with int value in seconds, by default the timeout is set to 30 seconds.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password",
|
||||
'webdav_timeout': 30
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
When a proxy server you need to specify settings to connect through it.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "w_login",
|
||||
'webdav_password': "w_password",
|
||||
'proxy_hostname': "http://127.0.0.1:8080",
|
||||
'proxy_login': "p_login",
|
||||
'proxy_password': "p_password"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
If you want to use the certificate path to certificate and private key is defined as follows:
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "w_login",
|
||||
'webdav_password': "w_password",
|
||||
'cert_path': "/etc/ssl/certs/certificate.crt",
|
||||
'key_path': "/etc/ssl/private/certificate.key"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
Or you want to limit the speed or turn on verbose mode:
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'recv_speed' : 3000000,
|
||||
'send_speed' : 3000000,
|
||||
'verbose' : True
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
recv_speed: rate limit data download speed in Bytes per second. Defaults to unlimited speed.
|
||||
send_speed: rate limit data upload speed in Bytes per second. Defaults to unlimited speed.
|
||||
verbose: set verbose mode on/off. By default verbose mode is off.
|
||||
|
||||
Also if your server does not support `check` it is possible to disable it:
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'disable_check': True
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
By default, checking of remote resources is enabled.
|
||||
|
||||
For configuring chunk size of content downloading use `chunk_size` param, by default it is `65536`
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'chunk_size': 65536
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
**Synchronous methods**
|
||||
|
||||
```python
|
||||
# Checking existence of the resource
|
||||
|
||||
client.check("dir1/file1")
|
||||
client.check("dir1")
|
||||
```
|
||||
|
||||
```python
|
||||
# Get information about the resource
|
||||
|
||||
client.info("dir1/file1")
|
||||
client.info("dir1/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Check free space
|
||||
|
||||
free_size = client.free()
|
||||
```
|
||||
|
||||
```python
|
||||
# Get a list of resources
|
||||
|
||||
files1 = client.list()
|
||||
files2 = client.list("dir1")
|
||||
files3 = client.list("dir1", get_info=True) # returns a list of dictionaries with files details
|
||||
```
|
||||
|
||||
```python
|
||||
# Create directory
|
||||
|
||||
client.mkdir("dir1/dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Delete resource
|
||||
|
||||
client.clean("dir1/dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Copy resource
|
||||
|
||||
client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
|
||||
client.copy(remote_path_from="dir2", remote_path_to="dir3")
|
||||
```
|
||||
|
||||
```python
|
||||
# Move resource
|
||||
|
||||
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
|
||||
client.move(remote_path_from="dir2", remote_path_to="dir3")
|
||||
```
|
||||
|
||||
```python
|
||||
# Download a resource
|
||||
|
||||
client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1")
|
||||
client.download_sync(remote_path="dir1/dir2/", local_path="~/Downloads/dir2/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Upload resource
|
||||
|
||||
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1")
|
||||
client.upload_sync(remote_path="dir1/dir2/", local_path="~/Documents/dir2/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Publish the resource
|
||||
|
||||
link = client.publish("dir1/file1")
|
||||
link = client.publish("dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Unpublish resource
|
||||
|
||||
client.unpublish("dir1/file1")
|
||||
client.unpublish("dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Exception handling
|
||||
|
||||
from webdav3.client import WebDavException
|
||||
try:
|
||||
...
|
||||
except WebDavException as exception:
|
||||
...
|
||||
```
|
||||
|
||||
```python
|
||||
# Get the missing files
|
||||
|
||||
client.pull(remote_directory='dir1', local_directory='~/Documents/dir1')
|
||||
```
|
||||
|
||||
```python
|
||||
# Send missing files
|
||||
|
||||
client.push(remote_directory='dir1', local_directory='~/Documents/dir1')
|
||||
```
|
||||
|
||||
**Asynchronous methods**
|
||||
|
||||
```python
|
||||
# Load resource
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/file1",
|
||||
'local_path': "~/Downloads/file1",
|
||||
'callback': callback
|
||||
}
|
||||
client.download_async(**kwargs)
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/dir2/",
|
||||
'local_path': "~/Downloads/dir2/",
|
||||
'callback': callback
|
||||
}
|
||||
client.download_async(**kwargs)
|
||||
```
|
||||
|
||||
```python
|
||||
# Unload resource
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/file1",
|
||||
'local_path': "~/Downloads/file1",
|
||||
'callback': callback
|
||||
}
|
||||
client.upload_async(**kwargs)
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/dir2/",
|
||||
'local_path': "~/Downloads/dir2/",
|
||||
'callback': callback
|
||||
}
|
||||
client.upload_async(**kwargs)
|
||||
```
|
||||
|
||||
Resource API
|
||||
============
|
||||
|
||||
Resource API using the concept of OOP that enables cloud-level resources.
|
||||
|
||||
```python
|
||||
# Get a resource
|
||||
|
||||
res1 = client.resource("dir1/file1")
|
||||
```
|
||||
|
||||
```python
|
||||
# Work with the resource
|
||||
|
||||
res1.rename("file2")
|
||||
res1.move("dir1/file2")
|
||||
res1.copy("dir2/file1")
|
||||
info = res1.info()
|
||||
res1.read_from(buffer)
|
||||
res1.read(local_path="~/Documents/file1")
|
||||
res1.read_async(local_path="~/Documents/file1", callback)
|
||||
res1.write_to(buffer)
|
||||
res1.write(local_path="~/Downloads/file1")
|
||||
res1.write_async(local_path="~/Downloads/file1", callback)
|
||||
```
|
||||
|
||||
# For Contributors
|
||||
|
||||
### Prepare development environment
|
||||
1. Install docker on your development machine
|
||||
1. Start WebDAV server for testing by following commands from the project's root folder or change path to `conf` dir in second command to correct:
|
||||
```shell script
|
||||
docker pull bytemark/webdav
|
||||
docker run -d --name webdav -e AUTH_TYPE=Basic -e USERNAME=alice -e PASSWORD=secret1234 -v conf:/usr/local/apache2/conf -p 8585:80 bytemark/webdav
|
||||
```
|
||||
|
||||
### Code convention
|
||||
|
||||
Please check your code according PEP8 Style guides.
|
||||
|
||||
### Run tests
|
||||
1. Check that webdav container is started on your local machine
|
||||
1. Execute following command in the project's root folder:
|
||||
```shell script
|
||||
python -m unittest discover -s tests
|
||||
```
|
||||
|
||||
### Prepare a Pull Request
|
||||
|
||||
Please use this check list before creating PR:
|
||||
1. You code should be formatted according PEP8
|
||||
1. All tests should successfully pass
|
||||
1. Your changes shouldn't change previous default behaviour, exclude defects
|
||||
1. All changes are covered by tests
|
||||
|
||||
|
@@ -0,0 +1 @@
|
||||
pip
|
@@ -0,0 +1,384 @@
|
||||
Metadata-Version: 2.0
|
||||
Name: webdavclient3
|
||||
Version: 3.14.6
|
||||
Summary: WebDAV client, based on original package https://github.com/designerror/webdav-client-python but uses requests instead of PyCURL
|
||||
Home-page: https://github.com/ezhov-evgeny/webdav-client-python-3
|
||||
Author: Evgeny Ezhov
|
||||
Author-email: ezhov.evgeny@gmail.com
|
||||
License: MIT License
|
||||
Keywords: webdav,client,python,module,library,packet,Yandex.Disk,Dropbox,Google Disk,Box,4shared
|
||||
Platform: UNKNOWN
|
||||
Classifier: Environment :: Console
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Operating System :: MacOS
|
||||
Classifier: Operating System :: Microsoft
|
||||
Classifier: Operating System :: Unix
|
||||
Classifier: Programming Language :: Python :: 3.5
|
||||
Classifier: Programming Language :: Python :: 3.6
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Topic :: Internet
|
||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||
Requires: python (>= 3.3.0)
|
||||
Description-Content-Type: text/markdown
|
||||
Requires-Dist: lxml
|
||||
Requires-Dist: python-dateutil
|
||||
Requires-Dist: requests
|
||||
|
||||
Python WebDAV Client 3
|
||||
=========
|
||||
[](https://travis-ci.com/ezhov-evgeny/webdav-client-python-3)
|
||||
[](https://sonarcloud.io/dashboard?id=ezhov-evgeny_webdav-client-python-3)
|
||||
[](https://sonarcloud.io/dashboard?id=ezhov-evgeny_webdav-client-python-3)
|
||||
[](https://pypi.org/project/webdavclient3/) 
|
||||
|
||||
Package webdavclient3 based on https://github.com/designerror/webdav-client-python but uses `requests` instead of `PyCURL`.
|
||||
It provides easy way to work with WebDAV-servers.
|
||||
|
||||
Installation
|
||||
------------
|
||||
```bash
|
||||
$ pip install webdavclient3
|
||||
```
|
||||
|
||||
Sample Usage
|
||||
------------
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password"
|
||||
}
|
||||
client = Client(options)
|
||||
client.verify = False # To not check SSL certificates (Default = True)
|
||||
client.session.proxies(...) # To set proxy directly into the session (Optional)
|
||||
client.session.auth(...) # To set proxy auth directly into the session (Optional)
|
||||
client.execute_request("mkdir", 'directory_name')
|
||||
```
|
||||
|
||||
Webdav API
|
||||
==========
|
||||
|
||||
Webdav API is a set of webdav actions of work with cloud storage. This set includes the following actions:
|
||||
`check`, `free`, `info`, `list`, `mkdir`, `clean`, `copy`, `move`, `download`, `upload`, `publish` and `unpublish`.
|
||||
|
||||
**Configuring the client**
|
||||
|
||||
Required key is host name or IP address of the WevDAV-server with param name `webdav_hostname`.
|
||||
For authentication in WebDAV server use `webdav_login`, `webdav_password`.
|
||||
For an anonymous login do not specify auth properties.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
If your server does not support `HEAD` method or there are other reasons to override default WebDAV methods for actions use a dictionary option `webdav_override_methods`.
|
||||
The key should be in the following list: `check`, `free`, `info`, `list`, `mkdir`, `clean`, `copy`, `move`, `download`, `upload`,
|
||||
`publish` and `unpublish`. The value should a string name of WebDAV method, for example `GET`.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password",
|
||||
'webdav_override_methods': {
|
||||
'check': 'GET'
|
||||
}
|
||||
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
For configuring a requests timeout you can use an option `webdav_timeout` with int value in seconds, by default the timeout is set to 30 seconds.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "login",
|
||||
'webdav_password': "password",
|
||||
'webdav_timeout': 30
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
When a proxy server you need to specify settings to connect through it.
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "w_login",
|
||||
'webdav_password': "w_password",
|
||||
'proxy_hostname': "http://127.0.0.1:8080",
|
||||
'proxy_login': "p_login",
|
||||
'proxy_password': "p_password"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
If you want to use the certificate path to certificate and private key is defined as follows:
|
||||
|
||||
```python
|
||||
from webdav3.client import Client
|
||||
options = {
|
||||
'webdav_hostname': "https://webdav.server.ru",
|
||||
'webdav_login': "w_login",
|
||||
'webdav_password': "w_password",
|
||||
'cert_path': "/etc/ssl/certs/certificate.crt",
|
||||
'key_path': "/etc/ssl/private/certificate.key"
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
Or you want to limit the speed or turn on verbose mode:
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'recv_speed' : 3000000,
|
||||
'send_speed' : 3000000,
|
||||
'verbose' : True
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
recv_speed: rate limit data download speed in Bytes per second. Defaults to unlimited speed.
|
||||
send_speed: rate limit data upload speed in Bytes per second. Defaults to unlimited speed.
|
||||
verbose: set verbose mode on/off. By default verbose mode is off.
|
||||
|
||||
Also if your server does not support `check` it is possible to disable it:
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'disable_check': True
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
By default, checking of remote resources is enabled.
|
||||
|
||||
For configuring chunk size of content downloading use `chunk_size` param, by default it is `65536`
|
||||
|
||||
```python
|
||||
options = {
|
||||
...
|
||||
'chunk_size': 65536
|
||||
}
|
||||
client = Client(options)
|
||||
```
|
||||
|
||||
**Synchronous methods**
|
||||
|
||||
```python
|
||||
# Checking existence of the resource
|
||||
|
||||
client.check("dir1/file1")
|
||||
client.check("dir1")
|
||||
```
|
||||
|
||||
```python
|
||||
# Get information about the resource
|
||||
|
||||
client.info("dir1/file1")
|
||||
client.info("dir1/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Check free space
|
||||
|
||||
free_size = client.free()
|
||||
```
|
||||
|
||||
```python
|
||||
# Get a list of resources
|
||||
|
||||
files1 = client.list()
|
||||
files2 = client.list("dir1")
|
||||
files3 = client.list("dir1", get_info=True) # returns a list of dictionaries with files details
|
||||
```
|
||||
|
||||
```python
|
||||
# Create directory
|
||||
|
||||
client.mkdir("dir1/dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Delete resource
|
||||
|
||||
client.clean("dir1/dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Copy resource
|
||||
|
||||
client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
|
||||
client.copy(remote_path_from="dir2", remote_path_to="dir3")
|
||||
```
|
||||
|
||||
```python
|
||||
# Move resource
|
||||
|
||||
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
|
||||
client.move(remote_path_from="dir2", remote_path_to="dir3")
|
||||
```
|
||||
|
||||
```python
|
||||
# Download a resource
|
||||
|
||||
client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1")
|
||||
client.download_sync(remote_path="dir1/dir2/", local_path="~/Downloads/dir2/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Upload resource
|
||||
|
||||
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1")
|
||||
client.upload_sync(remote_path="dir1/dir2/", local_path="~/Documents/dir2/")
|
||||
```
|
||||
|
||||
```python
|
||||
# Publish the resource
|
||||
|
||||
link = client.publish("dir1/file1")
|
||||
link = client.publish("dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Unpublish resource
|
||||
|
||||
client.unpublish("dir1/file1")
|
||||
client.unpublish("dir2")
|
||||
```
|
||||
|
||||
```python
|
||||
# Exception handling
|
||||
|
||||
from webdav3.client import WebDavException
|
||||
try:
|
||||
...
|
||||
except WebDavException as exception:
|
||||
...
|
||||
```
|
||||
|
||||
```python
|
||||
# Get the missing files
|
||||
|
||||
client.pull(remote_directory='dir1', local_directory='~/Documents/dir1')
|
||||
```
|
||||
|
||||
```python
|
||||
# Send missing files
|
||||
|
||||
client.push(remote_directory='dir1', local_directory='~/Documents/dir1')
|
||||
```
|
||||
|
||||
**Asynchronous methods**
|
||||
|
||||
```python
|
||||
# Load resource
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/file1",
|
||||
'local_path': "~/Downloads/file1",
|
||||
'callback': callback
|
||||
}
|
||||
client.download_async(**kwargs)
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/dir2/",
|
||||
'local_path': "~/Downloads/dir2/",
|
||||
'callback': callback
|
||||
}
|
||||
client.download_async(**kwargs)
|
||||
```
|
||||
|
||||
```python
|
||||
# Unload resource
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/file1",
|
||||
'local_path': "~/Downloads/file1",
|
||||
'callback': callback
|
||||
}
|
||||
client.upload_async(**kwargs)
|
||||
|
||||
kwargs = {
|
||||
'remote_path': "dir1/dir2/",
|
||||
'local_path': "~/Downloads/dir2/",
|
||||
'callback': callback
|
||||
}
|
||||
client.upload_async(**kwargs)
|
||||
```
|
||||
|
||||
Resource API
|
||||
============
|
||||
|
||||
Resource API using the concept of OOP that enables cloud-level resources.
|
||||
|
||||
```python
|
||||
# Get a resource
|
||||
|
||||
res1 = client.resource("dir1/file1")
|
||||
```
|
||||
|
||||
```python
|
||||
# Work with the resource
|
||||
|
||||
res1.rename("file2")
|
||||
res1.move("dir1/file2")
|
||||
res1.copy("dir2/file1")
|
||||
info = res1.info()
|
||||
res1.read_from(buffer)
|
||||
res1.read(local_path="~/Documents/file1")
|
||||
res1.read_async(local_path="~/Documents/file1", callback)
|
||||
res1.write_to(buffer)
|
||||
res1.write(local_path="~/Downloads/file1")
|
||||
res1.write_async(local_path="~/Downloads/file1", callback)
|
||||
```
|
||||
|
||||
# For Contributors
|
||||
|
||||
### Prepare development environment
|
||||
1. Install docker on your development machine
|
||||
1. Start WebDAV server for testing by following commands from the project's root folder or change path to `conf` dir in second command to correct:
|
||||
```shell script
|
||||
docker pull bytemark/webdav
|
||||
docker run -d --name webdav -e AUTH_TYPE=Basic -e USERNAME=alice -e PASSWORD=secret1234 -v conf:/usr/local/apache2/conf -p 8585:80 bytemark/webdav
|
||||
```
|
||||
|
||||
### Code convention
|
||||
|
||||
Please check your code according PEP8 Style guides.
|
||||
|
||||
### Run tests
|
||||
1. Check that webdav container is started on your local machine
|
||||
1. Execute following command in the project's root folder:
|
||||
```shell script
|
||||
python -m unittest discover -s tests
|
||||
```
|
||||
|
||||
### Prepare a Pull Request
|
||||
|
||||
Please use this check list before creating PR:
|
||||
1. You code should be formatted according PEP8
|
||||
1. All tests should successfully pass
|
||||
1. Your changes shouldn't change previous default behaviour, exclude defects
|
||||
1. All changes are covered by tests
|
||||
|
||||
|
@@ -0,0 +1,18 @@
|
||||
../../../bin/wdc,sha256=-Mo7uqGPz_8emFnR8VfI4H9trqJP6fLBFlZM6CUE18Q,22710
|
||||
webdav3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
webdav3/__pycache__/__init__.cpython-37.pyc,,
|
||||
webdav3/__pycache__/client.cpython-37.pyc,,
|
||||
webdav3/__pycache__/connection.cpython-37.pyc,,
|
||||
webdav3/__pycache__/exceptions.cpython-37.pyc,,
|
||||
webdav3/__pycache__/urn.cpython-37.pyc,,
|
||||
webdav3/client.py,sha256=2-BADAvVv8BlvAkGPmB-Ov8uyaZtMLeYqN1VKJ7BKhw,61388
|
||||
webdav3/connection.py,sha256=oudfY1_9uLCkNKj_dRZcTM7eFoM2hNf0cKNr7G5tawo,2362
|
||||
webdav3/exceptions.py,sha256=R0LCs1VDkmnAOQpx2PNYh4xDUqFXcgj7WSix3QsCv9Y,2762
|
||||
webdav3/urn.py,sha256=GSPn5HNm1E6qSvLHsXvM1M861p1Om0dp_RaikuWlJnw,1973
|
||||
webdavclient3-3.14.6.dist-info/DESCRIPTION.rst,sha256=aiyuqOkRHn6uamrqKI8scwI9bmY2ENiKk7HUfG6zXSc,8919
|
||||
webdavclient3-3.14.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
webdavclient3-3.14.6.dist-info/METADATA,sha256=JlidZecNIkjEWSOPPVGQr91pJDEOXLwj3_VRP3UeGX4,10118
|
||||
webdavclient3-3.14.6.dist-info/RECORD,,
|
||||
webdavclient3-3.14.6.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92
|
||||
webdavclient3-3.14.6.dist-info/metadata.json,sha256=DUc8WGSkze0yipx0TQokneseMqTjtBE0CNnYwU0SdcA,1392
|
||||
webdavclient3-3.14.6.dist-info/top_level.txt,sha256=Opy4Ic3o_NMjVpAAmmCTm3gP9r2ld5Ny_GA81dkMpEg,8
|
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.29.0)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
@@ -0,0 +1 @@
|
||||
{"classifiers": ["Environment :: Console", "Environment :: Web Environment", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft", "Operating System :: Unix", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules"], "description_content_type": "text/markdown", "extensions": {"python.details": {"contacts": [{"email": "ezhov.evgeny@gmail.com", "name": "Evgeny Ezhov", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/ezhov-evgeny/webdav-client-python-3"}}}, "extras": [], "generator": "bdist_wheel (0.29.0)", "keywords": ["webdav", "client", "python", "module", "library", "packet", "Yandex.Disk", "Dropbox", "Google", "Disk", "Box", "4shared"], "license": "MIT License", "metadata_version": "2.0", "name": "webdavclient3", "requires": "python (>= 3.3.0)", "run_requires": [{"requires": ["lxml", "python-dateutil", "requests"]}], "summary": "WebDAV client, based on original package https://github.com/designerror/webdav-client-python but uses requests instead of PyCURL", "test_requires": [{"requires": ["pytest"]}], "version": "3.14.6"}
|
@@ -0,0 +1 @@
|
||||
webdav3
|
Reference in New Issue
Block a user