Просмотр исходного кода

Fix compatibility between python2 and 3

Jean-Marc Martins 12 лет назад
Родитель
Сommit
a631c8c761

+ 3 - 3
radicale/__init__.py

@@ -272,9 +272,9 @@ class Application(object):
 
         if authorization:
             authorization = \
-                authorization.lstrip("Basic").strip().encode("ascii")
-            user, password = self.decode(
-                base64.b64decode(authorization), environ).split(":", 1)
+                authorization.decode("ascii").lstrip("Basic").strip()
+            user, password = self.decode(base64.b64decode(
+                authorization.encode("ascii")), environ).split(":", 1)
         else:
             user = password = None
 

+ 2 - 1
radicale/ical.py

@@ -103,7 +103,8 @@ class Item(object):
                 self.text = self.text.replace(
                     "\nEND:", "\nX-RADICALE-NAME:%s\nEND:" % self._name)
         else:
-            self._name = str(uuid4())
+            # workaround to get unicode on both python2 and 3
+            self._name = uuid4().hex.encode("ascii").decode("ascii")
             self.text = self.text.replace(
                 "\nEND:", "\nX-RADICALE-NAME:%s\nEND:" % self._name)
 

+ 2 - 2
radicale/storage/filesystem.py

@@ -36,7 +36,7 @@ FILESYSTEM_ENCODING = sys.getfilesystemencoding()
 
 try:
     from dulwich.repo import Repo
-    GIT_REPOSITORY = Repo(FOLDER).encode(FILESYSTEM_ENCODING)
+    GIT_REPOSITORY = Repo(FOLDER)
 except:
     GIT_REPOSITORY = None
 
@@ -53,7 +53,7 @@ def open(path, mode="r"):
     # On exit
     if GIT_REPOSITORY and mode == "w":
         path = os.path.relpath(abs_path, FOLDER)
-        GIT_REPOSITORY.stage([path.encode(FILESYSTEM_ENCODING)])
+        GIT_REPOSITORY.stage([path])
         committer = config.get("git", "committer")
         GIT_REPOSITORY.do_commit("Commit by Radicale", committer=committer)
 # pylint: enable=W0622

+ 5 - 1
radicale/storage/multifilesystem.py

@@ -25,6 +25,7 @@ Multi files per calendar filesystem storage backend.
 import os
 import shutil
 import time
+import sys
 
 from . import filesystem
 from .. import ical
@@ -50,7 +51,10 @@ class Collection(filesystem.Collection):
         components = [i for i in items if isinstance(i, ical.Component)]
         for component in components:
             text = ical.serialize(self.tag, headers, [component] + timezones)
-            path = os.path.join(self._path, component.name)
+            name = (
+                component.name if sys.version_info[0] >= 3 else
+                component.name.encode(filesystem.FILESYSTEM_ENCODING))
+            path = os.path.join(self._path, name)
             with filesystem.open(path, "w") as fd:
                 fd.write(text)
 

+ 6 - 4
tests/__init__.py

@@ -58,6 +58,8 @@ class BaseTest(object):
         args["REQUEST_METHOD"] = method.upper()
         args["PATH_INFO"] = path
         if data:
+            if sys.version_info[0] >= 3:
+                data = data.encode("utf-8")
             args["wsgi.input"] = BytesIO(data)
             args["CONTENT_LENGTH"] = str(len(data))
         self.application._answer = self.application(args, self.start_response)
@@ -128,11 +130,11 @@ class HtpasswdAuthSystem(BaseTest):
     def setup(self):
         self.colpath = tempfile.mkdtemp()
         htpasswd_file_path = os.path.join(self.colpath, ".htpasswd")
-        with open(htpasswd_file_path, "w") as fd:
-            fd.write('tmp:{SHA}' + base64.b64encode(
-                hashlib.sha1("bépo").digest()))
+        with open(htpasswd_file_path, "wb") as fd:
+            fd.write(b"tmp:{SHA}" + base64.b64encode(
+                hashlib.sha1(b"bepo").digest()))
         config.set("auth", "type", "htpasswd")
-        self.userpass = base64.b64encode("tmp:bépo")
+        self.userpass = base64.b64encode(b"tmp:bepo")
         self.application = radicale.Application()
         htpasswd.FILENAME = htpasswd_file_path
         htpasswd.ENCRYPTION = "sha1"