Using the Library¶
This section describes how to use the wsgidav
package to implement custom
WebDAV servers.
Todo
This documentation is still under construction.
The wsgidav
package can be used in Python code:
$ python
>>> from wsgidav import __version__
>>> __version__
'2.3.1'
Run Inside a WSGI Server¶
The WsgiDAV server was tested with these WSGI servers:
In order to run WsgiDAV, we need to create an instance of WsgiDAVApp
,
pass options, and mount it on a WSGI compliant web server.
Here we keep most of the default options and use the
cheroot WSGI server
from cheroot import wsgi
from wsgidav.wsgidav_app import WsgiDAVApp
config = {
"host": "0.0.0.0",
"port": 8080,
"provider_mapping": {
"/": "/Users/joe/pub",
},
"verbose": 1,
}
app = WsgiDAVApp(config)
server_args = {
"bind_addr": (config["host"], config["port"]),
"wsgi_app": app,
}
server = wsgi.Server(**server_args)
server.start()
Options are passed as Python dict, see the Configuration for details.
By default, the FilesystemProvider
is used.
This provider creates instances of FileResource
and FolderResource
to represent files and
directories respectively.
This is why the example above will publish the directory /User/joe/pub
as
http://HOST:8080/
.
See the wsgidav.server.server_cli.py for more examples.
Custom Providers¶
If we want to implement custom behavior, we can define our own variant of a
(derived from DAVProvider
), which typically also
uses custom instances of DAVNonCollection
and
DAVCollection
.
...
from bar_package import FooProvider
...
config = {
"host": "0.0.0.0",
"port": 8080,
"provider_mapping": {
"/dav": FooProvider(),
},
"verbose": 1,
}
app = WsgiDAVApp(config)
...
Logging¶
By default, the library initializes and uses a python logger named ‘wsgidav’ and sub-loggers named like ‘wsgidav.wsgidav_app’, etc.
By default, the wsgidav logger only has a NullHandler
assigned and does not
propagate to the root logger, so it is silent.
This logger can be enabled like so:
import logging
# Logging should be initialized some way, e.g.:
# logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("wsgidav")
logger.propagate = True
logger.setLevel(logging.DEBUG)
Note
The CLI calls util.init_logging()
on startup, so it logs to stdout as configured
by the verbose
and logging.enable_loggers
options.