prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  'Not a valid tuple.'  when trying to use marshmallow fields.Tuple for argument validation
  I'm trying to use the marshmallow fields.Tuple for querystring argument validation on a GET request using Flask.  The issue I'm running into is that no matter what type of object I declare and no matter what I use in the request, I always get the default 'Not a valid tuple.' response.  I have tried using a tuple of size 1 and 2; using fields.String and/or fields.Integer, etc with the same result.
  
  - I'm using Python 3.6.9 with these dependencies:
  anyjson==0.3.3
  apipkg==1.5
  arrow==0.15.5
  attrs==19.3.0
  backports.functools-lru-cache==1.6.1
  cassandra-driver==3.22.0
  Cerberus==1.3.2
  certifi==2019.11.28
  cffi==1.13.2
  chardet==3.0.4
  click==7.1.1
  execnet==1.7.1
  Flask==1.1.1
  Flask-Cors==3.0.8
  funcsigs==1.0.2
  futures==3.1.1
  geomet==0.1.2
  gevent==1.4.0
  greenlet==0.4.13
  gunicorn==20.0.4
  idna==2.9
  importlib-metadata==1.6.0
  itsdangerous==1.1.0
  Jinja2==2.11.1
  jsonklog==0.15.0
  MarkupSafe==1.1.1
  marshmallow==3.5.1
  neurolab==0.3.5
  numpy==1.18.1
  pluggy==0.13.1
  py==1.8.1
  pyaml==20.3.1
  pymongo==3.10.1
  pytest==3.3.0
  pytest-forked==0.2
  pytest-xdist==1.20.1
  python-dateutil==2.8.1
  PyYAML==5.3.1
  readline==6.2.4.1
  requests==2.23.0
  six==1.14.0
  urllib3==1.25.8
  webargs==6.0.0
  Werkzeug==1.0.0
  zipp==3.1.0
  
  - Here is an example of what I'm trying to do:
  ```
  from flask import Flask
  from webargs.flaskparser import parser, use_kwargs
  from marshmallow import EXCLUDE, fields, Schema
  
  
  app = Flask(__name__)
  
  
  @app.errorhandler(422)
  def custom_handler(error):
      errors = []
      if 'query' in error.data['messages']:
          for arg in error.data['messages']['query']:
              for item in error.data['messages']['query'][arg]:
                  errors.append(item)
      return str(errors), 400
  
  
  class test_schema(Schema):
      class Meta:
          unknown = EXCLUDE
          strict = True
      
      test_tup = fields.Tuple((fields.Integer(required=True), fields.Integer(required=True)), required=True)
  
  
  @app.route('/test/', strict_slashes=False)
  @parser.use_kwargs(test_schema, location='query')
  def test_the_mallow(**kwargs):
      return "True"
  ```
  
  - Finally, here are a couple example url's I've tried:
    localhost:2300/test/?test_tup=[0,0]
    localhost:2300/test/?test_tup=(0,0)
    localhost:2300/test/?test_tup=0,0
  
  
  --- 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/webargs/fields.py`
  Content:
  ```
  1 """Field classes.
  2 
  3 Includes all fields from `marshmallow.fields` in addition to a custom
  4 `Nested` field and `DelimitedList`.
  5 
  6 All fields can optionally take a special `location` keyword argument, which
  7 tells webargs where to parse the request argument from.
  8 
  9 .. code-block:: python
  10 
  11     args = {
  12         "active": fields.Bool(location="query"),
  13         "content_type": fields.Str(data_key="Content-Type", location="headers"),
  14     }
  15 
  16 Note: `data_key` replaced `load_from` in marshmallow 3.
  17 When using marshmallow 2, use `load_from`.
  18 """
  19 import marshmallow as ma
  20 
  21 # Expose all fields from marshmallow.fields.
  22 from marshmallow.fields import *  # noqa: F40
  23 from webargs.compat import MARSHMALLOW_VERSION_INFO
  24 from webargs.dict2schema import dict2schema
  25 
  26 __all__ = ["DelimitedList"] + ma.fields.__all__
  27 
  28 
  29 class Nested(ma.fields.Nested):
  30     """Same as `marshmallow.fields.Nested`, except can be passed a dictionary as
  31     the first argument, which will be converted to a `marshmallow.Schema`.
  32 
  33     .. note::
  34 
  35         The schema class here will always be `marshmallow.Schema`, regardless
  36         of whether a custom schema class is set on the parser. Pass an explicit schema
  37         class if necessary.
  38     """
  39 
  40     def __init__(self, nested, *args, **kwargs):
  41         if isinstance(nested, dict):
  42             nested = dict2schema(nested)
  43         super().__init__(nested, *args, **kwargs)
  44 
  45 
  46 class DelimitedList(ma.fields.List):
  47     """A field which is similar to a List, but takes its input as a delimited
  48     string (e.g. "foo,bar,baz").
  49 
  50     Like List, it can be given a nested field type which it will use to
  51     de/serialize each element of the list.
  52 
  53     :param Field cls_or_instance: A field class or instance.
  54     :param str delimiter: Delimiter between values.
  55     """
  56 
  57     default_error_messages = {"invalid": "Not a valid delimited list."}
  58     delimiter = ","
  59 
  60     def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):
  61         self.delimiter = delimiter or self.delimiter
  62         super().__init__(cls_or_instance, **kwargs)
  63 
  64     def _serialize(self, value, attr, obj):
  65         # serializing will start with List serialization, so that we correctly
  66         # output lists of non-primitive types, e.g. DelimitedList(DateTime)
  67         return self.delimiter.join(
  68             format(each) for each in super()._serialize(value, attr, obj)
  69         )
  70 
  71     def _deserialize(self, value, attr, data, **kwargs):
  72         # attempting to deserialize from a non-string source is an error
  73         if not isinstance(value, (str, bytes)):
  74             if MARSHMALLOW_VERSION_INFO[0] < 3:
  75                 self.fail("invalid")
  76             else:
  77                 raise self.make_error("invalid")
  78         return super()._deserialize(value.split(self.delimiter), attr, data, **kwargs)
  79
  ```
  --- 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()
  
  ```
  
golden_diff: diff --git a/src/webargs/fields.py b/src/webargs/fields.py
  --- a/src/webargs/fields.py
  +++ b/src/webargs/fields.py
  @@ -43,26 +43,24 @@
           super().__init__(nested, *args, **kwargs)
   
   
  -class DelimitedList(ma.fields.List):
  -    """A field which is similar to a List, but takes its input as a delimited
  -    string (e.g. "foo,bar,baz").
  +class DelimitedFieldMixin:
  +    """
  +    This is a mixin class for subclasses of ma.fields.List and ma.fields.Tuple
  +    which split on a pre-specified delimiter. By default, the delimiter will be ","
   
  -    Like List, it can be given a nested field type which it will use to
  -    de/serialize each element of the list.
  +    Because we want the MRO to reach this class before the List or Tuple class,
  +    it must be listed first in the superclasses
   
  -    :param Field cls_or_instance: A field class or instance.
  -    :param str delimiter: Delimiter between values.
  +    For example, a DelimitedList-like type can be defined like so:
  +
  +    >>> class MyDelimitedList(DelimitedFieldMixin, ma.fields.List):
  +    >>>     pass
       """
   
  -    default_error_messages = {"invalid": "Not a valid delimited list."}
       delimiter = ","
   
  -    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):
  -        self.delimiter = delimiter or self.delimiter
  -        super().__init__(cls_or_instance, **kwargs)
  -
       def _serialize(self, value, attr, obj):
  -        # serializing will start with List serialization, so that we correctly
  +        # serializing will start with parent-class serialization, so that we correctly
           # output lists of non-primitive types, e.g. DelimitedList(DateTime)
           return self.delimiter.join(
               format(each) for each in super()._serialize(value, attr, obj)
  @@ -76,3 +74,45 @@
               else:
                   raise self.make_error("invalid")
           return super()._deserialize(value.split(self.delimiter), attr, data, **kwargs)
  +
  +
  +class DelimitedList(DelimitedFieldMixin, ma.fields.List):
  +    """A field which is similar to a List, but takes its input as a delimited
  +    string (e.g. "foo,bar,baz").
  +
  +    Like List, it can be given a nested field type which it will use to
  +    de/serialize each element of the list.
  +
  +    :param Field cls_or_instance: A field class or instance.
  +    :param str delimiter: Delimiter between values.
  +    """
  +
  +    default_error_messages = {"invalid": "Not a valid delimited list."}
  +    delimiter = ","
  +
  +    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):
  +        self.delimiter = delimiter or self.delimiter
  +        super().__init__(cls_or_instance, **kwargs)
  +
  +
  +# DelimitedTuple can only be defined when using marshmallow3, when Tuple was
  +# added
  +if MARSHMALLOW_VERSION_INFO[0] >= 3:
  +
  +    class DelimitedTuple(DelimitedFieldMixin, ma.fields.Tuple):
  +        """A field which is similar to a Tuple, but takes its input as a delimited
  +        string (e.g. "foo,bar,baz").
  +
  +        Like Tuple, it can be given a tuple of nested field types which it will use to
  +        de/serialize each element of the tuple.
  +
  +        :param Iterable[Field] tuple_fields: An iterable of field classes or instances.
  +        :param str delimiter: Delimiter between values.
  +        """
  +
  +        default_error_messages = {"invalid": "Not a valid delimited tuple."}
  +        delimiter = ","
  +
  +        def __init__(self, tuple_fields, *, delimiter=None, **kwargs):
  +            self.delimiter = delimiter or self.delimiter
  +            super().__init__(tuple_fields, **kwargs)
  
verification_info: {"golden_diff": "diff --git a/src/webargs/fields.py b/src/webargs/fields.py\n--- a/src/webargs/fields.py\n+++ b/src/webargs/fields.py\n@@ -43,26 +43,24 @@\n         super().__init__(nested, *args, **kwargs)\n \n \n-class DelimitedList(ma.fields.List):\n-    \"\"\"A field which is similar to a List, but takes its input as a delimited\n-    string (e.g. \"foo,bar,baz\").\n+class DelimitedFieldMixin:\n+    \"\"\"\n+    This is a mixin class for subclasses of ma.fields.List and ma.fields.Tuple\n+    which split on a pre-specified delimiter. By default, the delimiter will be \",\"\n \n-    Like List, it can be given a nested field type which it will use to\n-    de/serialize each element of the list.\n+    Because we want the MRO to reach this class before the List or Tuple class,\n+    it must be listed first in the superclasses\n \n-    :param Field cls_or_instance: A field class or instance.\n-    :param str delimiter: Delimiter between values.\n+    For example, a DelimitedList-like type can be defined like so:\n+\n+    >>> class MyDelimitedList(DelimitedFieldMixin, ma.fields.List):\n+    >>>     pass\n     \"\"\"\n \n-    default_error_messages = {\"invalid\": \"Not a valid delimited list.\"}\n     delimiter = \",\"\n \n-    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):\n-        self.delimiter = delimiter or self.delimiter\n-        super().__init__(cls_or_instance, **kwargs)\n-\n     def _serialize(self, value, attr, obj):\n-        # serializing will start with List serialization, so that we correctly\n+        # serializing will start with parent-class serialization, so that we correctly\n         # output lists of non-primitive types, e.g. DelimitedList(DateTime)\n         return self.delimiter.join(\n             format(each) for each in super()._serialize(value, attr, obj)\n@@ -76,3 +74,45 @@\n             else:\n                 raise self.make_error(\"invalid\")\n         return super()._deserialize(value.split(self.delimiter), attr, data, **kwargs)\n+\n+\n+class DelimitedList(DelimitedFieldMixin, ma.fields.List):\n+    \"\"\"A field which is similar to a List, but takes its input as a delimited\n+    string (e.g. \"foo,bar,baz\").\n+\n+    Like List, it can be given a nested field type which it will use to\n+    de/serialize each element of the list.\n+\n+    :param Field cls_or_instance: A field class or instance.\n+    :param str delimiter: Delimiter between values.\n+    \"\"\"\n+\n+    default_error_messages = {\"invalid\": \"Not a valid delimited list.\"}\n+    delimiter = \",\"\n+\n+    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):\n+        self.delimiter = delimiter or self.delimiter\n+        super().__init__(cls_or_instance, **kwargs)\n+\n+\n+# DelimitedTuple can only be defined when using marshmallow3, when Tuple was\n+# added\n+if MARSHMALLOW_VERSION_INFO[0] >= 3:\n+\n+    class DelimitedTuple(DelimitedFieldMixin, ma.fields.Tuple):\n+        \"\"\"A field which is similar to a Tuple, but takes its input as a delimited\n+        string (e.g. \"foo,bar,baz\").\n+\n+        Like Tuple, it can be given a tuple of nested field types which it will use to\n+        de/serialize each element of the tuple.\n+\n+        :param Iterable[Field] tuple_fields: An iterable of field classes or instances.\n+        :param str delimiter: Delimiter between values.\n+        \"\"\"\n+\n+        default_error_messages = {\"invalid\": \"Not a valid delimited tuple.\"}\n+        delimiter = \",\"\n+\n+        def __init__(self, tuple_fields, *, delimiter=None, **kwargs):\n+            self.delimiter = delimiter or self.delimiter\n+            super().__init__(tuple_fields, **kwargs)\n", "issue": "'Not a valid tuple.'  when trying to use marshmallow fields.Tuple for argument validation\nI'm trying to use the marshmallow fields.Tuple for querystring argument validation on a GET request using Flask.  The issue I'm running into is that no matter what type of object I declare and no matter what I use in the request, I always get the default 'Not a valid tuple.' response.  I have tried using a tuple of size 1 and 2; using fields.String and/or fields.Integer, etc with the same result.\r\n\r\n- I'm using Python 3.6.9 with these dependencies:\r\nanyjson==0.3.3\r\napipkg==1.5\r\narrow==0.15.5\r\nattrs==19.3.0\r\nbackports.functools-lru-cache==1.6.1\r\ncassandra-driver==3.22.0\r\nCerberus==1.3.2\r\ncertifi==2019.11.28\r\ncffi==1.13.2\r\nchardet==3.0.4\r\nclick==7.1.1\r\nexecnet==1.7.1\r\nFlask==1.1.1\r\nFlask-Cors==3.0.8\r\nfuncsigs==1.0.2\r\nfutures==3.1.1\r\ngeomet==0.1.2\r\ngevent==1.4.0\r\ngreenlet==0.4.13\r\ngunicorn==20.0.4\r\nidna==2.9\r\nimportlib-metadata==1.6.0\r\nitsdangerous==1.1.0\r\nJinja2==2.11.1\r\njsonklog==0.15.0\r\nMarkupSafe==1.1.1\r\nmarshmallow==3.5.1\r\nneurolab==0.3.5\r\nnumpy==1.18.1\r\npluggy==0.13.1\r\npy==1.8.1\r\npyaml==20.3.1\r\npymongo==3.10.1\r\npytest==3.3.0\r\npytest-forked==0.2\r\npytest-xdist==1.20.1\r\npython-dateutil==2.8.1\r\nPyYAML==5.3.1\r\nreadline==6.2.4.1\r\nrequests==2.23.0\r\nsix==1.14.0\r\nurllib3==1.25.8\r\nwebargs==6.0.0\r\nWerkzeug==1.0.0\r\nzipp==3.1.0\r\n\r\n- Here is an example of what I'm trying to do:\r\n```\r\nfrom flask import Flask\r\nfrom webargs.flaskparser import parser, use_kwargs\r\nfrom marshmallow import EXCLUDE, fields, Schema\r\n\r\n\r\napp = Flask(__name__)\r\n\r\n\r\n@app.errorhandler(422)\r\ndef custom_handler(error):\r\n    errors = []\r\n    if 'query' in error.data['messages']:\r\n        for arg in error.data['messages']['query']:\r\n            for item in error.data['messages']['query'][arg]:\r\n                errors.append(item)\r\n    return str(errors), 400\r\n\r\n\r\nclass test_schema(Schema):\r\n    class Meta:\r\n        unknown = EXCLUDE\r\n        strict = True\r\n    \r\n    test_tup = fields.Tuple((fields.Integer(required=True), fields.Integer(required=True)), required=True)\r\n\r\n\r\n@app.route('/test/', strict_slashes=False)\r\n@parser.use_kwargs(test_schema, location='query')\r\ndef test_the_mallow(**kwargs):\r\n    return \"True\"\r\n```\r\n\r\n- Finally, here are a couple example url's I've tried:\r\n  localhost:2300/test/?test_tup=[0,0]\r\n  localhost:2300/test/?test_tup=(0,0)\r\n  localhost:2300/test/?test_tup=0,0\r\n\n", "before_files": [{"content": "\"\"\"Field classes.\n\nIncludes all fields from `marshmallow.fields` in addition to a custom\n`Nested` field and `DelimitedList`.\n\nAll fields can optionally take a special `location` keyword argument, which\ntells webargs where to parse the request argument from.\n\n.. code-block:: python\n\n    args = {\n        \"active\": fields.Bool(location=\"query\"),\n        \"content_type\": fields.Str(data_key=\"Content-Type\", location=\"headers\"),\n    }\n\nNote: `data_key` replaced `load_from` in marshmallow 3.\nWhen using marshmallow 2, use `load_from`.\n\"\"\"\nimport marshmallow as ma\n\n# Expose all fields from marshmallow.fields.\nfrom marshmallow.fields import *  # noqa: F40\nfrom webargs.compat import MARSHMALLOW_VERSION_INFO\nfrom webargs.dict2schema import dict2schema\n\n__all__ = [\"DelimitedList\"] + ma.fields.__all__\n\n\nclass Nested(ma.fields.Nested):\n    \"\"\"Same as `marshmallow.fields.Nested`, except can be passed a dictionary as\n    the first argument, which will be converted to a `marshmallow.Schema`.\n\n    .. note::\n\n        The schema class here will always be `marshmallow.Schema`, regardless\n        of whether a custom schema class is set on the parser. Pass an explicit schema\n        class if necessary.\n    \"\"\"\n\n    def __init__(self, nested, *args, **kwargs):\n        if isinstance(nested, dict):\n            nested = dict2schema(nested)\n        super().__init__(nested, *args, **kwargs)\n\n\nclass DelimitedList(ma.fields.List):\n    \"\"\"A field which is similar to a List, but takes its input as a delimited\n    string (e.g. \"foo,bar,baz\").\n\n    Like List, it can be given a nested field type which it will use to\n    de/serialize each element of the list.\n\n    :param Field cls_or_instance: A field class or instance.\n    :param str delimiter: Delimiter between values.\n    \"\"\"\n\n    default_error_messages = {\"invalid\": \"Not a valid delimited list.\"}\n    delimiter = \",\"\n\n    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):\n        self.delimiter = delimiter or self.delimiter\n        super().__init__(cls_or_instance, **kwargs)\n\n    def _serialize(self, value, attr, obj):\n        # serializing will start with List serialization, so that we correctly\n        # output lists of non-primitive types, e.g. DelimitedList(DateTime)\n        return self.delimiter.join(\n            format(each) for each in super()._serialize(value, attr, obj)\n        )\n\n    def _deserialize(self, value, attr, data, **kwargs):\n        # attempting to deserialize from a non-string source is an error\n        if not isinstance(value, (str, bytes)):\n            if MARSHMALLOW_VERSION_INFO[0] < 3:\n                self.fail(\"invalid\")\n            else:\n                raise self.make_error(\"invalid\")\n        return super()._deserialize(value.split(self.delimiter), attr, data, **kwargs)\n", "path": "src/webargs/fields.py"}], "after_files": [{"content": "\"\"\"Field classes.\n\nIncludes all fields from `marshmallow.fields` in addition to a custom\n`Nested` field and `DelimitedList`.\n\nAll fields can optionally take a special `location` keyword argument, which\ntells webargs where to parse the request argument from.\n\n.. code-block:: python\n\n    args = {\n        \"active\": fields.Bool(location=\"query\"),\n        \"content_type\": fields.Str(data_key=\"Content-Type\", location=\"headers\"),\n    }\n\nNote: `data_key` replaced `load_from` in marshmallow 3.\nWhen using marshmallow 2, use `load_from`.\n\"\"\"\nimport marshmallow as ma\n\n# Expose all fields from marshmallow.fields.\nfrom marshmallow.fields import *  # noqa: F40\nfrom webargs.compat import MARSHMALLOW_VERSION_INFO\nfrom webargs.dict2schema import dict2schema\n\n__all__ = [\"DelimitedList\"] + ma.fields.__all__\n\n\nclass Nested(ma.fields.Nested):\n    \"\"\"Same as `marshmallow.fields.Nested`, except can be passed a dictionary as\n    the first argument, which will be converted to a `marshmallow.Schema`.\n\n    .. note::\n\n        The schema class here will always be `marshmallow.Schema`, regardless\n        of whether a custom schema class is set on the parser. Pass an explicit schema\n        class if necessary.\n    \"\"\"\n\n    def __init__(self, nested, *args, **kwargs):\n        if isinstance(nested, dict):\n            nested = dict2schema(nested)\n        super().__init__(nested, *args, **kwargs)\n\n\nclass DelimitedFieldMixin:\n    \"\"\"\n    This is a mixin class for subclasses of ma.fields.List and ma.fields.Tuple\n    which split on a pre-specified delimiter. By default, the delimiter will be \",\"\n\n    Because we want the MRO to reach this class before the List or Tuple class,\n    it must be listed first in the superclasses\n\n    For example, a DelimitedList-like type can be defined like so:\n\n    >>> class MyDelimitedList(DelimitedFieldMixin, ma.fields.List):\n    >>>     pass\n    \"\"\"\n\n    delimiter = \",\"\n\n    def _serialize(self, value, attr, obj):\n        # serializing will start with parent-class serialization, so that we correctly\n        # output lists of non-primitive types, e.g. DelimitedList(DateTime)\n        return self.delimiter.join(\n            format(each) for each in super()._serialize(value, attr, obj)\n        )\n\n    def _deserialize(self, value, attr, data, **kwargs):\n        # attempting to deserialize from a non-string source is an error\n        if not isinstance(value, (str, bytes)):\n            if MARSHMALLOW_VERSION_INFO[0] < 3:\n                self.fail(\"invalid\")\n            else:\n                raise self.make_error(\"invalid\")\n        return super()._deserialize(value.split(self.delimiter), attr, data, **kwargs)\n\n\nclass DelimitedList(DelimitedFieldMixin, ma.fields.List):\n    \"\"\"A field which is similar to a List, but takes its input as a delimited\n    string (e.g. \"foo,bar,baz\").\n\n    Like List, it can be given a nested field type which it will use to\n    de/serialize each element of the list.\n\n    :param Field cls_or_instance: A field class or instance.\n    :param str delimiter: Delimiter between values.\n    \"\"\"\n\n    default_error_messages = {\"invalid\": \"Not a valid delimited list.\"}\n    delimiter = \",\"\n\n    def __init__(self, cls_or_instance, *, delimiter=None, **kwargs):\n        self.delimiter = delimiter or self.delimiter\n        super().__init__(cls_or_instance, **kwargs)\n\n\n# DelimitedTuple can only be defined when using marshmallow3, when Tuple was\n# added\nif MARSHMALLOW_VERSION_INFO[0] >= 3:\n\n    class DelimitedTuple(DelimitedFieldMixin, ma.fields.Tuple):\n        \"\"\"A field which is similar to a Tuple, but takes its input as a delimited\n        string (e.g. \"foo,bar,baz\").\n\n        Like Tuple, it can be given a tuple of nested field types which it will use to\n        de/serialize each element of the tuple.\n\n        :param Iterable[Field] tuple_fields: An iterable of field classes or instances.\n        :param str delimiter: Delimiter between values.\n        \"\"\"\n\n        default_error_messages = {\"invalid\": \"Not a valid delimited tuple.\"}\n        delimiter = \",\"\n\n        def __init__(self, tuple_fields, *, delimiter=None, **kwargs):\n            self.delimiter = delimiter or self.delimiter\n            super().__init__(tuple_fields, **kwargs)\n", "path": "src/webargs/fields.py"}]}