summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2018-03-29 22:57:17 +0200
committerYuval Adam <_@yuv.al>2018-04-02 11:16:27 +0300
commit477d1eb12fab852189aaebf98c9b2fea628bc1d8 (patch)
tree07307da95d74635d818b9949dbe16254a9094fe2
parenteae7407fd882b2667f057f116db6db6e75eab986 (diff)
Final static parsing fix
-rw-r--r--viewstate/parse.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/viewstate/parse.py b/viewstate/parse.py
index a693c68..1cd2ccb 100644
--- a/viewstate/parse.py
+++ b/viewstate/parse.py
@@ -4,7 +4,10 @@ from .exceptions import ViewStateException
class ParserMeta(type):
-
+ '''
+ Parser metaclass is used to register each of the parser subclasses `marker` field
+ This field is used to dynamically select the right class for parsing a given byte array
+ '''
def __init__(cls, name, bases, namespace):
super(ParserMeta, cls).__init__(name, bases, namespace)
if not hasattr(cls, 'registry'):
@@ -23,15 +26,16 @@ class Parser(metaclass=ParserMeta):
def parse(b):
marker, remain = b[0], b[1:]
try:
- return Parser.registry[marker]().parse(remain)
+ return Parser.registry[marker].parse(remain)
except KeyError:
raise ViewStateException(f'Unknown marker {marker}')
class Const(Parser):
- def parse(self, remain):
- return self.const, remain
+ @classmethod
+ def parse(cls, remain):
+ return cls.const, remain
class NoneConst(Const):