aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Bocklage-Ryannel <jbocklage-ryannel@luxoft.com>2018-11-01 16:19:31 -0400
committerJuergen Bocklage-Ryannel <jbocklage-ryannel@luxoft.com>2018-11-01 17:37:53 -0400
commitbcf4bf537b6c651429cca73fb775fdbfd7344cd5 (patch)
treeee286c25e4ccf677712bf2267165ea8d8da531c2
parent29aea8282fb874b57fac80c275c4601d9a1be70f (diff)
add parse stream operation
-rw-r--r--qface/generator.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/qface/generator.py b/qface/generator.py
index e65ad15..14509ae 100644
--- a/qface/generator.py
+++ b/qface/generator.py
@@ -5,14 +5,15 @@ from jinja2 import Environment, Template, Undefined, StrictUndefined
from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader
from jinja2 import TemplateSyntaxError, TemplateNotFound, TemplateError
from path import Path
-from antlr4 import FileStream, CommonTokenStream, ParseTreeWalker
+from antlr4 import InputStream, FileStream, CommonTokenStream, ParseTreeWalker
from antlr4.error import DiagnosticErrorListener, ErrorListener
import shelve
import logging
import hashlib
import yaml
import click
-import sys, os
+import sys
+import os
from .idl.parser.TLexer import TLexer
from .idl.parser.TParser import TParser
@@ -20,7 +21,6 @@ from .idl.parser.TListener import TListener
from .idl.profile import EProfile
from .idl.domain import System
from .idl.listener import DomainListener
-from .utils import merge
from .filters import filters
from jinja2.debug import make_traceback as _make_traceback
@@ -33,6 +33,16 @@ except ImportError:
logger = logging.getLogger(__name__)
+def merge(a, b):
+ "merges b into a recursively if a and b are dicts"
+ for key in b:
+ if isinstance(a.get(key), dict) and isinstance(b.get(key), dict):
+ merge(a[key], b[key])
+ else:
+ a[key] = b[key]
+ return a
+
+
def template_error_handler(traceback):
exc_type, exc_obj, exc_tb = traceback.exc_info
error = exc_obj
@@ -273,6 +283,11 @@ class FileSystem(object):
sys.exit(-1)
@staticmethod
+ def parse_text(text: str, system: System = None, profile=EProfile.FULL):
+ stream = InputStream(text)
+ return FileSystem._parse_stream(stream, system, "<TEXT>", profile)
+
+ @staticmethod
def _parse_document(document: Path, system: System = None, profile=EProfile.FULL):
"""Parses a document and returns the resulting domain system
@@ -286,7 +301,7 @@ class FileSystem(object):
return system
@staticmethod
- def _parse_stream(stream, system: System = None, document=None, profile=EProfile.FULL):
+ def _parse_stream(stream: InputStream, system: System = None, document=None, profile=EProfile.FULL):
logger.debug('parse stream')
system = system or System()