diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-02-08 04:16:58 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-02-08 04:16:58 +0100 |
commit | fe0ed63c4a3486402f65638b476149ebba752055 (patch) | |
tree | 1739d349e75ccbb1cf2b8ef48aff885fe8711288 /netlib/utils.py | |
parent | 4873547de3c65ba7c14cace4bca7b17368b2900d (diff) | |
download | mitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.tar.gz mitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.tar.bz2 mitmproxy-fe0ed63c4a3486402f65638b476149ebba752055.zip |
add Serializable ABC
Diffstat (limited to 'netlib/utils.py')
-rw-r--r-- | netlib/utils.py | 26 |
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) |