nebius/SWE-bench-extra huggingface dataset:
Repository: makcedward/nlpaug

Issue:
Bugfix for issue #203539
I think there is a bug in the char augmenter:

https://github.com/makcedward/nlpaug/blob/5238e0be734841b69651d2043df535d78a8cc594/nlpaug/augmenter/char/char_augmenter.py#L98

the behavior is not consistent with that of the word augmenter:

https://github.com/makcedward/nlpaug/blob/5238e0be734841b69651d2043df535d78a8cc594/nlpaug/augmenter/word/word_augmenter.py#L80

this is related to issue #203539

After changing `return None` to `return []`, the code below will not raise an exception.

```
import nlpaug.augmenter.char as nac
aug = nac.KeyboardAug(aug_word_min=0.0, aug_word_p=0.05)
aug.augment("| 4 ||  || ½ || 0 || ½ || - || 1 || 1 || 1 || 0 || 0 || 0 || 1 || 1 || 1 || 1 || 1 || 1 || 10 || 67.75")
```

Comments:

Patch:
diff --git a/nlpaug/augmenter/char/char_augmenter.py b/nlpaug/augmenter/char/char_augmenter.py
index be44785..c431ac5 100755
--- a/nlpaug/augmenter/char/char_augmenter.py
+++ b/nlpaug/augmenter/char/char_augmenter.py
@@ -95,7 +95,7 @@ class CharAugmenter(Augmenter):
                 exception = WarningException(name=WarningName.OUT_OF_VOCABULARY,
                                              code=WarningCode.WARNING_CODE_002, msg=WarningMessage.NO_WORD)
                 exception.output()
-            return None
+            return []
         if len(idxes) < aug_cnt:
             aug_cnt = len(idxes)
         aug_idxes = self.sample(idxes, aug_cnt)


Test patch:
diff --git a/test/augmenter/char/test_char.py b/test/augmenter/char/test_char.py
index d964bbc..a6ba349 100755
--- a/test/augmenter/char/test_char.py
+++ b/test/augmenter/char/test_char.py
@@ -38,6 +38,13 @@ class TestCharacter(unittest.TestCase):
             tokens = aug.tokenizer(text)
             self.assertEqual(tokens, expected_tokens)
 
+    def test_no_aug(self):
+        aug = nac.KeyboardAug(aug_word_min=0.0, aug_word_p=0.05)
+        text = '| 4 ||  || ½ || 0 || ½ || - || 1 || 1 || 1 || 0 || 0 || 0 || 1 || 1 || 1 || 1 || 1 || 1 || 10 || 67.75'
+
+        augmented_data = aug.augment(text)
+        self.assertEqual(text.replace(' ', ''), augmented_data.replace(' ', ''))
+
     def test_multi_thread(self):
         text = 'The quick brown fox jumps over the lazy dog.'
         n = 3
Repository: malte-soe/dataclass-cli

Issue:
Customize group name
Currently the decorator uses the class name as group name. Add ability to set a custom group name

Comments:

Patch:
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 35e558f..3cc4d10 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -1,5 +1,8 @@
 name: Codecoverage
-on: [push]
+on:
+  pull_request:
+  push:
+    branches: [master]
 jobs:
   run:
     runs-on: ubuntu-latest
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 73b2095..c147950 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -1,10 +1,8 @@
 name: pre-commit
-
 on:
   pull_request:
   push:
     branches: [master]
-
 jobs:
   pre-commit:
     runs-on: ubuntu-latest
diff --git a/dataclass_cli/parser.py b/dataclass_cli/parser.py
index 4caf33b..38be763 100644
--- a/dataclass_cli/parser.py
+++ b/dataclass_cli/parser.py
@@ -1,6 +1,7 @@
 import argparse
 import dataclasses
 import enum
+from functools import partial
 from typing import Dict, List, Union
 
 
@@ -9,16 +10,23 @@ class Options(str, enum.Enum):
     HELP_TEXT = enum.auto()
 
 
-def add(
+def add(cls=None, *, name=None, **kwargs):
+    if cls is None:
+        return partial(_add, name=name, **kwargs)
+    return _add(cls, name=name, **kwargs)
+
+
+def _add(
     cls,
     *,
+    name: str = "",
     _classes: Dict[str, List[str]] = {},
     _parsed_args: Dict[str, Union[int, str]] = {},
     _parser=argparse.ArgumentParser(),
 ):
     assert dataclasses.is_dataclass(cls)
 
-    name = cls.__name__.lower()
+    name = name or cls.__name__.lower()
     assert name not in _classes
     _classes[name] = [arg.name for arg in dataclasses.fields(cls)]
 


Test patch:
diff --git a/tests/test_dc_cli.py b/tests/test_dc_cli.py
index 02e0e8a..f4f7319 100644
--- a/tests/test_dc_cli.py
+++ b/tests/test_dc_cli.py
@@ -133,3 +133,17 @@ class TestDcCli(unittest.TestCase):
             _ = DataclassWithNoDefault()
 
         self.assertIn("the following arguments are required", fake_out.getvalue())
+
+    def test_custom_name(self):
+        name = "custom42"
+        number = 42
+
+        @self.add(name=name)
+        @dataclass
+        class Dataclass:
+            number: int
+
+        testargs = f"test.py --{name}_number {number}".split()
+        with mock.patch("sys.argv", testargs):
+            dc = Dataclass()
+        self.assertEqual(number, dc.number)
Repository: mapbox/mapbox-sdk-py

Issue:
Encoded polylines in wrong coordinate order
Currently, we take the geojson point array and encode the point directly in [lon, lat] order. Polylines should be [lat, lon].

Comments:

Patch:
diff --git a/docs/surface.md b/docs/surface.md
index 8fcbb77..c6e9676 100644
--- a/docs/surface.md
+++ b/docs/surface.md
@@ -86,7 +86,7 @@ contours).
 ...    polyline=True, zoom=12, interpolate=False)
 >>> points = response.geojson()
 >>> [f['properties']['ele'] for f in points['features']]
