Explicitely create collections on GET requests

This commit is contained in:
Guillaume Ayoub 2012-02-23 15:28:45 +01:00
parent 128a20714b
commit 22e4e3764c
3 changed files with 16 additions and 5 deletions

View File

@ -290,7 +290,13 @@ class Application(object):
return status, {}, answer return status, {}, answer
def get(self, environ, collections, content, user): def get(self, environ, collections, content, user):
"""Manage GET request.""" """Manage GET request.
In Radicale, GET requests create collections when the URL is not
available. This is useful for clients with no MKCOL or MKCALENDAR
support.
"""
# Display a "Radicale works!" message if the root URL is requested # Display a "Radicale works!" message if the root URL is requested
if environ["PATH_INFO"] == "/": if environ["PATH_INFO"] == "/":
headers = {"Content-type": "text/html"} headers = {"Content-type": "text/html"}
@ -311,6 +317,10 @@ class Application(object):
else: else:
return client.GONE, {}, None return client.GONE, {}, None
else: else:
# Create the collection if it does not exist
if not collection.exists:
collection.write()
# Get whole collection # Get whole collection
answer_text = collection.text answer_text = collection.text
etag = collection.etag etag = collection.etag

View File

@ -284,6 +284,11 @@ class Collection(object):
"""Get the collection properties.""" """Get the collection properties."""
raise NotImplementedError raise NotImplementedError
@property
def exists(self):
"""``True`` if the collection exists on the storage, else ``False``."""
return self.is_node(self.path) or self.is_leaf(self.path)
@staticmethod @staticmethod
def _parse(text, item_types, name=None): def _parse(text, item_types, name=None):
"""Find items with type in ``item_types`` in ``text``. """Find items with type in ``item_types`` in ``text``.

View File

@ -96,10 +96,6 @@ class Collection(ical.Collection):
@property @property
def last_modified(self): def last_modified(self):
# Create collection if needed
if not os.path.exists(self._path):
self.write()
modification_time = time.gmtime(os.path.getmtime(self._path)) modification_time = time.gmtime(os.path.getmtime(self._path))
return time.strftime("%a, %d %b %Y %H:%M:%S +0000", modification_time) return time.strftime("%a, %d %b %Y %H:%M:%S +0000", modification_time)