pytrilogy 0.0.2.33__py3-none-any.whl → 0.0.2.34__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pytrilogy might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytrilogy
3
- Version: 0.0.2.33
3
+ Version: 0.0.2.34
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,4 +1,4 @@
1
- trilogy/__init__.py,sha256=a83gD8nszaMaJ-H2JcfjmxDVs4wHl6s8zGL9z5zyk_Y,291
1
+ trilogy/__init__.py,sha256=KM64JjCIbIm0t7no7TfLDsHkXU-HC5d2by7YePMKmq8,291
2
2
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  trilogy/constants.py,sha256=HQAnGUqJ5uMri7TWtqXHhz8iVWBzi2LCfRG8vKnBIB8,1269
4
4
  trilogy/engine.py,sha256=R5ubIxYyrxRExz07aZCUfrTsoXCHQ8DKFTDsobXdWdA,1102
@@ -16,7 +16,7 @@ trilogy/core/exceptions.py,sha256=NvV_4qLOgKXbpotgRf7c8BANDEvHxlqRPaA53IThQ2o,56
16
16
  trilogy/core/functions.py,sha256=IhVpt3n6wEanKHnGu3oA2w6-hKIlxWpEyz7fHN66mpo,10720
17
17
  trilogy/core/graph_models.py,sha256=mameUTiuCajtihDw_2-W218xyJlvTusOWrEKP1yAWgk,2003
18
18
  trilogy/core/internal.py,sha256=jNGFHKENnbMiMCtAgsnLZYVSENDK4b5ALecXFZpTDzQ,1075
19
- trilogy/core/models.py,sha256=vuy6sGOZ4jI_96wf6bqa7M8CyuD79fKd5lYWkhE0Z98,160393
19
+ trilogy/core/models.py,sha256=xZHi9IYo_vSG35rF4fp7bLrGIu8J5QXqDObpZgN0_cI,160541
20
20
  trilogy/core/optimization.py,sha256=VFSvJLNoCCOraip-PZUKeE4qrlxtXARjQUzJZiW-yRk,7325
21
21
  trilogy/core/query_processor.py,sha256=mbcZlgjChrRjDHkdmMbKe-T70UpbBkJhS09MyU5a6UY,17785
22
22
  trilogy/core/optimizations/__init__.py,sha256=bWQecbeiwiDx9LJnLsa7dkWxdbl2wcnkcTN69JyP8iI,356
@@ -70,14 +70,14 @@ trilogy/parsing/common.py,sha256=_GW9LU6_4RuUgcdcr8EE1ybCRd-7cz3idZtjHZ66pYA,101
70
70
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
71
71
  trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
72
72
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
73
- trilogy/parsing/parse_engine.py,sha256=N6HnbAru28-uOKrLPKoZnWU7sTboFH8BKFx_TmFFJHA,66519
73
+ trilogy/parsing/parse_engine.py,sha256=mMMP0TPLAHx0m4c7scXxosDIgfPYyUYmlgwAFtVeRe0,66699
74
74
  trilogy/parsing/render.py,sha256=VKyo8wEOuiOzUtJ6w9EoGGmkhlqDQyy8wFj_Q_h6EfE,15263
75
75
  trilogy/parsing/trilogy.lark,sha256=Tuqw5oGMwOYt3TYOEx_hZqGpsAp-PiAKiMW8S3EFRcg,12236
76
76
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  trilogy/scripts/trilogy.py,sha256=PHxvv6f2ODv0esyyhWxlARgra8dVhqQhYl0lTrSyVNo,3729
78
- pytrilogy-0.0.2.33.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
- pytrilogy-0.0.2.33.dist-info/METADATA,sha256=IFglmRAOBjSrRj19t9GNj1P_sHVNlZRpc3TqQM0lN_c,8403
80
- pytrilogy-0.0.2.33.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
81
- pytrilogy-0.0.2.33.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
- pytrilogy-0.0.2.33.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
- pytrilogy-0.0.2.33.dist-info/RECORD,,
78
+ pytrilogy-0.0.2.34.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
+ pytrilogy-0.0.2.34.dist-info/METADATA,sha256=jvasI3x4y_xwYh4TToePk_EQIwEr0Kfw2zqESs65bQk,8403
80
+ pytrilogy-0.0.2.34.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
81
+ pytrilogy-0.0.2.34.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
+ pytrilogy-0.0.2.34.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
+ pytrilogy-0.0.2.34.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -4,6 +4,6 @@ from trilogy.executor import Executor
4
4
  from trilogy.parser import parse
5
5
  from trilogy.constants import CONFIG
6
6
 
7
- __version__ = "0.0.2.33"
7
+ __version__ = "0.0.2.34"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
trilogy/core/models.py CHANGED
@@ -3218,7 +3218,7 @@ class EnvironmentConceptDict(dict):
3218
3218
  def __init__(self, *args, **kwargs) -> None:
3219
3219
  super().__init__(self, *args, **kwargs)
3220
3220
  self.undefined: dict[str, UndefinedConcept] = {}
3221
- self.fail_on_missing: bool = False
3221
+ self.fail_on_missing: bool = True
3222
3222
  self.populate_default_concepts()
3223
3223
 
3224
3224
  def populate_default_concepts(self):
@@ -3460,8 +3460,8 @@ class Environment(BaseModel):
3460
3460
 
3461
3461
  if not exists:
3462
3462
  self.imports[alias].append(imp_stm)
3463
- else:
3464
- return self
3463
+ # we can't exit early
3464
+ # as there may be new concepts
3465
3465
  for k, concept in source.concepts.items():
3466
3466
  if same_namespace:
3467
3467
  new = self.add_concept(concept, _ignore_cache=True)
@@ -3525,8 +3525,11 @@ class Environment(BaseModel):
3525
3525
  try:
3526
3526
  with open(target, "r", encoding="utf-8") as f:
3527
3527
  text = f.read()
3528
+ nenv = Environment(
3529
+ working_path=target.parent,
3530
+ )
3531
+ nenv.concepts.fail_on_missing = False
3528
3532
  nparser = ParseToObjects(
3529
- visit_tokens=True,
3530
3533
  environment=Environment(
3531
3534
  working_path=target.parent,
3532
3535
  ),
@@ -3535,6 +3538,7 @@ class Environment(BaseModel):
3535
3538
  )
3536
3539
  nparser.set_text(text)
3537
3540
  nparser.transform(PARSER.parse(text))
3541
+
3538
3542
  except Exception as e:
3539
3543
  raise ImportError(
3540
3544
  f"Unable to import file {target.parent}, parsing error: {e}"
@@ -227,7 +227,6 @@ def unwrap_transformation(
227
227
  class ParseToObjects(Transformer):
228
228
  def __init__(
229
229
  self,
230
- visit_tokens,
231
230
  environment: Environment,
232
231
  parse_address: str | None = None,
233
232
  token_address: Path | None = None,
@@ -235,7 +234,7 @@ class ParseToObjects(Transformer):
235
234
  tokens: dict[Path | str, ParseTree] | None = None,
236
235
  text_lookup: dict[Path | str, str] | None = None,
237
236
  ):
238
- Transformer.__init__(self, visit_tokens)
237
+ Transformer.__init__(self, True)
239
238
  self.environment: Environment = environment
240
239
  self.parse_address: str = parse_address or SELF_LABEL
241
240
  self.token_address: Path | str = token_address or SELF_LABEL
@@ -254,16 +253,20 @@ class ParseToObjects(Transformer):
254
253
  self.tokens[self.token_address] = tree
255
254
  return results
256
255
 
256
+ def prepare_parse(self):
257
+ self.pass_count = 1
258
+ self.environment.concepts.fail_on_missing = False
259
+ for _, v in self.parsed.items():
260
+ v.prepare_parse()
261
+
257
262
  def hydrate_missing(self):
258
263
  self.pass_count = 2
259
264
  for k, v in self.parsed.items():
260
-
261
265
  if v.pass_count == 2:
262
266
  continue
267
+ print(f"Hydrating {k}")
263
268
  v.hydrate_missing()
264
- # self.environment.concepts.fail_on_missing = True
265
- # if not self.environment.concepts.undefined:
266
- # return self._results_stash
269
+ self.environment.concepts.fail_on_missing = True
267
270
  reparsed = self.transform(self.tokens[self.token_address])
268
271
  self.environment.concepts.undefined = {}
269
272
  return reparsed
@@ -850,12 +853,12 @@ class ParseToObjects(Transformer):
850
853
  nparser = self.parsed[cache_lookup]
851
854
  else:
852
855
  try:
856
+ new_env = Environment(
857
+ working_path=dirname(target),
858
+ )
859
+ new_env.concepts.fail_on_missing = False
853
860
  nparser = ParseToObjects(
854
- visit_tokens=True,
855
- environment=Environment(
856
- working_path=dirname(target),
857
- # namespace=alias,
858
- ),
861
+ environment=new_env,
859
862
  parse_address=cache_lookup,
860
863
  token_address=token_lookup,
861
864
  parsed={**self.parsed, **{self.parse_address: self}},
@@ -1954,12 +1957,14 @@ def parse_text(text: str, environment: Optional[Environment] = None) -> Tuple[
1954
1957
  ],
1955
1958
  ]:
1956
1959
  environment = environment or Environment()
1957
- parser = ParseToObjects(visit_tokens=True, environment=environment)
1960
+ parser = ParseToObjects(environment=environment)
1958
1961
 
1959
1962
  try:
1960
1963
  parser.set_text(text)
1964
+ # disable fail on missing to allow for circular dependencies
1965
+ parser.prepare_parse()
1961
1966
  parser.transform(PARSER.parse(text))
1962
- # handle circular dependencies
1967
+ # this will reset fail on missing
1963
1968
  pass_two = parser.hydrate_missing()
1964
1969
  output = [v for v in pass_two if v]
1965
1970
  except VisitError as e: