Break out the encoder as a separate file
- ID
61dfab0- date
2025-01-10 11:26:30+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
52076e8- message
Break out the encoder as a separate file- changed files
2 files, 29 additions, 11 deletions
Changed files
src/javascript_data_files/__init__.py (6646) → src/javascript_data_files/__init__.py (6422)
diff --git a/src/javascript_data_files/__init__.py b/src/javascript_data_files/__init__.py
index 634cc05..53cf442 100644
--- a/src/javascript_data_files/__init__.py
+++ b/src/javascript_data_files/__init__.py
@@ -19,6 +19,8 @@ import textwrap
import typing
import uuid
+from .encoder import encode_as_js
+
__version__ = "1.1.0"
@@ -53,16 +55,6 @@ def read_js(p: pathlib.Path | str, *, varname: str) -> typing.Any:
return json.loads(json_string)
-def _create_js_string(value: typing.Any, varname: str) -> str:
- """
- Create a JavaScript string to write to a file.
- """
- json_string = json.dumps(value, indent=2)
- js_string = f"const {varname} = {json_string};\n"
-
- return js_string
-
-
def write_js(
p: pathlib.Path | str | io.TextIOBase | io.BufferedIOBase,
*,
@@ -82,7 +74,7 @@ def write_js(
'const redPentagon = {\n "sides": 5,\n "colour": "red"\n};\n'
"""
- js_string = _create_js_string(value, varname)
+ js_string = encode_as_js(value, varname)
if isinstance(p, io.TextIOBase):
p.write(js_string)
src/javascript_data_files/encoder.py (0) → src/javascript_data_files/encoder.py (556)
diff --git a/src/javascript_data_files/encoder.py b/src/javascript_data_files/encoder.py
new file mode 100644
index 0000000..2dedbae
--- /dev/null
+++ b/src/javascript_data_files/encoder.py
@@ -0,0 +1,26 @@
+"""
+This file contains pure functions for converting Python values
+to JavaScript strings.
+
+It doesn't do any I/O.
+"""
+
+import json
+import typing
+
+
+def encode_as_json(value: typing.Any) -> str:
+ """
+ Convert a Python value to a JSON-encoded string.
+ """
+ return json.dumps(value, indent=2)
+
+
+def encode_as_js(value: typing.Any, varname: str) -> str:
+ """
+ Convert a Python value to a JSON-encoded JavaScript value.
+ """
+ json_string = encode_as_json(value)
+ js_string = f"const {varname} = {json_string};\n"
+
+ return js_string