✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo
, '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

✨ Add support for Literal types - #1439

Closed
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype
Closed

✨ Add support for Literal types#1439
nsaccente wants to merge 31 commits into
fastapi:mainfrom
nsaccente:bugfix-57/literal-satype

Conversation

@nsaccente

Copy link
Copy Markdown

This PR addresses issue 57. The original issue explains that attempting to use a Literal type annotation in a SQLModel raises a type error from issubclass. This is because Literal is not a class, but a typing._SpecialForm, so static funcs like isinstance and issubclass don't work with it.

The fix was pretty straightforward, I just added a check before an isinstance or issubclass would have been called that checks if type_ is Literal.

@nsaccentensaccente changed the title Add check for Literal type annotation in get_sqlalchemy_type🐛Add check for Literal type annotation in get_sqlalchemy_typeJul 24, 2025
@nsaccente

Copy link
Copy Markdown
Author

I have no idea how to add the proper labels to this PR, it looks like the permissions aren't set up to allow me to.

@YuriiMotovYuriiMotov changed the title 🐛Add check for Literal type annotation in get_sqlalchemy_type🐛 Fix TypeError for fields annotated with LiteralAug 5, 2025
@YuriiMotovYuriiMotov added the bug Something isn't working label Aug 5, 2025
YuriiMotov

This comment was marked as outdated.

@YuriiMotovYuriiMotov linked an issue Aug 5, 2025 that may be closed by this pull request
8 tasks
@YuriiMotov
YuriiMotov dismissed their stale reviewAugust 5, 2025 17:25

oh, wait...

@YuriiMotov

Copy link
Copy Markdown
Member

@nsaccente, thanks for working on this!
This works, but could you please add a test?

@nsaccente

Copy link
Copy Markdown
Author

@nsaccente, thanks for working on this! This works, but could you please add a test?

Sure. I'll try to get that done sometime this week.

@nsaccente
nsaccenteforce-pushed the bugfix-57/literal-satype branch from 2aaef2d to 3c024e2CompareAugust 16, 2025 01:32
@nsaccente

Copy link
Copy Markdown
Author

I've been fighting with getting the tests to work. I've been able to get things to pass in some versions of python, but not others. Any guidance on how to run these CI tests locally?

@svlandeg
svlandeg marked this pull request as draft August 22, 2025 12:12
@svlandegsvlandeg self-assigned this Aug 22, 2025
@YuriiMotovYuriiMotov removed their assignment Oct 1, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Dec 26, 2025
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Dec 28, 2025
@github-actions

This comment was marked as resolved.

1 similar comment
@github-actions

This comment was marked as resolved.

@svlandegsvlandeg self-assigned this Jan 13, 2026
@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Jan 27, 2026
@svlandeg
svlandeg marked this pull request as draft January 27, 2026 10:09

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I gave this some more thought and agree that this feature is more complex that it initially seemed. Just avoiding the crash when using Literal isn't sufficient: we also want to map to the right datatype ànd somehow respect the value restriction that the Literal definition presents.

Building on the changes by Yurii to identify all-bool or all-int columns, I've now also pushed another update that creates SQL constraints for the values in the Literal. This way, the data can't get corrupted and the user won't receive values that don't match the expected Literal definition.

Having mixed types in a Literal is still not ideal. I wonder whether we should support it by just making it all str (as the PR does now), whether we should reject it entirely (by raising an exception) or whether there is some other way we could deal with this 🤔

@YuriiMotov: would love a review from you on this!

@svlandeg
svlandeg marked this pull request as ready for review January 27, 2026 12:55
@svlandegsvlandeg removed their assignment Jan 27, 2026
@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Feb 1, 2026
@github-actions

This comment was marked as outdated.

1 similar comment
@github-actions

This comment was marked as outdated.

@svlandegsvlandeg self-assigned this Feb 2, 2026
@svlandeg

Copy link
Copy Markdown
Member

Follow-up PR as this one has been closed (despite being actively worked on): #1736

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

Labels

conflictsAutomatically generated when a PR has a merge conflictfeatureNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@nsaccente@YuriiMotov@svlandeg@tiangolo