-[None, None, None]
+[2190, 2190, 2160]
 
 ```
 
diff --git a/mapbox/encoding.py b/mapbox/encoding.py
index 0674d51..6190ea6 100644
--- a/mapbox/encoding.py
+++ b/mapbox/encoding.py
@@ -68,12 +68,13 @@ def encode_waypoints(features, min_limit=None, max_limit=None, precision=6):
     return ';'.join(coords)
 
 
-def encode_polyline(features, zoom_level=18):
+def encode_polyline(features):
     """Encode and iterable of features as a polyline
     """
     points = list(read_points(features))
+    latlon_points = [(x[1], x[0]) for x in points]
     codec = PolylineCodec()
-    return codec.encode(points)
+    return codec.encode(latlon_points)
 
 
 def encode_coordinates_json(features):


Test patch:
diff --git a/tests/test_encoding.py b/tests/test_encoding.py
index fa15f14..9326ae6 100644
--- a/tests/test_encoding.py
+++ b/tests/test_encoding.py
@@ -113,7 +113,7 @@ def test_unknown_object():
 
 
 def test_encode_polyline():
-    expected = "vdatOwp_~EhupD{xiA"
+    expected = "wp_~EvdatO{xiAhupD"
     assert expected == encode_polyline(gj_point_features)
     assert expected == encode_polyline(gj_multipoint_features)
     assert expected == encode_polyline(gj_line_features)
diff --git a/tests/test_surface.py b/tests/test_surface.py
index 05bd2c7..2ba08cd 100644
--- a/tests/test_surface.py
+++ b/tests/test_surface.py
@@ -55,7 +55,7 @@ def test_surface_geojson():
 @responses.activate
 def test_surface_params():
 
-    params = "&encoded_polyline=~kbkTss%60%7BEQeAHu%40&zoom=16&interpolate=false"
+    params = "&encoded_polyline=ss%60%7BE~kbkTeAQu%40H&zoom=16&interpolate=false"
     responses.add(
         responses.GET,
         'https://api.mapbox.com/v4/surface/mapbox.mapbox-terrain-v1.json?access_token=pk.test&fields=ele&layer=contour&geojson=true' + params,
Repository: mapbox/rio-mbtiles

Issue:
Add --covers option to define output extent
Would work like `--cutline` but without masking. Possible values:

* ~A GeoJSON FeatureCollection~
* A single web mercator quadkey string
* A single JSON-encoded `[x, y, z]` web mercator tile object

Comments:

Patch:
diff --git a/CHANGES.txt b/CHANGES.txt
index a2a5269..b479090 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,12 @@
 Changes
 =======
 
+1.5b3 (2020-10-28)
+------------------
+
+- Add a --covers option, taking a quadkey, which limits the output to tiles
+  that cover the quadkey's tile (#66).
+
 1.5b2 (2020-10-16)
 ------------------
 
diff --git a/mbtiles/__init__.py b/mbtiles/__init__.py
index b918758..c8d075a 100644
--- a/mbtiles/__init__.py
+++ b/mbtiles/__init__.py
@@ -3,7 +3,7 @@
 import sys
 import warnings
 
-__version__ = "1.5b2"
+__version__ = "1.5b3"
 
 if sys.version_info < (3, 7):
     warnings.warn(
diff --git a/mbtiles/scripts/cli.py b/mbtiles/scripts/cli.py
index 17e2821..884f436 100644
--- a/mbtiles/scripts/cli.py
+++ b/mbtiles/scripts/cli.py
@@ -204,6 +204,7 @@ def extract_features(ctx, param, value):
 @click.option(
     "--progress-bar", "-#", default=False, is_flag=True, help="Display progress bar."
 )
+@click.option("--covers", help="Restrict mbtiles output to cover a quadkey")
 @click.option(
     "--cutline",
     type=click.Path(exists=True),
@@ -248,6 +249,7 @@ def mbtiles(
     rgba,
     implementation,
     progress_bar,
+    covers,
     cutline,
     open_options,
     warp_options,
@@ -351,6 +353,10 @@ def mbtiles(
                 )
                 warp_options["cutline"] = shapely.wkt.dumps(cutline_rev)
 
+        if covers is not None:
+            covers_tile = mercantile.quadkey_to_tile(covers)
+            west, south, east, north = mercantile.bounds(covers_tile)
+
         # Resolve the minimum and maximum zoom levels for export.
         if zoom_levels:
             minzoom, maxzoom = map(int, zoom_levels.split(".."))


Test patch:
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 5808479..c17e0b4 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -483,3 +483,28 @@ def test_invalid_cutline(tmpdir, data, rgba_points_path, impl, filename):
         ],
     )
     assert result.exit_code == 1
+
+
+@pytest.mark.parametrize(("source", "quadkey", "zooms", "exp_num_results"), [("RGB.byte.tif", "0320", "4..4", 1), ("RGB.byte.tif", "032022", "6..6", 0)])
+def test_covers(tmpdir, data, source, quadkey, zooms, exp_num_results):
+    inputfile = str(data.join(source))
+    outputfile = str(tmpdir.join("export.mbtiles"))
+    runner = CliRunner()
+    result = runner.invoke(
+        main_group,
+        [
+            "mbtiles",
+            "--zoom-levels",
+            zooms,
+            "--covers",
+            quadkey,
+            inputfile,
+            outputfile,
+        ],
+    )
+    assert result.exit_code == 0
+    conn = sqlite3.connect(outputfile)
+    cur = conn.cursor()
+    cur.execute("select * from tiles")
+    results = cur.fetchall()
+    assert len(results) == exp_num_results
Repository: marcoplaisier/QuotePad

Issue:
Homepage
Create a basic homepage with:
- button to create new text
- some simple explanation text
- link to another page to view the texts

Comments:

Patch:
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..e29ccdf
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,12 @@
+language: python
+matrix:
+  include:
+    - python: 3.6
+    - python: 3.7
+      dist: xenial
+      sudo: true
+install:
+- pip install -r requirements/test.txt
+- pip install -e .
+script:
+- pytest
diff --git a/app.py b/app.py
index 4b059ec..e9302f5 100644
--- a/app.py
+++ b/app.py
@@ -1,11 +1,21 @@
-from flask import Flask
+from flask import Flask, render_template
 
 app = Flask(__name__)
 
 
 @app.route('/')
-def hello_world():
-    return 'Hello World!'
+def homepage():
+    return render_template("homepage.html")
+
+
+@app.route('/create')
+def create():
+    return render_template("create.html")
+
+
+@app.route('/index')
+def index():
+    return render_template("index.html")
 
 
 if __name__ == '__main__':
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..75002ff
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="UTF-8">
+        <title>Setting your texts alight - Quotepad</title>
+    </head>
+
+    <body>
+    {% block content %}{% endblock %}
+    </body>
+</html>
\ No newline at end of file
diff --git a/templates/create.html b/templates/create.html
new file mode 100644
index 0000000..3df7d9b
--- /dev/null
+++ b/templates/create.html
@@ -0,0 +1,5 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p>Create a new template placeholder</p>
+{% endblock %}
\ No newline at end of file
diff --git a/templates/homepage.html b/templates/homepage.html
new file mode 100644
index 0000000..ab84e68
--- /dev/null
+++ b/templates/homepage.html
@@ -0,0 +1,10 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p>Create, update and send your texts to your display</p>
+<ul>
+    <li><a id="new_text" href="{{ url_for("create") }}">New text</a></li>
+    <li><a id="overview" href="{{ url_for("index") }}">Existing texts</a></li>
+</ul>
+<p>Click on the links above to create a new text or see a list of existing texts.</p>
+{% endblock %}
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
new file mode 100644
index 0000000..cddbe83
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,5 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p>All texts placeholder</p>
+{% endblock %}
\ No newline at end of file


Test patch:
diff --git a/requirements/test.txt b/requirements/test.txt
index 8c3c0cc..b8ca54f 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -1,6 +1,5 @@
 -r common.txt
 pytest
-behave
 bump
 twine
 setuptools
diff --git a/tests/test_flask.py b/tests/test_flask.py
index bc3a15e..9ade764 100644
--- a/tests/test_flask.py
+++ b/tests/test_flask.py
@@ -10,4 +10,4 @@ def client():
 
 def test_simple(client):
     t = client.get('/')
-    assert b'Hello' in t.data
+    assert b'Setting your texts alight - Quotepad' in t.data
Repository: marcosschroh/dataclasses-avroschema

Issue:
AttributeError: 'NoneType' object has no attribute 'fake'
**Describe the bug**

In my pydantic data model I have the following attribute `X: List[Optional[types.Float32]]`. When I call fake() of this class I get the error 'AttributeError: 'NoneType' object has no attribute 'fake''

**To Reproduce**
```py
from dataclasses_avroschema import types
from dataclasses_avroschema.avrodantic import AvroBaseModel 
from typing import List, Optional, Union

class Model(AvroBaseModel):
    A: str
    B: types.Float32
    X: List[Optional[types.Float32]]
    Y: List[Union[types.Float32, None]]

print(Model.fake())
```

**Expected behavior**

`A='BCGUpoVuoBhZZsPxLBTL' B=3.97300348265236 X=[0.22, 0.3, None] Y=[90.4, 3472.0, None]`

Comments:

Patch:
diff --git a/dataclasses_avroschema/fields.py b/dataclasses_avroschema/fields.py
index c263d29..74a22a9 100644
--- a/dataclasses_avroschema/fields.py
+++ b/dataclasses_avroschema/fields.py
@@ -287,23 +287,22 @@ class ListField(ContainerField):
         items_type = self.type.__args__[0]
 
         if utils.is_union(items_type):
-            self.items_type = UnionField(
+            self.internal_field = UnionField(
                 self.name,
                 items_type,
                 default=self.default,
                 default_factory=self.default_factory,
                 model_metadata=self.model_metadata,
                 parent=self.parent,
-            ).get_avro_type()
+            )
         else:
             self.internal_field = AvroField(
                 self.name, items_type, model_metadata=self.model_metadata, parent=self.parent
             )
-            self.items_type = self.internal_field.get_avro_type()
+
+        self.items_type = self.internal_field.get_avro_type()
 
     def fake(self) -> typing.List:
-        # return a list of one element with the type specified
-        # TODO: check when the internal value is self reference which seems to return `None`
         return [self.internal_field.fake()]
 
 


Test patch:
diff --git a/tests/fake/test_fake.py b/tests/fake/test_fake.py
index 596adfb..c81f8f1 100644
--- a/tests/fake/test_fake.py
+++ b/tests/fake/test_fake.py
@@ -155,6 +155,7 @@ def test_self_one_to_many_relationship() -> None:
     class User(AvroModel):
         name: str
         age: int
+        points: typing.List[typing.Optional[types.Float32]]
         teamates: typing.Optional[typing.List[typing.Type["User"]]] = None
 
     assert isinstance(User.fake(), User)
Repository: marshmallow-code/apispec

Issue:
Add support for `summary` and `description` fields for paths
Documented [here](https://swagger.io/docs/specification/paths-and-operations/):

> Paths may have an optional short summary and a longer description for documentation purposes. This information is supposed to be relevant to all operations in this path. description can be multi-line and supports Markdown (CommonMark) for rich text representation. 

Comments:

Patch:
diff --git a/apispec/core.py b/apispec/core.py
index b3142e7..ddada9e 100644
--- a/apispec/core.py
+++ b/apispec/core.py
@@ -277,13 +277,17 @@ class APISpec(object):
         self._tags.append(tag)
         return self
 
-    def path(self, path=None, operations=None, **kwargs):
+    def path(
+        self, path=None, operations=None, summary=None, description=None, **kwargs
+    ):
         """Add a new path object to the spec.
 
         https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#path-item-object
 
         :param str|None path: URL path component
         :param dict|None operations: describes the http methods and options for `path`
+        :param str summary: short summary relevant to all operations in this path
+        :param str description: long description relevant to all operations in this path
         :param dict kwargs: parameters used by any path helpers see :meth:`register_path_helper`
         """
         operations = operations or OrderedDict()
@@ -309,4 +313,8 @@ class APISpec(object):
         clean_operations(operations, self.openapi_version.major)
 
         self._paths.setdefault(path, operations).update(operations)
+        if summary is not None:
+            self._paths[path]["summary"] = summary
+        if description is not None:
+            self._paths[path]["description"] = description
         return self


Test patch:
diff --git a/tests/test_core.py b/tests/test_core.py
index 594c035..cd13657 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -298,6 +298,15 @@ class TestPath:
             spec.path()
         assert "Path template is not specified" in str(excinfo)
 
+    def test_path_summary_description(self, spec):
+        summary = "Operations on a Pet"
+        description = "Operations on a Pet identified by its ID"
+        spec.path(path="/pet/{petId}", summary=summary, description=description)
+
+        p = get_paths(spec)["/pet/{petId}"]
+        assert p["summary"] == summary
+        assert p["description"] == description
+
     def test_parameter(self, spec):
         route_spec = self.paths["/pet/{petId}"]["get"]
Repository: marshmallow-code/apispec

Issue:
Ability to access APISpec.components in plugin init_spec method
Is there a specific reason why components is initialized after plugins init_spec methods are called?

If not, then I am willing to open a PR to solve this issue.

Comments:

Patch:
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 1ad3e9a..84c119e 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -62,3 +62,4 @@ Contributors (chronological)
 - Bastien Gerard `@bagerard <https://github.com/bagerard>`_
 - Ashutosh Chaudhary `@codeasashu <https://github.com/codeasashu>`_
 - Fedor Fominykh `@fedorfo <https://github.com/fedorfo>`_
+- Colin Bounouar `@Colin-b <https://github.com/colin-b>`_
diff --git a/src/apispec/core.py b/src/apispec/core.py
index 77b876c..e878321 100644
--- a/src/apispec/core.py
+++ b/src/apispec/core.py
@@ -190,19 +190,19 @@ class APISpec:
         self.version = version
         self.openapi_version = OpenAPIVersion(openapi_version)
         self.options = options
+        self.plugins = plugins
 
         # Metadata
         self._tags = []
         self._paths = OrderedDict()
 
+        # Components
+        self.components = Components(self.plugins, self.openapi_version)
+
         # Plugins
-        self.plugins = plugins
         for plugin in self.plugins:
             plugin.init_spec(self)
 
-        # Components
-        self.components = Components(self.plugins, self.openapi_version)
-
     def to_dict(self):
         ret = {
             "paths": self._paths,


Test patch:
diff --git a/tests/test_core.py b/tests/test_core.py
index 3978632..ce9348f 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -276,6 +276,21 @@ class TestComponents:
         spec.components.schema("Pet", properties=self.properties, enum=enum)
         assert spec.to_dict() == yaml.safe_load(spec.to_yaml())
 
+    def test_components_can_be_accessed_by_plugin_in_init_spec(self):
+        class TestPlugin(BasePlugin):
+            def init_spec(self, spec):
+                spec.components.schema(
+                    "TestSchema",
+                    {"properties": {"key": {"type": "string"}}, "type": "object"},
+                )
+
+        spec = APISpec(
+            "Test API", version="0.0.1", openapi_version="2.0", plugins=[TestPlugin()]
+        )
+        assert get_schemas(spec) == {
+            "TestSchema": {"properties": {"key": {"type": "string"}}, "type": "object"}
+        }
+
 
 class TestPath:
     paths = {
Repository: marshmallow-code/apispec

Issue:
ordered is part of the Meta of a schema
ordered is part of Meta see https://marshmallow.readthedocs.io/en/stable/marshmallow.schema.html#marshmallow.schema.Schema.Meta, however it is currently pulled from the schema see https://github.com/marshmallow-code/apispec/blob/dev/src/apispec/ext/marshmallow/openapi.py#L180

Work around
```python
import marshmallow

class Foo(marshmallow.Schema):
    class Meta:
        ordered = True

    ordered = True
```

Comments:

Patch:
diff --git a/src/apispec/ext/marshmallow/openapi.py b/src/apispec/ext/marshmallow/openapi.py
index 273af20..24866c2 100644
--- a/src/apispec/ext/marshmallow/openapi.py
+++ b/src/apispec/ext/marshmallow/openapi.py
@@ -177,7 +177,7 @@ class OpenAPIConverter(FieldConverterMixin):
         fields = get_fields(schema)
         Meta = getattr(schema, "Meta", None)
         partial = getattr(schema, "partial", None)
-        ordered = getattr(schema, "ordered", False)
+        ordered = getattr(Meta, "ordered", False)
 
         jsonschema = self.fields2jsonschema(fields, partial=partial, ordered=ordered)
 


Test patch:
diff --git a/tests/test_ext_marshmallow_openapi.py b/tests/test_ext_marshmallow_openapi.py
index 83ea7ad..f417377 100644
--- a/tests/test_ext_marshmallow_openapi.py
+++ b/tests/test_ext_marshmallow_openapi.py
@@ -1,4 +1,5 @@
 import pytest
+from collections import OrderedDict
 from datetime import datetime
 
 from marshmallow import EXCLUDE, fields, INCLUDE, RAISE, Schema, validate
@@ -102,6 +103,21 @@ class TestMarshmallowSchemaToModelDefinition:
         res = openapi.schema2jsonschema(BandSchema(partial=("drummer",)))
         assert res["required"] == ["bassist"]
 
+    @pytest.mark.parametrize("ordered_schema", (True, False))
+    def test_ordered(self, openapi, ordered_schema):
+        class BandSchema(Schema):
+            class Meta:
+                ordered = ordered_schema
+
+            drummer = fields.Str()
+            bassist = fields.Str()
+
+        res = openapi.schema2jsonschema(BandSchema)
+        assert isinstance(res["properties"], OrderedDict) == ordered_schema
+
+        res = openapi.schema2jsonschema(BandSchema())
+        assert isinstance(res["properties"], OrderedDict) == ordered_schema
+
     def test_no_required_fields(self, openapi):
         class BandSchema(Schema):
             drummer = fields.Str()