json-repair 0.29.0__tar.gz → 0.29.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {json_repair-0.29.0/src/json_repair.egg-info → json_repair-0.29.1}/PKG-INFO +10 -10
- {json_repair-0.29.0 → json_repair-0.29.1}/README.md +9 -9
- {json_repair-0.29.0 → json_repair-0.29.1}/pyproject.toml +1 -1
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair/json_repair.py +25 -7
- {json_repair-0.29.0 → json_repair-0.29.1/src/json_repair.egg-info}/PKG-INFO +10 -10
- {json_repair-0.29.0 → json_repair-0.29.1}/tests/test_json_repair.py +52 -5
- {json_repair-0.29.0 → json_repair-0.29.1}/LICENSE +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/setup.cfg +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair/__init__.py +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair/__main__.py +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair/py.typed +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair.egg-info/SOURCES.txt +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair.egg-info/dependency_links.txt +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair.egg-info/entry_points.txt +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/src/json_repair.egg-info/top_level.txt +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/tests/test_coverage.py +0 -0
- {json_repair-0.29.0 → json_repair-0.29.1}/tests/test_performance.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: json_repair
|
3
|
-
Version: 0.29.
|
3
|
+
Version: 0.29.1
|
4
4
|
Summary: A package to repair broken json strings
|
5
5
|
Author-email: Stefano Baccianella <4247706+mangiucugna@users.noreply.github.com>
|
6
6
|
License: MIT License
|
@@ -156,24 +156,24 @@ Install the library for command-line with:
|
|
156
156
|
```
|
157
157
|
pipx install json-repair
|
158
158
|
```
|
159
|
-
|
159
|
+
to know all options available:
|
160
160
|
```
|
161
161
|
$ json_repair -h
|
162
|
-
|
163
|
-
usage: json_repair [-h] [-i] [--ensure_ascii] [--indent INDENT] filename
|
162
|
+
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT] filename
|
164
163
|
|
165
164
|
Repair and parse JSON files.
|
166
165
|
|
167
166
|
positional arguments:
|
168
|
-
filename
|
167
|
+
filename The JSON file to repair
|
169
168
|
|
170
169
|
options:
|
171
|
-
-h, --help
|
172
|
-
-i, --inline
|
173
|
-
|
174
|
-
|
170
|
+
-h, --help show this help message and exit
|
171
|
+
-i, --inline Replace the file inline instead of returning the output to stdout
|
172
|
+
-o TARGET, --output TARGET
|
173
|
+
If specified, the output will be written to TARGET filename instead of stdout
|
174
|
+
--ensure_ascii Pass ensure_ascii=True to json.dumps()
|
175
|
+
--indent INDENT Number of spaces for indentation (Default 2)
|
175
176
|
```
|
176
|
-
to learn how to use it
|
177
177
|
|
178
178
|
## Adding to requirements
|
179
179
|
**Please pin this library only on the major version!**
|
@@ -118,24 +118,24 @@ Install the library for command-line with:
|
|
118
118
|
```
|
119
119
|
pipx install json-repair
|
120
120
|
```
|
121
|
-
|
121
|
+
to know all options available:
|
122
122
|
```
|
123
123
|
$ json_repair -h
|
124
|
-
|
125
|
-
usage: json_repair [-h] [-i] [--ensure_ascii] [--indent INDENT] filename
|
124
|
+
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT] filename
|
126
125
|
|
127
126
|
Repair and parse JSON files.
|
128
127
|
|
129
128
|
positional arguments:
|
130
|
-
filename
|
129
|
+
filename The JSON file to repair
|
131
130
|
|
132
131
|
options:
|
133
|
-
-h, --help
|
134
|
-
-i, --inline
|
135
|
-
|
136
|
-
|
132
|
+
-h, --help show this help message and exit
|
133
|
+
-i, --inline Replace the file inline instead of returning the output to stdout
|
134
|
+
-o TARGET, --output TARGET
|
135
|
+
If specified, the output will be written to TARGET filename instead of stdout
|
136
|
+
--ensure_ascii Pass ensure_ascii=True to json.dumps()
|
137
|
+
--indent INDENT Number of spaces for indentation (Default 2)
|
137
138
|
```
|
138
|
-
to learn how to use it
|
139
139
|
|
140
140
|
## Adding to requirements
|
141
141
|
**Please pin this library only on the major version!**
|
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.0"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
4
4
|
[project]
|
5
5
|
name = "json_repair"
|
6
|
-
version = "0.29.
|
6
|
+
version = "0.29.1"
|
7
7
|
license = {file = "LICENSE"}
|
8
8
|
authors = [
|
9
9
|
{ name="Stefano Baccianella", email="4247706+mangiucugna@users.noreply.github.com" },
|
@@ -760,7 +760,7 @@ def from_file(
|
|
760
760
|
return jsonobj
|
761
761
|
|
762
762
|
|
763
|
-
def cli(
|
763
|
+
def cli(inline_args: Optional[List[str]] = None) -> int:
|
764
764
|
parser = argparse.ArgumentParser(description="Repair and parse JSON files.")
|
765
765
|
parser.add_argument("filename", help="The JSON file to repair")
|
766
766
|
parser.add_argument(
|
@@ -769,10 +769,16 @@ def cli(): # pragma: no cover
|
|
769
769
|
action="store_true",
|
770
770
|
help="Replace the file inline instead of returning the output to stdout",
|
771
771
|
)
|
772
|
+
parser.add_argument(
|
773
|
+
"-o",
|
774
|
+
"--output",
|
775
|
+
metavar="TARGET",
|
776
|
+
help="If specified, the output will be written to TARGET filename instead of stdout",
|
777
|
+
)
|
772
778
|
parser.add_argument(
|
773
779
|
"--ensure_ascii",
|
774
780
|
action="store_true",
|
775
|
-
help="Pass
|
781
|
+
help="Pass ensure_ascii=True to json.dumps()",
|
776
782
|
)
|
777
783
|
parser.add_argument(
|
778
784
|
"--indent",
|
@@ -781,24 +787,36 @@ def cli(): # pragma: no cover
|
|
781
787
|
help="Number of spaces for indentation (Default 2)",
|
782
788
|
)
|
783
789
|
|
784
|
-
|
790
|
+
if inline_args is None: # pragma: no cover
|
791
|
+
args = parser.parse_args()
|
792
|
+
else:
|
793
|
+
args = parser.parse_args(
|
794
|
+
inline_args
|
795
|
+
) # This is needed so this function is testable
|
796
|
+
|
797
|
+
if args.inline and args.output: # pragma: no cover
|
798
|
+
print("Error: You cannot pass both --inline and --output", file=sys.stderr)
|
799
|
+
sys.exit(1)
|
785
800
|
|
786
801
|
ensure_ascii = False
|
787
802
|
if args.ensure_ascii:
|
788
803
|
ensure_ascii = True
|
804
|
+
|
789
805
|
try:
|
790
806
|
result = from_file(args.filename)
|
791
807
|
|
792
|
-
if args.inline:
|
793
|
-
fd = open(args.filename, mode="w")
|
808
|
+
if args.inline or args.output:
|
809
|
+
fd = open(args.output or args.filename, mode="w")
|
794
810
|
json.dump(result, fd, indent=args.indent, ensure_ascii=ensure_ascii)
|
795
811
|
fd.close()
|
796
812
|
else:
|
797
813
|
print(json.dumps(result, indent=args.indent, ensure_ascii=ensure_ascii))
|
798
|
-
except Exception as e:
|
814
|
+
except Exception as e: # pragma: no cover
|
799
815
|
print(f"Error: {str(e)}", file=sys.stderr)
|
800
816
|
sys.exit(1)
|
801
817
|
|
818
|
+
return 0 # Success
|
819
|
+
|
802
820
|
|
803
821
|
if __name__ == "__main__": # pragma: no cover
|
804
|
-
cli()
|
822
|
+
sys.exit(cli())
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: json_repair
|
3
|
-
Version: 0.29.
|
3
|
+
Version: 0.29.1
|
4
4
|
Summary: A package to repair broken json strings
|
5
5
|
Author-email: Stefano Baccianella <4247706+mangiucugna@users.noreply.github.com>
|
6
6
|
License: MIT License
|
@@ -156,24 +156,24 @@ Install the library for command-line with:
|
|
156
156
|
```
|
157
157
|
pipx install json-repair
|
158
158
|
```
|
159
|
-
|
159
|
+
to know all options available:
|
160
160
|
```
|
161
161
|
$ json_repair -h
|
162
|
-
|
163
|
-
usage: json_repair [-h] [-i] [--ensure_ascii] [--indent INDENT] filename
|
162
|
+
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT] filename
|
164
163
|
|
165
164
|
Repair and parse JSON files.
|
166
165
|
|
167
166
|
positional arguments:
|
168
|
-
filename
|
167
|
+
filename The JSON file to repair
|
169
168
|
|
170
169
|
options:
|
171
|
-
-h, --help
|
172
|
-
-i, --inline
|
173
|
-
|
174
|
-
|
170
|
+
-h, --help show this help message and exit
|
171
|
+
-i, --inline Replace the file inline instead of returning the output to stdout
|
172
|
+
-o TARGET, --output TARGET
|
173
|
+
If specified, the output will be written to TARGET filename instead of stdout
|
174
|
+
--ensure_ascii Pass ensure_ascii=True to json.dumps()
|
175
|
+
--indent INDENT Number of spaces for indentation (Default 2)
|
175
176
|
```
|
176
|
-
to learn how to use it
|
177
177
|
|
178
178
|
## Adding to requirements
|
179
179
|
**Please pin this library only on the major version!**
|
@@ -1,4 +1,8 @@
|
|
1
|
-
from src.json_repair.json_repair import from_file, repair_json, loads
|
1
|
+
from src.json_repair.json_repair import from_file, repair_json, loads, cli
|
2
|
+
from unittest.mock import patch
|
3
|
+
import os.path
|
4
|
+
import pathlib
|
5
|
+
import tempfile
|
2
6
|
|
3
7
|
def test_basic_types_valid():
|
4
8
|
assert repair_json("True", return_objects=True) == ""
|
@@ -225,10 +229,6 @@ def test_repair_json_skip_json_loads():
|
|
225
229
|
|
226
230
|
|
227
231
|
def test_repair_json_from_file():
|
228
|
-
import os.path
|
229
|
-
import pathlib
|
230
|
-
import tempfile
|
231
|
-
|
232
232
|
path = pathlib.Path(__file__).parent.resolve()
|
233
233
|
|
234
234
|
# Use chunk_length 2 to test the buffering feature
|
@@ -263,3 +263,50 @@ def test_repair_json_from_file():
|
|
263
263
|
|
264
264
|
def test_ensure_ascii():
|
265
265
|
assert repair_json("{'test_中国人_ascii':'统一码'}", ensure_ascii=False) == '{"test_中国人_ascii": "统一码"}'
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
def test_cli(capsys):
|
270
|
+
# Create a temporary file
|
271
|
+
temp_fd, temp_path = tempfile.mkstemp(suffix=".json")
|
272
|
+
try:
|
273
|
+
# Write content to the temporary file
|
274
|
+
with os.fdopen(temp_fd, 'w') as tmp:
|
275
|
+
tmp.write("{key:value")
|
276
|
+
cli(inline_args=[temp_path, '--indent', 0, '--ensure_ascii'])
|
277
|
+
captured = capsys.readouterr()
|
278
|
+
assert captured.out == '{\n"key": "value"\n}\n'
|
279
|
+
|
280
|
+
# Test the output option
|
281
|
+
tempout_fd, tempout_path = tempfile.mkstemp(suffix=".json")
|
282
|
+
cli(inline_args=[temp_path, '--indent', 0, '-o', tempout_path])
|
283
|
+
with open(tempout_path, 'r') as tmp:
|
284
|
+
out = tmp.read()
|
285
|
+
assert out == '{\n"key": "value"\n}'
|
286
|
+
|
287
|
+
# Test the inline option
|
288
|
+
cli(inline_args=[temp_path, '--indent', 0, '-i'])
|
289
|
+
with open(temp_path, 'r') as tmp:
|
290
|
+
out = tmp.read()
|
291
|
+
assert out == '{\n"key": "value"\n}'
|
292
|
+
|
293
|
+
|
294
|
+
finally:
|
295
|
+
# Clean up - delete the temporary file
|
296
|
+
os.remove(temp_path)
|
297
|
+
os.remove(tempout_path)
|
298
|
+
|
299
|
+
"""
|
300
|
+
def test_cli_inline(sample_json_file):
|
301
|
+
with patch('sys.argv', ['json_repair', sample_json_file, '-i']):
|
302
|
+
cli()
|
303
|
+
with open(sample_json_file, 'r') as f:
|
304
|
+
assert json.load(f) == {"key": "value"}
|
305
|
+
|
306
|
+
def test_cli_output_file(sample_json_file, tmp_path):
|
307
|
+
output_file = tmp_path / "output.json"
|
308
|
+
with patch('sys.argv', ['json_repair', sample_json_file, '-o', str(output_file)]):
|
309
|
+
cli()
|
310
|
+
with open(output_file, 'r') as f:
|
311
|
+
assert json.load(f) == {"key": "value"}
|
312
|
+
"""
|
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
|