We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Missing `f` prefix on f-strings
Some strings looks like they're meant to be f-strings but are missing the `f` prefix meaning variable interpolation won't happen.

https://github.com/ansible-community/molecule/blob/19381a8a564f8013453b8dfb08b677fd81c2e358/src/molecule/scenarios.py#L85

I found this issue automatically. I'm a bot. Beep Boop 🦊. See other issues I found in your repo [here](https://codereview.doctor/ansible-community/molecule)

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/molecule/scenarios.py`
Content:
```
1 #  Copyright (c) 2015-2018 Cisco Systems, Inc.
2 #
3 #  Permission is hereby granted, free of charge, to any person obtaining a copy
4 #  of this software and associated documentation files (the "Software"), to
5 #  deal in the Software without restriction, including without limitation the
6 #  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 #  sell copies of the Software, and to permit persons to whom the Software is
8 #  furnished to do so, subject to the following conditions:
9 #
10 #  The above copyright notice and this permission notice shall be included in
11 #  all copies or substantial portions of the Software.
12 #
13 #  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 #  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 #  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 #  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 #  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 #  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19 #  DEALINGS IN THE SOFTWARE.
20 """Scenarios Module."""
21 import logging
22 from typing import List
23 
24 from molecule import util
25 
26 LOG = logging.getLogger(__name__)
27 
28 
29 class Scenarios(object):
30     """The Scenarios groups one or more scenario objects Molecule will execute."""
31 
32     def __init__(self, configs, scenario_name=None):
33         """
34         Initialize a new scenarios class and returns None.
35 
36         :param configs: A list containing Molecule config instances.
37         :param scenario_name: A string containing the name of the scenario.
38         :return: None
39         """
40         self._configs = configs
41         self._scenario_name = scenario_name
42         self._scenarios = self.all
43 
44     def next(self):
45         if not self._scenarios:
46             raise StopIteration
47         return self._scenarios.pop(0)
48 
49     def __iter__(self):
50         """Make object iterable."""
51         return self
52 
53     __next__ = next  # Python 3.X compatibility
54 
55     @property
56     def all(self):
57         """
58         Return a list containing all scenario objects.
59 
60         :return: list
61         """
62         if self._scenario_name:
63             scenarios = self._filter_for_scenario()
64             self._verify()
65 
66             return scenarios
67 
68         scenarios = [c.scenario for c in self._configs]
69         scenarios.sort(key=lambda x: x.directory)
70         return scenarios
71 
72     def print_matrix(self):
73         msg = "Test matrix"
74         LOG.info(msg)
75 
76         tree = {}
77         for scenario in self.all:
78             tree[scenario.name] = [action for action in scenario.sequence]
79         util.print_as_yaml(tree)
80 
81     def sequence(self, scenario_name: str) -> List[str]:
82         for scenario in self.all:
83             if scenario.name == scenario_name:
84                 return [action for action in scenario.sequence]
85         raise RuntimeError("Unable to find sequence for {scenario_name} scenario.")
86 
87     def _verify(self):
88         """
89         Verify the specified scenario was found and returns None.
90 
91         :return: None
92         """
93         scenario_names = [c.scenario.name for c in self._configs]
94         if self._scenario_name not in scenario_names:
95             msg = f"Scenario '{self._scenario_name}' not found.  Exiting."
96             util.sysexit_with_message(msg)
97 
98     def _filter_for_scenario(self):
99         """
100         Find the scenario matching the provided scenario name and returns a \
101         list.
102 
103         :return: list
104         """
105         return [
106             c.scenario for c in self._configs if c.scenario.name == self._scenario_name
107         ]
108 
109     def _get_matrix(self):
110         """
111         Build a matrix of scenarios with sequence to include and returns a \
112         dict.
113 
114         {
115             scenario_1: {
116                 'subcommand': [
117                     'action-1',
118                     'action-2',
119                 ],
120             },
121             scenario_2: {
122                 'subcommand': [
123                     'action-1',
124                 ],
125             },
126         }
127 
128         :returns: dict
129         """
130         return dict(
131             {
132                 scenario.name: {
133                     "check": scenario.check_sequence,
134                     "cleanup": scenario.cleanup_sequence,
135                     "converge": scenario.converge_sequence,
136                     "create": scenario.create_sequence,
137                     "dependency": scenario.dependency_sequence,
138                     "destroy": scenario.destroy_sequence,
139                     "idempotence": scenario.idempotence_sequence,
140                     "lint": scenario.lint_sequence,
141                     "prepare": scenario.prepare_sequence,
142                     "side_effect": scenario.side_effect_sequence,
143                     "syntax": scenario.syntax_sequence,
144                     "test": scenario.test_sequence,
145                     "verify": scenario.verify_sequence,
146                 }
147                 for scenario in self.all
148             }
149         )
150
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/molecule/scenarios.py b/src/molecule/scenarios.py
--- a/src/molecule/scenarios.py
+++ b/src/molecule/scenarios.py
@@ -82,7 +82,7 @@
         for scenario in self.all:
             if scenario.name == scenario_name:
                 return [action for action in scenario.sequence]
-        raise RuntimeError("Unable to find sequence for {scenario_name} scenario.")
+        raise RuntimeError(f"Unable to find sequence for {scenario_name} scenario.")
 
     def _verify(self):
         """

{"golden_diff": "diff --git a/src/molecule/scenarios.py b/src/molecule/scenarios.py\n--- a/src/molecule/scenarios.py\n+++ b/src/molecule/scenarios.py\n@@ -82,7 +82,7 @@\n         for scenario in self.all:\n             if scenario.name == scenario_name:\n                 return [action for action in scenario.sequence]\n-        raise RuntimeError(\"Unable to find sequence for {scenario_name} scenario.\")\n+        raise RuntimeError(f\"Unable to find sequence for {scenario_name} scenario.\")\n \n     def _verify(self):\n         \"\"\"\n", "issue": "Missing `f` prefix on f-strings\nSome strings looks like they're meant to be f-strings but are missing the `f` prefix meaning variable interpolation won't happen.\n\nhttps://github.com/ansible-community/molecule/blob/19381a8a564f8013453b8dfb08b677fd81c2e358/src/molecule/scenarios.py#L85\n\nI found this issue automatically. I'm a bot. Beep Boop \ud83e\udd8a. See other issues I found in your repo [here](https://codereview.doctor/ansible-community/molecule)\n", "before_files": [{"content": "#  Copyright (c) 2015-2018 Cisco Systems, Inc.\n#\n#  Permission is hereby granted, free of charge, to any person obtaining a copy\n#  of this software and associated documentation files (the \"Software\"), to\n#  deal in the Software without restriction, including without limitation the\n#  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n#  sell copies of the Software, and to permit persons to whom the Software is\n#  furnished to do so, subject to the following conditions:\n#\n#  The above copyright notice and this permission notice shall be included in\n#  all copies or substantial portions of the Software.\n#\n#  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n#  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n#  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n#  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n#  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n#  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n#  DEALINGS IN THE SOFTWARE.\n\"\"\"Scenarios Module.\"\"\"\nimport logging\nfrom typing import List\n\nfrom molecule import util\n\nLOG = logging.getLogger(__name__)\n\n\nclass Scenarios(object):\n    \"\"\"The Scenarios groups one or more scenario objects Molecule will execute.\"\"\"\n\n    def __init__(self, configs, scenario_name=None):\n        \"\"\"\n        Initialize a new scenarios class and returns None.\n\n        :param configs: A list containing Molecule config instances.\n        :param scenario_name: A string containing the name of the scenario.\n        :return: None\n        \"\"\"\n        self._configs = configs\n        self._scenario_name = scenario_name\n        self._scenarios = self.all\n\n    def next(self):\n        if not self._scenarios:\n            raise StopIteration\n        return self._scenarios.pop(0)\n\n    def __iter__(self):\n        \"\"\"Make object iterable.\"\"\"\n        return self\n\n    __next__ = next  # Python 3.X compatibility\n\n    @property\n    def all(self):\n        \"\"\"\n        Return a list containing all scenario objects.\n\n        :return: list\n        \"\"\"\n        if self._scenario_name:\n            scenarios = self._filter_for_scenario()\n            self._verify()\n\n            return scenarios\n\n        scenarios = [c.scenario for c in self._configs]\n        scenarios.sort(key=lambda x: x.directory)\n        return scenarios\n\n    def print_matrix(self):\n        msg = \"Test matrix\"\n        LOG.info(msg)\n\n        tree = {}\n        for scenario in self.all:\n            tree[scenario.name] = [action for action in scenario.sequence]\n        util.print_as_yaml(tree)\n\n    def sequence(self, scenario_name: str) -> List[str]:\n        for scenario in self.all:\n            if scenario.name == scenario_name:\n                return [action for action in scenario.sequence]\n        raise RuntimeError(\"Unable to find sequence for {scenario_name} scenario.\")\n\n    def _verify(self):\n        \"\"\"\n        Verify the specified scenario was found and returns None.\n\n        :return: None\n        \"\"\"\n        scenario_names = [c.scenario.name for c in self._configs]\n        if self._scenario_name not in scenario_names:\n            msg = f\"Scenario '{self._scenario_name}' not found.  Exiting.\"\n            util.sysexit_with_message(msg)\n\n    def _filter_for_scenario(self):\n        \"\"\"\n        Find the scenario matching the provided scenario name and returns a \\\n        list.\n\n        :return: list\n        \"\"\"\n        return [\n            c.scenario for c in self._configs if c.scenario.name == self._scenario_name\n        ]\n\n    def _get_matrix(self):\n        \"\"\"\n        Build a matrix of scenarios with sequence to include and returns a \\\n        dict.\n\n        {\n            scenario_1: {\n                'subcommand': [\n                    'action-1',\n                    'action-2',\n                ],\n            },\n            scenario_2: {\n                'subcommand': [\n                    'action-1',\n                ],\n            },\n        }\n\n        :returns: dict\n        \"\"\"\n        return dict(\n            {\n                scenario.name: {\n                    \"check\": scenario.check_sequence,\n                    \"cleanup\": scenario.cleanup_sequence,\n                    \"converge\": scenario.converge_sequence,\n                    \"create\": scenario.create_sequence,\n                    \"dependency\": scenario.dependency_sequence,\n                    \"destroy\": scenario.destroy_sequence,\n                    \"idempotence\": scenario.idempotence_sequence,\n                    \"lint\": scenario.lint_sequence,\n                    \"prepare\": scenario.prepare_sequence,\n                    \"side_effect\": scenario.side_effect_sequence,\n                    \"syntax\": scenario.syntax_sequence,\n                    \"test\": scenario.test_sequence,\n                    \"verify\": scenario.verify_sequence,\n                }\n                for scenario in self.all\n            }\n        )\n", "path": "src/molecule/scenarios.py"}], "after_files": [{"content": "#  Copyright (c) 2015-2018 Cisco Systems, Inc.\n#\n#  Permission is hereby granted, free of charge, to any person obtaining a copy\n#  of this software and associated documentation files (the \"Software\"), to\n#  deal in the Software without restriction, including without limitation the\n#  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n#  sell copies of the Software, and to permit persons to whom the Software is\n#  furnished to do so, subject to the following conditions:\n#\n#  The above copyright notice and this permission notice shall be included in\n#  all copies or substantial portions of the Software.\n#\n#  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n#  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n#  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n#  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n#  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n#  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n#  DEALINGS IN THE SOFTWARE.\n\"\"\"Scenarios Module.\"\"\"\nimport logging\nfrom typing import List\n\nfrom molecule import util\n\nLOG = logging.getLogger(__name__)\n\n\nclass Scenarios(object):\n    \"\"\"The Scenarios groups one or more scenario objects Molecule will execute.\"\"\"\n\n    def __init__(self, configs, scenario_name=None):\n        \"\"\"\n        Initialize a new scenarios class and returns None.\n\n        :param configs: A list containing Molecule config instances.\n        :param scenario_name: A string containing the name of the scenario.\n        :return: None\n        \"\"\"\n        self._configs = configs\n        self._scenario_name = scenario_name\n        self._scenarios = self.all\n\n    def next(self):\n        if not self._scenarios:\n            raise StopIteration\n        return self._scenarios.pop(0)\n\n    def __iter__(self):\n        \"\"\"Make object iterable.\"\"\"\n        return self\n\n    __next__ = next  # Python 3.X compatibility\n\n    @property\n    def all(self):\n        \"\"\"\n        Return a list containing all scenario objects.\n\n        :return: list\n        \"\"\"\n        if self._scenario_name:\n            scenarios = self._filter_for_scenario()\n            self._verify()\n\n            return scenarios\n\n        scenarios = [c.scenario for c in self._configs]\n        scenarios.sort(key=lambda x: x.directory)\n        return scenarios\n\n    def print_matrix(self):\n        msg = \"Test matrix\"\n        LOG.info(msg)\n\n        tree = {}\n        for scenario in self.all:\n            tree[scenario.name] = [action for action in scenario.sequence]\n        util.print_as_yaml(tree)\n\n    def sequence(self, scenario_name: str) -> List[str]:\n        for scenario in self.all:\n            if scenario.name == scenario_name:\n                return [action for action in scenario.sequence]\n        raise RuntimeError(f\"Unable to find sequence for {scenario_name} scenario.\")\n\n    def _verify(self):\n        \"\"\"\n        Verify the specified scenario was found and returns None.\n\n        :return: None\n        \"\"\"\n        scenario_names = [c.scenario.name for c in self._configs]\n        if self._scenario_name not in scenario_names:\n            msg = f\"Scenario '{self._scenario_name}' not found.  Exiting.\"\n            util.sysexit_with_message(msg)\n\n    def _filter_for_scenario(self):\n        \"\"\"\n        Find the scenario matching the provided scenario name and returns a \\\n        list.\n\n        :return: list\n        \"\"\"\n        return [\n            c.scenario for c in self._configs if c.scenario.name == self._scenario_name\n        ]\n\n    def _get_matrix(self):\n        \"\"\"\n        Build a matrix of scenarios with sequence to include and returns a \\\n        dict.\n\n        {\n            scenario_1: {\n                'subcommand': [\n                    'action-1',\n                    'action-2',\n                ],\n            },\n            scenario_2: {\n                'subcommand': [\n                    'action-1',\n                ],\n            },\n        }\n\n        :returns: dict\n        \"\"\"\n        return dict(\n            {\n                scenario.name: {\n                    \"check\": scenario.check_sequence,\n                    \"cleanup\": scenario.cleanup_sequence,\n                    \"converge\": scenario.converge_sequence,\n                    \"create\": scenario.create_sequence,\n                    \"dependency\": scenario.dependency_sequence,\n                    \"destroy\": scenario.destroy_sequence,\n                    \"idempotence\": scenario.idempotence_sequence,\n                    \"lint\": scenario.lint_sequence,\n                    \"prepare\": scenario.prepare_sequence,\n                    \"side_effect\": scenario.side_effect_sequence,\n                    \"syntax\": scenario.syntax_sequence,\n                    \"test\": scenario.test_sequence,\n                    \"verify\": scenario.verify_sequence,\n                }\n                for scenario in self.all\n            }\n        )\n", "path": "src/molecule/scenarios.py"}]}