feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: add encode_json and loads helpers for better JSON null support - #57

Open
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support
Open

feat: add encode_json and loads helpers for better JSON null support#57
adityak74 wants to merge 2 commits into
toon-format:mainfrom
adityak74:json-null-support

Conversation

@adityak74

Copy link
Copy Markdown

Linked Issue

Closes#49

Description

Support JSON null values in the toon-python encoding flow by adding helper functions to automatically convert JSON null to Python None during encoding. This improves the developer experience when working with LLM tool outputs, APIs, and logs where JSON null is the standard for missing values.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Changes Made

  • Added toon_format.loads(json_string) as a convenience wrapper around json.loads to ensure a "TOON-friendly" integration flow.
  • Added toon_format.encode_json(json_string) to directly encode a JSON string into TOON format, handling null to None conversion automatically.
  • Exported loads and encode_json in the top-level toon_format package.
  • Added comprehensive integration tests in tests/test_json_integration.py covering null values in objects and arrays.

SPEC Compliance

  • This PR implements/fixes spec compliance
  • Spec section(s) affected: Null Values
  • Spec version:

Testing

  • All existing tests pass
  • Added new tests for changes
  • Tests cover edge cases and spec compliance

Pre-submission Checklist

  • My code follows the project's coding standards
  • I have run code formatting/linting tools
  • I have added tests that prove my fix/feature works
  • New and existing tests pass locally
  • I have updated documentation if needed
  • I have reviewed the TOON specification for relevant sections

Breaking Changes

  • No breaking changes

Additional Context

This implementation follows the proposed solution in the issue to provide a standard utility for JSON integration, reducing the need for manual pre-processing of data containing null values.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds JSON integration helpers to toon_format to streamline encoding JSON strings (including JSON null) into TOON, and introduces integration tests to validate the flow.

Changes:

  • Added toon_format.loads() (wrapper around json.loads) and toon_format.encode_json() (JSON string → parsed Python → encode()).
  • Re-exported the new helpers at the top-level toon_format package.
  • Added new integration tests covering null handling in objects and arrays.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
src/toon_format/utils.pyIntroduces loads() and encode_json() helpers and exports them from the utils module.
src/toon_format/__init__.pyRe-exports the new helpers in the public package API.
tests/test_json_integration.pyAdds integration tests for JSON null → Python None → TOON null behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadtests/test_json_integration.py Outdated
Comment threadsrc/toon_format/utils.py Outdated
Comment threadsrc/toon_format/utils.py
- Update utils.py module docstring to include JSON helpers
- Fix circular import of encode in utils.py
- Remove unused imports and print statements in tests
- Fix formatting in tests using ruff
@smortezah

Copy link
Copy Markdown
Contributor

@toon-format/python-maintainers, this PR introduces new functions, loads() and encode_json(), and exposes them to the public API. To maintain alignment with the original TypeScript implementation of toon-format, I suggest we avoid adding excessive functions. Any thoughts?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support JSON null values (auto-convert to Python None) in toon-python encoding flow

3 participants

@adityak74@smortezah