Merge branch 'master' of github.com:Kozea/radicale

This commit is contained in:
Guillaume Ayoub 2016-05-24 14:37:46 +02:00
commit ac687c6179
6 changed files with 20 additions and 11 deletions

View File

@ -6,10 +6,9 @@ python:
- 3.5 - 3.5
install: install:
- pip install -e . - pip install tox
- pip install tox flake8
script: script:
- tox -r -e py - tox -e py
sudo: false sudo: false

View File

@ -33,6 +33,7 @@ import socket
import ssl import ssl
import wsgiref.simple_server import wsgiref.simple_server
import re import re
import zlib
from http import client from http import client
from urllib.parse import unquote, urlparse from urllib.parse import unquote, urlparse
@ -314,6 +315,13 @@ class Application:
if answer: if answer:
self.logger.debug("Response content:\n%s" % answer, environ) self.logger.debug("Response content:\n%s" % answer, environ)
answer = answer.encode(self.encoding) answer = answer.encode(self.encoding)
accept_encoding = [
encoding.strip() for encoding in
environ.get("HTTP_ACCEPT_ENCODING", "").split(",")
if encoding.strip()]
if "deflate" in accept_encoding:
answer = zlib.compress(answer)
headers["Content-Encoding"] = "deflate"
headers["Content-Length"] = str(len(answer)) headers["Content-Length"] = str(len(answer))
if self.configuration.has_section("headers"): if self.configuration.has_section("headers"):

View File

@ -173,7 +173,7 @@ def run():
if not configuration.getboolean("server", "dns_lookup"): if not configuration.getboolean("server", "dns_lookup"):
RequestHandler.address_string = lambda self: self.client_address[0] RequestHandler.address_string = lambda self: self.client_address[0]
shutdown_program = [False] shutdown_program = False
for host in configuration.get("server", "hosts").split(","): for host in configuration.get("server", "hosts").split(","):
address, port = host.strip().rsplit(":", 1) address, port = host.strip().rsplit(":", 1)
@ -198,11 +198,12 @@ def run():
# SIGTERM and SIGINT (aka KeyboardInterrupt) should just mark this for # SIGTERM and SIGINT (aka KeyboardInterrupt) should just mark this for
# shutdown # shutdown
def shutdown(*args): def shutdown(*args):
if shutdown_program[0]: nonlocal shutdown_program
if shutdown_program:
# Ignore following signals # Ignore following signals
return return
logger.info("Stopping Radicale") logger.info("Stopping Radicale")
shutdown_program[0] = True shutdown_program = True
if shutdown_program_socket_in: if shutdown_program_socket_in:
shutdown_program_socket_in.sendall(b"goodbye") shutdown_program_socket_in.sendall(b"goodbye")
signal.signal(signal.SIGTERM, shutdown) signal.signal(signal.SIGTERM, shutdown)
@ -218,7 +219,7 @@ def run():
# Fallback to busy waiting # Fallback to busy waiting
select_timeout = 1.0 select_timeout = 1.0
logger.debug("Radicale server ready") logger.debug("Radicale server ready")
while not shutdown_program[0]: while not shutdown_program:
try: try:
rlist, _, xlist = select.select( rlist, _, xlist = select.select(
sockets, [], sockets, select_timeout) sockets, [], sockets, select_timeout)

View File

@ -97,7 +97,6 @@ def path_to_filesystem(root, *paths):
Conversion is done in a secure manner, or raises ``ValueError``. Conversion is done in a secure manner, or raises ``ValueError``.
""" """
root = sanitize_path(root)
paths = [sanitize_path(path).strip("/") for path in paths] paths = [sanitize_path(path).strip("/") for path in paths]
safe_path = root safe_path = root
for path in paths: for path in paths:
@ -303,7 +302,7 @@ class Collection(BaseCollection):
_, directories, _ = next(os.walk(collection._filesystem_path)) _, directories, _ = next(os.walk(collection._filesystem_path))
for sub_path in directories: for sub_path in directories:
full_path = os.path.join(collection._filesystem_path, sub_path) full_path = os.path.join(collection._filesystem_path, sub_path)
if os.path.exists(path_to_filesystem(full_path)): if os.path.exists(full_path):
yield cls(posixpath.join(path, sub_path)) yield cls(posixpath.join(path, sub_path))
@classmethod @classmethod

View File

@ -133,6 +133,9 @@ def _comp_match(item, filter_, scope="collection"):
for component in item.components(): for component in item.components():
if component.name in ("VTODO", "VEVENT", "VJOURNAL"): if component.name in ("VTODO", "VEVENT", "VJOURNAL"):
tag = component.name tag = component.name
break
else:
return False
if filter_length == 0: if filter_length == 0:
# Point #1 of rfc4791-9.7.1 # Point #1 of rfc4791-9.7.1
return filter_.get("name") == tag return filter_.get("name") == tag

View File

@ -1,12 +1,11 @@
[tox] [tox]
envlist = py33, py34, py35 envlist = py33, py34, py35
[base] [testenv]
deps = deps =
flake8 flake8
pytest pytest
[testenv]
commands = commands =
flake8 flake8
py.test py.test