Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001
, '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

Allow non-string valid JSON values in Variable import. - #49844

Merged
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837
Apr 30, 2025
Merged

Allow non-string valid JSON values in Variable import.#49844
tirkarthi merged 3 commits into
apache:mainfrom
tirkarthi:gh49837

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Airflow 3.0 had the change to accept only string values as variable values during import through API that prohibited using int, list, etc that are valid JSON values. Airflow 3 cli accepts import of valid JSON without this restriction. The API should also accept valid JSON values.

Closes#49837

@shubhamraj-gitshubhamraj-git left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the fix.
Some tests failures needs to be fixed.

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

@bugraoz93

Copy link
Copy Markdown
Contributor

It seems airflow-ctl is trying to do some work for non-primitive types in this case JsonValue . cc: @bugraoz93 for any help on this.

 __________ ERROR collecting tests/airflow_ctl/ctl/test_cli_config.py ___________
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:28: in <module>
from airflowctl.ctl.cli_config import ActionCommand, CommandFactory, GroupCommand, merge_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:554: in <module>
base_commands=command_factory.group_commands, commands_will_be_merged=core_commands
airflow-ctl/src/airflowctl/ctl/cli_config.py:471: in group_commands
self._create_args_map_from_operation()
airflow-ctl/src/airflowctl/ctl/cli_config.py:391: in _create_args_map_from_operation
self._create_arg_for_non_primitive_type(
airflow-ctl/src/airflowctl/ctl/cli_config.py:359: in _create_arg_for_non_primitive_type
annotation = field_type.annotation.__args__[0]
/usr/local/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py:271: in __getattr__
raise AttributeError(item)
E AttributeError: __args__

Thanks for the PR @tirkarthi and tagging! I will check this out in a couple of hours.

@bugraoz93

Copy link
Copy Markdown
Contributor

#49917 this should fix it @tirkarthi :)

@pierrejeambrun

Copy link
Copy Markdown
Member

Need to rebase and fix mypy before merging. (rebasing should fix the unrelated boto failure)

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

JsonValue is defined as a type alias and it should accept str as a type inside the union. I am not sure why mypy complains. Since the file is generated.py do I need to generate something here?

VariableBody definition

classVariableBody(BaseModel):
"""
Variable serializer for bodies.
"""
model_config=ConfigDict(
extra="forbid",
)
key: Annotated[str, Field(max_length=250, title="Key")]
value: Annotated[str, Field(title="Value")]
description: Annotated[str|None, Field(title="Description")] =None

Error

airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument
"value" to "VariableBody" has incompatible type "str"; expected "JsonValue" [arg-type]
value=value,
^~~~~
Found 1 error in 1 file (checked 26 source files)
Error 1 returned

https://github.com/pydantic/pydantic/blob/797fe31a87df5b707f29b440c9d189914d531ea7/pydantic/types.py#L2730-L2738

JsonValue: TypeAlias = Union[
List["JsonValue"],
Dict[str, "JsonValue"],
str,
bool,
int,
float,
None,
]

@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

@pierrejeambrun

pierrejeambrun commented Apr 29, 2025

Copy link
Copy Markdown
Member

To fix:
airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

@Dev-iL

Copy link
Copy Markdown
Collaborator

A similar fix might be needed in Connections: #49734

@bugraoz93

Copy link
Copy Markdown
Contributor

Below code is getting auto generated and added to generated.py . Any help @bugraoz93 on how to fix this? Tried running pre-commit but it doesn't help.

classJsonValue(RootModel[Any]):
root: Any

That generation is expected. We are syncing the datamodels with airflowctl to maintain multiple functionalities without too many changes automatically. These are the first teething issues we are experiencing so they will be less and less in the future.

To fix: airflow-ctl/tests/airflow_ctl/api/test_operations.py:666: error: Argument...

You can just use that instead in line 666

variable=VariableBody.model_validate(
{"key": key, "value": value, "description": description},
)

Thanks Pierre! Indeed, this should solve it.

@tirkarthi
tirkarthi merged commit 61dfd44 into apache:mainApr 30, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pierrejeambrun and @bugraoz93 for the help on fixing the tests. Thanks everyone for the reviews.

@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 61dfd44 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
tirkarthi added a commit to tirkarthi/airflow that referenced this pull request May 1, 2025
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

Backport PR : #50063

potiuk pushed a commit that referenced this pull request May 1, 2025
…49844) (#50063)
* Allow non-string valid JSON values in Variable import. (#49844)
(cherry picked from commit 61dfd44)
* fix (airflowctl): Handle custom generated objects (#49917)
---------
Co-authored-by: Bugra Ozturk <bugraoz93@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:airflow-ctlarea:APIAirflow's REST/HTTP APIarea:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Airflow 3.0.0 : Import Variables from GUI fails with "Error Parsing JSON File"

8 participants

@tirkarthi@bugraoz93@pierrejeambrun@Dev-iL@aritra24@shubhamraj-git@jscheffl@vatsrahul1001