mapres 2.3__tar.gz → 2.4.dev1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapres
3
- Version: 2.3
3
+ Version: 2.4.dev1
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 = "2.3"
10
+ version = "2.4-dev.1"
11
11
  description = "A powerfull mapping utility"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.9"
@@ -2,10 +2,10 @@ import re
2
2
  from dataclasses import dataclass, fields, is_dataclass
3
3
 
4
4
  class syntax:
5
- braces = r"\{([^{}]+)\}"
6
- dollars = r"\$\{([^{}]+)\}"
7
- angles = r"<([^<>]+)>"
8
- percents = r"%([^%]+)%"
5
+ braces = r'\{([^{}]+)\}'
6
+ dollars = r'\$\{([^{}]+)\}'
7
+ angles = r'<([^<>]+)>'
8
+ percents = r'%([^%]+)%'
9
9
 
10
10
 
11
11
  @dataclass
@@ -17,11 +17,11 @@ class DataMap:
17
17
  def as_map(self):
18
18
  result = {}
19
19
  for f in fields(self):
20
- if not f.init or f.name in ("__syntax__", "__mode__"):
20
+ if not f.init or f.name in ('__syntax__', '__mode__'):
21
21
  continue
22
22
  val = getattr(self, f.name)
23
- if self.__mode__ == "dynamic":
24
- providers = getattr(self, "providers", None)
23
+ if self.__mode__ == 'dynamic':
24
+ providers = getattr(self, 'providers', None)
25
25
  if isinstance(providers, dict) and f.name in providers:
26
26
  val = providers[f.name]
27
27
  if callable(val):
@@ -31,7 +31,7 @@ class DataMap:
31
31
 
32
32
  @classmethod
33
33
  def get_syntax(cls):
34
- return getattr(cls, "__syntax__", syntax.braces)
34
+ return getattr(cls, '__syntax__', syntax.braces)
35
35
 
36
36
 
37
37
  # decorator
@@ -46,13 +46,13 @@ def datamap(
46
46
  cls.__syntax__ = syntax
47
47
  cls.__mode__ = mode
48
48
  namespace = dict(cls.__dict__)
49
- namespace["__dict__"] = {}
49
+ namespace['__dict__'] = {}
50
50
  # preserve any rules class defined in the original namespace by attaching it to the generated class
51
- rules_obj = namespace.get("rules", None)
51
+ rules_obj = namespace.get('rules', None)
52
52
  cls = type(cls.__name__, (DataMap,), namespace)
53
53
  # attach rules (if present) to the new class so validators can read them via the datamap class
54
54
  if rules_obj is not None:
55
- setattr(cls, "rules", rules_obj)
55
+ setattr(cls, 'rules', rules_obj)
56
56
  return dataclass(frozen=False)(cls)
57
57
  return wrap if _cls is None else wrap(_cls)
58
58
 
@@ -0,0 +1,75 @@
1
+ from mapres.datamap import datamap, syntax
2
+
3
+ @datamap(syntax=syntax.angles) # produces <>
4
+ class ColorMap:
5
+ black: str = '\033[30m'
6
+ dark_blue: str = '\033[34m'
7
+ dark_green: str = '\033[32m'
8
+ dark_aqua: str = '\033[36m'
9
+ dark_red: str = '\033[31m'
10
+ dark_purple: str = '\033[35m'
11
+ gold: str = '\033[33m'
12
+ gray: str = '\033[37m'
13
+ dark_gray: str = '\033[90m'
14
+ blue: str = '\033[94m'
15
+ green: str = '\033[92m'
16
+ aqua: str = '\033[96m'
17
+ red: str = '\033[91m'
18
+ light_purple: str = '\033[95m'
19
+ yellow: str = '\033[93m'
20
+ white: str = '\033[97m'
21
+ reset: str = '\033[0m'
22
+ bold: str = '\033[1m'
23
+ italic: str = '\033[3m'
24
+
25
+ def as_dict(self):
26
+ return {f'<{k}>': getattr(self, k) for k in self.__dataclass_fields__}
27
+
28
+ # ASCII color map
29
+ ascii_colors = ColorMap()
30
+
31
+ # Minecraft color map
32
+ mc_colors = ColorMap(
33
+ black='§0',
34
+ dark_blue='§1',
35
+ dark_green='§2',
36
+ dark_aqua='§3',
37
+ dark_red='§4',
38
+ dark_purple='§5',
39
+ gold='§6',
40
+ gray='§7',
41
+ dark_gray='§8',
42
+ blue='§9',
43
+ green='§a',
44
+ aqua='§b',
45
+ red='§c',
46
+ light_purple='§d',
47
+ yellow='§e',
48
+ white='§f',
49
+ reset='§r',
50
+ bold='§l',
51
+ italic='§o'
52
+ )
53
+
54
+ # Color strip map
55
+ strip_colors = ColorMap(
56
+ black='',
57
+ dark_blue='',
58
+ dark_green='',
59
+ dark_aqua='',
60
+ dark_red='',
61
+ dark_purple='',
62
+ gold='',
63
+ gray='',
64
+ dark_gray='',
65
+ blue='',
66
+ green='',
67
+ aqua='',
68
+ red='',
69
+ light_purple='',
70
+ yellow='',
71
+ white='',
72
+ reset='',
73
+ bold='',
74
+ italic=''
75
+ )
@@ -6,7 +6,7 @@ from mapres.datamap import datamap, syntax
6
6
  @datamap(syntax=syntax.percents, mode='dynamic')
7
7
  class TimeMap:
8
8
  # default timezone
9
- _default_tz = ZoneInfo('UTC')
9
+ _default_tz = ZoneInfo('America/Chicago')
10
10
 
11
11
  # dynamic fields
12
12
  hh: str = None
@@ -6,7 +6,7 @@ from .exceptions import MapResError, MissingKeyError, MapSyntaxError
6
6
 
7
7
 
8
8
  class MapResolver:
9
- """
9
+ '''
10
10
  Core resolution engine for mapres.
11
11
 
12
12
  Handles:
@@ -16,7 +16,7 @@ class MapResolver:
16
16
  - context substitution
17
17
  - recursive multi-pass resolution
18
18
  - optional caching
19
- """
19
+ '''
20
20
  def __init__(
21
21
  self,
22
22
  layers: list | None = None,
@@ -40,7 +40,7 @@ class MapResolver:
40
40
  text = stage(text, ctx, self)
41
41
  return text
42
42
  except Exception as exc:
43
- raise MapResError(f"Pipeline stage failed: {exc}") from exc
43
+ raise MapResError(f'Pipeline stage failed: {exc}') from exc
44
44
 
45
45
  # syntax providers
46
46
  def _apply_syntax(self, text: str, ctx: dict) -> str:
@@ -50,13 +50,13 @@ class MapResolver:
50
50
  def repl(match: re.Match) -> str:
51
51
  k = match.group(1)
52
52
  if k not in d:
53
- raise MissingKeyError(f"Missing key '{k}' in syntax provider {provider}")
53
+ raise MissingKeyError(f'Missing key "{k}" in syntax provider {provider}')
54
54
  return str(d[k])
55
55
  try:
56
56
  text = re.sub(pattern, repl, text)
57
57
  except re.error as exc:
58
58
  raise MapSyntaxError(
59
- f"Regex error in syntax provider {provider}: {exc}"
59
+ f'Regex error in syntax provider {provider}: {exc}'
60
60
  ) from exc
61
61
  return text
62
62
 
@@ -64,12 +64,12 @@ class MapResolver:
64
64
  def _apply_maps(self, text: str, ctx: dict, layerstack: LayerStack):
65
65
  syntax_patterns = []
66
66
  for m in layerstack:
67
- if isinstance(m, type) and hasattr(m, "as_map"):
67
+ if isinstance(m, type) and hasattr(m, 'as_map'):
68
68
  m = m()
69
- if hasattr(m, "as_map"):
69
+ if hasattr(m, 'as_map'):
70
70
  syntax_patterns.append(m.get_syntax())
71
71
  elif isinstance(m, dict):
72
- pattern = ctx.get("syntax")
72
+ pattern = ctx.get('syntax')
73
73
  if pattern:
74
74
  syntax_patterns.append(pattern)
75
75
  syntax_patterns = list(dict.fromkeys(syntax_patterns))
@@ -78,9 +78,9 @@ class MapResolver:
78
78
  k = match.group(1)
79
79
  for m in layerstack:
80
80
  layer = m
81
- if isinstance(layer, type) and hasattr(layer, "as_map"):
81
+ if isinstance(layer, type) and hasattr(layer, 'as_map'):
82
82
  layer = layer()
83
- if hasattr(layer, "as_map"):
83
+ if hasattr(layer, 'as_map'):
84
84
  d = layer.as_map()
85
85
  elif isinstance(layer, dict):
86
86
  d = layer
@@ -92,12 +92,12 @@ class MapResolver:
92
92
  if k in ctx:
93
93
  return str(ctx[k])
94
94
 
95
- raise MissingKeyError(f"Missing key '{k}' in any layer or context")
95
+ raise MissingKeyError(f'Missing key "{k}" in any layer or context')
96
96
 
97
97
  try:
98
98
  text = re.sub(pattern, repl, text)
99
99
  except re.error as exc:
100
- raise MapSyntaxError(f"Regex error in syntax pattern {pattern}: {exc}") from exc
100
+ raise MapSyntaxError(f'Regex error in syntax pattern {pattern}: {exc}') from exc
101
101
  return text
102
102
 
103
103
  # context
@@ -109,12 +109,12 @@ class MapResolver:
109
109
  def repl(match: re.Match) -> str:
110
110
  k = match.group(1)
111
111
  if k not in d:
112
- raise MissingKeyError(f"Missing ctx key '{k}'")
112
+ raise MissingKeyError(f'Missing ctx key "{k}"')
113
113
  return str(d[k])
114
114
  try:
115
115
  return re.sub(pattern, repl, text)
116
116
  except re.error as exc:
117
- raise MapSyntaxError(f"Regex error in ctx syntax: {exc}") from exc
117
+ raise MapSyntaxError(f'Regex error in ctx syntax: {exc}') from exc
118
118
 
119
119
  # one pass
120
120
  def _resolve_once(self, text: str, ctx: dict, layerstack: LayerStack) -> str:
@@ -143,17 +143,17 @@ class MapResolver:
143
143
  override_maps: dict | None = None,
144
144
  **ctx
145
145
  ) -> str:
146
- """
146
+ '''
147
147
  Resolve a string using maps, syntax providers, pipeline, and context.
148
- """
148
+ '''
149
149
  try:
150
150
  if override_maps is not None:
151
- temp = LayerStack([Layer("override", override_maps, priority=0)])
151
+ temp = LayerStack([Layer('override', override_maps, priority=0)])
152
152
  return self._recursive(text, ctx, temp)
153
153
 
154
154
  if extra_maps:
155
155
  temp = self.layers.clone()
156
- temp.add_layer(Layer("extra", extra_maps, priority=999))
156
+ temp.add_layer(Layer('extra', extra_maps, priority=999))
157
157
  return self._recursive(text, ctx, temp)
158
158
 
159
159
  if self.cache_enabled:
@@ -172,14 +172,14 @@ class MapResolver:
172
172
  except MapResError:
173
173
  raise
174
174
  except Exception as exc:
175
- raise MapResError(f"Unhandled resolver error: {exc}") from exc
175
+ raise MapResError(f'Unhandled resolver error: {exc}') from exc
176
176
 
177
177
 
178
178
  # global resolver
179
179
  _DEFAULT = MapResolver()
180
180
 
181
181
  def res(text: str, **ctx) -> str:
182
- """
182
+ '''
183
183
  Resolve using the global default resolver.
184
- """
184
+ '''
185
185
  return _DEFAULT.res(text, **ctx)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapres
3
- Version: 2.3
3
+ Version: 2.4.dev1
4
4
  Summary: A powerfull mapping utility
5
5
  Author: iFamished
6
6
  License: MIT
@@ -1,75 +0,0 @@
1
- from mapres.datamap import datamap, syntax
2
-
3
- @datamap(syntax=syntax.angles) # produces <>
4
- class ColorMap:
5
- black: str = "\033[30m"
6
- dark_blue: str = "\033[34m"
7
- dark_green: str = "\033[32m"
8
- dark_aqua: str = "\033[36m"
9
- dark_red: str = "\033[31m"
10
- dark_purple: str = "\033[35m"
11
- gold: str = "\033[33m"
12
- gray: str = "\033[37m"
13
- dark_gray: str = "\033[90m"
14
- blue: str = "\033[94m"
15
- green: str = "\033[92m"
16
- aqua: str = "\033[96m"
17
- red: str = "\033[91m"
18
- light_purple: str = "\033[95m"
19
- yellow: str = "\033[93m"
20
- white: str = "\033[97m"
21
- reset: str = "\033[0m"
22
- bold: str = "\033[1m"
23
- italic: str = "\033[3m"
24
-
25
- def as_dict(self):
26
- return {f"<{k}>": getattr(self, k) for k in self.__dataclass_fields__}
27
-
28
- # ASCII color map
29
- ascii_colors = ColorMap()
30
-
31
- # Minecraft color map
32
- mc_colors = ColorMap(
33
- black="§0",
34
- dark_blue="§1",
35
- dark_green="§2",
36
- dark_aqua="§3",
37
- dark_red="§4",
38
- dark_purple="§5",
39
- gold="§6",
40
- gray="§7",
41
- dark_gray="§8",
42
- blue="§9",
43
- green="§a",
44
- aqua="§b",
45
- red="§c",
46
- light_purple="§d",
47
- yellow="§e",
48
- white="§f",
49
- reset="§r",
50
- bold="§l",
51
- italic="§o"
52
- )
53
-
54
- # Color strip map
55
- strip_colors = ColorMap(
56
- black="",
57
- dark_blue="",
58
- dark_green="",
59
- dark_aqua="",
60
- dark_red="",
61
- dark_purple="",
62
- gold="",
63
- gray="",
64
- dark_gray="",
65
- blue="",
66
- green="",
67
- aqua="",
68
- red="",
69
- light_purple="",
70
- yellow="",
71
- white="",
72
- reset="",
73
- bold="",
74
- italic=""
75
- )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes