summaryrefslogtreecommitdiff
path: root/src/mailman/rest/api.py
diff options
context:
space:
mode:
authorBarry Warsaw2016-01-13 00:14:08 -0500
committerBarry Warsaw2016-01-13 00:17:49 -0500
commitd75a7ebb46279f341b498bf517d07e9ae4c27f0a (patch)
treebaaea8a2dc102887b057f9da5184bbe61ba22aef /src/mailman/rest/api.py
parent03bb57c8c2a47a08e19b20975622ebb2ef2b81c6 (diff)
downloadmailman-d75a7ebb46279f341b498bf517d07e9ae4c27f0a.tar.gz
mailman-d75a7ebb46279f341b498bf517d07e9ae4c27f0a.tar.zst
mailman-d75a7ebb46279f341b498bf517d07e9ae4c27f0a.zip
Refactor API contexts.
Rather than sprinkle API version string tests all over the place, create an IAPI interface which encapsulates the differences between API 3.0 and 3.1, and arrange for this to be used to convert to and from UUIDs.
Diffstat (limited to 'src/mailman/rest/api.py')
-rw-r--r--src/mailman/rest/api.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/mailman/rest/api.py b/src/mailman/rest/api.py
new file mode 100644
index 000000000..998fac268
--- /dev/null
+++ b/src/mailman/rest/api.py
@@ -0,0 +1,54 @@
+# Copyright (C) 2016 by the Free Software Foundation, Inc.
+#
+# This file is part of GNU Mailman.
+#
+# GNU Mailman is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
+
+"""REST web service API contexts."""
+
+__all__ = [
+ 'API30',
+ 'API31',
+ ]
+
+
+from mailman.interfaces.api import IAPI
+from uuid import UUID
+from zope.interface import implementer
+
+
+@implementer(IAPI)
+class API30:
+ version = '3.0'
+
+ @staticmethod
+ def from_uuid(uuid):
+ return uuid.int
+
+ @staticmethod
+ def to_uuid(uuid_repr):
+ return UUID(int=int(uuid_repr))
+
+
+@implementer(IAPI)
+class API31:
+ version = '3.1'
+
+ @staticmethod
+ def from_uuid(uuid):
+ return uuid.hex
+
+ @staticmethod
+ def to_uuid(uuid_repr):
+ return UUID(hex=uuid_repr)