internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: fedora-infra/bodhi

Issue:
@username doesn't work if username contains a hyphen 
I attempted to reply in Bodhi to user "roman-averin" using the @ sign, but it only recognizes the part of the username before the hyphen. For example, see https://bodhi.fedoraproject.org/updates/FEDORA-2023-ee241dcf80 . I saw no way to make it work so just removed my attempt. If there is a way to do it, it needs to be documented. The link to Fedora-Flavored Markdown says nothing.


Discussion:
Hopefully, it just needs to better define the regex at
[MENTION_RE = r'(?<!\S)(@\w+)'](https://github.com/fedora-infra/bodhi/blob/7a2e0685f6ae5ecb4db606f67c16616566853e94/bodhi-server/bodhi/server/__init__.py#L44)

Resolving patch:
diff --git a/bodhi-server/bodhi/server/__init__.py b/bodhi-server/bodhi/server/__init__.py
--- a/bodhi-server/bodhi/server/__init__.py
+++ b/bodhi-server/bodhi/server/__init__.py
@@ -41,7 +41,7 @@
 
 
 # This is a regular expression used to match username mentions in comments.
-MENTION_RE = r'(?<!\S)(@\w+)'
+MENTION_RE = r'(?<!\S)(@[\w-]+)'
 
 log = python_logging.getLogger(__name__)
 


Test patch:
diff --git a/bodhi-server/tests/views/test_generic.py b/bodhi-server/tests/views/test_generic.py
--- a/bodhi-server/tests/views/test_generic.py
+++ b/bodhi-server/tests/views/test_generic.py
@@ -156,6 +156,14 @@ def test_markdown_with_mention_with_numbers(self):
             ('<div class="markdown"><p>I vote for '
              '<a href="http://localhost/users/number80">@number80</a></p></div>')
 
+    def test_markdown_with_mention_with_dash(self):
+        res = self.app.get('/markdown', {
+            'text': 'See comment from @tin-tin',
+        }, status=200)
+        assert res.json_body['html'] == \
+            ('<div class="markdown"><p>See comment from '
+             '<a href="http://localhost/users/tin-tin">@tin-tin</a></p></div>')
+
     def test_markdown_with_unprefixed_bugzilla(self):
         res = self.app.get('/markdown', {
             'text': 'Crazy.  #12345 is still busted.',
Repository: fedora-infra/bodhi

Issue:
side-tag order on new update are ordered randomly?
Creating a new update shows all available side tags, but they show up ordered randomly?

![image](https://github.com/fedora-infra/bodhi/assets/773148/7bda4940-0470-484f-b5fc-50a29d45aa48)

I would expect list to show up ordered by sidetag name or by ID.


Discussion:

Resolving patch:
diff --git a/bodhi-server/bodhi/server/views/generic.py b/bodhi-server/bodhi/server/views/generic.py
--- a/bodhi-server/bodhi/server/views/generic.py
+++ b/bodhi-server/bodhi/server/views/generic.py
@@ -194,7 +194,7 @@ def _get_sidetags(koji, user=None, contains_builds=False):
                 'builds': builds[i][0]
             })
 
-    return result
+    return sorted(result, key=lambda d: d['name'])
 
 
 def _get_active_updates(request):


Test patch:
Repository: fedora-infra/bodhi

Issue:
The releases endpoint is not accessible by external tools
The `/releases/` endpoint uses a really restrictive CORS setting which prevents ajax calls to fetch the list of releases. This is done because the same endpoint accept both GET (for listing, using HTTP and JSON renderers) and POST (for add/edit releases). The latter should be restricted to requests originated from Bodhi server itself.

We can add a new endpoint reusing the same view method of the GET `/releases/` (using decorators) and assign the more relaxed `cors_origin_ro` CORS to it.


Discussion:

Resolving patch:
diff --git a/bodhi-server/bodhi/server/services/releases.py b/bodhi-server/bodhi/server/services/releases.py
--- a/bodhi-server/bodhi/server/services/releases.py
+++ b/bodhi-server/bodhi/server/services/releases.py
@@ -59,6 +59,9 @@
                    # Note, this 'rw' is not a typo. The @releases service has
                    # a ``post`` section at the bottom.
                    cors_origins=bodhi.server.security.cors_origins_rw)
+list_releases = Service(name='list_releases', path='/list_releases/',
+                        description='Fedora Releases',
+                        cors_origins=bodhi.server.security.cors_origins_ro)
 
 
 @release.get(accept="text/html", renderer="release.html",
@@ -281,6 +284,10 @@ def get_update_counts(releaseid, stable_only: bool = False):
             "active": active}
 
 
+@list_releases.get(accept=('application/json', 'text/json'),
+                   schema=bodhi.server.schemas.ListReleaseSchema(), renderer='json',
+                   error_handler=bodhi.server.services.errors.json_handler,
+                   validators=releases_get_validators)
 @releases.get(accept=('application/json', 'text/json'),
               schema=bodhi.server.schemas.ListReleaseSchema(), renderer='json',
               error_handler=bodhi.server.services.errors.json_handler,


Test patch:
diff --git a/bodhi-server/tests/services/test_releases.py b/bodhi-server/tests/services/test_releases.py
--- a/bodhi-server/tests/services/test_releases.py
+++ b/bodhi-server/tests/services/test_releases.py
@@ -110,6 +110,9 @@ def test_list_releases(self):
         assert body['releases'][0]['name'] == 'F17'
         assert body['releases'][1]['name'] == 'F22'
 
+        res_list = self.app.get('/list_releases/')
+        assert res_list.json_body == body
+
     def test_list_releases_with_pagination(self):
         res = self.app.get('/releases/')
         body = res.json_body
Repository: fedora-infra/bodhi

Issue:
Update.get_url() and abs_url() use `os.path.join` for some reason
Uh, well. It probably isn't ever going to matter in practice, but if somebody ever tries running a Bodhi instance on Windows for some reason, and fixes every other thing they run into first, this might give them a shock...


Discussion:
(in case it's not clear, `os.path.join` has no business being used to construct URLs, which always use forward slashes whatever OS you happen to be running on)

Resolving patch:
diff --git a/bodhi-server/bodhi/server/models.py b/bodhi-server/bodhi/server/models.py
--- a/bodhi-server/bodhi/server/models.py
+++ b/bodhi-server/bodhi/server/models.py
@@ -20,9 +20,9 @@
 from datetime import date, datetime, timedelta
 from functools import lru_cache
 from textwrap import wrap
+from urllib.parse import urljoin
 import hashlib
 import json
-import os
 import re
 import time
 import typing
@@ -3421,9 +3421,7 @@ def get_url(self):
         Returns:
             str: A URL.
         """
-        path = ['updates']
-        path.append(self.alias)
-        return os.path.join(*path)
+        return f'updates/{self.alias}'
 
     def abs_url(self, request=None):
         """
@@ -3433,7 +3431,7 @@ def abs_url(self, request=None):
             request (pyramid.request.Request or None): The current web request. Unused.
         """
         base = config['base_address']
-        return os.path.join(base, self.get_url())
+        return urljoin(base, self.get_url())
 
     url = abs_url
 


Test patch:
Repository: fedora-infra/bodhi

Issue:
Bodhi enums implementation incompatible with Python 3.13
This code, which was taken from an old recipe at http://techspot.zzzeek.org/2011/01/14/the-enum-recipe, doesn't work anymore in Python 3.13:
```
class EnumSymbol(object):
    def __init__(self, cls_, name, value, description):
        self.cls_ = cls_
        self.name = name
        self.value = value
        self.description = description

class EnumMeta(type):
    def __init__(cls, classname, bases, dict_):
        cls._reg = reg = cls._reg.copy()
        for k, v in dict_.items():
            if isinstance(v, tuple):
                sym = reg[v[0]] = EnumSymbol(cls, k, *v)
                setattr(cls, k, sym)
        return type.__init__(cls, classname, bases, dict_)

class DeclEnum(metaclass=EnumMeta):
    _reg = {}
```

bodhi-server is currently FTB in F41.


Discussion:

Resolving patch:
diff --git a/bodhi-server/bodhi/server/models.py b/bodhi-server/bodhi/server/models.py
--- a/bodhi-server/bodhi/server/models.py
+++ b/bodhi-server/bodhi/server/models.py
@@ -187,7 +187,7 @@ def __init__(cls, classname, bases, dict_):
         """
         cls._reg = reg = cls._reg.copy()
         for k, v in dict_.items():
-            if isinstance(v, tuple):
+            if isinstance(v, tuple) and v:
                 sym = reg[v[0]] = EnumSymbol(cls, k, *v)
                 setattr(cls, k, sym)
         return type.__init__(cls, classname, bases, dict_)


Test patch:
Repository: fedora-infra/bodhi

Issue:
Bodhi enums implementation incompatible with Python 3.13
This code, which was taken from an old recipe at http://techspot.zzzeek.org/2011/01/14/the-enum-recipe, doesn't work anymore in Python 3.13:
```
class EnumSymbol(object):
    def __init__(self, cls_, name, value, description):
        self.cls_ = cls_
        self.name = name
        self.value = value
        self.description = description

class EnumMeta(type):
    def __init__(cls, classname, bases, dict_):
        cls._reg = reg = cls._reg.copy()
        for k, v in dict_.items():
            if isinstance(v, tuple):
                sym = reg[v[0]] = EnumSymbol(cls, k, *v)
                setattr(cls, k, sym)
        return type.__init__(cls, classname, bases, dict_)

class DeclEnum(metaclass=EnumMeta):
    _reg = {}
```

bodhi-server is currently FTB in F41.


Discussion:

Resolving patch:
diff --git a/bodhi-server/bodhi/server/models.py b/bodhi-server/bodhi/server/models.py
--- a/bodhi-server/bodhi/server/models.py
+++ b/bodhi-server/bodhi/server/models.py
@@ -186,7 +186,7 @@ def __init__(cls, classname, bases, dict_):
         """
         cls._reg = reg = cls._reg.copy()
         for k, v in dict_.items():
-            if isinstance(v, tuple):
+            if isinstance(v, tuple) and v:
                 sym = reg[v[0]] = EnumSymbol(cls, k, *v)
                 setattr(cls, k, sym)
         return type.__init__(cls, classname, bases, dict_)


Test patch:
Repository: microsoft/presidio

Issue:
Image anonymization is slow
Hi,

First of all, thank you guys for making this awesome project :)

I wanted to ask if there are any ways to improve image anonymization performance. I'm using Presidio as a python package and it takes about 5~ seconds to process pretty small images. I'm using the example code from the Presidio docs.


Discussion:
Hi @kubistika, thanks for your issue.
This is indeed a bug. the `AnalyzerEngine` instance used in the presidio-image-redactor is initialized on every request, which takes a few seconds. If you or anyone is interested in fixing it, that would be great. If not, we'll get to it soon.

Resolving patch:
diff --git a/presidio-image-redactor/presidio_image_redactor/image_analyzer_engine.py b/presidio-image-redactor/presidio_image_redactor/image_analyzer_engine.py
--- a/presidio-image-redactor/presidio_image_redactor/image_analyzer_engine.py
+++ b/presidio-image-redactor/presidio_image_redactor/image_analyzer_engine.py
@@ -9,7 +9,16 @@
 
 
 class ImageAnalyzerEngine:
-    """ImageAnalyzerEngine class."""
+    """ImageAnalyzerEngine class.
+
+    :param analyzer_engine: The Presidio AnalyzerEngine instance
+        to be used to detect PII in text.
+    """
+
+    def __init__(self, analyzer_engine: AnalyzerEngine = None):
+        if not analyzer_engine:
+            analyzer_engine = AnalyzerEngine()
+        self.analyzer_engine = analyzer_engine
 
     def analyze(self, image: object, **kwargs) -> List[ImageRecognizerResult]:
         """Analyse method to analyse the given image.
@@ -21,8 +30,8 @@ def analyze(self, image: object, **kwargs) -> List[ImageRecognizerResult]:
         ocr_result = OCR().perform_ocr(image)
         text = OCR().get_text_from_ocr_dict(ocr_result)
 
-        analyzer = AnalyzerEngine()
-        analyzer_result = analyzer.analyze(text=text, language="en", **kwargs)
+        analyzer_result = self.analyzer_engine.analyze(
+            text=text, language="en", **kwargs)
         bboxes = self.map_analyzer_results_to_bounding_boxes(
             analyzer_result, ocr_result, text
         )


Test patch:
Repository: microsoft/presidio

Issue:
typo in append_analysis_explenation_text
It seems that there is a typo in the function name.

append_analysis_expl**e**nation_text - > append_analysis_expl**a**nation_text


Discussion:
Thanks @OlegBEZb, good catch! are you interested in creating a pull request with the change? 

Resolving patch:
diff --git a/presidio-analyzer/presidio_analyzer/recognizer_result.py b/presidio-analyzer/presidio_analyzer/recognizer_result.py
--- a/presidio-analyzer/presidio_analyzer/recognizer_result.py
+++ b/presidio-analyzer/presidio_analyzer/recognizer_result.py
@@ -35,7 +35,7 @@ def __init__(
         self.score = score
         self.analysis_explanation = analysis_explanation
 
-    def append_analysis_explenation_text(self, text: str) -> None:
+    def append_analysis_explanation_text(self, text: str) -> None:
         """Add text to the analysis explanation."""
         if self.analysis_explanation:
             self.analysis_explanation.append_textual_explanation_line(text)


Test patch:
Repository: Textualize/rich

Issue:
[BUG] Deprecation warning due to invalid escape sequences
**Describe the bug**

Deprecation warnings are raised due to invalid escape sequences. This can be fixed by using raw strings or escaping the literals. pyupgrade also helps in automatic conversion : https://github.com/asottile/pyupgrade/

**To Reproduce**

```
./tests/test_markup.py:26: DeprecationWarning: invalid escape sequence \[
  assert escape("foo[bar]") == "foo\[bar]"
./tests/test_markup.py:30: DeprecationWarning: invalid escape sequence \[
  result = list(_parse("[foo]hello[/foo][bar]world[/]\[escaped]"))
./rich/markup.py:50: DeprecationWarning: invalid escape sequence \[
  return markup.replace("[", "\[")
```

**Platform**
What platform (Win/Linux/Mac) are you running on? What terminal software are you using. Which version of Rich?



Discussion:

Resolving patch:
diff --git a/rich/markup.py b/rich/markup.py
--- a/rich/markup.py
+++ b/rich/markup.py
@@ -47,7 +47,7 @@ def escape(markup: str) -> str:
     Returns:
         str: Markup with square brackets escaped.
     """
-    return markup.replace("[", "\[")
+    return markup.replace("[", r"\[")
 
 
 def _parse(markup: str) -> Iterable[Tuple[int, Optional[str], Optional[Tag]]]:


Test patch:
diff --git a/tests/test_markup.py b/tests/test_markup.py
--- a/tests/test_markup.py
+++ b/tests/test_markup.py
@@ -23,11 +23,11 @@ def test_re_match():
 
 
 def test_escape():
-    assert escape("foo[bar]") == "foo\[bar]"
+    assert escape("foo[bar]") == r"foo\[bar]"
 
 
 def test_parse():
-    result = list(_parse("[foo]hello[/foo][bar]world[/]\[escaped]"))
+    result = list(_parse(r"[foo]hello[/foo][bar]world[/]\[escaped]"))
     expected = [
         (0, None, Tag(name="foo", parameters=None)),
         (10, "hello", None),
Repository: Textualize/rich

Issue:
[BUG] '#' sign is treated as the end of a URL
**Describe the bug**
The `#` a valid element of the URL, but Rich seems to ignore it and treats it as the end of it. 
Consider this URL: https://github.com/willmcgugan/rich#rich-print-function

**To Reproduce**
```python
from rich.console import Console

console = Console()

console.log("https://github.com/willmcgugan/rich#rich-print-function")
```

Output:  
![image](https://user-images.githubusercontent.com/18279161/92566941-44f59380-f27d-11ea-908d-64d01e224087.png)


**Platform**
I'm using Rich on Windows and Linux, with the currently newest version `6.1.1`.



Discussion:
https://github.com/willmcgugan/rich/blob/master/rich/highlighter.py#L82

Any chance of a PR ?
Sure, happy to try it.

Resolving patch:
diff --git a/rich/highlighter.py b/rich/highlighter.py
--- a/rich/highlighter.py
+++ b/rich/highlighter.py
@@ -79,7 +79,7 @@ class ReprHighlighter(RegexHighlighter):
         r"(?P<number>0x[0-9a-f]*)",
         r"(?P<path>\B(\/[\w\.\-\_\+]+)*\/)(?P<filename>[\w\.\-\_\+]*)?",
         r"(?<!\\)(?P<str>b?\'\'\'.*?(?<!\\)\'\'\'|b?\'.*?(?<!\\)\'|b?\"\"\".*?(?<!\\)\"\"\"|b?\".*?(?<!\\)\")",
-        r"(?P<url>https?:\/\/[0-9a-zA-Z\$\-\_\+\!`\(\)\,\.\?\/\;\:\&\=\%]*)",
+        r"(?P<url>https?:\/\/[0-9a-zA-Z\$\-\_\+\!`\(\)\,\.\?\/\;\:\&\=\%\#]*)",
         r"(?P<uuid>[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12})",
     ]
 
@@ -104,7 +104,7 @@ class ReprHighlighter(RegexHighlighter):
     console.print(" /foo/bar/baz/egg.py word")
     console.print("foo /foo/bar/baz/egg.py word")
     console.print("foo /foo/bar/ba._++z/egg+.py word")
-    console.print("https://example.org?foo=bar")
+    console.print("https://example.org?foo=bar#header")
 
     console.print(1234567.34)
     console.print(1 / 2)


Test patch:
Repository: Textualize/rich

Issue:
[BUG] Line pointer in Syntax doesn't render on "legacy Windows" 
**Describe the bug**
Line pointer in Rich's `Syntax` class doesn't render on so-called "legacy Windows" cmd.
I was expecting Rich to use a different character on "legacy Windows" so that it can be rendered, similarly to what's done to box drawing characters.

**To Reproduce**
```
import rich.traceback                                                                                                                                                                                                                                                                                                                                 rich.traceback.install()                                                                                                                                                                                                                                                                                                                              raise RuntimeError("Abc...")
```
![image](https://user-images.githubusercontent.com/6032823/104316217-6e008c00-54dc-11eb-873a-144fa9312f49.png)

**Platform**
Windows, old Command Prompt (not Windows Terminal)

**Diagnose**
![image](https://user-images.githubusercontent.com/6032823/104316323-98eae000-54dc-11eb-9e2d-d9c2d82920af.png)




Discussion:
Any chance of a PR?

Resolving patch:
diff --git a/rich/syntax.py b/rich/syntax.py
--- a/rich/syntax.py
+++ b/rich/syntax.py
@@ -480,7 +480,7 @@ def __rich_console__(
         padding = _Segment(" " * numbers_column_width + " ", background_style)
         new_line = _Segment("\n")
 
-        line_pointer = "❱ "
+        line_pointer = "> " if options.legacy_windows else "❱ "
 
         for line_no, line in enumerate(lines, self.start_line + line_offset):
             if self.word_wrap:


Test patch:
Repository: Textualize/rich

Issue:
[REQUEST] Add instructions about readline in the docs
- [x] Have you checked the issues for similar suggestions.

I believe the docs (and the community in general) would benefit a **lot** from having some basic guidelines on how to use the standard [readline module](https://docs.python.org/3/library/readline.html) with Rich. It's a single import after all.

**What problem does it solve for you?**

Without `readline` (weird stuff are the result of arrow keys):
![withoutreadline](https://user-images.githubusercontent.com/37125/139588643-81fa4b1e-8c99-43fc-aef1-ef52ee183477.gif)

With `readline`:
![withreadline](https://user-images.githubusercontent.com/37125/139588648-7bd68d68-99af-43ff-b866-ef9ed52fce45.gif)

**How would you improve Rich?**

It turns out there's no need to change a single line in Rich, just mention it in the docs (such as [here](https://rich.readthedocs.io/en/latest/console.html?highlight=input#input)):

```python
from rich.console import Console
import readline  # just add this
console = Console()
console.input("What is [i]your[/i] [bold red]name[/]? :smiley: ")
```

The reason I think it is useful is because
1. it might not be known by beginners (I didn't!)
2. it's [nowhere to be found in the docs](https://rich.readthedocs.io/en/latest/search.html?q=readline&check_keywords=yes&area=default)
3. it's dead easy (just `import readline`)
4. similar stuff seems to have been requested before (e.g. #306), but without any definite answer


Discussion:

Resolving patch:
diff --git a/docs/source/conf.py b/docs/source/conf.py
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -43,6 +43,7 @@
     "sphinx.ext.autodoc",
     "sphinx.ext.viewcode",
     "sphinx.ext.napoleon",
+    "sphinx.ext.intersphinx",
     "sphinx.ext.autosectionlabel",
     "sphinx_copybutton",
 ]
diff --git a/rich/console.py b/rich/console.py
--- a/rich/console.py
+++ b/rich/console.py
@@ -1919,6 +1919,8 @@ def input(
     ) -> str:
         """Displays a prompt and waits for input from the user. The prompt may contain color / style.
 
+        It works in the same way as Python's builtin :func:`input` function and provides elaborate line editing and history features if Python's builtin :mod:`readline` module is previously loaded.
+
         Args:
             prompt (Union[str, Text]): Text to render in the prompt.
             markup (bool, optional): Enable console markup (requires a str prompt). Defaults to True.


Test patch:
Repository: Textualize/rich

Issue:
[BUG] Incorrect type for print_json indent in __init__.py
**Describe the bug**

The type for `indent` (`indent: int = 2`) in `print_json` from the `__init__.py` file seems to be incorrect. In `console.py` it is typed as `indent: Union[None, int, str] = 2` and `print_json` in the init calls from console.py so it seems like they should have the same type.


Discussion:

Resolving patch:
diff --git a/rich/__init__.py b/rich/__init__.py
--- a/rich/__init__.py
+++ b/rich/__init__.py
@@ -1,7 +1,7 @@
 """Rich text and beautiful formatting in the terminal."""
 
 import os
-from typing import Callable, IO, TYPE_CHECKING, Any, Optional
+from typing import Callable, IO, TYPE_CHECKING, Any, Optional, Union
 
 from ._extension import load_ipython_extension
 
@@ -73,7 +73,7 @@ def print_json(
     json: Optional[str] = None,
     *,
     data: Any = None,
-    indent: int = 2,
+    indent: Union[None, int, str] = 2,
     highlight: bool = True,
     skip_keys: bool = False,
     ensure_ascii: bool = True,


Test patch:
Repository: Textualize/rich

Issue:
[BUG] Inspecting a NamedTuple defined int the REPL throws an error
I suspect this is not exclusive to NamedTuples

<img width="1452" alt="Screenshot 2022-03-07 at 15 08 46" src="https://user-images.githubusercontent.com/554369/157060930-7e517028-f587-4c48-906a-a807108a1687.png">




Discussion:

Resolving patch:
diff --git a/rich/_inspect.py b/rich/_inspect.py
--- a/rich/_inspect.py
+++ b/rich/_inspect.py
@@ -98,7 +98,8 @@ def _get_signature(self, name: str, obj: Any) -> Optional[Text]:
         source_filename: Optional[str] = None
         try:
             source_filename = getfile(obj)
-        except TypeError:
+        except (OSError, TypeError):
+            # OSError is raised if obj has no source file, e.g. when defined in REPL.
             pass
 
         callable_name = Text(name, style="inspect.callable")


Test patch:
Repository: Textualize/rich

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/Textualize/rich/blob/c979a1b16f27285b03fdb14f5e364ea36d7eba01/rich/pretty.py#L369

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


Discussion:

Resolving patch:
diff --git a/rich/pretty.py b/rich/pretty.py
--- a/rich/pretty.py
+++ b/rich/pretty.py
@@ -366,7 +366,7 @@ def _get_braces_for_defaultdict(_object: DefaultDict[Any, Any]) -> Tuple[str, st
 
 
 def _get_braces_for_array(_object: "array[Any]") -> Tuple[str, str, str]:
-    return (f"array({_object.typecode!r}, [", "])", "array({_object.typecode!r})")
+    return (f"array({_object.typecode!r}, [", "])", f"array({_object.typecode!r})")
 
 
 _BRACES: Dict[type, Callable[[Any], Tuple[str, str, str]]] = {


Test patch: