mapres 3.dev18__tar.gz → 3.dev19__tar.gz

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.
Files changed (23) hide show
  1. {mapres-3.dev18/src/mapres.egg-info → mapres-3.dev19}/PKG-INFO +1 -1
  2. {mapres-3.dev18 → mapres-3.dev19}/pyproject.toml +1 -1
  3. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/datamap.py +2 -1
  4. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/evaluator.py +15 -4
  5. {mapres-3.dev18 → mapres-3.dev19/src/mapres.egg-info}/PKG-INFO +1 -1
  6. {mapres-3.dev18 → mapres-3.dev19}/LICENSE +0 -0
  7. {mapres-3.dev18 → mapres-3.dev19}/README.md +0 -0
  8. {mapres-3.dev18 → mapres-3.dev19}/setup.cfg +0 -0
  9. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/__init__.py +0 -0
  10. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/ast.py +0 -0
  11. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/cache.py +0 -0
  12. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/exceptions.py +0 -0
  13. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/layers.py +0 -0
  14. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/maps/__init__.py +0 -0
  15. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/maps/color.py +0 -0
  16. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/maps/time.py +0 -0
  17. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/parser.py +0 -0
  18. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/resolver.py +0 -0
  19. {mapres-3.dev18 → mapres-3.dev19}/src/mapres/tokenizer.py +0 -0
  20. {mapres-3.dev18 → mapres-3.dev19}/src/mapres.egg-info/SOURCES.txt +0 -0
  21. {mapres-3.dev18 → mapres-3.dev19}/src/mapres.egg-info/dependency_links.txt +0 -0
  22. {mapres-3.dev18 → mapres-3.dev19}/src/mapres.egg-info/requires.txt +0 -0
  23. {mapres-3.dev18 → mapres-3.dev19}/src/mapres.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapres
3
- Version: 3.dev18
3
+ Version: 3.dev19
4
4
  Summary: A powerfull mapping utility
5
5
  Author: iFamished
6
6
  License: MIT
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "mapres"
10
- version = "3-dev.18"
10
+ version = "3-dev.19"
11
11
  description = "A powerfull mapping utility"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.9"
@@ -101,7 +101,8 @@ def datamap(_cls=None, *, syntax=None, mode=None, recursive=None,
101
101
  def wrap(cls):
102
102
  cls.__syntax__ = syntax
103
103
  cls.__mode__ = mode
104
- cls.__recursive__ = recursive
104
+ cls.__recursive__ = recursive if recursive is not None else False
105
+ # cls.__recursive__ = recursive
105
106
  cls.__missing_key__ = missing_key or 'error'
106
107
  cls.__ignore_delimiters__ = ignore_delimiters or False
107
108
 
@@ -14,45 +14,54 @@ class Evaluator:
14
14
  self.ctx = ctx or {}
15
15
  self._seen = set() # cycle detection
16
16
 
17
+ # public api
17
18
  def evaluate(self, node):
18
19
  return self._eval(node)
19
20
 
21
+ # internal dispatch
20
22
  def _eval(self, node):
21
23
  if isinstance(node, TemplateNode):
22
24
  return self._eval_template(node)
25
+
23
26
  if isinstance(node, TextNode):
24
27
  return node.text
28
+
25
29
  if isinstance(node, IdentNode):
26
30
  return self._eval_ident(node)
31
+
27
32
  if isinstance(node, CallNode):
28
33
  return self._eval_call(node)
34
+
29
35
  raise EvaluationError(f'Unknown AST node: {node}')
30
36
 
37
+ # template
31
38
  def _eval_template(self, node: TemplateNode):
32
39
  parts = []
33
40
  for child in node.children:
34
41
  parts.append(self._eval(child))
35
42
  out = ''.join(parts)
36
43
 
37
- # recursion disabled for now
44
+ # recursion disabled for now (Mapres 2–style behavior)
38
45
  return out
39
46
 
47
+ # identifier
40
48
  def _eval_ident(self, node: IdentNode):
41
49
  name = node.name
42
50
 
51
+ # cycle detection
43
52
  if name in self._seen:
44
53
  raise EvaluationError(f"Cycle detected in identifier '{name}'")
45
54
  self._seen.add(name)
46
55
 
47
56
  parts = name.split('.')
48
57
 
49
- # ctx first
58
+ # 1. ctx first
50
59
  val = self._lookup_hierarchical(self.ctx, parts)
51
60
  if val is not None:
52
61
  self._seen.remove(name)
53
62
  return str(val)
54
63
 
55
- # syntax-bound maps
64
+ # 2. syntax-bound maps
56
65
  for m in self.layerstack.all_maps():
57
66
  if getattr(m, '__syntax__', None) not in (None, node.syntax):
58
67
  continue
@@ -66,6 +75,7 @@ class Evaluator:
66
75
  self._seen.remove(name)
67
76
  raise MissingKeyError(name)
68
77
 
78
+ # call (nested token)
69
79
  def _eval_call(self, node: CallNode):
70
80
  outer = node.name
71
81
 
@@ -96,6 +106,7 @@ class Evaluator:
96
106
  self._seen.remove(outer)
97
107
  raise MissingKeyError(f'{outer}({arg_value})')
98
108
 
109
+ # helpers
99
110
  def _map_to_dict(self, m):
100
111
  if hasattr(m, 'as_map'):
101
112
  return m.as_map()
@@ -113,7 +124,7 @@ class Evaluator:
113
124
  cur = cur[p]
114
125
  return cur
115
126
 
116
- # recursion helpers now unused
127
+ # recursion helpers now effectively disabled
117
128
  def _has_recursive_maps(self):
118
129
  return False
119
130
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapres
3
- Version: 3.dev18
3
+ Version: 3.dev19
4
4
  Summary: A powerfull mapping utility
5
5
  Author: iFamished
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes