preparse 2.0.0.dev7__tar.gz → 2.0.0.dev11__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 (41) hide show
  1. {preparse-2.0.0.dev7/src/preparse.egg-info → preparse-2.0.0.dev11}/PKG-INFO +1 -1
  2. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/pyproject.toml +1 -1
  3. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_processing/__init__.py +2 -4
  4. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_processing/parsing.py +41 -27
  5. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/PreParser.py +8 -14
  6. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/data.toml +35486 -70661
  7. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11/src/preparse.egg-info}/PKG-INFO +1 -1
  8. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/LICENSE.txt +0 -0
  9. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/MANIFEST.in +0 -0
  10. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/README.rst +0 -0
  11. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/docs/v1.0.rst +0 -0
  12. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/setup.cfg +0 -0
  13. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/__init__.py +0 -0
  14. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Bundle.py +0 -0
  15. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Item.py +0 -0
  16. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Long.py +0 -0
  17. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Option.py +0 -0
  18. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Positional.py +0 -0
  19. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/Special.py +0 -0
  20. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_items/__init__.py +0 -0
  21. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_processing/deparsing.py +0 -0
  22. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_processing/digesting.py +0 -0
  23. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_processing/pulling.py +0 -0
  24. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_utils/__init__.py +0 -0
  25. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/_utils/dataprop.py +0 -0
  26. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/Click.py +0 -0
  27. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/Optdict.py +0 -0
  28. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/__init__.py +0 -0
  29. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/enums.py +0 -0
  30. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/core/warnings.py +0 -0
  31. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/__init__.py +0 -0
  32. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/expit.toml +0 -0
  33. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/test_data_toml.py +0 -0
  34. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/test_enums.py +0 -0
  35. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/test_expit_toml.py +0 -0
  36. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/test_optdict.py +0 -0
  37. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse/tests/test_preparser.py +0 -0
  38. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse.egg-info/SOURCES.txt +0 -0
  39. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse.egg-info/dependency_links.txt +0 -0
  40. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse.egg-info/requires.txt +0 -0
  41. {preparse-2.0.0.dev7 → preparse-2.0.0.dev11}/src/preparse.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: preparse
3
- Version: 2.0.0.dev7
3
+ Version: 2.0.0.dev11
4
4
  Summary: This project preparses args for further parsing later on.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -34,7 +34,7 @@ keywords = []
34
34
  name = "preparse"
35
35
  readme = "README.rst"
36
36
  requires-python = ">=3.11"
37
- version = "2.0.0.dev7"
37
+ version = "2.0.0.dev11"
38
38
 
39
39
  [project.license]
40
40
  file = "LICENSE.txt"
@@ -15,11 +15,10 @@ __all__ = ["process"]
15
15
  def process(
16
16
  args: Optional[Iterable] = None,
17
17
  *,
18
+ abbr: Optional[Tuning],
18
19
  allowslong: bool,
19
20
  allowsshort: bool,
20
21
  bundling: Tuning,
21
- expandsabbr: bool,
22
- expectsabbr: bool,
23
22
  expectsposix: bool,
24
23
  optdict: dict,
25
24
  prog: str,
@@ -32,10 +31,9 @@ def process(
32
31
  items = pull(args)
33
32
  items = parse(
34
33
  items,
34
+ abbr=abbr,
35
35
  allowslong=allowslong,
36
36
  allowsshort=allowsshort,
37
- expandsabbr=expandsabbr,
38
- expectsabbr=expectsabbr,
39
37
  expectsposix=expectsposix,
40
38
  optdict=optdict,
41
39
  prog=prog,
@@ -18,7 +18,10 @@ PUAW = warnings.PreparseUnallowedArgumentWarning
18
18
  PRAW = warnings.PreparseRequiredArgumentWarning
19
19
 
20
20
 
21
- def parse(args: list[str], **kwargs: Any) -> list[Item]:
21
+ def parse(
22
+ args: list[str],
23
+ **kwargs: Any,
24
+ ) -> list[Item]:
22
25
  return list(parse_generator(args, **kwargs))
23
26
 
24
27
 
@@ -64,10 +67,9 @@ def parse_cause(
64
67
  def parse_generator(
65
68
  items: list[Positional],
66
69
  *,
70
+ abbr: Optional[Tuning],
67
71
  allowslong: bool,
68
72
  allowsshort: bool,
69
- expandsabbr: bool,
70
- expectsabbr: bool,
71
73
  expectsposix: bool,
72
74
  optdict: dict,
73
75
  prog: str,
@@ -103,11 +105,10 @@ def parse_generator(
103
105
  continue
104
106
  last = parse_option(
105
107
  item.value,
108
+ abbr=abbr,
106
109
  allowslong=allowslong,
107
110
  allowsshort=allowsshort,
108
111
  cause=cause,
109
- expandsabbr=expandsabbr,
110
- expectsabbr=expectsabbr,
111
112
  optdict=optdict,
112
113
  )
113
114
  if not last.ishungry():
@@ -123,24 +124,12 @@ def parse_generator(
123
124
  yield last
124
125
 
125
126
 
126
- def parse_islong(
127
- arg: str,
128
- *,
129
- allowslong: bool,
130
- allowsshort: bool,
131
- ) -> bool:
132
- if allowslong and allowsshort:
133
- return arg.startswith("--")
134
- else:
135
- return not allowsshort
136
-
137
-
138
127
  def parse_long(
139
128
  arg: str,
140
129
  *,
130
+ abbr: Optional[Tuning],
131
+ allowsshort: bool,
141
132
  cause: FunctionType,
142
- expandsabbr: bool,
143
- expectsabbr: bool,
144
133
  optdict: dict,
145
134
  ) -> Long:
146
135
  ans: Long
@@ -153,7 +142,7 @@ def parse_long(
153
142
  ans.abbrlen = len(ans.fullkey)
154
143
  if ans.fullkey in optdict.keys():
155
144
  parts = [ans.fullkey]
156
- elif expectsabbr:
145
+ elif abbr is not None:
157
146
  parts = parse_long_startswith(ans.abbr, keys=optdict.keys())
158
147
  else:
159
148
  parts = list() # can be assumed
@@ -166,8 +155,17 @@ def parse_long(
166
155
  cause(PAOW, option=arg, possibilities=parts)
167
156
  return ans
168
157
  (ans.fullkey,) = parts
169
- if expandsabbr:
158
+ if abbr == Tuning.MINIMIZE:
170
159
  ans.abbrlen = len(ans.fullkey)
160
+ if abbr == Tuning.MAXIMIZE:
161
+ parts = list(optdict.keys())
162
+ parts.remove(ans.fullkey)
163
+ ans.abbrlen = parse_minlen(
164
+ abbr=ans.abbr,
165
+ allowsshort=allowsshort,
166
+ joined=ans.joined,
167
+ keys=tuple(parts),
168
+ )
171
169
  ans.nargs = optdict[ans.fullkey]
172
170
  if (ans.nargs == Nargs.NO_ARGUMENT) and (ans.right is not None):
173
171
  cause(PUAW, option=ans.fullkey)
@@ -188,21 +186,37 @@ def parse_long_startswith(
188
186
  return ans
189
187
 
190
188
 
189
+ def parse_minlen(
190
+ *,
191
+ abbr: str,
192
+ allowsshort: bool,
193
+ joined: bool,
194
+ keys: tuple[str, ...],
195
+ ) -> int:
196
+ m: int
197
+ n: int
198
+ m = 2 + allowsshort - joined
199
+ n = len(abbr)
200
+ while n >= m and not any(z.startswith(abbr[:n]) for z in keys):
201
+ n -= 1
202
+ return n + 1
203
+
204
+
191
205
  def parse_option(
192
206
  arg: str,
193
207
  *,
208
+ abbr: Optional[Tuning],
209
+ allowslong: bool,
210
+ allowsshort: bool,
194
211
  cause: FunctionType,
195
- expandsabbr: bool,
196
- expectsabbr: bool,
197
212
  optdict: dict,
198
- **kwargs: Any,
199
213
  ) -> Option:
200
- if parse_islong(arg, **kwargs):
214
+ if (allowslong and arg.startswith("--")) or not allowsshort:
201
215
  return parse_long(
202
216
  arg,
217
+ abbr=abbr,
218
+ allowsshort=allowsshort,
203
219
  cause=cause,
204
- expandsabbr=expandsabbr,
205
- expectsabbr=expectsabbr,
206
220
  optdict=optdict,
207
221
  )
208
222
  else:
@@ -23,11 +23,10 @@ __all__ = ["PreParser"]
23
23
 
24
24
  class PreParser(Copyable):
25
25
 
26
+ abbr: Optional[Tuning]
26
27
  allowslong: bool
27
28
  allowsshort: bool
28
29
  bundling: Tuning
29
- expandsabbr: bool
30
- expectsabbr: bool
31
30
  expectsposix: bool
32
31
  optdict: Optdict
33
32
  prog: str
@@ -41,11 +40,10 @@ class PreParser(Copyable):
41
40
  def __init__(
42
41
  self: Self,
43
42
  *,
43
+ abbr: Optional[Tuning] = Tuning.MINIMIZE,
44
44
  allowslong: Any = True,
45
45
  allowsshort: Any = True,
46
46
  bundling: Any = Tuning.MAINTAIN,
47
- expandsabbr: Any = True,
48
- expectsabbr: Any = True,
49
47
  expectsposix: Any = False,
50
48
  optdict: Any = (),
51
49
  prog: Any = None,
@@ -53,11 +51,10 @@ class PreParser(Copyable):
53
51
  special: Any = Tuning.MAINTAIN,
54
52
  warn: Callable = str,
55
53
  ) -> None:
54
+ self.abbr = abbr
56
55
  self.allowslong = allowslong
57
56
  self.allowsshort = allowsshort
58
57
  self.bundling = bundling
59
- self.expandsabbr = expandsabbr
60
- self.expectsabbr = expectsabbr
61
58
  self.expectsposix = expectsposix
62
59
  self.optdict = optdict
63
60
  self.prog = prog
@@ -69,6 +66,11 @@ class PreParser(Copyable):
69
66
  def __repr__(self: Self) -> str:
70
67
  return datarepr(type(self).__name__, **self.todict())
71
68
 
69
+ @dataprop
70
+ def abbr(self: Self, value: Any) -> bool:
71
+ if value is not None:
72
+ return Tuning(value)
73
+
72
74
  @dataprop
73
75
  def allowslong(self: Self, value: Any) -> bool:
74
76
  return bool(value)
@@ -90,14 +92,6 @@ class PreParser(Copyable):
90
92
  def copy(self: Self) -> Self:
91
93
  return type(self)(**self.todict())
92
94
 
93
- @dataprop
94
- def expandsabbr(self: Self, value: Any) -> bool:
95
- return bool(value)
96
-
97
- @dataprop
98
- def expectsabbr(self: Self, value: Any) -> bool:
99
- return bool(value)
100
-
101
95
  @dataprop
102
96
  def expectsposix(self: Self, value: Any) -> bool:
103
97
  if value == "infer":