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

This commit is contained in:
Jean-Marc Martins 2013-08-28 10:48:15 +02:00
commit 484933d4b6
4 changed files with 18 additions and 3 deletions

View File

@ -8,6 +8,8 @@
* Clean rights manager based on regular expressions (by Sweil)
* Support of contacts for Apple's clients
* Support colors (by Jochen Sprickerhof)
* Decode URLs in XML (by Jean-Marc Martins)
0.8 - Rainbow

View File

@ -27,7 +27,8 @@ Define the main classes of a collection as seen from the server.
import os
import posixpath
import uuid
from uuid import uuid4
from random import randint
from contextlib import contextmanager
@ -102,7 +103,7 @@ class Item(object):
self.text = self.text.replace(
"\nEND:", "\nX-RADICALE-NAME:%s\nEND:" % self._name)
else:
self._name = str(uuid.uuid4())
self._name = str(uuid4())
self.text = self.text.replace(
"\nEND:", "\nX-RADICALE-NAME:%s\nEND:" % self._name)
@ -437,6 +438,14 @@ class Collection(object):
with self.props as props:
return props.get("D:displayname", self.path.split(os.path.sep)[-1])
@property
def color(self):
"""Collection color."""
with self.props as props:
if "A:calendar-color" not in props:
props["A:calendar-color"] = "#%x" % randint(0, 255 ** 3 - 1)
return props["A:calendar-color"]
@property
def headers(self):
"""Find headers items in collection."""

View File

@ -55,7 +55,7 @@ TYPE = config.get("rights", "type").lower()
DEFINED_RIGHTS = {
"owner_write": "[r]\nuser:.*\ncollection:.*\npermission:r\n"
"[w]\nuser:.*\ncollection:^%(login)s/.+$\npermission:w",
"owner_only": "[rw]\nuser:.\ncollection: ^%(login)s/.+$\npermission:rw"}
"owner_only": "[rw]\nuser:.*\ncollection:^%(login)s/.+$\npermission:rw"}
def _read_from_sections(user, collection, permission):

View File

@ -48,6 +48,7 @@ from . import client, config, ical
NAMESPACES = {
"A": "http://apple.com/ns/ical/",
"C": "urn:ietf:params:xml:ns:caldav",
"CR": "urn:ietf:params:xml:ns:carddav",
"D": "DAV:",
@ -226,6 +227,7 @@ def propfind(path, xml_request, collections, user=None):
_tag("D", "displayname"),
_tag("D", "owner"),
_tag("D", "getetag"),
_tag("A", "calendar-color"),
_tag("CS", "getctag")]
# Writing answer
@ -340,6 +342,8 @@ def _propfind_response(path, item, props, user):
item.tag, item.headers, item.timezones)
elif tag == _tag("D", "displayname"):
element.text = item.name
elif tag == _tag("A", "calendar-color"):
element.text = item.color
else:
human_tag = _tag_from_clark(tag)
if human_tag in collection_props: