aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/utils.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-02-08 04:16:58 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-02-08 04:16:58 +0100
commitfe0ed63c4a3486402f65638b476149ebba752055 (patch)
tree1739d349e75ccbb1cf2b8ef48aff885fe8711288 /netlib/utils.py
parent4873547de3c65ba7c14cace4bca7b17368b2900d (diff)
downloadmitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.tar.gz
mitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.tar.bz2
mitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.zip
add Serializable ABC
Diffstat (limited to 'netlib/utils.py')
-rw-r--r--netlib/utils.py26
1 files changed, 25 insertions, 1 deletions
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)