internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: python-pillow/Pillow

Issue:
Certain animated GIFs cause TypeError: color must be int, or tuple of one, three or four elements
```python
img = Image.open(image_data)
frames = [frame.copy() for frame in ImageSequence.all_frames(img)]
```
Results in 

```pytb
frames = [frame.copy() for frame in ImageSequence.all_frames(img)]
File "/usr/local/lib/python3.10/site-packages/PIL/ImageSequence.py", line 73, in all_frames
ims += [im_frame.copy() for im_frame in Iterator(imSequence)]
File "/usr/local/lib/python3.10/site-packages/PIL/ImageSequence.py", line 73, in <listcomp>
 ims += [im_frame.copy() for im_frame in Iterator(imSequence)]
File "/usr/local/lib/python3.10/site-packages/PIL/ImageSequence.py", line 50, in __next__
self.im.seek(self.position)
File "/usr/local/lib/python3.10/site-packages/PIL/GifImagePlugin.py", line 151, in seek
self._seek(f)
File "/usr/local/lib/python3.10/site-packages/PIL/GifImagePlugin.py", line 367, in _seek
self.dispose = Image.core.fill(dispose_mode, dispose_size, color)
TypeError: color must be int, or tuple of one, three or four elements
```
For some animated GIFs (attached) 
![f036dee3-ffb3-41c1-971d-535d1cdf08d3](https://github.com/python-pillow/Pillow/assets/34611132/f86a383f-c0ff-4395-9101-f49358c805d0)
![b9183949-7173-41af-943d-dce1367f7047](https://github.com/python-pillow/Pillow/assets/34611132/a93c5714-e1f6-4c6b-902b-325626e8ad05)



Discussion:

Resolving patch:
diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py
--- a/src/PIL/GifImagePlugin.py
+++ b/src/PIL/GifImagePlugin.py
@@ -335,6 +335,8 @@ def _seek(self, frame, update_image=True):
 
         def _rgb(color):
             if self._frame_palette:
+                if color * 3 + 3 > len(self._frame_palette.palette):
+                    color = 0
                 color = tuple(self._frame_palette.palette[color * 3 : color * 3 + 3])
             else:
                 color = (color, color, color)


Test patch:
diff --git a/Tests/images/background_outside_palette.gif b/Tests/images/background_outside_palette.gif
new file mode 100644
Binary files /dev/null and b/Tests/images/background_outside_palette.gif differ
diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py
--- a/Tests/test_file_gif.py
+++ b/Tests/test_file_gif.py
@@ -1142,6 +1142,12 @@ def test_rgba_transparency(tmp_path):
         assert_image_equal(hopper("P").convert("RGB"), reloaded)
 
 
+def test_background_outside_palettte(tmp_path):
+    with Image.open("Tests/images/background_outside_palette.gif") as im:
+        im.seek(1)
+        assert im.info["background"] == 255
+
+
 def test_bbox(tmp_path):
     out = str(tmp_path / "temp.gif")
Repository: python-pillow/Pillow

Issue:
[10.1.0 regression] Palette images save as blank PDFs
Minimal example (you can use [this tiny PNG](https://github.com/python-pillow/Pillow/assets/1119169/d8d45152-7734-4fe3-a2d3-fb49839a0893) for example):

```python
from PIL import Image

image = Image.open('test.png')
image = image.convert('P')
image.save('test.pdf')
```

Output PDF with Pillow 10.0.1:
![image](https://github.com/python-pillow/Pillow/assets/1119169/e3f02823-2aad-4490-acd8-695f90c6f15e)

Output PDF with Pillow 10.1.0:
![image](https://github.com/python-pillow/Pillow/assets/1119169/7ef6ccf8-a9e2-405c-99a6-6ae2ec4b253d)

Issue faced with Python 3.11.6 on Ubuntu 22.04 and Debian 12 (bookworm). I also had the same issue in Docker environments, so I could make a Docker image if needed.


Discussion:
Testing, I find this was caused by #7289.

I've created PR #7555 to resolve this.
So quick, incredible job @radarhere!

Resolving patch:
diff --git a/src/PIL/PdfImagePlugin.py b/src/PIL/PdfImagePlugin.py
--- a/src/PIL/PdfImagePlugin.py
+++ b/src/PIL/PdfImagePlugin.py
@@ -96,7 +96,7 @@ def _write_image(im, filename, existing_pdf, image_refs):
         dict_obj["ColorSpace"] = [
             PdfParser.PdfName("Indexed"),
             PdfParser.PdfName("DeviceRGB"),
-            255,
+            len(palette) // 3 - 1,
             PdfParser.PdfBinary(palette),
         ]
         procset = "ImageI"  # indexed color


Test patch:
Repository: python-pillow/Pillow

Issue:
Creating TrueType fonts with size=0 fails with Pillow 10+ differently than with Pillow 9
### What did you do?

```
(Pillow) ~/b/Pillow (main) $ docker run -it -v "./Arial Bold.ttf:/a.ttf:ro" python:3.11 bash
root@e1ff41aff78e:/# pip install 'pillow<10'
Successfully installed pillow-9.5.0
root@e1ff41aff78e:/# python
Python 3.11.6 (main, Nov  1 2023, 10:08:51) [GCC 12.2.0] on linux
>>> from PIL import ImageFont
>>> ImageFont.truetype("/a.ttf", size=0)
<PIL.ImageFont.FreeTypeFont object at 0xffff9ef7d990>
root@e1ff41aff78e:/# pip install 'pillow>=10'
Successfully installed pillow-10.1.0
root@e1ff41aff78e:/# python
Python 3.11.6 (main, Nov  1 2023, 10:08:51) [GCC 12.2.0] on linux
>>> from PIL import ImageFont
>>> ImageFont.truetype("/a.ttf", size=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.11/site-packages/PIL/ImageFont.py", line 797, in truetype
    return freetype(font)
           ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/PIL/ImageFont.py", line 794, in freetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/PIL/ImageFont.py", line 226, in __init__
    self.font = core.getfont(
                ^^^^^^^^^^^^^
OSError: invalid ppem value
>>>
```

### What did you expect to happen? / What actually happened?

Font creation for a zero or negative size should fail alright, but maybe with a less cryptic error. (`size=-1` yields `invalid argument`.)

With Pillow 9.x, font construction succeeds, but e.g. `getbbox()` or attempting to draw raises `invalid argument`.

### What are your OS, Python and Pillow versions?

* OS: Linux, various
* Python: various
* Pillow: see above for variants

### See also

Downstream bug: https://github.com/WhyNotHugo/python-barcode/issues/217



Discussion:

Resolving patch:
diff --git a/src/PIL/ImageFont.py b/src/PIL/ImageFont.py
--- a/src/PIL/ImageFont.py
+++ b/src/PIL/ImageFont.py
@@ -788,8 +788,13 @@ def truetype(font=None, size=10, index=0, encoding="", layout_engine=None):
                      .. versionadded:: 4.2.0
     :return: A font object.
     :exception OSError: If the file could not be read.
+    :exception ValueError: If the font size is not greater than zero.
     """
 
+    if size <= 0:
+        msg = "font size must be greater than 0"
+        raise ValueError(msg)
+
     def freetype(font):
         return FreeTypeFont(font, size, index, encoding, layout_engine)
 


Test patch:
diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py
--- a/Tests/test_imagefont.py
+++ b/Tests/test_imagefont.py
@@ -1071,3 +1071,9 @@ def test_raqm_missing_warning(monkeypatch):
         "Raqm layout was requested, but Raqm is not available. "
         "Falling back to basic layout."
     )
+
+
+@pytest.mark.parametrize("size", [-1, 0])
+def test_invalid_truetype_sizes_raise_valueerror(layout_engine, size):
+    with pytest.raises(ValueError):
+        ImageFont.truetype(FONT_PATH, size, layout_engine=layout_engine)
Repository: python-pillow/Pillow

Issue:
Seeking APNG to frame 0 multiple times breaks the info attribute
### What did you do?

- Load an APNG with 3 frames with different durations (let us imagine the first frame has a duration of 1ms, the second frame has a duration of 2ms and the third frame has a duration of 3m)
- iterate through the image - looking at the duration supplied by the info dict, output will appropriately be (1ms, 2ms, 3ms)
- do the same thing, output will appropriately be (1ms, 2ms, 3ms)
- do the same thing, output will incorrectly be (3ms, 2ms, 3ms)

### What did you expect to happen?

The duration value per frame should be accurate no matter how many times the image is seeked

### What actually happened?

After the 2nd loop through the first frame will always have the info attributes of the last frame iterated.

### What are your OS, Python and Pillow versions?

* OS: Linux
* Python: 3.12
* Pillow: 10.2.0

---

The problem is, afaik, specific to APNG. When seeking the `Image` to the first frame the `PngStream` goes through a "rewind", in which it assigns the `rewind_state` (generated on the first read of the first frame) to the current state of the object. However, the rewind state `im_info` is simply assigned to the current state, not copied. This means the rewind state info object is later modified inadvertently because current and rewind state share the same object.

https://github.com/python-pillow/Pillow/blob/a786a0551b75ab3e85da1bfad54226faa2336022/src/PIL/PngImagePlugin.py#L381

This should be:
```python
self.im_info = self.rewind_state["info"].copy()
```



Discussion:

Resolving patch:
diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py
--- a/src/PIL/PngImagePlugin.py
+++ b/src/PIL/PngImagePlugin.py
@@ -378,7 +378,7 @@ def save_rewind(self):
         }
 
     def rewind(self):
-        self.im_info = self.rewind_state["info"]
+        self.im_info = self.rewind_state["info"].copy()
         self.im_tile = self.rewind_state["tile"]
         self._seq_num = self.rewind_state["seq_num"]
 


Test patch:
diff --git a/Tests/images/apng/different_durations.png b/Tests/images/apng/different_durations.png
new file mode 100644
Binary files /dev/null and b/Tests/images/apng/different_durations.png differ
diff --git a/Tests/test_file_apng.py b/Tests/test_file_apng.py
--- a/Tests/test_file_apng.py
+++ b/Tests/test_file_apng.py
@@ -689,3 +689,12 @@ def test_different_modes_in_later_frames(mode, default_image, duplicate, tmp_pat
     )
     with Image.open(test_file) as reloaded:
         assert reloaded.mode == mode
+
+
+def test_apng_repeated_seeks_give_correct_info() -> None:
+    with Image.open("Tests/images/apng/different_durations.png") as im:
+        for i in range(3):
+            im.seek(0)
+            assert im.info["duration"] == 4000
+            im.seek(1)
+            assert im.info["duration"] == 1000
Repository: python-pillow/Pillow

Issue:
JPEG2000: 9-bit images use L mode instead of I;16
### What did you do?
9-bit precision JPEG 2000 codestream with a .txt extension: [9bit.txt](https://github.com/python-pillow/Pillow/files/14734392/9bit.txt) (rename to 9bit.j2k)
```python
with Image.open("9bit.j2k") as im:
    assert im.mode == "I;16"
    assert im.size == (128, 128)
```

### What did you expect to happen?
No exceptions

### What actually happened?
`AssertionError: assert 'L' == 'I;16'`

### What are your OS, Python and Pillow versions?

* OS: Ubuntu 22.04
* Python: 3.12
* Pillow: Current `main` 19cd94bdb3699abe11d5e437406daa66f7f5cc17




Discussion:

Resolving patch:
diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py
--- a/src/PIL/Jpeg2KImagePlugin.py
+++ b/src/PIL/Jpeg2KImagePlugin.py
@@ -106,15 +106,11 @@ def _parse_codestream(fp):
     lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from(
         ">HHIIIIIIIIH", siz
     )
-    ssiz = [None] * csiz
-    xrsiz = [None] * csiz
-    yrsiz = [None] * csiz
-    for i in range(csiz):
-        ssiz[i], xrsiz[i], yrsiz[i] = struct.unpack_from(">BBB", siz, 36 + 3 * i)
 
     size = (xsiz - xosiz, ysiz - yosiz)
     if csiz == 1:
-        if (yrsiz[0] & 0x7F) > 8:
+        ssiz = struct.unpack_from(">B", siz, 38)
+        if (ssiz[0] & 0x7F) + 1 > 8:
             mode = "I;16"
         else:
             mode = "L"


Test patch:
diff --git a/Tests/images/9bit.j2k b/Tests/images/9bit.j2k
new file mode 100644
Binary files /dev/null and b/Tests/images/9bit.j2k differ
diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py
--- a/Tests/test_file_jpeg2k.py
+++ b/Tests/test_file_jpeg2k.py
@@ -446,3 +446,9 @@ def test_plt_marker() -> None:
         hdr = out.read(2)
         length = _binary.i16be(hdr)
         out.seek(length - 2, os.SEEK_CUR)
+
+
+def test_9bit():
+    with Image.open("Tests/images/9bit.j2k") as im:
+        assert im.mode == "I;16"
+        assert im.size == (128, 128)
Repository: python-pillow/Pillow

Issue:
`ImageMath.eval` deprecation warning running `selftest.py`
During the release, `make release-test` runs `python3 selftest.py`:

```console
❯ python3 selftest.py
...
Running selftest:
<doctest __main__.testimage[57]>:1: DeprecationWarning: ImageMath.eval is deprecated and will be removed in Pillow 12 (2025-10-15). Use ImageMath.lambda_eval or ImageMath.unsafe_eval instead.
  im = ImageMath.eval("float(im + 20)", im=im.convert("L"))
--- 59 tests passed.
```

Here's the `eval`:
https://github.com/python-pillow/Pillow/blob/33a73b5266c6589e21cc32a381fe907e23161877/selftest.py#L142

Shall we rewrite it as `lambda_eval`, catch the deprecation warning, or just remove it?



Discussion:

Resolving patch:
diff --git a/selftest.py b/selftest.py
--- a/selftest.py
+++ b/selftest.py
@@ -139,7 +139,9 @@ def testimage() -> None:
     In 1.1.6, you can use the ImageMath module to do image
     calculations.
 
-    >>> im = ImageMath.eval("float(im + 20)", im=im.convert("L"))
+    >>> im = ImageMath.lambda_eval( \
+      lambda args: args["float"](args["im"] + 20), im=im.convert("L") \
+    )
     >>> im.mode, im.size
     ('F', (128, 128))
 


Test patch:
Repository: python-pillow/Pillow

Issue:
Missing ImageDraw.Draw.circle function
### What did you do?

I find it frustrating that Pillow's ImageDraw does still not have a function to draw a circle. Every time I come around to do it, I find that I must use ImageDraw.Draw.ellipse instead, which costs time. It must be even more frustrating for beginners who don't know more complex shapes like ellipses.

### What did you expect to happen?

An ImageDraw.Draw.circle to be available

### What actually happened?

It does not exist

### What are your OS, Python and Pillow versions?

* OS: Every
* Python: Every
* Pillow: Every


Discussion:
Sounds like a useful shortcut, would you like to propose a PR?

Resolving patch:
diff --git a/src/PIL/ImageDraw.py b/src/PIL/ImageDraw.py
--- a/src/PIL/ImageDraw.py
+++ b/src/PIL/ImageDraw.py
@@ -181,6 +181,13 @@ def ellipse(self, xy: Coords, fill=None, outline=None, width=1) -> None:
         if ink is not None and ink != fill and width != 0:
             self.draw.draw_ellipse(xy, ink, 0, width)
 
+    def circle(
+        self, xy: Sequence[float], radius: float, fill=None, outline=None, width=1
+    ) -> None:
+        """Draw a circle given center coordinates and a radius."""
+        ellipse_xy = (xy[0] - radius, xy[1] - radius, xy[0] + radius, xy[1] + radius)
+        self.ellipse(ellipse_xy, fill, outline, width)
+
     def line(self, xy: Coords, fill=None, width=0, joint=None) -> None:
         """Draw a line, or a connected sequence of line segments."""
         ink = self._getink(fill)[0]


Test patch:
diff --git a/Tests/test_imagedraw.py b/Tests/test_imagedraw.py
--- a/Tests/test_imagedraw.py
+++ b/Tests/test_imagedraw.py
@@ -2,6 +2,7 @@
 
 import contextlib
 import os.path
+from typing import Sequence
 
 import pytest
 
@@ -265,6 +266,21 @@ def test_chord_too_fat() -> None:
     assert_image_equal_tofile(im, "Tests/images/imagedraw_chord_too_fat.png")
 
 
+@pytest.mark.parametrize("mode", ("RGB", "L"))
+@pytest.mark.parametrize("xy", ((W / 2, H / 2), [W / 2, H / 2]))
+def test_circle(mode: str, xy: Sequence[float]) -> None:
+    # Arrange
+    im = Image.new(mode, (W, H))
+    draw = ImageDraw.Draw(im)
+    expected = f"Tests/images/imagedraw_ellipse_{mode}.png"
+
+    # Act
+    draw.circle(xy, 25, fill="green", outline="blue")
+
+    # Assert
+    assert_image_similar_tofile(im, expected, 1)
+
+
 @pytest.mark.parametrize("mode", ("RGB", "L"))
 @pytest.mark.parametrize("bbox", BBOX)
 def test_ellipse(mode: str, bbox: Coords) -> None:
Repository: d2l-ai/d2l-vi

Issue:
test



Discussion:

Resolving patch:
diff --git a/utils.py b/utils.py
--- a/utils.py
+++ b/utils.py
@@ -5,9 +5,6 @@
 import sys
 import argparse
 
-# reload(sys)
-# sys.setdefaultencoding('utf8')
-
 BEGIN_BLOCK_COMMENT = '<!--\n'
 END_BLOCK_COMMENT = '-->\n\n'
 TRANSLATE_INDICATOR = '*dịch đoạn phía trên*'


Test patch:
Repository: d2l-ai/d2l-vi

Issue:
Add "Deep Learning Computation" chapter
- [x] index.md
- [x] model-construction.md
- [x] parameters.md
- [x] deferred-init.md
- [x] custom-layer.md
- [x] read-write.md
- [x] use-gpu.md


Discussion:

Resolving patch:
diff --git a/utils.py b/utils.py
--- a/utils.py
+++ b/utils.py
@@ -10,8 +10,8 @@
 TRANSLATE_INDICATOR = '*dịch đoạn phía trên*'
 HEADER_INDICATOR = ' *dịch tiêu đề phía trên*\n'
 IMAGE_CAPTION_INDICATOR = '*dịch chú thích ảnh phía trên*'
-START_FILE = '<!-- ===================== Bắt đầu dịch Phần 1 ==================== -->\n'
-END_FILE = '<!-- ===================== Kết thúc dịch Phần 1 ==================== -->\n'
+START_FILE = '<!-- ===================== Bắt đầu dịch Phần  ==================== -->\n<!-- ========================================= REVISE PHẦN  - BẮT ĐẦU =================================== -->\n'
+END_FILE = '<!-- ===================== Kết thúc dịch Phần  ==================== -->\n<!-- ========================================= REVISE PHẦN  - KẾT THÚC ===================================-->\n'
 SUFIX_PATH = 'contributors_template_vn.md'
 
 # Our special mark in markdown, e.g. :label:`chapter_intro`


Test patch:
Repository: twisted/twisted

Issue:
flattenEvent() fails with "'ascii' codec can't encode character" in Python 2.7
|[<img alt="znerol's avatar" src="https://avatars.githubusercontent.com/u/23288?s=50" width="50" height="50">](https://github.com/znerol)| @znerol reported|
|-|-|
|Trac ID|trac#8699|
|Type|defect|
|Created|2016-07-28 05:59:35Z|

backtrace ends in _flatten.py

```
twisted/logger/_flatten.py(119)flattenEvent()
-> flattenedValue = conversionFunction(fieldValue)
(Pdb) conversionFunction
<type 'str'>
```

I guess conversionFunction should be unicode in Python 2.7 and str in Python 3.

<details><summary>Searchable metadata</summary>

```
trac-id__8699 8699
type__defect defect
reporter__znerol znerol
priority__normal normal
milestone__None None
branch__ 
branch_author__ 
status__closed closed
resolution__fixed fixed
component__core core
keywords__None None
time__1469685575533160 1469685575533160
changetime__1470085969851774 1470085969851774
version__None None
owner__Craig_Rodrigues__rodrigc_____ Craig Rodrigues <rodrigc@...>

```
</details>



Discussion:

Resolving patch:
diff --git a/twisted/logger/_flatten.py b/twisted/logger/_flatten.py
--- a/twisted/logger/_flatten.py
+++ b/twisted/logger/_flatten.py
@@ -111,7 +111,7 @@ def flattenEvent(event):
         if conversion == "r":
             conversionFunction = repr
         else:  # Above: if conversion is not "r", it's "s"
-            conversionFunction = str
+            conversionFunction = unicode
 
         if callit:
             fieldValue = fieldValue()


Test patch:
diff --git a/twisted/logger/test/test_flatten.py b/twisted/logger/test/test_flatten.py
--- a/twisted/logger/test/test_flatten.py
+++ b/twisted/logger/test/test_flatten.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 # Copyright (c) Twisted Matrix Laboratories.
 # See LICENSE for details.
 
@@ -47,10 +48,11 @@ class Ephemeral(object):
                 "attribute: {object.attribute} "
                 "numrepr: {number!r} "
                 "numstr: {number!s} "
-                "strrepr: {string!r}"
+                "strrepr: {string!r} "
+                "unistr: {unistr!s}"
             ),
             callme=lambda: next(counter), object=Ephemeral(),
-            number=7, string="hello",
+            number=7, string="hello", unistr=u"ö"
         )
 
         flattenEvent(event1)
@@ -66,7 +68,8 @@ class Ephemeral(object):
                 "attribute: value "
                 "numrepr: 7 "
                 "numstr: 7 "
-                "strrepr: 'hello'"
+                "strrepr: 'hello' "
+                u"unistr: ö"
             )
         )
Repository: twisted/twisted

Issue:
twisted.internet._ssl is unused and can be deleted
|[<img alt="alex's avatar" src="https://avatars.githubusercontent.com/u/772?s=50" width="50" height="50">](https://github.com/alex)| @alex reported|
|-|-|
|Trac ID|trac#8775|
|Type|enhancement|
|Created|2016-08-20 12:51:20Z|

LGTM

<details><summary>Searchable metadata</summary>

```
trac-id__8775 8775
type__enhancement enhancement
reporter__alex alex
priority__normal normal
milestone__None None
branch__ 
branch_author__ 
status__closed closed
resolution__fixed fixed
component__core core
keywords__None None
time__1471697480022394 1471697480022394
changetime__1471699165043033 1471699165043033
version__None None
owner__hawkowl hawkowl

```
</details>



Discussion:

Resolving patch:
diff --git a/src/twisted/internet/_ssl.py b/src/twisted/internet/_ssl.py
deleted file mode 100644
--- a/src/twisted/internet/_ssl.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- test-case-name: twisted.test.test_ssl -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-This module implements helpers for switching to TLS on an existing transport.
-
-@since: 11.1
-"""
-
-class _TLSDelayed(object):
-    """
-    State tracking record for TLS startup parameters.  Used to remember how
-    TLS should be started when starting it is delayed to wait for the output
-    buffer to be flushed.
-
-    @ivar bufferedData: A C{list} which contains all the data which was
-        written to the transport after an attempt to start TLS was made but
-        before the buffers outstanding at that time could be flushed and TLS
-        could really be started.  This is appended to by the transport's
-        write and writeSequence methods until it is possible to actually
-        start TLS, then it is written to the TLS-enabled transport.
-
-    @ivar context: An SSL context factory object to use to start TLS.
-
-    @ivar extra: An extra argument to pass to the transport's C{startTLS}
-        method.
-    """
-    def __init__(self, bufferedData, context, extra):
-        self.bufferedData = bufferedData
-        self.context = context
-        self.extra = extra


Test patch: