diff options
| author | Yuval Adam <_@yuv.al> | 2018-02-19 18:04:22 +0100 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2018-02-19 18:04:22 +0100 |
| commit | 1f9757df41340e142446b1762cb6149f6d4f7223 (patch) | |
| tree | a76162e516a02f11fb1ce19da47c291b63604ac7 | |
| parent | 238bf5ef01ccc8428be733d188b055ff92046653 (diff) | |
More restructuring
| -rw-r--r-- | tests/test_core.py | 9 | ||||
| -rw-r--r-- | viewstate/__init__.py | 48 | ||||
| -rw-r--r-- | viewstate/__main__.py | 12 | ||||
| -rw-r--r-- | viewstate/core.py | 48 | ||||
| -rw-r--r-- | viewstate/exceptions.py | 4 |
5 files changed, 70 insertions, 51 deletions
diff --git a/tests/test_core.py b/tests/test_core.py index 3eed24c..6d4a8d5 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1,6 +1,6 @@ import pytest -from viewstate import ViewState +from viewstate import * class TestViewState(object): @@ -9,14 +9,13 @@ class TestViewState(object): vs = ViewState() assert not vs.is_valid() - @pytest.mark.skip(reason='Missing test data') def test_is_valid(self): - with open('samples/ngcs.sample', 'r') as f: + with open('tests/samples/ngcs.sample', 'r') as f: vs = ViewState(f.read()) - self.assertTrue(vs.is_valid()) + assert vs.is_valid() is True def test_invalid_decode(self): - with pytest.raises(Exception): + with pytest.raises(ViewStateException): vs = ViewState() vs.raw = b'\x01\x02' vs.decode() diff --git a/viewstate/__init__.py b/viewstate/__init__.py index b75cd37..c166e0c 100644 --- a/viewstate/__init__.py +++ b/viewstate/__init__.py @@ -1,47 +1,3 @@ -from base64 import b64decode, b64encode +from .core import ViewState +from .exceptions import ViewStateException - -CONSTS = { - 100: {}, - 101: '', - 102: 0, - 103: True, - 104: False -} - -def parse_const(b): - return CONSTS.get(b, None) - -def parse(b): - assert type(b) == bytes().__class__ - if len(b) == 1: - return parse_const(b[0]) - return None - - -class ViewState(object): - - def __init__(self, base64=''): - self.base64 = base64 - self.raw = b64decode(self.base64) - self.decoded = None - - @property - def preamble(self): - return self.raw[:2] - - @property - def body(self): - return self.raw[2:] - - def is_valid(self): - format_marker = b'\xff' - version_marker = b'\x01' - preamble = format_marker + version_marker - return self.preamble == preamble - - def decode(self): - if not self.is_valid(): - raise Exception('Cannot decode invalid viewstate, bad preamble') - self.decoded = parse(self.body) - return self.decoded diff --git a/viewstate/__main__.py b/viewstate/__main__.py new file mode 100644 index 0000000..aa2e25d --- /dev/null +++ b/viewstate/__main__.py @@ -0,0 +1,12 @@ +import sys + +from .core import ViewState + +def main(): + s = sys.stdin.read() + vs = ViewState(s) + print('Got: ' + s) + print(vs.decode()) + +if __name__ == '__main__': + main() diff --git a/viewstate/core.py b/viewstate/core.py new file mode 100644 index 0000000..347ee59 --- /dev/null +++ b/viewstate/core.py @@ -0,0 +1,48 @@ +from base64 import b64decode, b64encode + +from .exceptions import ViewStateException + +CONSTS = { + 100: {}, + 101: '', + 102: 0, + 103: True, + 104: False +} + +def parse_const(b): + return CONSTS.get(b, None) + +def parse(b): + assert type(b) == bytes().__class__ + if len(b) == 1: + return parse_const(b[0]) + return None + + +class ViewState(object): + + def __init__(self, base64=''): + self.base64 = base64 + self.raw = b64decode(self.base64) + self.decoded = None + + @property + def preamble(self): + return self.raw[:2] + + @property + def body(self): + return self.raw[2:] + + def is_valid(self): + format_marker = b'\xff' + version_marker = b'\x01' + preamble = format_marker + version_marker + return self.preamble == preamble + + def decode(self): + if not self.is_valid(): + raise ViewStateException('Cannot decode invalid viewstate, bad preamble') + self.decoded = parse(self.body) + return self.decoded diff --git a/viewstate/exceptions.py b/viewstate/exceptions.py new file mode 100644 index 0000000..d9f6eda --- /dev/null +++ b/viewstate/exceptions.py @@ -0,0 +1,4 @@ + + +class ViewStateException(Exception): + pass |
