* Cleanup repository configs

* more cleanup and convention checks

* apply black and isort

* fullfil conventions

* make a matrix test on travis

* correct travis rules

* merge my global isort config into setup.cfg, that is why local tests are green, and ci tests are red

* black did not work on Python2 so do not check-black on Python2.7

* fix isort behaviour so that black mode 3 is used
This commit is contained in:
Alexander Loechel 2018-10-03 22:04:24 +02:00 committed by Martin Wendt
parent 60c2ac0af0
commit dd53ecda00
60 changed files with 463 additions and 246 deletions

View file

@ -1,8 +0,0 @@
[run]
omit =
tests/*
wsgidav/prop_man/couch_property_manager.py
wsgidav/prop_man/mongo_property_manager.py
wsgidav/samples/*
wsgidav/server/run_reloading_server.py
wsgidav/server/server_sample.py

View file

@ -1,21 +1,40 @@
# EditorConfig is awesome: http://EditorConfig.org
# EditorConfig Configurtaion file, for more details see:
# http://EditorConfig.org
# EditorConfig is a convention description, that could be interpreted
# by multiple editors to enforce common coding conventions for specific
# file types
# top-most EditorConfig file
# top-most EditorConfig file:
# Will ignore other EditorConfig files in Home directory or upper tree level.
root = true
[*]
; See https://github.com/editorconfig/editorconfig/issues/226
;end_of_line = lf
[*] # For All Files
# Unix-style newlines with a newline ending every file
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
# 4 space indentation
[*.py]
# Set default charset
charset = utf-8
# Indent style default
indent_style = space
# Max Line Length - a hard line wrap, should be disabled
max_line_length = off
[*.{py,cfg,ini}]
# 4 space indentation
indent_size = 4
; Tab indentation (no size specified)
[*.js]
indent_style = tab
[*.{yml}]
# 2 space indentation
indent_size = 2
[*.{js}]
# Tab indentation (no size specified)
indent_style = tab
[{Makefile,.gitmodules}]
# Tab indentation (no size specified, but view as 4 spaces)
indent_style = tab
indent_size = unset
tab_width = unset

19
.flake8
View file

@ -1,19 +0,0 @@
[flake8]
max-line-length = 99
#max-line-length = 88
# max-complexity = 12
# Ignore some errors that may be created by Black:
# E203 whitespace before ':'
# E501 line too long
# W503 line break before binary operator
ignore = E203, E501, W503
# Instead of strict E501, enable B950 for relaxed line length checking (and other bugbear warnings)
select = B,C,E,F,Q,W,B9
# Options for the flake8-quotes extension:
inline-quotes = "
multiline-quotes = """
docstring-quotes = """

2
.gitignore vendored
View file

@ -21,6 +21,8 @@ debug.log
wsgidav.conf
wsgidav.json
dist
coverage.xml
.coverage*
*.prefs
*.project

View file

@ -1,6 +0,0 @@
[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
combine_as_imports=True
line_length=88

View file

@ -1,21 +1,47 @@
sudo: false
language: python
python:
- "2.7"
# - "3.3" # End-of-life September 2017
- "3.4"
- "3.5"
- "3.6"
# See yaml/pyyaml#126.
# - "3.7-dev" # Planned for 2018-06
#sudo: required
matrix:
include:
- python: "2.7"
env: TOXENV=lint-py27
- python: "3.6"
env: TOXENV=black-check,lint-py36
- python: "2.7"
env: TOXENV=py27
- python: "3.4"
env: TOXENV=py34
- python: "3.5"
env: TOXENV=py35
- python: "3.6"
env: TOXENV=py36
- python: "3.7"
env: TOXENV=py37
- python: "3.7-dev"
env: TOXENV=py37
- python: "3.8-dev"
env: TOXENV=py38
allow_failures:
- python: "3.7"
env: TOXENV=py37
- python: "3.7-dev"
env: TOXENV=py37
- python: "3.8-dev"
env: TOXENV=py38
before_install:
# See issue #80: litmus fails to build on travis
# The branch 'travis-litmus' still has this enabled to investigate...
# - sudo apt-get install libneon27-dev
# - ./install_litmus.sh
install:
pip install tox-travis
- travis_retry pip install -U pip setuptools
- travis_retry pip install -U tox coveralls coverage
script:
tox
- travis_retry tox
after_success:
- coverage combine
- coveralls

View file

@ -8,3 +8,73 @@ license_file = LICENSE
ignore =
docs/sphinx-build
docs/sphinx-build/*
[isort]
force_alphabetical_sort=True
force_single_line=False
force_to_top=True
from_first=True
lines_after_imports=2
not_skip=__init__.py
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
combine_as_imports=True
line_length=88
[aliases]
test = pytest
[tool:pytest]
addopts =
testpaths =
.
tests
[coverage:run]
branch = True
omit =
tests/*
wsgidav/prop_man/couch_property_manager.py
wsgidav/prop_man/mongo_property_manager.py
wsgidav/samples/*
wsgidav/server/run_reloading_server.py
wsgidav/server/server_sample.py
[coverage:report]
precision = 2
show_missing = True
sort = Name
[coverage:html]
directory = _build/coverage
[flake8]
max-line-length = 99
#max-line-length = 88
# max-complexity = 12
# Ignore some errors that may be created by Black:
# E203 whitespace before ':'
# E501 line too long
# W503 line break before binary operator
ignore =
E203,
E501,
W503
# Instead of strict E501, enable B950 for relaxed line length checking (and other bugbear warnings)
select =
B,
C,
E,
F,
Q,
W,
B9
# Options for the flake8-quotes extension:
inline-quotes = "
multiline-quotes = """
docstring-quotes = """

View file

@ -1,17 +1,16 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from setuptools import Command, find_packages, setup
from setuptools.command.test import test as TestCommand
from wsgidav._version import __version__
# from datetime import datetime
import os
import sys
from setuptools import setup, find_packages
from setuptools import Command
from setuptools.command.test import test as TestCommand
from wsgidav._version import __version__
version = __version__

View file

@ -49,6 +49,9 @@ Test cases
file10-10-1.txt -> 1k
"""
from __future__ import print_function
from tests.util import Timing, WsgiDavTestServer
from wsgidav import __version__
from wsgidav.xml_tools import use_lxml
import datetime
import logging
@ -57,9 +60,6 @@ import platform
import subprocess
import sys
from tests.util import Timing, WsgiDavTestServer
from wsgidav import __version__
from wsgidav.xml_tools import use_lxml
try:
# WsgiDAV 2.x

View file

@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-
import os
import pkg_resources
import sys
import pkg_resources
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
pkg_resources.require("wsgidav")

View file

@ -26,9 +26,9 @@
# - Use requests instead of http.client / httplib
import copy
import requests
import sys
import requests
PY2 = sys.version_info < (3, 0)

View file

@ -7,11 +7,11 @@
This test suite uses requests to generate HTTP requests.
"""
import unittest
from tests.util import WsgiDavTestServer
import requests
import unittest
from tests.util import WsgiDavTestServer
_test_server = None

View file

@ -6,11 +6,11 @@
Run litmus against WsgiDAV server.
"""
from __future__ import print_function
from tests.util import WsgiDavTestServer
import subprocess
import unittest
from tests.util import WsgiDavTestServer
# ========================================================================
# WsgiDAVServerTest

View file

@ -3,14 +3,15 @@
# Licensed under the MIT license:
# http://www.opensource.org/licenses/mit-license.php
"""Unit test for lock_manager.py"""
from tempfile import gettempdir
from time import sleep
from wsgidav import lock_manager, lock_storage
from wsgidav.dav_error import DAVError
import os
import sys
import unittest
from tempfile import gettempdir
from time import sleep
from wsgidav import lock_manager, lock_storage
from wsgidav.dav_error import DAVError
# ========================================================================
# BasicTest

View file

@ -3,12 +3,13 @@
# Licensed under the MIT license:
# http://www.opensource.org/licenses/mit-license.php
"""Unit test for property_manager.py"""
from tempfile import gettempdir
from wsgidav.prop_man import property_manager
import os
import sys
import unittest
from tempfile import gettempdir
from wsgidav.prop_man import property_manager
# ========================================================================
# BasicTest

View file

@ -11,20 +11,20 @@
http://svn.osafoundation.org/tools/davclient/trunk/src/davclient/davclient.py
"""
from __future__ import print_function
import os
import time
import unittest
from tempfile import gettempdir
from threading import Thread
from tests import davclient
from tests.util import WsgiDavTestServer
from threading import Thread
from wsgidav import compat
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.server.ext_wsgiutils_server import ExtServer
from wsgidav.wsgidav_app import WsgiDAVApp
import os
import time
import unittest
# SERVER_ADDRESS
# (using localhost or mixing hostnames with IPs may be very slow!)
SERVER_ADDRESS = "http://127.0.0.1:8080"
@ -61,7 +61,7 @@ def setUpModule():
_test_server = WsgiDAVServerThread()
_test_server.start()
# let server start the loop, otherwise shutdown might lock
time.sleep(.1)
time.sleep(0.1)
return
@ -150,7 +150,7 @@ class WsgiDAVServerThread(Thread):
print("WsgiDAVServerThread.shutdown()...")
# let server process pending requests, otherwise shutdown might
# lock
time.sleep(.1)
time.sleep(0.1)
self.ext_server.stop_serve_forever()
self.ext_server = None
print("WsgiDAVServerThread.shutdown()... complete")

View file

@ -7,17 +7,17 @@
Unit tests for wsgidav.stream_tools.FileLikeQueue
"""
from tempfile import gettempdir
from tests.util import Timing, write_test_file, WsgiDavTestServer
from wsgidav import compat
from wsgidav.dav_provider import DAVNonCollection, DAVProvider
from wsgidav.stream_tools import FileLikeQueue
import os
import requests
import threading
import unittest
from tempfile import gettempdir
import requests
from tests.util import Timing, WsgiDavTestServer, write_test_file
from wsgidav import compat
from wsgidav.stream_tools import FileLikeQueue
from wsgidav.dav_provider import DAVNonCollection, DAVProvider
# ----------------------------------------------------------------------------
# Dummy DAVProvider implementation

View file

@ -4,11 +4,6 @@
# http://www.opensource.org/licenses/mit-license.php
"""Unit tests for wsgidav.util"""
from __future__ import print_function
import logging
import logging.handlers
import unittest
from wsgidav.compat import StringIO
from wsgidav.util import (
BASE_LOGGER_NAME,
@ -22,6 +17,10 @@ from wsgidav.util import (
shift_path,
)
import logging
import logging.handlers
import unittest
class BasicTest(unittest.TestCase):
"""Test ."""

View file

@ -12,16 +12,16 @@
(successor of http://pythonpaste.org/testing-applications.html)
"""
from __future__ import print_function
from tempfile import gettempdir
from wsgidav import compat, util
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
import os
import shutil
import sys
import unittest
from tempfile import gettempdir
from wsgidav import compat, util
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
try:
import webtest

View file

@ -10,16 +10,16 @@ Example:
... test methods
"""
from __future__ import print_function
from tempfile import gettempdir
from wsgidav import compat, util
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
import multiprocessing
import os
import sys
import time
from tempfile import gettempdir
from wsgidav import compat, util
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
# ========================================================================
# Timing

134
tox.ini
View file

@ -1,45 +1,134 @@
[tox]
basepython = python3.6
#envlist = clean, py27, py34, py35, stats
envlist = check, py27, py34, py35, py36, py37
envlist =
py27,
py34,
py35,
py36,
py37,
black-check,
lint-py27,
lint-py36,
coverage,
[testenv]
usedevelop = True
extras =
test
passenv = LC_ALL LANG TRAVIS TRAVIS_BRANCH TRAVIS_OS_NAME TRAVIS_BUILD_ID
setenv =
COVERAGE_FILE=.coverage.{envname}
# Note: also honors .coveragerc:
commands =
# Run everything from /tests folder:
py.test -ra -v -x --cov wsgidav tests
# Check PEP8 style:
flake8 --version
flake8 wsgidav tests
python -V
pip list
pytest -ra -v -x --cov=wsgidav --cov-report=xml --html=_build/pytest/report-{envname}.html --self-contained-html {posargs}
deps =
cheroot
defusedxml
flake8
flake8-quotes
Jinja2
jsmin
PyYAML
pytest
pytest-cov
#pytest-remove-stale-bytecode
pytest-html
requests
webtest
[testenv:coverage]
skip_install = true
[testenv:check]
description = Check Black formatting compliance and add flake8-bugbear checks
basepython = python3.6
changedir = {toxinidir}
deps =
coverage
setenv =
COVERAGE_FILE=.coverage
commands =
coverage erase
coverage combine
coverage html
coverage xml
coverage report --fail-under=30.0
[testenv:isort-apply]
skip_install = true
deps =
black
flake8-bugbear
commands =
black --check --diff wsgidav tests
flake8 wsgidav tests
isort
commands =
isort --apply --recursive {toxinidir}/wsgidav {toxinidir}/tests setup.py {posargs}
[testenv:autopep8]
skip_install = true
deps =
autopep8
docformatter
commands =
autopep8 --verbose --in-place --recursive --aggressive --aggressive {toxinidir}/wsgidav {toxinidir}/tests setup.py
docformatter --in-place --recursive {toxinidir}/wsgidav {toxinidir}/tests setup.py
[lint]
skip_install = true
deps =
isort
flake8
# helper to generate HTML reports:
flake8-html
# Useful flake8 plugins that are Python and Plone specific:
flake8-coding
flake8-debugger
flake8-deprecated
flake8-pytest
flake8-quotes
flake8-todo
flake8-isort
mccabe
# Potential flake8 plugins that should be used: # TBD
#flake8-blind-except
#flake8-commas
#flake8-docstrings
#flake8-mypy
#flake8-pep3101
#flake8-plone-hasattr
#flake8-string-format
#flake8_strict
#flake8-quotes
commands =
mkdir -p {toxinidir}/_build/flake8
isort --check-only --recursive {toxinidir}/wsgidav {toxinidir}/tests setup.py
- flake8 --format=html --htmldir={toxinidir}/_build/flake8 --doctests wsgidav tests setup.py
flake8 wsgidav tests setup.py --doctests
whitelist_externals =
mkdir
[testenv:lint-py27]
basepython = python2.7
skip_install = true
deps =
{[lint]deps}
commands = {[lint]commands}
whitelist_externals = {[lint]whitelist_externals}
[testenv:lint-py36]
basepython = python3.6
skip_install = true
deps =
{[lint]deps}
flake8-bugbear
commands = {[lint]commands}
whitelist_externals = {[lint]whitelist_externals}
[testenv:black]
description = Reformat python code using Black
@ -49,8 +138,17 @@ skip_install = true
deps =
black
commands =
black wsgidav tests
black wsgidav tests setup.py
[testenv:black-check]
description = Check Black formatting compliance and add flake8-bugbear checks
basepython = python3.6
changedir = {toxinidir}
skip_install = true
deps =
black
commands =
black --check --diff wsgidav tests setup.py
[testenv:docs]
description = Build Sphinx documentation (output directory: docs/sphinx-build)

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# make version accessible as 'wsgidav.__version__'
from wsgidav._version import __version__ # noqa: F401
@ -7,6 +8,7 @@ from wsgidav._version import __version__ # noqa: F401
# https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library
import logging
_base_logger = logging.getLogger(__name__)
_base_logger.addHandler(logging.NullHandler())
_base_logger.propagate = False

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
"""
Current WsgiDAV version number.

View file

@ -11,6 +11,7 @@ Inspired by six https://pythonhosted.org/six/
import sys
__docformat__ = "reStructuredText"
#: True if we are running on Python 2.x

View file

@ -6,11 +6,12 @@
"""
Implements a DAVError class that is used to signal WebDAV and HTTP errors.
"""
import datetime
from wsgidav import __version__, compat, xml_tools
from wsgidav.xml_tools import etree
import datetime
# import traceback

View file

@ -76,26 +76,21 @@ lockManager
See :doc:`reference_guide` for more information about the WsgiDAV architecture.
"""
from wsgidav import compat, util, xml_tools
from wsgidav.dav_error import (
as_DAVError,
DAVError,
HTTP_FORBIDDEN,
HTTP_NOT_FOUND,
PRECONDITION_CODE_ProtectedProperty,
)
from wsgidav.util import etree
import os
import sys
import time
import traceback
from wsgidav import compat, util, xml_tools
from wsgidav.dav_error import (
HTTP_FORBIDDEN,
HTTP_NOT_FOUND,
DAVError,
PRECONDITION_CODE_ProtectedProperty,
as_DAVError,
)
# Trick PyDev to do intellisense and don't produce warnings:
from wsgidav.util import etree # noqa
if False:
from xml.etree import ElementTree as etree # noqa
__docformat__ = "reStructuredText"

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# (c) 2009-2018 Martin Wendt and contributors; see WsgiDAV https://github.com/mar10/wsgidav
# Original PyFileServer (c) 2005 Ho Chun Wei.
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
@ -72,12 +73,12 @@ Testability and caveats
ml
"""
from __future__ import print_function
from wsgidav import compat, util
import win32net
import win32netcon
import win32security
from wsgidav import compat, util
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -32,9 +32,10 @@ domaincontrollerinterface_
.. _domaincontrollerinterface : interfaces/domaincontrollerinterface.py
"""
from wsgidav import util
import sys
from wsgidav import util
__docformat__ = "reStructuredText"

View file

@ -51,13 +51,14 @@ These configuration settings are evaluated:
debug_litmus = ["notowner_modify", "props: 16", ]
"""
import sys
import threading
from wsgidav import compat, util
from wsgidav.middleware import BaseMiddleware
from wsgidav.util import safe_re_encode
import sys
import threading
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -14,12 +14,13 @@
Default confguration.
"""
from wsgidav.dir_browser import WsgiDavDirBrowser
from wsgidav.debug_filter import WsgiDavDebugFilter
from wsgidav.dir_browser import WsgiDavDirBrowser
from wsgidav.error_printer import ErrorPrinter
from wsgidav.http_authenticator import HTTPAuthenticator
from wsgidav.request_resolver import RequestResolver
__docformat__ = "reStructuredText"
# Use these settings, if config file does not define them (or is totally missing)

View file

@ -6,15 +6,15 @@
WSGI middleware that handles GET requests on collections to display directories.
"""
from fnmatch import fnmatch
from jinja2 import Environment, FileSystemLoader
from wsgidav import __version__, compat, util
from wsgidav.dav_error import DAVError, HTTP_MEDIATYPE_NOT_SUPPORTED, HTTP_OK
from wsgidav.middleware import BaseMiddleware
from wsgidav.util import safe_re_encode
import os
import sys
from jinja2 import Environment, FileSystemLoader
from wsgidav import __version__, compat, util
from wsgidav.dav_error import HTTP_MEDIATYPE_NOT_SUPPORTED, HTTP_OK, DAVError
from wsgidav.middleware import BaseMiddleware
from wsgidav.util import safe_re_encode
__docformat__ = "reStructuredText"

View file

@ -7,19 +7,20 @@
WSGI middleware to catch application thrown DAVErrors and return proper
responses.
"""
import traceback
from wsgidav import util
from wsgidav.dav_error import (
as_DAVError,
DAVError,
get_http_status_string,
HTTP_INTERNAL_ERROR,
HTTP_NO_CONTENT,
HTTP_NOT_MODIFIED,
DAVError,
as_DAVError,
get_http_status_string,
)
from wsgidav.middleware import BaseMiddleware
import traceback
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -15,14 +15,15 @@ This provider creates instances of :class:`~wsgidav.fs_dav_provider.FileResource
and :class:`~wsgidav.fs_dav_provider.FolderResource` to represent files and
directories respectively.
"""
from wsgidav import compat, util
from wsgidav.dav_error import DAVError, HTTP_FORBIDDEN
from wsgidav.dav_provider import DAVCollection, DAVNonCollection, DAVProvider
import os
import shutil
import stat
import sys
from wsgidav import compat, util
from wsgidav.dav_error import HTTP_FORBIDDEN, DAVError
from wsgidav.dav_provider import DAVCollection, DAVNonCollection, DAVProvider
__docformat__ = "reStructuredText"

View file

@ -75,17 +75,18 @@ The environ variable here is the WSGI 'environ' dictionary. It is passed to
all methods of the domain controller as a means for developers to pass information
from previous middleware or server config (if required).
"""
import inspect
import random
import re
import time
from hashlib import md5
from wsgidav import compat, util
from wsgidav.dc.simple_dc import SimpleDomainController
from wsgidav.middleware import BaseMiddleware
from wsgidav.util import calc_base64, calc_hexdigest, dynamic_import_class
import inspect
import random
import re
import time
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
class IDAVProvider(object):
"""
+----------------------------------------------------------------------+

View file

@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
class IDomainController(object):
"""
+----------------------------------------------------------------------+

View file

@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
class LockManagerInterface(object):
"""
+----------------------------------------------------------------------+

View file

@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
class PropertyManagerInterface(object):
"""
+----------------------------------------------------------------------+

View file

@ -36,19 +36,20 @@ The lock data model is a dictionary with these fields:
Automatically generated unique token.
"""
import random
import time
from pprint import pformat
from wsgidav import compat, util
from wsgidav.dav_error import (
HTTP_LOCKED,
DAVError,
DAVErrorCondition,
HTTP_LOCKED,
PRECONDITION_CODE_LockConflict,
)
from wsgidav.rw_lock import ReadWriteLock
import random
import time
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -11,10 +11,6 @@ Two alternative lock storage classes are defined here: one in-memory
See :class:`~wsgidav.lock_manager.LockManager`
"""
import os
import shelve
import time
from wsgidav import compat, util
from wsgidav.lock_manager import (
generate_lock_token,
@ -24,6 +20,11 @@ from wsgidav.lock_manager import (
)
from wsgidav.rw_lock import ReadWriteLock
import os
import shelve
import time
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -0,0 +1 @@
# -*- coding: utf-8 -*-

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# (c) 2009-2018 Martin Wendt and contributors; see WsgiDAV https://github.com/mar10/wsgidav
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
"""
@ -22,11 +23,11 @@ Valid options are (sample shows defaults)::
"""
from __future__ import print_function
from uuid import uuid4
from wsgidav import compat, util
import couchdb
from wsgidav import compat, util
__docformat__ = "reStructuredText"

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# (c) 2009-2018 Martin Wendt and contributors; see WsgiDAV https://github.com/mar10/wsgidav
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
"""
@ -22,9 +23,10 @@ Valid options are (sample shows defaults)::
"""
from __future__ import print_function
from wsgidav import compat, util
import pymongo
from wsgidav import compat, util
__docformat__ = "reStructuredText"

View file

@ -18,11 +18,12 @@ The properties dictionaray is built like::
}
"""
from wsgidav import util
from wsgidav.rw_lock import ReadWriteLock
import os
import shelve
from wsgidav import util
from wsgidav.rw_lock import ReadWriteLock
# TODO: comment's from Ian Bicking (2005)
# @@: Use of shelve means this is only really useful in a threaded environment.

View file

@ -88,10 +88,11 @@ header, if present, to::
"""
from wsgidav import util
from wsgidav.dav_error import HTTP_NOT_FOUND, DAVError
from wsgidav.dav_error import DAVError, HTTP_NOT_FOUND
from wsgidav.middleware import BaseMiddleware
from wsgidav.request_server import RequestServer
__docformat__ = "reStructuredText"
# NOTE (Martin Wendt, 2009-05):

View file

@ -8,6 +8,9 @@ WSGI application that handles one single WebDAV request.
"""
from wsgidav import compat, util, xml_tools
from wsgidav.dav_error import (
as_DAVError,
DAVError,
get_http_status_string,
HTTP_BAD_GATEWAY,
HTTP_BAD_REQUEST,
HTTP_CONFLICT,
@ -24,14 +27,12 @@ from wsgidav.dav_error import (
HTTP_OK,
HTTP_PRECONDITION_FAILED,
HTTP_RANGE_NOT_SATISFIABLE,
DAVError,
PRECONDITION_CODE_LockTokenMismatch,
PRECONDITION_CODE_PropfindFiniteDepth,
as_DAVError,
get_http_status_string,
)
from wsgidav.util import etree
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -15,9 +15,10 @@ Released under the BSD-license.
# Imports
# -------
from threading import Condition, Lock, currentThread
from threading import Condition, currentThread, Lock
from time import time
# Read write lock
# ---------------

View file

@ -4,11 +4,12 @@
"""
Tools that make it easier to implement custom WsgiDAV providers.
"""
from wsgidav import compat, util
from wsgidav.dav_provider import DAVCollection, DAVNonCollection
import os
import stat
from wsgidav import compat, util
from wsgidav.dav_provider import DAVCollection, DAVNonCollection
__docformat__ = "reStructuredText en"

View file

@ -72,17 +72,17 @@ Requirements:
http://mercurial.berkwood.com/binaries/mercurial-1.4.win32-py2.6.exe
"""
from __future__ import print_function
from hashlib import md5
from pprint import pprint
from wsgidav import compat, util
from wsgidav.dav_error import DAVError, HTTP_FORBIDDEN
from wsgidav.dav_provider import _DAVResource, DAVProvider
from wsgidav.samples.dav_provider_tools import VirtualCollection
import os
import sys
import time
from hashlib import md5
from pprint import pprint
from wsgidav import compat, util
from wsgidav.dav_error import HTTP_FORBIDDEN, DAVError
from wsgidav.dav_provider import DAVProvider, _DAVResource
from wsgidav.samples.dav_provider_tools import VirtualCollection
try:
import mercurial.ui

View file

@ -24,14 +24,15 @@ Valid options are (sample shows defaults)::
}
"""
from pprint import pformat
import pymongo
from bson.objectid import ObjectId
from pprint import pformat
from wsgidav import compat, util
from wsgidav.dav_provider import DAVCollection, DAVNonCollection, DAVProvider
from wsgidav.util import join_uri
import pymongo
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# (c) 2009-2018 Martin Wendt and contributors; see WsgiDAV https://github.com/mar10/wsgidav
# Original PyFileServer (c) 2005 Ho Chun Wei.
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
@ -57,21 +58,19 @@ its limitations:
"""
from __future__ import print_function
from wsgidav import compat, util
from wsgidav.dav_error import (
DAVError,
HTTP_FORBIDDEN,
PRECONDITION_CODE_ProtectedProperty,
)
from wsgidav.dav_provider import _DAVResource, DAVProvider
import csv
import hashlib
# import md5
import MySQLdb # @UnresolvedImport
import time
import MySQLdb # @UnresolvedImport
from wsgidav import compat, util
from wsgidav.dav_error import (
HTTP_FORBIDDEN,
DAVError,
PRECONDITION_CODE_ProtectedProperty,
)
from wsgidav.dav_provider import DAVProvider, _DAVResource
__docformat__ = "reStructuredText"

View file

@ -95,19 +95,20 @@ When accessed using WebDAV, the following URLs both return the same resource
<share>/by_tag/hot/My doc 1
<share>/by_key/1
"""
import os
import stat
from wsgidav import compat, util
from wsgidav.dav_error import (
DAVError,
HTTP_FORBIDDEN,
HTTP_INTERNAL_ERROR,
DAVError,
PRECONDITION_CODE_ProtectedProperty,
)
from wsgidav.dav_provider import DAVCollection, DAVNonCollection, DAVProvider
from wsgidav.util import join_uri
import os
import stat
__docformat__ = "reStructuredText en"
_logger = util.get_module_logger(__name__)

View file

@ -53,6 +53,8 @@ can copy ``ext_wsgi_server.py`` to ``<Paste-installation>/paste/servers`` and us
run the application by specifying ``server='ext_wsgiutils'`` in the ``server.conf`` or appropriate
paste configuration.
"""
from wsgidav import __version__, compat, util
import logging
import socket
import sys
@ -60,7 +62,6 @@ import threading
import time
import traceback
from wsgidav import __version__, compat, util
__docformat__ = "reStructuredText"
@ -336,7 +337,7 @@ class ExtServer(socketserver.ThreadingMixIn, BaseHTTPServer.HTTPServer):
# # Flag stop request
self.stop_request = True
time.sleep(.1)
time.sleep(0.1)
if self.stopped:
# _logger.info "stop_serve_forever() 'stopped'."
return

View file

@ -6,10 +6,10 @@ Wrapper for ``server_cli``, that restarts the server when source code is
modified.
"""
from __future__ import print_function
from subprocess import Popen
import os
import sys
from subprocess import Popen
def run():

View file

@ -33,6 +33,14 @@ Configuration is defined like this:
FOLDER on the '/' share.
"""
from __future__ import print_function
from inspect import isfunction
from jsmin import jsmin
from pprint import pformat
from wsgidav import __version__, util
from wsgidav.default_conf import DEFAULT_CONFIG, DEFAULT_VERBOSE
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
from wsgidav.xml_tools import use_lxml
import argparse
import copy
@ -43,17 +51,8 @@ import os
import platform
import sys
import traceback
from inspect import isfunction
from pprint import pformat
import yaml
from jsmin import jsmin
from wsgidav import __version__, util
from wsgidav.default_conf import DEFAULT_CONFIG, DEFAULT_VERBOSE
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
from wsgidav.xml_tools import use_lxml
__docformat__ = "reStructuredText"

View file

@ -6,13 +6,12 @@
Simple example how to a run WsgiDAV in a 3rd-party WSGI server.
"""
from __future__ import print_function
from tempfile import gettempdir
from wsgidav import __version__
from wsgidav.fs_dav_provider import FilesystemProvider
from wsgidav.wsgidav_app import WsgiDAVApp
__docformat__ = "reStructuredText"

View file

@ -17,9 +17,9 @@ consumer at the same time::
"""
from __future__ import print_function
from wsgidav import compat, util
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -6,6 +6,23 @@
"""
Miscellaneous support functions for WsgiDAV.
"""
from email.utils import formatdate, parsedate
from hashlib import md5
from pprint import pformat
from wsgidav import compat
from wsgidav.dav_error import (
as_DAVError,
DAVError,
get_http_status_string,
HTTP_BAD_REQUEST,
HTTP_CREATED,
HTTP_NO_CONTENT,
HTTP_NOT_MODIFIED,
HTTP_OK,
HTTP_PRECONDITION_FAILED,
)
from wsgidav.xml_tools import etree, is_etree_element, make_sub_element, xml_to_bytes
import base64
import calendar
import collections
@ -17,23 +34,7 @@ import socket
import stat
import sys
import time
from email.utils import formatdate, parsedate
from hashlib import md5
from pprint import pformat
from wsgidav import compat
from wsgidav.dav_error import (
HTTP_BAD_REQUEST,
HTTP_CREATED,
HTTP_NO_CONTENT,
HTTP_NOT_MODIFIED,
HTTP_OK,
HTTP_PRECONDITION_FAILED,
DAVError,
as_DAVError,
get_http_status_string,
)
from wsgidav.xml_tools import etree, is_etree_element, make_sub_element, xml_to_bytes
__docformat__ = "reStructuredText"

View file

@ -48,13 +48,7 @@ For every request:
Note: The OPTIONS method for the '*' path is handled directly.
"""
import copy
import inspect
import platform
import sys
import time
from wsgidav import compat, util, __version__
from wsgidav import __version__, compat, util
from wsgidav.dav_provider import DAVProvider
from wsgidav.default_conf import DEFAULT_CONFIG
from wsgidav.fs_dav_provider import FilesystemProvider
@ -69,6 +63,13 @@ from wsgidav.util import (
safe_re_encode,
)
import copy
import inspect
import platform
import sys
import time
__docformat__ = "reStructuredText"
_logger = util.get_module_logger(__name__)

View file

@ -8,9 +8,10 @@ Small wrapper for different etree packages.
"""
# from __future__ import print_function
from wsgidav import compat
import logging
from wsgidav import compat
__docformat__ = "reStructuredText"