File: __init__.py

package info (click to toggle)
python-enaml 0.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,284 kB
  • sloc: python: 31,443; cpp: 4,499; makefile: 140; javascript: 68; lisp: 53; sh: 20
file content (69 lines) | stat: -rw-r--r-- 1,874 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# ------------------------------------------------------------------------------
# Copyright (c) 2013-2025, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ------------------------------------------------------------------------------
import io
import os
import tokenize
from typing import Callable, Iterator, Optional, TextIO, Union

from pegen.tokenizer import Tokenizer

from ..enaml_ast import Module
from .enaml_parser import EnamlParser


def _parse(
    stream: TextIO,
    path: str = "Enaml",
    py_version: Optional[tuple] = None,
    token_stream_factory: Optional[
        Callable[[Callable[[], str]], Iterator[tokenize.TokenInfo]]
    ] = None,
    verbose: bool = False,
) -> Module:
    tok_stream = (
        token_stream_factory(stream.readline)
        if token_stream_factory
        else tokenize.generate_tokens(stream.readline)
    )
    tokenizer = Tokenizer(
        tok_stream, verbose=verbose, path=path if os.path.isfile(path) else None
    )
    parser = EnamlParser(
        tokenizer,
        verbose=verbose,
        filename=path,
        py_version=py_version,
    )
    return parser.parse("start")


# XXX document
# filename is named so for backward compatibility
def parse(
    source: str,
    filename: str = "Enaml",
    py_version: Optional[tuple] = None,
    token_stream_factory: Optional[
        Callable[[Callable[[], str]], Iterator[tokenize.TokenInfo]]
    ] = None,
    verbose: bool = False,
) -> Module:
    """Parse enaml source text.

    This function is meant for in memory sources and one should prefer parse_file
    for sources existing in a file.

    Parameters
    ----------


    """
    return _parse(
        io.StringIO(source), filename, py_version, token_stream_factory, verbose
    )