We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Change how works generating data by schema
The current design is bad for following reasons:

`Field` is an object which can represent any method of any provider and it's mean that is data provider which should return data and it's the only thing that we want by this object, but here how it works right now:

```
>>> from mimesis.schema import Field
>>> from mimesis.enums import Gender
_ = Field('en')
>>> _ = Field('en')
>>> app_schema = (
...     lambda: {
...         "id": _('uuid'),
...         "name": _('word'),
...         "version": _('version'),
...         "owner": {
...             "email": _('email'),
...             "token": _('token'),
...             "creator": _('full_name', gender=Gender.FEMALE),
...         },
...     }
... )
>>> _.fill(schema=app_schema, iterations=10)
```

It looks really annoying.

It should be done using another way because here every instance of `Field` contains method `fill`, but why? Good question... because this is disgusting API designed by me. And now I see my mistake and suggest that it be corrected.

I suggest this:

```
from mimesis.schema import Field, Schema
_ = Field('en')
app_data = Schema(lambda: {
    "id": _('uuid'),
    "name": _('word'),
    "version": _('version'),
    "owner": {
        "email": _('email'),
        "token": _('token'),
        "creator": _('full_name', gender=Gender.FEMALE),
    },
}).create(iterations=20)
```

I think that is much better because the code is much more readable and looks more logical.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mimesis/providers/development.py`
Content:
```
1 from mimesis.data import (BACKEND, CONTAINER, FRONTEND, LICENSES, NOSQL, OS,
2                           PROGRAMMING_LANGS, SQL)
3 from mimesis.providers.base import BaseProvider
4 
5 
6 class Development(BaseProvider):
7     """Class for getting fake data for Developers."""
8 
9     def software_license(self) -> str:
10         """Get a random software license from list.
11 
12         :return: License name.
13 
14         :Example:
15             The BSD 3-Clause License.
16         """
17         return self.random.choice(LICENSES)
18 
19     def version(self, pre_release: bool = False) -> str:
20         """Generate a random version information.
21 
22         :param pre_release: Pre-release.
23         :return: The version of software.
24 
25         :Example:
26             0.11.3-alpha.1
27         """
28         major, minor, patch = self.random.randints(3, 0, 10)
29         version = '{}.{}.{}'.format(major, minor, patch)
30 
31         if pre_release:
32             suffixes = ('alpha', 'beta', 'rc')
33             suffix = self.random.choice(suffixes)
34             number = self.random.randint(1, 11)
35             return '{}-{}.{}'.format(version, suffix, number)
36 
37         return version
38 
39     def database(self, nosql: bool = False) -> str:
40         """Get a random database name.
41 
42         :param bool nosql: only NoSQL databases.
43         :return: Database name.
44 
45         :Example:
46             PostgreSQL.
47         """
48         if nosql:
49             return self.random.choice(NOSQL)
50         return self.random.choice(SQL)
51 
52     def container(self) -> str:
53         """Get a random containerization system.
54 
55         :return: Containerization system.
56 
57         :Example:
58             Docker.
59         """
60         return self.random.choice(CONTAINER)
61 
62     def version_control_system(self) -> str:
63         """Get a random version control system.
64 
65         :return: Version control system
66 
67         :Example:
68             Git
69         """
70         vcs = ('Git', 'Subversion')
71         return self.random.choice(vcs)
72 
73     def programming_language(self) -> str:
74         """Get a random programming language from the list.
75 
76         :return: Programming language.
77 
78         :Example:
79             Erlang.
80         """
81         return self.random.choice(PROGRAMMING_LANGS)
82 
83     def backend(self) -> str:
84         """Get a random backend stack.
85 
86         :return: Stack.
87 
88         :Example:
89             Elixir/Phoenix
90         """
91         return self.random.choice(BACKEND)
92 
93     def frontend(self) -> str:
94         """Get a random front-end stack.
95 
96         :return: Stack.
97 
98         :Example:
99             JS/React.
100         """
101         return self.random.choice(FRONTEND)
102 
103     def os(self) -> str:
104         """Get a random operating system or distributive name.
105 
106         :return: The name of OS.
107 
108         :Example:
109             Gentoo
110         """
111         return self.random.choice(OS)
112 
113     def boolean(self) -> bool:
114         """Get a random boolean value.
115 
116         :return: True of False.
117         """
118         values = (0, 1)
119         value = self.random.choice(values)
120         return bool(value)
121
```
--- END FILES ---

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

Here is an example:

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

```

diff --git a/mimesis/providers/development.py b/mimesis/providers/development.py
--- a/mimesis/providers/development.py
+++ b/mimesis/providers/development.py
@@ -16,16 +16,28 @@
         """
         return self.random.choice(LICENSES)
 
-    def version(self, pre_release: bool = False) -> str:
+    def version(self, calver: bool = False, pre_release: bool = False) -> str:
         """Generate a random version information.
 
+        :param calver: Use calendar versioning.
         :param pre_release: Pre-release.
         :return: The version of software.
