From fe0ed63c4a3486402f65638b476149ebba752055 Mon Sep 17 00:00:00 2001
From: Maximilian Hils <git@maximilianhils.com>
Date: Mon, 8 Feb 2016 04:16:58 +0100
Subject: add Serializable ABC

---
 netlib/utils.py | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

(limited to 'netlib/utils.py')

diff --git a/netlib/utils.py b/netlib/utils.py
index 1c1b617a..a0c2035c 100644
--- a/netlib/utils.py
+++ b/netlib/utils.py
@@ -1,14 +1,38 @@
 from __future__ import absolute_import, print_function, division
 import os.path
 import re
-import string
 import codecs
 import unicodedata
+from abc import ABCMeta, abstractmethod
+
 import six
 
 from six.moves import urllib
 import hyperframe
 
+
+@six.add_metaclass(ABCMeta)
+class Serializable(object):
+    """
+    ABC for Python's pickle protocol __getstate__ and __setstate__.
+    """
+
+    @classmethod
+    @abstractmethod
+    def from_state(cls, state):
+        obj = cls.__new__(cls)
+        obj.__setstate__(state)
+        return obj
+
+    @abstractmethod
+    def get_state(self):
+        raise NotImplementedError()
+
+    @abstractmethod
+    def set_state(self, state):
+        raise NotImplementedError()
+
+
 def always_bytes(unicode_or_bytes, *encode_args):
     if isinstance(unicode_or_bytes, six.text_type):
         return unicode_or_bytes.encode(*encode_args)
-- 
cgit v1.2.3


From 655b521749efd5a600d342a1d95b67d32da280a8 Mon Sep 17 00:00:00 2001
From: Maximilian Hils <git@maximilianhils.com>
Date: Mon, 8 Feb 2016 04:33:10 +0100
Subject: fix docstrings

---
 netlib/utils.py | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

(limited to 'netlib/utils.py')

diff --git a/netlib/utils.py b/netlib/utils.py
index a0c2035c..d2fc7195 100644
--- a/netlib/utils.py
+++ b/netlib/utils.py
@@ -14,22 +14,29 @@ import hyperframe
 @six.add_metaclass(ABCMeta)
 class Serializable(object):
     """
-    ABC for Python's pickle protocol __getstate__ and __setstate__.
+    Abstract Base Class that defines an API to save an object's state and restore it later on.
     """
 
     @classmethod
     @abstractmethod
     def from_state(cls, state):
-        obj = cls.__new__(cls)
-        obj.__setstate__(state)
-        return obj
+        """
+        Create a new object from the given state.
+        """
+        raise NotImplementedError()
 
     @abstractmethod
     def get_state(self):
+        """
+        Retrieve object state.
+        """
         raise NotImplementedError()
 
     @abstractmethod
     def set_state(self, state):
+        """
+        Set object state to the given state.
+        """
         raise NotImplementedError()
 
 
-- 
cgit v1.2.3