1.1 --- a/examples/Common/Calendar/__init__.py Thu Aug 25 22:40:33 2005 +0000
1.2 +++ b/examples/Common/Calendar/__init__.py Thu Aug 25 22:41:44 2005 +0000
1.3 @@ -16,11 +16,24 @@
1.4 """
1.5
1.6 resource_dir = os.path.join(os.path.split(__file__)[0], "calendars")
1.7 - urlencoding = "utf-8"
1.8 + encoding = "utf-8"
1.9
1.10 - def __init__(self):
1.11 + def __init__(self, fsencoding=None):
1.12 if not os.path.exists(self.resource_dir):
1.13 os.mkdir(self.resource_dir)
1.14 + self.fsencoding = fsencoding
1.15 +
1.16 + def _convert_name(self, name):
1.17 + if self.fsencoding:
1.18 + return name.encode(self.fsencoding)
1.19 + else:
1.20 + return name
1.21 +
1.22 + def _convert_fsname(self, name):
1.23 + if self.fsencoding:
1.24 + return unicode(name, self.fsencoding)
1.25 + else:
1.26 + return name
1.27
1.28 def respond(self, trans):
1.29
1.30 @@ -29,10 +42,6 @@
1.31 one.
1.32 """
1.33
1.34 - # Remember uploaded calendars using a session.
1.35 -
1.36 - session = trans.get_session(create=1)
1.37 -
1.38 # Determine the action to be taken.
1.39
1.40 method = trans.get_request_method()
1.41 @@ -40,8 +49,7 @@
1.42 # NOTE: Some frameworks do not pass in the content type.
1.43 # NOTE: We always assume that calendar files are being uploaded.
1.44
1.45 - content_type = trans.get_content_type()
1.46 - calendar_name = trans.get_virtual_path_info(self.urlencoding).split("/")[-1]
1.47 + calendar_name = trans.get_virtual_path_info(self.encoding).split("/")[-1]
1.48
1.49 # Handle uploads.
1.50
1.51 @@ -55,7 +63,7 @@
1.52
1.53 # Store the calendar in the directory.
1.54
1.55 - f = open(os.path.join(self.resource_dir, calendar_name), "wb")
1.56 + f = open(self._convert_name(os.path.join(self.resource_dir, calendar_name)), "wb")
1.57 f.write(data)
1.58 f.close()
1.59
1.60 @@ -63,13 +71,13 @@
1.61
1.62 elif method == "PROPFIND":
1.63 trans.set_response_code(207)
1.64 - trans.set_content_type(WebStack.Generic.ContentType("text/html"))
1.65 + trans.set_content_type(WebStack.Generic.ContentType("text/xml", self.encoding))
1.66 out = trans.get_response_stream()
1.67 out.write("""<?xml version="1.0"?>
1.68 <D:multistatus xmlns:D="DAV:">
1.69 """)
1.70
1.71 - if trans.get_virtual_path_info(self.urlencoding) == "/":
1.72 + if trans.get_virtual_path_info(self.encoding) == "/":
1.73 time_now = time.strftime("%Y-%m-%dT%TZ", time.gmtime(time.time()))
1.74 out.write("""
1.75 <D:response>
1.76 @@ -85,7 +93,10 @@
1.77 <D:status>HTTP/1.1 200 OK</D:status>
1.78 </D:propstat>
1.79 </D:response>
1.80 -""" % (trans.get_path_without_query(self.urlencoding), time_now, trans.get_path_without_query(self.urlencoding)))
1.81 +""" % (
1.82 + trans.get_path_without_query(self.encoding),
1.83 + time_now,
1.84 + trans.get_path_without_query(self.encoding)))
1.85
1.86 for filename in os.listdir(self.resource_dir):
1.87 pathname = os.path.join(self.resource_dir, filename)
1.88 @@ -105,7 +116,13 @@
1.89 <D:status>HTTP/1.1 200 OK</D:status>
1.90 </D:propstat>
1.91 </D:response>
1.92 -""" % (trans.get_path_without_query(self.urlencoding), filename, created, filename, "text/calendar", size))
1.93 +""" % (
1.94 + trans.get_path_without_query(self.encoding),
1.95 + self._convert_fsname(filename),
1.96 + created,
1.97 + self._convert_fsname(filename),
1.98 + "text/calendar",
1.99 + size))
1.100
1.101 out.write("""
1.102 </D:multistatus>
1.103 @@ -114,9 +131,9 @@
1.104 # Handle downloads.
1.105
1.106 elif method == "GET":
1.107 - trans.set_content_type(WebStack.Generic.ContentType("text/html"))
1.108 + trans.set_content_type(WebStack.Generic.ContentType("text/calendar"))
1.109 out = trans.get_response_stream()
1.110 - f = open(os.path.join(self.resource_dir, calendar_name))
1.111 + f = open(self._convert_name(os.path.join(self.resource_dir, calendar_name)))
1.112 out.write(f.read())
1.113 f.close()
1.114
1.115 @@ -140,12 +157,16 @@
1.116 # NOTE: Assume that the URL references the same "directory".
1.117
1.118 destination = destinations[0].split("/")[-1]
1.119 + destination = trans.decode_path(destination, self.encoding)
1.120
1.121 if method == "MOVE":
1.122 - os.rename(os.path.join(self.resource_dir, calendar_name), os.path.join(self.resource_dir, destination))
1.123 + os.rename(
1.124 + self._convert_name(os.path.join(self.resource_dir, calendar_name)),
1.125 + self._convert_name(os.path.join(self.resource_dir, destination))
1.126 + )
1.127 elif method == "COPY":
1.128 - f_old = open(os.path.join(self.resource_dir, calendar_name), "rb")
1.129 - f_new = open(os.path.join(self.resource_dir, destination), "wb")
1.130 + f_old = open(self._convert_name(os.path.join(self.resource_dir, calendar_name)), "rb")
1.131 + f_new = open(self._convert_name(os.path.join(self.resource_dir, destination)), "wb")
1.132 f_new.write(f_old.read())
1.133 f_new.close()
1.134 f_old.close()