Skip to content
This repository was archived by the owner on Mar 8, 2020. It is now read-only.

Commit d1b0798

Browse files
committed
Merges python contexts and adds ResultContext encode
Signed-off-by: ncordon <[email protected]>
1 parent 05f7ac2 commit d1b0798

File tree

4 files changed

+41
-29
lines changed

4 files changed

+41
-29
lines changed

bblfsh/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
from bblfsh.tree_order import TreeOrder
44
from bblfsh.aliases import *
55
from bblfsh.roles import role_id, role_name
6-
from bblfsh.context import context
6+
from bblfsh.result_context import context

bblfsh/context.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

bblfsh/result_context.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ def iterate(self, order: int) -> NodeIterator:
4040
TreeOrder.check_order(order)
4141
return NodeIterator(iterator(self.ctx.root(), order), self.ctx)
4242

43+
# Encode in binary format by default
44+
def encode(self, node: dict = None, fmt: int = 0):
45+
encoded = self.ctx.encode(node, fmt)
46+
return encoded
47+
4348
@property
4449
def language(self) -> str:
4550
return self._response.language
@@ -65,3 +70,25 @@ def __str__(self) -> str:
6570

6671
def __repr__(self) -> str:
6772
return repr(self.get_all())
73+
74+
75+
# Python context
76+
class Context:
77+
def __init__(self, root: dict) -> None:
78+
self.ctx = uast()
79+
self.root = root
80+
81+
def filter(self, query: str) -> dict:
82+
return self.ctx.filter(query, self.root)
83+
84+
def iterate(self, order: int) -> iterator:
85+
TreeOrder.check_order(order)
86+
return iterator(self.root, order)
87+
88+
def encode(self, fmt: int = 0):
89+
encoded = self.ctx.encode(self.root, fmt)
90+
return encoded
91+
92+
93+
def context(root: dict) -> Context:
94+
return Context(root)

bblfsh/test.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -407,15 +407,22 @@ def testSupportedLanguages(self) -> None:
407407

408408
def testEncode(self) -> None:
409409
ctx = self._parse_fixture()
410+
# This test is here for backward compatibility purposes,
411+
# in case someone was relying on encoding contexts this way
410412
self.assertEqual(ctx.ctx.encode(None, 0), ctx._response.uast)
413+
self.assertEqual(ctx.encode(), ctx._response.uast)
411414

412415
def testEncodeWithEmptyContext(self) -> None:
413416
ctx = ResultContext()
414417
obj = {"k1": "v1", "k2": "v2"}
415418
fmt = 1 # YAML
416419

420+
# This test is here for backward compatibility purposes,
421+
# in case someone was relying on encoding contexts this way
417422
data = ctx.ctx.encode(obj, fmt)
418-
self.assertDictEqual(obj, decode(data, format=fmt).load())
423+
other_data = ctx.encode(obj, fmt)
424+
self.assertDictEqual(obj, decode(data, format = fmt).load())
425+
self.assertDictEqual(obj, decode(other_data, format = fmt).load())
419426

420427
def testGetAll(self) -> None:
421428
ctx = self._parse_fixture()
@@ -560,16 +567,17 @@ def testPythonContextFilter(self) -> None:
560567
for nodeC, nodePy in zip(itC, itPy):
561568
self.assertEqual(nodeC.get(), nodePy)
562569

563-
def testEncodeDecodePythonContext(self) -> None:
570+
def testBinaryEncodeDecodePythonContext(self) -> None:
571+
# Binary encoding should be invertible
564572
# C++ memory context
565573
ctxC = self._parse_fixture()
566574
# Python memory context
567575
pyDict = ctxC.root.get()
568576
ctxPy = bblfsh.context(pyDict)
569-
encoded = ctxPy.encode(fmt = 1) # YAML
570-
decoded = decode(encoded, format = 1)
577+
encoded = ctxPy.encode(fmt = 0) # Binary encoding
578+
decoded = decode(encoded, format = 0)
571579

572-
self.assertEqual(encoded, decoded.load())
580+
self.assertEqual(pyDict, decoded.load())
573581

574582
if __name__ == "__main__":
575583
unittest.main()

0 commit comments

Comments
 (0)