Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Move structlog imports into a TYPE_CHECKING block to untie version bumps by amoghrajesh · Pull Request #57335 · apache/airflow · GitHub
Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move structlog imports into a TYPE_CHECKING block to untie version bumps by amoghrajesh · Pull Request #57335 · apache/airflow · GitHub
Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

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

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Move structlog imports into a TYPE_CHECKING block to untie version bumps by amoghrajesh · Pull Request #57335 · apache/airflow · GitHub
Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move structlog imports into a TYPE_CHECKING block to untie version bumps by amoghrajesh · Pull Request #57335 · apache/airflow · GitHub
Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move structlog imports into a TYPE_CHECKING block to untie version bumps by amoghrajesh · Pull Request #57335 · apache/airflow · GitHub
Skip to content

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

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

Move structlog imports into a TYPE_CHECKING block to untie version bumps - #57335

Merged
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog
Oct 27, 2025
Merged

Move structlog imports into a TYPE_CHECKING block to untie version bumps#57335
amoghrajesh merged 4 commits into
apache:mainfrom
amoghrajesh:bump-structlog

Conversation

@amoghrajesh

@amoghrajeshamoghrajesh commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

Structlog released 25.5.0 version where structlog.dev.Styles was renamed as structlog.dev.ColumnStyles along with some refactoring. This breaks our CI like this:

Stderr: Traceback (mostrecentcalllast):
File"<string>", line1, in<module>File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/__init__.py", line81, in<module>settings.initialize()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/settings.py", line698, ininitializeLOGGING_CLASS_PATH=configure_logging()
File"/home/runner/work/airflow/airflow/airflow-core/src/airflow/logging_config.py", line88, inconfigure_loggingfromairflow._shared.loggingimportconfigure_logging, init_log_folder, translate_config_valuesFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/__init__.py", line27, in<module>from .structlogimportconfigure_logging, init_log_file, init_log_folderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/structlog.py", line38, in<module>from .percent_formatterimportPercentFormatRenderFile"/home/runner/work/airflow/airflow/airflow-core/src/airflow/_shared/logging/percent_formatter.py", line29, in<module>fromstructlog.devimportConsoleRenderer, StylesImportError: cannotimportname'Styles'from'structlog.dev' (/home/runner/work/airflow/airflow/.venv/lib/python3.10/site-packages/structlog/dev.py)

Move structlog imports into a TYPE_CHECKING block to untie version bumps


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated

@ashbashb 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.

Lets see if TP's idea works

Comment threadshared/logging/src/airflow_shared/logging/percent_formatter.py Outdated
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Just tried it 14be76e

@uranusjr

Copy link
Copy Markdown
Member

We should remove the version bumps too.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Fair point, pushing a fix

@amoghrajeshamoghrajesh changed the title Bump structlog to 25.5.0 and handle updates to codeMove structlog imports into a TYPE_CHECKING block to untie version bumpsOct 27, 2025
@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

That worked, thanks @uranusjr

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

Failing test is unrelated

@amoghrajesh
amoghrajesh merged commit 08c317d into apache:mainOct 27, 2025
87 of 88 checks passed
kaxil pushed a commit that referenced this pull request Oct 27, 2025
@pankajkoti

Copy link
Copy Markdown
Member

Thanks for the fix @amoghrajesh.

@kaxil wish to check if this would be included in 3.1.2 (not sure if we're still planning to cut one before you go on leave :))? Today, I observed with my local development efforts that upon installing Cosmos on 3.1.1 as base image, somehow structlog version gets updated (maybe via some cosmos dependency), and I observe this failure. I verified that Airflow 3.1.1 installs structlog 25.4.0, so I believe it's safe by itself.

@kaxilkaxil added this to the Airflow 3.1.2 milestone Oct 27, 2025
@kaxil

kaxil commented Oct 27, 2025

Copy link
Copy Markdown
Member

Yup, this will be part of 3.1.2. Has been chery-picked already to v3-1-test

@hynek

Copy link
Copy Markdown

Wow so sorry for that! To add some context from the structlog side: Styles wasn't really a thing – it was a hack to make the old-style class-variables-as-storage work as a type hint (I mean, what does Union[_Styles, Type[_Styles]] even mean). And since it was never documented, I kinda treated it like an internal thing.

Since you've already fixed it, I don't think it makes any sense to do any emergency releases form my side. Again, I'm sorry.

@amoghrajesh

Copy link
Copy Markdown
ContributorAuthor

All good, @hynek!

I do not think any other project would've suffered it but we certainly did because Styles was exposed in the public interface, and we used it. IAC, we moved it rightly to a type checking block and I think we are good now.

tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 19, 2025
tatiana added a commit to anyscale/astro-provider-anyscale that referenced this pull request Nov 20, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@amoghrajesh@uranusjr@pankajkoti@kaxil@hynek@ashb@potiuk@gopidesupavan@eladkal