log21 3.3.0__tar.gz → 3.3.1__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.3
2
2
  Name: log21
3
- Version: 3.3.0
3
+ Version: 3.3.1
4
4
  Summary: A simple logging package
5
5
  Keywords: python,log,colorize,color,logging,Python3,CodeWriter21
6
6
  Author: CodeWriter21(Mehrad Pooryoussof)
@@ -94,55 +94,45 @@ pip install git+https://github.com/MPCodeWriter21/log21
94
94
  Changelog
95
95
  ---------
96
96
 
97
- ### v3.3.0
97
+ ### v3.3.1
98
98
 
99
- Add `log21.helper_types` module.
99
+ Get rid of `invalid NoneType value` error message.
100
100
 
101
- This module contains a collection of useful types meant for using with argument parser
102
- to parse CLI arguments to more usable formats.
103
-
104
- + `FileSize`: Can take `str` and `int` values. Will convert human inputs such as "121 KB",
105
- "21MiB", or "4.56 GB" to bytes. Can also be used to represent bytes value in more
106
- human-readable formats.
107
-
108
- For even more control you can still define Logger, Handlers, and Formatters manually.
101
+ In the previous versions, if you used an optional union type such as `int | float | None`
102
+ which ended with `None`, you'd get an error saying `invalid NoneType value` that didn't
103
+ make any sense to the user. The code has been updated to use the name of the last
104
+ non-None type for the error message in these situations.
109
105
 
110
106
  #### Example
111
107
 
112
108
  ```python
113
- from pathlib import Path
114
-
115
109
  import log21
116
110
  from log21.helper_types import FileSize
117
111
 
118
112
 
119
- def main(path: Path, min_size: FileSize, max_size: FileSize, /):
120
- log21.info(
121
- "Files that are smaller than %s or bigger than %s will be ignored.",
122
- args=(min_size, max_size),
123
- )
124
-
125
- for file in path.iterdir():
126
- if not file.is_file():
127
- continue
128
- if min_size <= (size := file.stat().st_size) <= max_size:
129
- log21.print(
130
- "`%s` is %s.",
131
- args=(file, FileSize(size).humanize(binary=False, fmt="%.4f")),
132
- )
133
-
113
+ def main(min_size: FileSize | None = None, max_size: FileSize | None = None) -> None:
114
+ log21.info("Min Size: %s, Max Size: %s", args=(min_size, max_size))
134
115
 
135
116
  if __name__ == "__main__":
136
117
  log21.argumentify(main)
137
118
  ```
138
119
 
139
- Example usage and output:
120
+ Before v3.3.1:
140
121
 
141
122
  ```shell
142
- $ uv run test.py . "1.23MiB" "0.5 GB"
143
- [21:21:21] [INFO] Files that are smaller than 1.23 MiB or bigger than 476.84 MiB will be
144
- ignored.
145
- `myfile21.zip` is 35.1856 MB.
123
+ $ python test.py -m Hello
124
+ usage: test.py [-h] [--min-size MIN_SIZE] [--max-size MAX_SIZE]
125
+
126
+ test.py: error: argument --min-size/-m: invalid NoneType value: 'Hello'
127
+ ```
128
+
129
+ With v3.3.1 update:
130
+
131
+ ```shell
132
+ $ python test.py -m Hello
133
+ usage: test.py [-h] [--min-size MIN_SIZE] [--max-size MAX_SIZE]
134
+
135
+ test.py: error: argument --min-size/-m: invalid FileSize value: 'Hello'
146
136
  ```
147
137
 
148
138
  [Full CHANGELOG](https://github.com/MPCodeWriter21/log21/blob/master/CHANGELOG.md)
@@ -69,55 +69,45 @@ pip install git+https://github.com/MPCodeWriter21/log21
69
69
  Changelog
70
70
  ---------
71
71
 
72
- ### v3.3.0
72
+ ### v3.3.1
73
73
 
74
- Add `log21.helper_types` module.
74
+ Get rid of `invalid NoneType value` error message.
75
75
 
76
- This module contains a collection of useful types meant for using with argument parser
77
- to parse CLI arguments to more usable formats.
78
-
79
- + `FileSize`: Can take `str` and `int` values. Will convert human inputs such as "121 KB",
80
- "21MiB", or "4.56 GB" to bytes. Can also be used to represent bytes value in more
81
- human-readable formats.
82
-
83
- For even more control you can still define Logger, Handlers, and Formatters manually.
76
+ In the previous versions, if you used an optional union type such as `int | float | None`
77
+ which ended with `None`, you'd get an error saying `invalid NoneType value` that didn't
78
+ make any sense to the user. The code has been updated to use the name of the last
79
+ non-None type for the error message in these situations.
84
80
 
85
81
  #### Example
86
82
 
87
83
  ```python
88
- from pathlib import Path
89
-
90
84
  import log21
91
85
  from log21.helper_types import FileSize
92
86
 
93
87
 
94
- def main(path: Path, min_size: FileSize, max_size: FileSize, /):
95
- log21.info(
96
- "Files that are smaller than %s or bigger than %s will be ignored.",
97
- args=(min_size, max_size),
98
- )
99
-
100
- for file in path.iterdir():
101
- if not file.is_file():
102
- continue
103
- if min_size <= (size := file.stat().st_size) <= max_size:
104
- log21.print(
105
- "`%s` is %s.",
106
- args=(file, FileSize(size).humanize(binary=False, fmt="%.4f")),
107
- )
108
-
88
+ def main(min_size: FileSize | None = None, max_size: FileSize | None = None) -> None:
89
+ log21.info("Min Size: %s, Max Size: %s", args=(min_size, max_size))
109
90
 
110
91
  if __name__ == "__main__":
111
92
  log21.argumentify(main)
112
93
  ```
113
94
 
114
- Example usage and output:
95
+ Before v3.3.1:
115
96
 
116
97
  ```shell
117
- $ uv run test.py . "1.23MiB" "0.5 GB"
118
- [21:21:21] [INFO] Files that are smaller than 1.23 MiB or bigger than 476.84 MiB will be
119
- ignored.
120
- `myfile21.zip` is 35.1856 MB.
98
+ $ python test.py -m Hello
99
+ usage: test.py [-h] [--min-size MIN_SIZE] [--max-size MAX_SIZE]
100
+
101
+ test.py: error: argument --min-size/-m: invalid NoneType value: 'Hello'
102
+ ```
103
+
104
+ With v3.3.1 update:
105
+
106
+ ```shell
107
+ $ python test.py -m Hello
108
+ usage: test.py [-h] [--min-size MIN_SIZE] [--max-size MAX_SIZE]
109
+
110
+ test.py: error: argument --min-size/-m: invalid FileSize value: 'Hello'
121
111
  ```
122
112
 
123
113
  [Full CHANGELOG](https://github.com/MPCodeWriter21/log21/blob/master/CHANGELOG.md)
@@ -23,7 +23,7 @@ dependencies = [
23
23
  "webcolors",
24
24
  "docstring-parser"
25
25
  ]
26
- version = "3.3.0"
26
+ version = "3.3.1"
27
27
 
28
28
  [build-system]
29
29
  requires = ["uv_build>=0.8.15,<0.9.0"]
@@ -33,7 +33,7 @@ from .stream_handler import StreamHandler, ColorizingStreamHandler
33
33
  # yapf: enable
34
34
 
35
35
  __author__ = 'CodeWriter21 (Mehrad Pooryoussof)'
36
- __version__ = '3.3.0'
36
+ __version__ = '3.3.1'
37
37
  __github__ = 'https://GitHub.com/MPCodeWriter21/log21'
38
38
  __all__ = [
39
39
  'ColorizingStreamHandler', 'DecolorizingFileHandler', 'ColorizingFormatter',
@@ -784,7 +784,8 @@ class ColorizingArgumentParser(_argparse.ArgumentParser, _ActionsContainer):
784
784
  else:
785
785
  exception = ValueError()
786
786
  for type_ in func_type:
787
- name = getattr(type_, '__name__', repr(type_))
787
+ if type_ is not type(None):
788
+ name = getattr(type_, '__name__', repr(type_))
788
789
  try:
789
790
  result = type_(arg_string)
790
791
  break
@@ -451,7 +451,7 @@ def _argumentify(functions: _Dict[str, Callable]) -> None:
451
451
  args = []
452
452
  kwargs = {}
453
453
  info = None
454
- for name, (function, info) in functions_info.items(): # noqa: B007
454
+ for _name, (function, info) in functions_info.items(): # noqa: B007
455
455
  if function == cli_args.func:
456
456
  break
457
457
  else:
@@ -475,7 +475,7 @@ def _argumentify(functions: _Dict[str, Callable]) -> None:
475
475
 
476
476
  def argumentify(
477
477
  entry_point: _Union[Callable, _List[Callable], _Dict[str, Callable]]
478
- ) -> _Callable:
478
+ ) -> _Union[Callable, _List[Callable], _Dict[str, Callable]]:
479
479
  """This function argumentifies one or more functions as the entry point of the
480
480
  script.
481
481
 
@@ -493,7 +493,7 @@ def argumentify(
493
493
  12 if __name__ == '__main__':
494
494
  13 argumentify(main)
495
495
 
496
- $ python argumentified.py Ahmad Ahmadi --age 20
496
+ $ python argumentified.py Ahmad Mohammadi --age 20
497
497
  Ahmad Ahmadi is 20 years old.
498
498
  $ python argumentified.py Mehrad Pooryoussof
499
499
  Mehrad Pooryoussof is not yet born.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes