Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

f-strings break the workflow generator #584

Closed
sergiynesterenko90 opened this issue Apr 18, 2023 · 4 comments
Closed

f-strings break the workflow generator #584

sergiynesterenko90 opened this issue Apr 18, 2023 · 4 comments
Labels
semver:patch A change requiring a patch version bump type:bug A general bug

Comments

@sergiynesterenko90
Copy link
Contributor

Hi, I'm trying to use an f-string in my script and am running into issues. I think the presence of curly brackets confuses the workflow compiler somehow. I'm using hera 5.1.3.

For example, I can run the basic example script just fine. But if I make a small change to include an f-string:

from hera.workflows import Steps, Workflow, script


@script()
def echo(message: str):
    print(f"message: {message}")


with Workflow(
    generate_name="single-script-",
    entrypoint="steps",
) as w:
    with Steps(name="steps"):
        echo(arguments={"message": "A"})

w.create()

I get an error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[5], line 18
     15     with Steps(name="steps"):
     16         echo(arguments={"message": "A"})
---> 18 wf = {"Workflow": w.to_dict()}
     20 # submit the workflow to Argo
     21 argo.create_workflow(wf)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/workflow.py:319](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/workflow.py:319), in Workflow.to_dict(self)
    317 def to_dict(self) -> Any:
    318     """Builds the Workflow as an Argo schema Workflow object and returns it as a dictionary."""
--> 319     return self.build().dict(exclude_none=True, by_alias=True)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/workflow.py:212](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/workflow.py:212), in Workflow.build(self)
    209     template = template._dispatch_hooks()
    211 if isinstance(template, Templatable):
--> 212     templates.append(template._build_template())
    213 elif isinstance(template, get_args(TTemplate)):
    214     templates.append(template)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:172](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:172), in Script._build_template(self)
    144 def _build_template(self) -> _ModelTemplate:
    145     assert isinstance(self.constructor, ScriptConstructor)
    146     return self.constructor.transform_template_post_build(
    147         self,
    148         _ModelTemplate(
    149             active_deadline_seconds=self.active_deadline_seconds,
    150             affinity=self.affinity,
    151             archive_location=self.archive_location,
    152             automount_service_account_token=self.automount_service_account_token,
    153             daemon=self.daemon,
    154             executor=self.executor,
    155             fail_fast=self.fail_fast,
    156             host_aliases=self.host_aliases,
    157             init_containers=self.init_containers,
    158             inputs=self._build_inputs(),
    159             memoize=self.memoize,
    160             metadata=self._build_metadata(),
    161             metrics=self.metrics,
    162             name=self.name,
    163             node_selector=self.node_selector,
    164             outputs=self._build_outputs(),
    165             parallelism=self.parallelism,
    166             plugin=self.plugin,
    167             pod_spec_patch=self.pod_spec_patch,
    168             priority=self.priority,
    169             priority_class_name=self.priority_class_name,
    170             retry_strategy=self.retry_strategy,
    171             scheduler_name=self.scheduler_name,
--> 172             script=self._build_script(),
    173             security_context=self.pod_security_context,
    174             service_account_name=self.service_account_name,
    175             sidecars=self.sidecars,
    176             synchronization=self.synchronization,
    177             timeout=self.timeout,
    178             tolerations=self.tolerations,
    179             volumes=self._build_volumes(),
    180         ),
    181     )

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:201](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:201), in Script._build_script(self)
    183 def _build_script(self) -> _ModelScriptTemplate:
    184     assert isinstance(self.constructor, ScriptConstructor)
    185     return self.constructor.transform_script_template_post_build(
    186         self,
    187         _ModelScriptTemplate(
    188             args=self.args,
    189             command=self.command,
    190             env=self._build_env(),
    191             env_from=self._build_env_from(),
    192             image=self.image,
    193             image_pull_policy=self._build_image_pull_policy(),
    194             lifecycle=self.lifecycle,
    195             liveness_probe=self.liveness_probe,
    196             name=self.container_name,
    197             ports=self.ports,
    198             readiness_probe=self.readiness_probe,
    199             resources=self._build_resources(),
    200             security_context=self.security_context,
--> 201             source=self.constructor.generate_source(self),
    202             startup_probe=self.startup_probe,
    203             stdin=self.stdin,
    204             stdin_once=self.stdin_once,
    205             termination_message_path=self.termination_message_path,
    206             termination_message_policy=self.termination_message_policy,
    207             tty=self.tty,
    208             volume_devices=self.volume_devices,
    209             volume_mounts=self._build_volume_mounts(),
    210             working_dir=self.working_dir,
    211         ),
    212     )

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:336](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/script.py:336), in InlineScriptConstructor.generate_source(self, instance)
    330     script += "\n"
    332 # We use ast parse/unparse to get the source code of the function
    333 # in order to have consistent looking functions and getting rid of any comments
    334 # parsing issues.
    335 # See https://github.com/argoproj-labs/hera/issues/572
--> 336 content = roundtrip(inspect.getsource(instance.source)).splitlines()
    337 for i, line in enumerate(content):
    338     if line.startswith("def") or line.startswith("async def"):

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:949](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:949), in roundtrip(source)
    947 if hasattr(ast, "unparse"):
    948     return ast.unparse(tree)
--> 949 return unparse(tree)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:942](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:942), in unparse(ast_obj)
    940 def unparse(ast_obj):
    941     unparser = _Unparser()
--> 942     return unparser(ast_obj)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:70](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:70), in _Unparser.__call__(self, node)
     67 """Outputs a source code string that, if converted back to an ast
     68 (using ast.parse) will generate an AST equivalent to *node*"""
     69 self._source = []
---> 70 self.traverse(node)
     71 return "".join(self._source)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183), in _Unparser.traverse(self, node)
    181         self.traverse(item)
    182 else:
--> 183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/ast.py:371](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/ast.py:371), in NodeVisitor.visit(self, node)
    369 method = 'visit_' + node.__class__.__name__
    370 visitor = getattr(self, method, self.generic_visit)
--> 371 return visitor(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:194](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:194), in _Unparser.visit_Module(self, node)
    192 def visit_Module(self, node):
    193     self._type_ignores = {ignore.lineno: f"ignore{ignore.tag}" for ignore in node.type_ignores}
--> 194     self._write_docstring_and_traverse_body(node)
    195     self._type_ignores.clear()

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:190](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:190), in _Unparser._write_docstring_and_traverse_body(self, node)
    188     self.traverse(node.body[1:])
    189 else:
--> 190     self.traverse(node.body)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:181](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:181), in _Unparser.traverse(self, node)
    179 if isinstance(node, list):
    180     for item in node:
--> 181         self.traverse(item)
    182 else:
    183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183), in _Unparser.traverse(self, node)
    181         self.traverse(item)
    182 else:
--> 183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/ast.py:371](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/ast.py:371), in NodeVisitor.visit(self, node)
    369 method = 'visit_' + node.__class__.__name__
    370 visitor = getattr(self, method, self.generic_visit)
--> 371 return visitor(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:374](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:374), in _Unparser.visit_FunctionDef(self, node)
    373 def visit_FunctionDef(self, node):
--> 374     self._function_helper(node, "def")

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:392](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:392), in _Unparser._function_helper(self, node, fill_suffix)
    390     self.traverse(node.returns)
    391 with self.block(extra=self.get_type_comment(node)):
--> 392     self._write_docstring_and_traverse_body(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:190](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:190), in _Unparser._write_docstring_and_traverse_body(self, node)
    188     self.traverse(node.body[1:])
    189 else:
--> 190     self.traverse(node.body)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:181](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:181), in _Unparser.traverse(self, node)
    179 if isinstance(node, list):
    180     for item in node:
--> 181         self.traverse(item)
    182 else:
    183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183), in _Unparser.traverse(self, node)
    181         self.traverse(item)
    182 else:
--> 183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/ast.py:371](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/ast.py:371), in NodeVisitor.visit(self, node)
    369 method = 'visit_' + node.__class__.__name__
    370 visitor = getattr(self, method, self.generic_visit)
--> 371 return visitor(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:233](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:233), in _Unparser.visit_Assign(self, node)
    231     self.traverse(target)
    232     self.write(" = ")
--> 233 self.traverse(node.value)
    234 if type_comment := self.get_type_comment(node):
    235     self.write(type_comment)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:183), in _Unparser.traverse(self, node)
    181         self.traverse(item)
    182 else:
--> 183     super().visit(node)

File [~/anaconda3/envs/quilt/lib/python3.8/ast.py:371](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/ast.py:371), in NodeVisitor.visit(self, node)
    369 method = 'visit_' + node.__class__.__name__
    370 visitor = getattr(self, method, self.generic_visit)
--> 371 return visitor(node)

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:511](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:511), in _Unparser.visit_JoinedStr(self, node)
    509 for value in node.values:
    510     meth = getattr(self, "_fstring_" + type(value).__name__)
--> 511     meth(value, self.buffer_writer)
    512     buffer.append((self.buffer, isinstance(value, Constant)))
    513 new_buffer = []

