Skip to content

Commit dcd1c4f

Browse files
committed
Refactored into a 'core' directory
1 parent abd2667 commit dcd1c4f

29 files changed

+94
-82
lines changed

preql/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from . import _base_imports
22

33
from .api import Preql, T
4-
from .exceptions import Signal
4+
from .core.exceptions import Signal
55

66
# import importlib.metadata as importlib_metadata
77
# __version__ = importlib_metadata.version("prql")

preql/__main__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import time
55

66
from . import Preql, __version__, Signal
7-
from .display import display
7+
from .core.display import display
88

99
parser = argparse.ArgumentParser(description='Preql command-line interface')
1010
parser.add_argument('-i', '--interactive', action='store_true', default=False,

preql/_base_imports.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from . import interp_common, pql_types, pql_objects, types_impl
1+
from .core import interp_common, pql_types, pql_objects, types_impl

preql/api.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from contextlib import contextmanager
22

33
from . import settings
4-
from . import pql_ast as ast
5-
from . import pql_objects as objects
6-
from .interpreter import Interpreter
4+
from .core import pql_ast as ast
5+
from .core import pql_objects as objects
6+
from .core.interpreter import Interpreter
7+
from .core.pql_types import T
78
from .sql_interface import create_engine
8-
from .pql_types import T
99

10-
from . import display
10+
from .core import display
1111
display.install_reprs()
1212

1313

preql/autocomplete.py preql/core/autocomplete.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
from preql import settings
21
from lark import Token, UnexpectedCharacters, UnexpectedToken, ParseError
32

3+
from preql.loggers import ac_log
4+
from preql.utils import bfs_all_unique, dy
5+
from preql.context import context
6+
47
from .exceptions import Signal, ReturnSignal, pql_SyntaxError
5-
from .loggers import ac_log
8+
from .compiler import AutocompleteSuggestions
9+
from .evaluate import evaluate, resolve
10+
from .interp_common import State
611
from . import pql_ast as ast
712
from . import pql_objects as objects
8-
from .utils import bfs_all_unique
9-
from .interp_common import State, dy
10-
from .evaluate import evaluate, resolve
11-
from .compiler import AutocompleteSuggestions
1213
from .pql_types import T
1314
from . import sql, parser
14-
from .context import context
1515

1616

1717
@dy

preql/base.py preql/core/base.py

File renamed without changes.

preql/casts.py preql/core/casts.py

File renamed without changes.

preql/compiler.py preql/core/compiler.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import operator
22

3-
from .utils import safezip, listgen, find_duplicate, SafeDict, re_split
4-
from .exceptions import Signal
5-
from . import exceptions as exc
63

7-
from . import settings
4+
from preql import settings
5+
from preql.utils import safezip, listgen, find_duplicate, SafeDict, re_split
6+
7+
from .exceptions import Signal, InsufficientAccessLevel, ReturnSignal, pql_AttributeError
88
from . import pql_objects as objects
99
from . import pql_ast as ast
1010
from . import sql
@@ -27,11 +27,11 @@ def cast_to_instance(state, x):
2727
x = simplify(state, x) # just compile Name?
2828
inst = compile_to_inst(state, x)
2929
# inst = evaluate(state, x)
30-
except exc.ReturnSignal:
30+
except ReturnSignal:
3131
raise Signal.make(T.CompileError, None, f"Bad compilation of {x}")
3232

3333
if isinstance(inst, ast.ParameterizedSqlCode):
34-
raise exc.InsufficientAccessLevel(inst)
34+
raise InsufficientAccessLevel(inst)
3535

3636
if not isinstance(inst, AbsInstance):
3737
# TODO compile error? cast error?
@@ -175,7 +175,7 @@ def compile_to_inst(state: State, proj: ast.Projection):
175175

176176
for name, f in fields:
177177
if not f.type <= T.union[T.primitive, T.struct, T.json, T.nulltype, T.unknown]:
178-
raise exc.Signal.make(T.TypeError, proj, f"Cannot project values of type: {f.type}")
178+
raise Signal.make(T.TypeError, proj, f"Cannot project values of type: {f.type}")
179179

180180
if isinstance(table, objects.StructInstance):
181181
d = {n[1]:c for n, c in fields} # Remove used_defined bool
@@ -414,7 +414,7 @@ def _compare(state, op, a: T.type, b: T.type):
414414
if op == '<=':
415415
return call_builtin_func(state, "issubclass", [a, b])
416416
if op != '=':
417-
raise exc.Signal.make(T.NotImplementedError, op, f"Cannot compare types using: {op}")
417+
raise Signal.make(T.NotImplementedError, op, f"Cannot compare types using: {op}")
418418
return new_value_instance(a == b)
419419

420420
@dp_inst
@@ -536,7 +536,7 @@ def _compile_arith(state, arith, a: T.string, b: T.string):
536536
return objects.Instance.make(code, T.bool, [a, b])
537537

538538
if arith.op != '+':
539-
raise exc.Signal.make(T.TypeError, arith.op, f"Operator '{arith.op}' not supported for strings.")
539+
raise Signal.make(T.TypeError, arith.op, f"Operator '{arith.op}' not supported for strings.")
540540

541541
if settings.optimize and isinstance(a, objects.ValueInstance) and isinstance(b, objects.ValueInstance):
542542
# Local folding for better performance (optional, for better performance)
@@ -691,7 +691,7 @@ def compile_to_inst(state: State, rps: ast.ParameterizedSqlCode):
691691
assert t[0] == '$'
692692
if t == '$self':
693693
if self_table is None:
694-
raise exc.Signal.make(T.TypeError, rps, f"$self is only available for queries that return a table")
694+
raise Signal.make(T.TypeError, rps, f"$self is only available for queries that return a table")
695695
inst = self_table
696696
else:
697697
obj = state.get_var(t[1:])
@@ -783,7 +783,7 @@ def compile_to_inst(state: State, sel: ast.Selection):
783783
else:
784784
for i, c in enumerate(conds):
785785
if not c.type <= T.bool:
786-
raise exc.Signal.make(T.TypeError, sel.conds[i], f"Selection expected boolean, got {c.type}")
786+
raise Signal.make(T.TypeError, sel.conds[i], f"Selection expected boolean, got {c.type}")
787787

788788
code = sql.table_selection(table, [c.code for c in conds])
789789

@@ -794,7 +794,7 @@ def compile_to_inst(state: State, param: ast.Parameter):
794794
if state.access_level == state.AccessLevels.COMPILE:
795795
if param.type <= T.struct:
796796
# TODO why can't I just make an instance?
797-
raise exc.InsufficientAccessLevel("Structs not supported yet")
797+
raise InsufficientAccessLevel("Structs not supported yet")
798798
return make_instance(sql.Parameter(param.type, param.name), param.type, [])
799799

800800
return state.get_var(param.name)
@@ -815,7 +815,7 @@ def compile_to_inst(state: State, attr: ast.Attr):
815815
inst = evaluate(state, attr.expr)
816816
try:
817817
return evaluate(state, inst.get_attr(attr.name))
818-
except exc.pql_AttributeError as e:
818+
except pql_AttributeError as e:
819819
raise Signal.make(T.AttributeError, attr, e.message)
820820

821821

@@ -828,7 +828,7 @@ def _apply_type_generics(state, gen_type, type_names):
828828
if not isinstance(o, Type):
829829
if isinstance(o.code, sql.Parameter):
830830
# XXX hacky test, hacky solution
831-
raise exc.InsufficientAccessLevel()
831+
raise InsufficientAccessLevel()
832832
raise Signal.make(T.TypeError, None, f"Generics expression expected a type, got '{o}'.")
833833

834834
if len(type_objs) > 1:

preql/display.py preql/core/display.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import rich.text
55
import rich.console
66

7+
from preql.context import context
8+
79
from .exceptions import Signal
810
from .pql_types import T, ITEM_NAME
911
from . import pql_objects as objects
1012
from . import pql_ast as ast
1113
from .types_impl import dp_type, pql_repr
1214
from .interp_common import call_builtin_func, cast_to_python_int, cast_to_python
1315

14-
from .context import context
1516

1617
TABLE_PREVIEW_SIZE = 16
1718
LIST_PREVIEW_SIZE = 128

preql/evaluate.py preql/core/evaluate.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,24 @@
22
import logging
33
from pathlib import Path
44

5-
from .utils import safezip, dataclass, SafeDict, listgen
5+
from preql.utils import safezip, dataclass, SafeDict, listgen
6+
from preql import settings
7+
68
from .interp_common import assert_type, exclude_fields, call_builtin_func, is_global_scope, cast_to_python_string, cast_to_python_int
79
from .exceptions import InsufficientAccessLevel, ReturnSignal, Signal
810
from . import exceptions as exc
911
from . import pql_objects as objects
1012
from . import pql_ast as ast
1113
from . import sql
12-
from . import settings
1314
from .parser import Str
14-
1515
from .interp_common import State, dy, new_value_instance, cast_to_python
1616
from .compiler import compile_to_inst, cast_to_instance
1717
from .pql_types import T, Type, Object, Id
1818
from .types_impl import table_params, table_flat_for_insert, flatten_type, pql_repr, kernel_type
1919
from .display import display
2020

21+
MODULES_PATH = Path(__file__).parent.parent / 'modules'
22+
2123

2224
@dy
2325
def resolve(state: State, struct_def: ast.StructDef):
@@ -302,8 +304,9 @@ def _execute(state: State, t: ast.Try):
302304
else:
303305
raise
304306

307+
305308
def import_module(state, r):
306-
paths = [Path(__file__).parent / 'modules', Path.cwd()]
309+
paths = [MODULES_PATH, Path.cwd()]
307310
for path in paths:
308311
module_path = (path / r.module_path).with_suffix(".pql")
309312
if module_path.exists():
@@ -1016,7 +1019,7 @@ def function_localize_keys(self, state, struct):
10161019
objects.Function._localize_keys = function_localize_keys
10171020

10181021

1019-
from .context import context
1022+
from preql.context import context
10201023
def instance_repr(self):
10211024
return pql_repr(self.type, localize(context.state, self))
10221025

preql/exceptions.py preql/core/exceptions.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
from lark.exceptions import GrammarError
44

5-
from .utils import dataclass, TextReference
5+
from preql.utils import dataclass, TextReference
6+
from preql.context import context
7+
68
from .base import Object
79

8-
from .context import context
910

1011
@dataclass
1112
class Signal(Object, Exception):

preql/interp_common.py preql/core/interp_common.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
from contextlib import contextmanager
22
from copy import copy
33
from logging import getLogger
4-
from datetime import datetime
4+
5+
from preql.utils import dy
6+
from preql.sql_interface import ConnectError, create_engine
57

68
from . import pql_ast as ast
79
from . import pql_objects as objects
8-
from .utils import dy
910
from .exceptions import Signal
1011
from .exceptions import InsufficientAccessLevel
1112
from .pql_types import Type, T
12-
from .sql_interface import ConnectError, create_engine
1313

1414
logger = getLogger('interp')
1515

preql/interpreter.py preql/core/interpreter.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
from pathlib import Path
22
from functools import wraps
33

4-
from .utils import classify
4+
from preql.utils import classify
5+
from preql.context import context
6+
57
from .exceptions import Signal, pql_SyntaxError, ReturnSignal
68
from .evaluate import State, execute, eval_func_call, import_module, evaluate, localize, cast_to_python
79
from .parser import parse_stmts
810
from . import pql_ast as ast
911
from . import pql_objects as objects
1012
from .interp_common import new_value_instance, call_builtin_func
11-
from .context import context
13+
from .pql_types import T, Object
1214
from .pql_functions import import_pandas
13-
1415
from .pql_functions import internal_funcs, joins
15-
from .pql_types import T, Object
1616

1717

1818
def initial_namespace():

preql/parser.py preql/core/parser.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from lark import Lark, Transformer, v_args, UnexpectedInput, UnexpectedToken
55

6-
from .utils import TextPos, TextRange, TextReference
6+
from preql.utils import TextPos, TextRange, TextReference
7+
78
from .exceptions import pql_SyntaxError
89
from . import pql_ast as ast
910
from . import pql_objects as objects

preql/pql_ast.py preql/core/pql_ast.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from typing import List, Any, Optional, Dict, Union
22
from dataclasses import field
33

4-
from .utils import dataclass, TextReference, field_list
4+
from preql.utils import dataclass, TextReference, field_list
5+
56
from . import pql_types as types
67
from .pql_types import T, Object
78
from .types_impl import pql_repr

preql/pql_functions.py preql/core/pql_functions.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import rich.progress
99
import runtype
1010

11-
from .utils import safezip, listgen, re_split
11+
from preql.utils import safezip, listgen, re_split
12+
from preql.docstring.autodoc import autodoc, AutoDocError
13+
1214
from .exceptions import Signal, ExitInterp
1315
from . import pql_objects as objects
1416
from . import pql_ast as ast
@@ -18,7 +20,6 @@
1820
from .pql_types import T, Type, Id
1921
from .types_impl import join_names
2022
from .casts import cast
21-
from .docstring.autodoc import autodoc, AutoDocError
2223
from .compiler import cast_to_instance
2324

2425
def new_str(x):

preql/pql_objects.py preql/core/pql_objects.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
from typing import List, Optional, Callable, Any, Dict
66

7-
from .utils import dataclass, SafeDict, X, listgen
7+
from preql.utils import dataclass, SafeDict, X, listgen
8+
from preql import settings
9+
810
from .exceptions import pql_AttributeError, Signal
9-
from . import settings
1011
from . import pql_ast as ast
1112
from . import sql
1213
from . import pql_types

preql/pql_types.py preql/core/pql_types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import runtype
99
from runtype.typesystem import TypeSystem
1010

11+
from preql.utils import dataclass
1112
from .base import Object
12-
from .utils import dataclass
1313

1414
global_methods = {}
1515

File renamed without changes.

preql/sql.py preql/core/sql.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
from datetime import datetime
44
from typing import List, Optional, Dict
55

6-
from .utils import dataclass, X, listgen, field_list, safezip
6+
from preql.utils import dataclass, X, listgen, field_list, safezip
7+
from preql.context import context
8+
79
from . import pql_types
810
from .pql_types import T, Type, dp_type, dp_inst, Id
911
from .types_impl import join_names, flatten_type
1012
from .exceptions import Signal
11-
from .context import context
1213

1314
duck = 'duck'
1415
sqlite = 'sqlite'

preql/types_impl.py preql/core/types_impl.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from .exceptions import Signal, pql_AttributeError
22

3+
from preql.utils import concat_for, classify_bool
4+
35
from .base import Object
4-
from .utils import concat_for, classify_bool
56
from .pql_types import ITEM_NAME, T, Type, dp_type
67

78

preql/docstring/autodoc.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from preql.utils import safezip, dy
66

77
from preql.docstring.docstring import parse, Section, Defin, Text
8-
from preql.pql_objects import Module, Function, T
9-
from preql.pql_types import Type, subtypes
8+
9+
from preql.core.pql_objects import Module, Function, T
10+
from preql.core.pql_types import Type, subtypes
1011

1112
from . import type_docs
1213

preql/docstring/type_docs.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from preql.pql_types import T
1+
from preql.core.pql_types import T
22

33
DOCS = {
44
T.any: """A meta-type that can match any type.

0 commit comments

Comments
 (0)