-
+.
         :Example:
             0.11.3-alpha.1
         """
+        version = '{}.{}.{}'
         major, minor, patch = self.random.randints(3, 0, 10)
+
+        if calver:
+            if minor == 0:
+                minor += 1
+
+            if patch == 0:
+                patch += 1
+            major = self.random.randint(2016, 2018)
+            return version.format(major, minor, patch)
+
         version = '{}.{}.{}'.format(major, minor, patch)
 
         if pre_release:

{"golden_diff": "diff --git a/mimesis/providers/development.py b/mimesis/providers/development.py\n--- a/mimesis/providers/development.py\n+++ b/mimesis/providers/development.py\n@@ -16,16 +16,28 @@\n         \"\"\"\n         return self.random.choice(LICENSES)\n \n-    def version(self, pre_release: bool = False) -> str:\n+    def version(self, calver: bool = False, pre_release: bool = False) -> str:\n         \"\"\"Generate a random version information.\n \n+        :param calver: Use calendar versioning.\n         :param pre_release: Pre-release.\n         :return: The version of software.\n-\n+.\n         :Example:\n             0.11.3-alpha.1\n         \"\"\"\n+        version = '{}.{}.{}'\n         major, minor, patch = self.random.randints(3, 0, 10)\n+\n+        if calver:\n+            if minor == 0:\n+                minor += 1\n+\n+            if patch == 0:\n+                patch += 1\n+            major = self.random.randint(2016, 2018)\n+            return version.format(major, minor, patch)\n+\n         version = '{}.{}.{}'.format(major, minor, patch)\n \n         if pre_release:\n", "issue": "Change how works generating data by schema\nThe current design is bad for following reasons:\r\n\r\n`Field` is an object which can represent any method of any provider and it's mean that is data provider which should return data and it's the only thing that we want by this object, but here how it works right now:\r\n\r\n```\r\n>>> from mimesis.schema import Field\r\n>>> from mimesis.enums import Gender\r\n_ = Field('en')\r\n>>> _ = Field('en')\r\n>>> app_schema = (\r\n...     lambda: {\r\n...         \"id\": _('uuid'),\r\n...         \"name\": _('word'),\r\n...         \"version\": _('version'),\r\n...         \"owner\": {\r\n...             \"email\": _('email'),\r\n...             \"token\": _('token'),\r\n...             \"creator\": _('full_name', gender=Gender.FEMALE),\r\n...         },\r\n...     }\r\n... )\r\n>>> _.fill(schema=app_schema, iterations=10)\r\n```\r\n\r\nIt looks really annoying.\r\n\r\nIt should be done using another way because here every instance of `Field` contains method `fill`, but why? Good question... because this is disgusting API designed by me. And now I see my mistake and suggest that it be corrected.\r\n\r\nI suggest this:\r\n\r\n```\r\nfrom mimesis.schema import Field, Schema\r\n_ = Field('en')\r\napp_data = Schema(lambda: {\r\n    \"id\": _('uuid'),\r\n    \"name\": _('word'),\r\n    \"version\": _('version'),\r\n    \"owner\": {\r\n        \"email\": _('email'),\r\n        \"token\": _('token'),\r\n        \"creator\": _('full_name', gender=Gender.FEMALE),\r\n    },\r\n}).create(iterations=20)\r\n```\r\n\r\nI think that is much better because the code is much more readable and looks more logical.\n", "before_files": [{"content": "from mimesis.data import (BACKEND, CONTAINER, FRONTEND, LICENSES, NOSQL, OS,\n                          PROGRAMMING_LANGS, SQL)\nfrom mimesis.providers.base import BaseProvider\n\n\nclass Development(BaseProvider):\n    \"\"\"Class for getting fake data for Developers.\"\"\"\n\n    def software_license(self) -> str:\n        \"\"\"Get a random software license from list.\n\n        :return: License name.\n\n        :Example:\n            The BSD 3-Clause License.\n        \"\"\"\n        return self.random.choice(LICENSES)\n\n    def version(self, pre_release: bool = False) -> str:\n        \"\"\"Generate a random version information.\n\n        :param pre_release: Pre-release.\n        :return: The version of software.\n\n        :Example:\n            0.11.3-alpha.1\n        \"\"\"\n        major, minor, patch = self.random.randints(3, 0, 10)\n        version = '{}.{}.{}'.format(major, minor, patch)\n\n        if pre_release:\n            suffixes = ('alpha', 'beta', 'rc')\n            suffix = self.random.choice(suffixes)\n            number = self.random.randint(1, 11)\n            return '{}-{}.{}'.format(version, suffix, number)\n\n        return version\n\n    def database(self, nosql: bool = False) -> str:\n        \"\"\"Get a random database name.\n\n        :param bool nosql: only NoSQL databases.\n        :return: Database name.\n\n        :Example:\n            PostgreSQL.\n        \"\"\"\n        if nosql:\n            return self.random.choice(NOSQL)\n        return self.random.choice(SQL)\n\n    def container(self) -> str:\n        \"\"\"Get a random containerization system.\n\n        :return: Containerization system.\n\n        :Example:\n            Docker.\n        \"\"\"\n        return self.random.choice(CONTAINER)\n\n    def version_control_system(self) -> str:\n        \"\"\"Get a random version control system.\n\n        :return: Version control system\n\n        :Example:\n            Git\n        \"\"\"\n        vcs = ('Git', 'Subversion')\n        return self.random.choice(vcs)\n\n    def programming_language(self) -> str:\n        \"\"\"Get a random programming language from the list.\n\n        :return: Programming language.\n\n        :Example:\n            Erlang.\n        \"\"\"\n        return self.random.choice(PROGRAMMING_LANGS)\n\n    def backend(self) -> str:\n        \"\"\"Get a random backend stack.\n\n        :return: Stack.\n\n        :Example:\n            Elixir/Phoenix\n        \"\"\"\n        return self.random.choice(BACKEND)\n\n    def frontend(self) -> str:\n        \"\"\"Get a random front-end stack.\n\n        :return: Stack.\n\n        :Example:\n            JS/React.\n        \"\"\"\n        return self.random.choice(FRONTEND)\n\n    def os(self) -> str:\n        \"\"\"Get a random operating system or distributive name.\n\n        :return: The name of OS.\n\n        :Example:\n            Gentoo\n        \"\"\"\n        return self.random.choice(OS)\n\n    def boolean(self) -> bool:\n        \"\"\"Get a random boolean value.\n\n        :return: True of False.\n        \"\"\"\n        values = (0, 1)\n        value = self.random.choice(values)\n        return bool(value)\n", "path": "mimesis/providers/development.py"}], "after_files": [{"content": "from mimesis.data import (BACKEND, CONTAINER, FRONTEND, LICENSES, NOSQL, OS,\n                          PROGRAMMING_LANGS, SQL)\nfrom mimesis.providers.base import BaseProvider\n\n\nclass Development(BaseProvider):\n    \"\"\"Class for getting fake data for Developers.\"\"\"\n\n    def software_license(self) -> str:\n        \"\"\"Get a random software license from list.\n\n        :return: License name.\n\n        :Example:\n            The BSD 3-Clause License.\n        \"\"\"\n        return self.random.choice(LICENSES)\n\n    def version(self, calver: bool = False, pre_release: bool = False) -> str:\n        \"\"\"Generate a random version information.\n\n        :param calver: Use calendar versioning.\n        :param pre_release: Pre-release.\n        :return: The version of software.\n.\n        :Example:\n            0.11.3-alpha.1\n        \"\"\"\n        version = '{}.{}.{}'\n        major, minor, patch = self.random.randints(3, 0, 10)\n\n        if calver:\n            if minor == 0:\n                minor += 1\n\n            if patch == 0:\n                patch += 1\n            major = self.random.randint(2016, 2018)\n            return version.format(major, minor, patch)\n\n        version = '{}.{}.{}'.format(major, minor, patch)\n\n        if pre_release:\n            suffixes = ('alpha', 'beta', 'rc')\n            suffix = self.random.choice(suffixes)\n            number = self.random.randint(1, 11)\n            return '{}-{}.{}'.format(version, suffix, number)\n\n        return version\n\n    def database(self, nosql: bool = False) -> str:\n        \"\"\"Get a random database name.\n\n        :param bool nosql: only NoSQL databases.\n        :return: Database name.\n\n        :Example:\n            PostgreSQL.\n        \"\"\"\n        if nosql:\n            return self.random.choice(NOSQL)\n        return self.random.choice(SQL)\n\n    def container(self) -> str:\n        \"\"\"Get a random containerization system.\n\n        :return: Containerization system.\n\n        :Example:\n            Docker.\n        \"\"\"\n        return self.random.choice(CONTAINER)\n\n    def version_control_system(self) -> str:\n        \"\"\"Get a random version control system.\n\n        :return: Version control system\n\n        :Example:\n            Git\n        \"\"\"\n        vcs = ('Git', 'Subversion')\n        return self.random.choice(vcs)\n\n    def programming_language(self) -> str:\n        \"\"\"Get a random programming language from the list.\n\n        :return: Programming language.\n\n        :Example:\n            Erlang.\n        \"\"\"\n        return self.random.choice(PROGRAMMING_LANGS)\n\n    def backend(self) -> str:\n        \"\"\"Get a random backend stack.\n\n        :return: Stack.\n\n        :Example:\n            Elixir/Phoenix\n        \"\"\"\n        return self.random.choice(BACKEND)\n\n    def frontend(self) -> str:\n        \"\"\"Get a random front-end stack.\n\n        :return: Stack.\n\n        :Example:\n            JS/React.\n        \"\"\"\n        return self.random.choice(FRONTEND)\n\n    def os(self) -> str:\n        \"\"\"Get a random operating system or distributive name.\n\n        :return: The name of OS.\n\n        :Example:\n            Gentoo\n        \"\"\"\n        return self.random.choice(OS)\n\n    def boolean(self) -> bool:\n        \"\"\"Get a random boolean value.\n\n        :return: True of False.\n        \"\"\"\n        values = (0, 1)\n        value = self.random.choice(values)\n        return bool(value)\n", "path": "mimesis/providers/development.py"}]}