File [~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:546](https://vscode-remote+wsl-002bubuntu.vscode-resource.vscode-cdn.net/home/sergiy/git/quilt/quilt/notebooks/sergiy/~/anaconda3/envs/quilt/lib/python3.8/site-packages/hera/workflows/_unparse.py:546), in _Unparser._fstring_FormattedValue(self, node, write)
    544 unparser.set_precedence(_Precedence.TEST.next(), node.value)
    545 expr = unparser.visit(node.value)
--> 546 if expr.startswith("{"):
    547     write(" ")  # Separate pair of opening brackets as "{ {"
    548 if "\\" in expr:

AttributeError: 'NoneType' object has no attribute 'startswith'
@flaviuvadan
Copy link
Collaborator

Hey @sergiynesterenko90! Thanks for reporting this! We are aware of this, and it's actually clearly manifesting in the 2 PRs we currently have up #613 and #606. This is caused by the AST unparse functionality we added for backwards compatibility with Py3.8. I think #613 has a potential fix but we also have to fix Hera's CI for this because different Py versions AST modules result in different scripts being tested, which breaks CI. Going to try to fix this issue as part of those PRs and will post back here

@flaviuvadan flaviuvadan linked a pull request May 6, 2023 that will close this issue
4 tasks
@flaviuvadan flaviuvadan added semver:patch A change requiring a patch version bump type:bug A general bug labels May 6, 2023
@sambhav sambhav mentioned this issue May 27, 2023
4 tasks
flaviuvadan pushed a commit that referenced this issue Mar 25, 2024
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 4.1.0
to 5.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst">pytest-cov's
changelog</a>.</em></p>
<blockquote>
<h2>5.0.0 (2024-03-24)</h2>
<ul>
<li>Removed support for xdist rsync (now deprecated).
Contributed by Matthias Reichenbach in
<code>[#623](pytest-dev/pytest-cov#623)
&lt;https://github.com/pytest-dev/pytest-cov/pull/623&gt;</code>_.</li>
<li>Switched docs theme to Furo.</li>
<li>Various legacy Python cleanup and CI improvements.
Contributed by Christian Clauss and Hugo van Kemenade in
<code>[#630](pytest-dev/pytest-cov#630)
&lt;https://github.com/pytest-dev/pytest-cov/pull/630&gt;</code><em>,
<code>[#631](pytest-dev/pytest-cov#631)
&lt;https://github.com/pytest-dev/pytest-cov/pull/631&gt;</code></em>,
<code>[#632](pytest-dev/pytest-cov#632)
&lt;https://github.com/pytest-dev/pytest-cov/pull/632&gt;</code>_ and
<code>[#633](pytest-dev/pytest-cov#633)
&lt;https://github.com/pytest-dev/pytest-cov/pull/633&gt;</code>_.</li>
<li>Added a <code>pyproject.toml</code> example in the docs.
Contributed by Dawn James in
<code>[#626](pytest-dev/pytest-cov#626)
&lt;https://github.com/pytest-dev/pytest-cov/pull/626&gt;</code>_.</li>
<li>Modernized project's pre-commit hooks to use ruff. Initial POC
contributed by
Christian Clauss in
<code>[#584](pytest-dev/pytest-cov#584)
&lt;https://github.com/pytest-dev/pytest-cov/pull/584&gt;</code>_.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/5295ce01c84262cec88f31255e9ac538718f3047"><code>5295ce0</code></a>
Bump version: 4.1.0 → 5.0.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/1181b067972bf94569f8011f3b18f271690f9ab1"><code>1181b06</code></a>
Update changelog.</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/9757222e2e044361e70125ebdd96e5eb87395983"><code>9757222</code></a>
Fix a minor grammar error (<a
href="https://redirect.github.com/pytest-dev/pytest-cov/issues/636">#636</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/9f5cd81a0dbe3fe41681efdbef516c08988fe8ff"><code>9f5cd81</code></a>
Cleanup releasing instructions. Closes <a
href="https://redirect.github.com/pytest-dev/pytest-cov/issues/616">#616</a>.</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/93b5047ec5050d63c10a6fe16a09b671a7a03df8"><code>93b5047</code></a>
Add test for pyproject.toml loading without explicit --cov-config. Ref
<a
href="https://redirect.github.com/pytest-dev/pytest-cov/issues/508">#508</a>.</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/ff50860d7c67b920503745d92a3f0944cf41f982"><code>ff50860</code></a>
docs: add config instructions for pyproject.toml.</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/4a5a4b5fa4b1c63ddcab5cbc1813798c9b6f1d36"><code>4a5a4b5</code></a>
Keep GitHub Actions up to date with GitHub's Dependabot</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/1d7f55963d5138f41c452a946f7cca7e0b6ee8b2"><code>1d7f559</code></a>
Fix or remove URLs that are causing docs tests to fail</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/6a5af8e85b8242ac815f33e26adf9068f5f0ebc3"><code>6a5af8e</code></a>
Update changelog.</li>
<li><a
href="https://github.com/pytest-dev/pytest-cov/commit/d9fe8dfed15023d3410dd299c5092e755b8981c2"><code>d9fe8df</code></a>
Switch to furo. Closes <a
href="https://redirect.github.com/pytest-dev/pytest-cov/issues/618">#618</a>.</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-cov/compare/v4.1.0...v5.0.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pytest-cov&package-manager=pip&previous-version=4.1.0&new-version=5.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@yiftachn
Copy link

I think this should be highlighted in the docs as the error is ambiguous and took me quite some time to figure out.
Perhaps adding a better warning message?

@sambhav
Copy link
Collaborator

sambhav commented Jun 18, 2024

This only happens with Python 3.8 which is deprecated and will be end of life soon. Our preference would be to drop support for 3.8 soon and ask users to upgrade to the next minor version of python instead.

@sambhav
Copy link
Collaborator

sambhav commented Sep 17, 2024

Closing this as won't fix as we have dropped support for python 3.8

@sambhav sambhav closed this as completed Sep 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
semver:patch A change requiring a patch version bump type:bug A general bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants