swagger-coverage 3.3.0__tar.gz → 3.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/PKG-INFO +26 -4
- swagger-coverage-3.3.0/swagger_coverage.egg-info/PKG-INFO → swagger_coverage-3.5.0/README.md +19 -18
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/setup.py +3 -4
- swagger-coverage-3.3.0/README.md → swagger_coverage-3.5.0/swagger_coverage.egg-info/PKG-INFO +40 -4
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage.egg-info/requires.txt +2 -2
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/configs.py +6 -2
- swagger_coverage-3.5.0/swagger_coverage_py/docs_writers/api_doc_writer.py +56 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/listener.py +10 -2
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/reporter.py +29 -4
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/results_writers/base_schemas_manager.py +36 -18
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/results_writers/openapi_schemas_manager.py +6 -1
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/results_writers/swagger_schemas_manager.py +4 -1
- swagger-coverage-3.3.0/swagger_coverage_py/docs_writers/api_doc_writer.py +0 -32
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/LICENSE +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/MANIFEST.in +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/setup.cfg +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage.egg-info/SOURCES.txt +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage.egg-info/dependency_links.txt +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage.egg-info/top_level.txt +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/__init__.py +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/docs_writers/__init__.py +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/request_schema_handler.py +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/results_writers/__init__.py +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/bin/swagger-coverage-commandline +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/bin/swagger-coverage-commandline.bat +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/btf-1.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/checker-compat-qual-2.5.5.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/checker-qual-3.12.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-codec-1.11.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-codec-1.9.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-io-2.11.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-io-2.6.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-lang3-3.12.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-lang3-3.7.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/commons-logging-1.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/error_prone_annotations-2.3.4.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/error_prone_annotations-2.7.1.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/failureaccess-1.0.1.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/freemarker-2.3.31.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/guava-28.2-android.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/guava-31.0.1-android.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/httpclient-4.5.13.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/httpclient-4.5.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/httpcore-4.4.13.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/httpcore-4.4.4.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/j2objc-annotations-1.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-annotations-2.12.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-core-2.12.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-coreutils-2.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-coreutils-equivalence-1.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-databind-2.12.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-dataformat-yaml-2.12.3.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jackson-datatype-jsr310-2.9.8.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jakarta.activation-api-1.2.1.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jakarta.validation-api-2.0.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jakarta.xml.bind-api-2.3.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jcommander-1.81.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/joda-time-2.10.5.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jopt-simple-5.0.4.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/json-patch-1.13.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/json-schema-core-1.2.14.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/json-schema-validator-2.2.14.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/jsr305-3.0.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/libphonenumber-8.11.1.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/logback-classic-1.2.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/logback-core-1.2.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/mailapi-1.6.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/msg-simple-1.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/rhino-1.7.7.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/slf4j-api-1.7.32.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/slf4j-ext-1.7.28.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/snakeyaml-1.27.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/spring-beans-5.3.7.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/spring-core-5.3.7.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/spring-jcl-5.3.7.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/spring-web-5.3.7.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-annotations-1.6.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-annotations-1.6.6.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-annotations-2.1.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-annotations-2.2.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-compat-spec-parser-1.0.54.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-compat-spec-parser-1.0.59.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-core-1.6.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-core-1.6.6.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-core-2.1.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-core-2.2.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-coverage-commandline-1.0-SNAPSHOT.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-coverage-commons-1.0-SNAPSHOT.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-models-1.6.2.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-models-1.6.6.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-models-2.1.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-models-2.2.0.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-1.0.54.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-1.0.59.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-2.0.25.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-2.0.32.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-core-2.0.25.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-core-2.0.32.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-v2-converter-2.0.25.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-v2-converter-2.0.32.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-v3-2.0.25.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/swagger-parser-v3-2.0.32.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/uri-template-0.10.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/swagger-coverage-commandline/lib/validation-api-1.1.0.Final.jar +0 -0
- {swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/uri.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: swagger-coverage
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.5.0
|
|
4
4
|
Summary: Python adapter for "swagger-coverage" tool
|
|
5
5
|
Home-page: https://github.com/JamalZeynalov/swagger-coverage-py
|
|
6
6
|
Author: Jamal Zeinalov
|
|
@@ -11,6 +11,13 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.6
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
+
Requires-Dist: requests>=2.31.0
|
|
15
|
+
Requires-Dist: Faker>=15.2.0
|
|
16
|
+
Requires-Dist: setuptools>=69.0.3
|
|
17
|
+
Requires-Dist: PyYAML>=6.0
|
|
18
|
+
Requires-Dist: python-dotenv>=0.21.0
|
|
19
|
+
Requires-Dist: rootpath==0.1.0
|
|
20
|
+
Requires-Dist: environs>=9.5.0
|
|
14
21
|
|
|
15
22
|

|
|
16
23
|

|
|
@@ -21,7 +28,9 @@ License-File: LICENSE
|
|
|
21
28
|
|
|
22
29
|
## Original description summary:
|
|
23
30
|
|
|
24
|
-
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
31
|
+
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
32
|
+
> coverage we mean not a broad theme functionality, but presence (or absence) of calls defined by API methods, parameters,
|
|
33
|
+
> return codes or other conditions which corresponds specification of API.
|
|
25
34
|
|
|
26
35
|
Some more info about the project you can also
|
|
27
36
|
find [HERE](https://viclovsky.github.io/%D0%B0%D0%B2%D1%82%D0%BE%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20api/2020/01/16/swagger-coverage)
|
|
@@ -47,6 +56,7 @@ pip install swagger-coverage
|
|
|
47
56
|
```
|
|
48
57
|
|
|
49
58
|
### 2. Add environment variables (Optionally):
|
|
59
|
+
|
|
50
60
|
```dotenv
|
|
51
61
|
API_DOCS_TYPE="swagger" # Note: "openapi" is default type of API docs
|
|
52
62
|
API_DOCS_VERSION="2.0" # Note: "3.0.0" is default version of API docs
|
|
@@ -122,7 +132,8 @@ def setup_swagger_coverage():
|
|
|
122
132
|
> `host` - The host of the API.
|
|
123
133
|
> It will be used to download a swagger.json file and to identify the CoverageListener output directory for each API.
|
|
124
134
|
>
|
|
125
|
-
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
135
|
+
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
136
|
+
> target host)
|
|
126
137
|
>
|
|
127
138
|
> `path_to_swagger_json` - A second part of the HTTP link to your OpenApi/Swagger documentation in JSON format<br>
|
|
128
139
|
> Adapted `swagger-<api_name>.json` file will be created in your project root.<br>
|
|
@@ -144,6 +155,12 @@ def setup_swagger_coverage():
|
|
|
144
155
|
],
|
|
145
156
|
"filter": []
|
|
146
157
|
},
|
|
158
|
+
"paths": {
|
|
159
|
+
"enable": true,
|
|
160
|
+
"ignore": [
|
|
161
|
+
"/user/{username}"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
147
164
|
"only-declared-status": {
|
|
148
165
|
"enable": false
|
|
149
166
|
},
|
|
@@ -159,10 +176,15 @@ def setup_swagger_coverage():
|
|
|
159
176
|
}
|
|
160
177
|
}
|
|
161
178
|
```
|
|
179
|
+
The `path` section is designed to exclude specific endpoints (all methods) from the final HTML report.
|
|
180
|
+
To do this, you need to set `enable` parameter to `true` and specify a list of endpoints (as you see them in the swagger doc) in the `ignore` section.
|
|
181
|
+
Then these endpoints will be removed from the API doc before it is saved locally.<br>
|
|
182
|
+
Note: Remove already downloaded API docs before running a new version of this lib.
|
|
162
183
|
|
|
163
184
|
> ### If you have more than 1 API then this config MUST:
|
|
164
185
|
> #### 1. Be created for each microservice which you track using `CoverageListener`.
|
|
165
|
-
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
186
|
+
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
187
|
+
> may cause override in case you have multiple APIs
|
|
166
188
|
> #### 2. Contain `writers` section with filename in the format: `swagger-coverage-report-<api_name>.html`
|
|
167
189
|
> #### 3. Be placed in the root of your project
|
|
168
190
|
|
swagger-coverage-3.3.0/swagger_coverage.egg-info/PKG-INFO → swagger_coverage-3.5.0/README.md
RENAMED
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: swagger-coverage
|
|
3
|
-
Version: 3.3.0
|
|
4
|
-
Summary: Python adapter for "swagger-coverage" tool
|
|
5
|
-
Home-page: https://github.com/JamalZeynalov/swagger-coverage-py
|
|
6
|
-
Author: Jamal Zeinalov
|
|
7
|
-
Author-email: jamal.zeynalov@gmail.com
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
-
Classifier: Operating System :: OS Independent
|
|
11
|
-
Requires-Python: >=3.6
|
|
12
|
-
Description-Content-Type: text/markdown
|
|
13
|
-
License-File: LICENSE
|
|
14
|
-
|
|
15
1
|

|
|
16
2
|

|
|
17
3
|
|
|
@@ -21,7 +7,9 @@ License-File: LICENSE
|
|
|
21
7
|
|
|
22
8
|
## Original description summary:
|
|
23
9
|
|
|
24
|
-
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
10
|
+
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
11
|
+
> coverage we mean not a broad theme functionality, but presence (or absence) of calls defined by API methods, parameters,
|
|
12
|
+
> return codes or other conditions which corresponds specification of API.
|
|
25
13
|
|
|
26
14
|
Some more info about the project you can also
|
|
27
15
|
find [HERE](https://viclovsky.github.io/%D0%B0%D0%B2%D1%82%D0%BE%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20api/2020/01/16/swagger-coverage)
|
|
@@ -47,6 +35,7 @@ pip install swagger-coverage
|
|
|
47
35
|
```
|
|
48
36
|
|
|
49
37
|
### 2. Add environment variables (Optionally):
|
|
38
|
+
|
|
50
39
|
```dotenv
|
|
51
40
|
API_DOCS_TYPE="swagger" # Note: "openapi" is default type of API docs
|
|
52
41
|
API_DOCS_VERSION="2.0" # Note: "3.0.0" is default version of API docs
|
|
@@ -122,7 +111,8 @@ def setup_swagger_coverage():
|
|
|
122
111
|
> `host` - The host of the API.
|
|
123
112
|
> It will be used to download a swagger.json file and to identify the CoverageListener output directory for each API.
|
|
124
113
|
>
|
|
125
|
-
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
114
|
+
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
115
|
+
> target host)
|
|
126
116
|
>
|
|
127
117
|
> `path_to_swagger_json` - A second part of the HTTP link to your OpenApi/Swagger documentation in JSON format<br>
|
|
128
118
|
> Adapted `swagger-<api_name>.json` file will be created in your project root.<br>
|
|
@@ -144,6 +134,12 @@ def setup_swagger_coverage():
|
|
|
144
134
|
],
|
|
145
135
|
"filter": []
|
|
146
136
|
},
|
|
137
|
+
"paths": {
|
|
138
|
+
"enable": true,
|
|
139
|
+
"ignore": [
|
|
140
|
+
"/user/{username}"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
147
143
|
"only-declared-status": {
|
|
148
144
|
"enable": false
|
|
149
145
|
},
|
|
@@ -159,10 +155,15 @@ def setup_swagger_coverage():
|
|
|
159
155
|
}
|
|
160
156
|
}
|
|
161
157
|
```
|
|
158
|
+
The `path` section is designed to exclude specific endpoints (all methods) from the final HTML report.
|
|
159
|
+
To do this, you need to set `enable` parameter to `true` and specify a list of endpoints (as you see them in the swagger doc) in the `ignore` section.
|
|
160
|
+
Then these endpoints will be removed from the API doc before it is saved locally.<br>
|
|
161
|
+
Note: Remove already downloaded API docs before running a new version of this lib.
|
|
162
162
|
|
|
163
163
|
> ### If you have more than 1 API then this config MUST:
|
|
164
164
|
> #### 1. Be created for each microservice which you track using `CoverageListener`.
|
|
165
|
-
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
165
|
+
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
166
|
+
> may cause override in case you have multiple APIs
|
|
166
167
|
> #### 2. Contain `writers` section with filename in the format: `swagger-coverage-report-<api_name>.html`
|
|
167
168
|
> #### 3. Be placed in the root of your project
|
|
168
169
|
|
|
@@ -211,4 +212,4 @@ Important remarks:
|
|
|
211
212
|
|
|
212
213
|
## License
|
|
213
214
|
|
|
214
|
-
Swagger coverage is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0)
|
|
215
|
+
Swagger coverage is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0)
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="swagger-coverage",
|
|
8
|
-
version="3.
|
|
8
|
+
version="3.5.0",
|
|
9
9
|
author="Jamal Zeinalov",
|
|
10
10
|
author_email="jamal.zeynalov@gmail.com",
|
|
11
11
|
description='Python adapter for "swagger-coverage" tool',
|
|
@@ -19,14 +19,13 @@ setup(
|
|
|
19
19
|
"Operating System :: OS Independent",
|
|
20
20
|
],
|
|
21
21
|
install_requires=[
|
|
22
|
-
"requests>=2.
|
|
22
|
+
"requests>=2.31.0",
|
|
23
23
|
"Faker>=15.2.0",
|
|
24
|
-
"setuptools>=
|
|
24
|
+
"setuptools>=69.0.3",
|
|
25
25
|
"PyYAML>=6.0",
|
|
26
26
|
"python-dotenv>=0.21.0",
|
|
27
27
|
"rootpath==0.1.0",
|
|
28
28
|
"environs>=9.5.0",
|
|
29
|
-
|
|
30
29
|
],
|
|
31
30
|
python_requires=">=3.6",
|
|
32
31
|
include_package_data=True,
|
swagger-coverage-3.3.0/README.md → swagger_coverage-3.5.0/swagger_coverage.egg-info/PKG-INFO
RENAMED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: swagger-coverage
|
|
3
|
+
Version: 3.5.0
|
|
4
|
+
Summary: Python adapter for "swagger-coverage" tool
|
|
5
|
+
Home-page: https://github.com/JamalZeynalov/swagger-coverage-py
|
|
6
|
+
Author: Jamal Zeinalov
|
|
7
|
+
Author-email: jamal.zeynalov@gmail.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.6
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: requests>=2.31.0
|
|
15
|
+
Requires-Dist: Faker>=15.2.0
|
|
16
|
+
Requires-Dist: setuptools>=69.0.3
|
|
17
|
+
Requires-Dist: PyYAML>=6.0
|
|
18
|
+
Requires-Dist: python-dotenv>=0.21.0
|
|
19
|
+
Requires-Dist: rootpath==0.1.0
|
|
20
|
+
Requires-Dist: environs>=9.5.0
|
|
21
|
+
|
|
1
22
|

|
|
2
23
|

|
|
3
24
|
|
|
@@ -7,7 +28,9 @@
|
|
|
7
28
|
|
|
8
29
|
## Original description summary:
|
|
9
30
|
|
|
10
|
-
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
31
|
+
> Swagger-coverage gives a full picture about coverage of API tests (regression) based on OAS 2 (Swagger). By saying
|
|
32
|
+
> coverage we mean not a broad theme functionality, but presence (or absence) of calls defined by API methods, parameters,
|
|
33
|
+
> return codes or other conditions which corresponds specification of API.
|
|
11
34
|
|
|
12
35
|
Some more info about the project you can also
|
|
13
36
|
find [HERE](https://viclovsky.github.io/%D0%B0%D0%B2%D1%82%D0%BE%D1%82%D0%B5%D1%81%D1%82%D1%8B%20%D0%BD%D0%B0%20api/2020/01/16/swagger-coverage)
|
|
@@ -33,6 +56,7 @@ pip install swagger-coverage
|
|
|
33
56
|
```
|
|
34
57
|
|
|
35
58
|
### 2. Add environment variables (Optionally):
|
|
59
|
+
|
|
36
60
|
```dotenv
|
|
37
61
|
API_DOCS_TYPE="swagger" # Note: "openapi" is default type of API docs
|
|
38
62
|
API_DOCS_VERSION="2.0" # Note: "3.0.0" is default version of API docs
|
|
@@ -108,7 +132,8 @@ def setup_swagger_coverage():
|
|
|
108
132
|
> `host` - The host of the API.
|
|
109
133
|
> It will be used to download a swagger.json file and to identify the CoverageListener output directory for each API.
|
|
110
134
|
>
|
|
111
|
-
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
135
|
+
> `cleanup_input_files()` - THis step deletes all files in the CoverageListener output directory (according to the
|
|
136
|
+
> target host)
|
|
112
137
|
>
|
|
113
138
|
> `path_to_swagger_json` - A second part of the HTTP link to your OpenApi/Swagger documentation in JSON format<br>
|
|
114
139
|
> Adapted `swagger-<api_name>.json` file will be created in your project root.<br>
|
|
@@ -130,6 +155,12 @@ def setup_swagger_coverage():
|
|
|
130
155
|
],
|
|
131
156
|
"filter": []
|
|
132
157
|
},
|
|
158
|
+
"paths": {
|
|
159
|
+
"enable": true,
|
|
160
|
+
"ignore": [
|
|
161
|
+
"/user/{username}"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
133
164
|
"only-declared-status": {
|
|
134
165
|
"enable": false
|
|
135
166
|
},
|
|
@@ -145,10 +176,15 @@ def setup_swagger_coverage():
|
|
|
145
176
|
}
|
|
146
177
|
}
|
|
147
178
|
```
|
|
179
|
+
The `path` section is designed to exclude specific endpoints (all methods) from the final HTML report.
|
|
180
|
+
To do this, you need to set `enable` parameter to `true` and specify a list of endpoints (as you see them in the swagger doc) in the `ignore` section.
|
|
181
|
+
Then these endpoints will be removed from the API doc before it is saved locally.<br>
|
|
182
|
+
Note: Remove already downloaded API docs before running a new version of this lib.
|
|
148
183
|
|
|
149
184
|
> ### If you have more than 1 API then this config MUST:
|
|
150
185
|
> #### 1. Be created for each microservice which you track using `CoverageListener`.
|
|
151
|
-
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
186
|
+
> Otherwise, the default behavior will be applied, and your report will be saved as `swagger-coverage-report.html` which
|
|
187
|
+
> may cause override in case you have multiple APIs
|
|
152
188
|
> #### 2. Contain `writers` section with filename in the format: `swagger-coverage-report-<api_name>.html`
|
|
153
189
|
> #### 3. Be placed in the root of your project
|
|
154
190
|
|
|
@@ -197,4 +233,4 @@ Important remarks:
|
|
|
197
233
|
|
|
198
234
|
## License
|
|
199
235
|
|
|
200
|
-
Swagger coverage is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0)
|
|
236
|
+
Swagger coverage is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0)
|
|
@@ -9,6 +9,10 @@ env = Env()
|
|
|
9
9
|
API_DOCS_TYPE = env.str("API_DOCS_TYPE", default="openapi") # "swagger"
|
|
10
10
|
API_DOCS_VERSION = env.str("API_DOCS_VERSION", default="3.0.0") # "2.0"
|
|
11
11
|
API_DOCS_FORMAT = env.str("API_DOCS_FORMAT", default="json") # "yaml"
|
|
12
|
-
IS_DISABLED = env.bool(
|
|
12
|
+
IS_DISABLED = env.bool(
|
|
13
|
+
"API_COVERAGE_REPORTS_DISABLED", default=False
|
|
14
|
+
) # If True then requests won't be recorded
|
|
13
15
|
|
|
14
|
-
DEBUG_MODE = env.bool(
|
|
16
|
+
DEBUG_MODE = env.bool(
|
|
17
|
+
"DEBUG_MODE", default=False
|
|
18
|
+
) # Set to True to see commandline output
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
import requests
|
|
4
|
+
import yaml
|
|
5
|
+
|
|
6
|
+
from swagger_coverage_py.configs import API_DOCS_FORMAT, API_DOCS_TYPE
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def __delete_ignored_paths_from_json(
|
|
10
|
+
api_doc_data: requests.Response, paths_to_delete: list
|
|
11
|
+
) -> dict:
|
|
12
|
+
data: dict = api_doc_data.json()
|
|
13
|
+
for path in paths_to_delete:
|
|
14
|
+
if path in data["paths"]:
|
|
15
|
+
del data["paths"][path]
|
|
16
|
+
return data
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def __delete_ignored_paths_from_yaml(
|
|
20
|
+
api_doc_data: requests.Response, paths_to_delete: list
|
|
21
|
+
) -> dict:
|
|
22
|
+
data: dict = yaml.safe_load(str(api_doc_data.text))
|
|
23
|
+
for path in paths_to_delete:
|
|
24
|
+
if path in data["paths"]:
|
|
25
|
+
del data["paths"][path]
|
|
26
|
+
return data
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def __write_api_doc_to_json(
|
|
30
|
+
file_path: str, api_doc_data: requests.Response, paths_to_delete: list
|
|
31
|
+
):
|
|
32
|
+
api_doc_data = __delete_ignored_paths_from_json(api_doc_data, paths_to_delete)
|
|
33
|
+
if API_DOCS_TYPE == "swagger" and not api_doc_data.get("swagger", None):
|
|
34
|
+
api_doc_data["swagger"] = "2.0"
|
|
35
|
+
|
|
36
|
+
with open(file_path, "w+") as file:
|
|
37
|
+
file.write(json.dumps(api_doc_data))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def __write_api_doc_to_yaml(
|
|
41
|
+
file_path: str, api_doc_data: requests.Response, paths_to_delete: list
|
|
42
|
+
):
|
|
43
|
+
data = __delete_ignored_paths_from_yaml(api_doc_data, paths_to_delete)
|
|
44
|
+
|
|
45
|
+
if API_DOCS_TYPE == "swagger" and not data.get("swagger", None):
|
|
46
|
+
data["swagger"] = "2.0"
|
|
47
|
+
|
|
48
|
+
with open(file_path, "w+") as file:
|
|
49
|
+
file.write(yaml.safe_dump(data, indent=4, sort_keys=False))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def write_api_doc_to_file(file_path: str, api_doc_data: dict, paths_to_delete: list):
|
|
53
|
+
if API_DOCS_FORMAT == "json":
|
|
54
|
+
__write_api_doc_to_json(file_path, api_doc_data, paths_to_delete)
|
|
55
|
+
else:
|
|
56
|
+
__write_api_doc_to_yaml(file_path, api_doc_data, paths_to_delete)
|
|
@@ -7,7 +7,13 @@ from swagger_coverage_py.uri import URI
|
|
|
7
7
|
|
|
8
8
|
class CoverageListener:
|
|
9
9
|
def __init__(
|
|
10
|
-
self,
|
|
10
|
+
self,
|
|
11
|
+
method: str,
|
|
12
|
+
base_url: str,
|
|
13
|
+
raw_path: str,
|
|
14
|
+
uri_params: dict,
|
|
15
|
+
base_path: str = "",
|
|
16
|
+
**kwargs
|
|
11
17
|
):
|
|
12
18
|
"""Records an HTTP request as a file in swagger format
|
|
13
19
|
|
|
@@ -23,4 +29,6 @@ class CoverageListener:
|
|
|
23
29
|
self.response = requests.request(method, self.__uri.full, **kwargs)
|
|
24
30
|
|
|
25
31
|
if not IS_DISABLED:
|
|
26
|
-
RequestSchemaHandler(
|
|
32
|
+
RequestSchemaHandler(
|
|
33
|
+
self.__uri, method, self.response, kwargs
|
|
34
|
+
).write_schema()
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
3
|
import platform
|
|
3
4
|
import re
|
|
4
5
|
import shutil
|
|
5
6
|
import subprocess
|
|
6
7
|
from pathlib import Path
|
|
8
|
+
from typing import List
|
|
7
9
|
|
|
8
10
|
import requests
|
|
9
11
|
|
|
@@ -17,14 +19,31 @@ class CoverageReporter:
|
|
|
17
19
|
self.verify = verify
|
|
18
20
|
self.swagger_doc_file = f"swagger-doc-{api_name}.{API_DOCS_FORMAT}"
|
|
19
21
|
self.output_dir = self.__get_output_dir()
|
|
20
|
-
self.ignore_requests = []
|
|
21
22
|
self.swagger_coverage_config = f"swagger-coverage-config-{api_name}.json"
|
|
23
|
+
self.ignored_paths = self.__get_ignored_paths_from_config()
|
|
22
24
|
|
|
23
25
|
def __get_output_dir(self):
|
|
24
26
|
output_dir = "swagger-coverage-output"
|
|
25
27
|
subdir = re.match(r"(^\w*)://(.*)", self.host).group(2)
|
|
26
28
|
return f"{output_dir}/{subdir}"
|
|
27
29
|
|
|
30
|
+
def __get_ignored_paths_from_config(self) -> List[str]:
|
|
31
|
+
"""Reads the swagger-coverage-config-<api_name>.json file and returns
|
|
32
|
+
a list of endpoints/paths to exclude from the report
|
|
33
|
+
|
|
34
|
+
"""
|
|
35
|
+
paths_to_ignore = []
|
|
36
|
+
if not self.swagger_coverage_config:
|
|
37
|
+
return paths_to_ignore
|
|
38
|
+
|
|
39
|
+
with open(self.swagger_coverage_config, "r") as file:
|
|
40
|
+
data = json.load(file)
|
|
41
|
+
paths = data.get("rules").get("paths", {})
|
|
42
|
+
if paths.get("enable", False):
|
|
43
|
+
paths_to_ignore = paths.get("ignore")
|
|
44
|
+
|
|
45
|
+
return paths_to_ignore
|
|
46
|
+
|
|
28
47
|
def setup(
|
|
29
48
|
self, path_to_swagger_json: str, auth: object = None, cookies: dict = None
|
|
30
49
|
):
|
|
@@ -37,14 +56,20 @@ class CoverageReporter:
|
|
|
37
56
|
"""
|
|
38
57
|
link_to_swagger_json = f"{self.host}{path_to_swagger_json}"
|
|
39
58
|
|
|
40
|
-
response = requests.get(
|
|
59
|
+
response = requests.get(
|
|
60
|
+
link_to_swagger_json, auth=auth, cookies=cookies, verify=self.verify
|
|
61
|
+
)
|
|
41
62
|
assert response.ok, (
|
|
42
63
|
f"Swagger doc is not pulled. See details: "
|
|
43
64
|
f"{response.status_code} {response.request.url}"
|
|
44
65
|
f"{response.content}\n{response.content}"
|
|
45
66
|
)
|
|
46
|
-
|
|
47
|
-
|
|
67
|
+
if self.swagger_coverage_config:
|
|
68
|
+
write_api_doc_to_file(
|
|
69
|
+
self.swagger_doc_file,
|
|
70
|
+
api_doc_data=response,
|
|
71
|
+
paths_to_delete=self.ignored_paths,
|
|
72
|
+
)
|
|
48
73
|
|
|
49
74
|
def generate_report(self):
|
|
50
75
|
inner_location = "swagger-coverage-commandline/bin/swagger-coverage-commandline"
|
|
@@ -17,13 +17,18 @@ class ApiDocsManagerBase:
|
|
|
17
17
|
self._uri = uri
|
|
18
18
|
self._method = method
|
|
19
19
|
self._response: Response = response
|
|
20
|
-
self.
|
|
20
|
+
self._other_request_params = kwargs
|
|
21
21
|
|
|
22
22
|
def _get_path_params(self) -> list:
|
|
23
23
|
params_ = []
|
|
24
24
|
for key, value in self._uri.uri_params.items():
|
|
25
25
|
params_.append(
|
|
26
|
-
{
|
|
26
|
+
{
|
|
27
|
+
"name": key,
|
|
28
|
+
"in": "path",
|
|
29
|
+
"required": False,
|
|
30
|
+
"x-example": urllib.parse.unquote(str(value)),
|
|
31
|
+
}
|
|
27
32
|
)
|
|
28
33
|
return params_
|
|
29
34
|
|
|
@@ -55,11 +60,8 @@ class ApiDocsManagerBase:
|
|
|
55
60
|
request_body: dict = {
|
|
56
61
|
"content": {
|
|
57
62
|
"application/json": {
|
|
58
|
-
"schema": {
|
|
59
|
-
|
|
60
|
-
"properties": properties
|
|
61
|
-
},
|
|
62
|
-
"example": json.loads(self._response.request.body)
|
|
63
|
+
"schema": {"type": "object", "properties": properties},
|
|
64
|
+
"example": json.loads(self._response.request.body),
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
}
|
|
@@ -70,11 +72,9 @@ class ApiDocsManagerBase:
|
|
|
70
72
|
"application/json": {
|
|
71
73
|
"schema": {
|
|
72
74
|
"type": "array",
|
|
73
|
-
"items": {
|
|
74
|
-
"type": items_type
|
|
75
|
-
},
|
|
75
|
+
"items": {"type": items_type},
|
|
76
76
|
},
|
|
77
|
-
"example": json.loads(self._response.request.body)
|
|
77
|
+
"example": json.loads(self._response.request.body),
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -85,7 +85,9 @@ class ApiDocsManagerBase:
|
|
|
85
85
|
"schema": {
|
|
86
86
|
"type": "string",
|
|
87
87
|
},
|
|
88
|
-
"example": urllib.parse.unquote(
|
|
88
|
+
"example": urllib.parse.unquote(
|
|
89
|
+
str(self._response.request.body)
|
|
90
|
+
),
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
}
|
|
@@ -94,21 +96,37 @@ class ApiDocsManagerBase:
|
|
|
94
96
|
|
|
95
97
|
return request_body
|
|
96
98
|
|
|
97
|
-
def
|
|
98
|
-
|
|
99
|
+
def _get_other_request_params(self, params_key: str, params_in: str) -> list:
|
|
100
|
+
prams_raw = self._other_request_params.get(params_key, {})
|
|
101
|
+
if prams_raw:
|
|
102
|
+
params = list(prams_raw.items())
|
|
103
|
+
else:
|
|
104
|
+
params = []
|
|
105
|
+
|
|
99
106
|
raw = self._uri.raw.split("?")
|
|
100
107
|
if len(raw) > 1:
|
|
101
|
-
|
|
102
|
-
if not
|
|
108
|
+
params += [tuple(x.split("=")) for x in str(raw[1]).split("&")]
|
|
109
|
+
if not params:
|
|
103
110
|
return []
|
|
104
111
|
|
|
105
112
|
params_ = []
|
|
106
|
-
for key, value in
|
|
113
|
+
for key, value in params:
|
|
107
114
|
params_.append(
|
|
108
|
-
{
|
|
115
|
+
{
|
|
116
|
+
"name": key,
|
|
117
|
+
"in": params_in,
|
|
118
|
+
"required": False,
|
|
119
|
+
"x-example": urllib.parse.unquote(str(value)),
|
|
120
|
+
}
|
|
109
121
|
)
|
|
110
122
|
return params_
|
|
111
123
|
|
|
124
|
+
def _get_query_params(self) -> list:
|
|
125
|
+
return self._get_other_request_params(params_key="params", params_in="query")
|
|
126
|
+
|
|
127
|
+
def _get_header_params(self) -> list:
|
|
128
|
+
return self._get_other_request_params(params_key="headers", params_in="header")
|
|
129
|
+
|
|
112
130
|
def __get_output_subdir(self):
|
|
113
131
|
return re.match(r"(^\w*)://(.*)", self._uri.host).group(2)
|
|
114
132
|
|
|
@@ -11,10 +11,15 @@ class OpenApiSchemasManager(ApiDocsManagerBase):
|
|
|
11
11
|
|
|
12
12
|
def _paths(self):
|
|
13
13
|
path_ = self._uri.raw.split("?")[0]
|
|
14
|
+
params = (
|
|
15
|
+
self._get_path_params()
|
|
16
|
+
+ self._get_query_params()
|
|
17
|
+
+ self._get_header_params()
|
|
18
|
+
)
|
|
14
19
|
dict_ = {
|
|
15
20
|
path_: {
|
|
16
21
|
self._method: {
|
|
17
|
-
"parameters":
|
|
22
|
+
"parameters": params,
|
|
18
23
|
"responses": {self._response.status_code: {}},
|
|
19
24
|
}
|
|
20
25
|
}
|
|
@@ -29,7 +29,10 @@ class SwaggerSchemasManager(ApiDocsManagerBase):
|
|
|
29
29
|
def _paths(self):
|
|
30
30
|
path_ = self._uri.raw.split("?")[0]
|
|
31
31
|
params = (
|
|
32
|
-
self._get_path_params()
|
|
32
|
+
self._get_path_params()
|
|
33
|
+
+ self._get_query_params()
|
|
34
|
+
+ self._get_body_params()
|
|
35
|
+
+ self._get_header_params()
|
|
33
36
|
)
|
|
34
37
|
dict_ = {
|
|
35
38
|
path_: {
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
|
|
3
|
-
import requests
|
|
4
|
-
import yaml
|
|
5
|
-
|
|
6
|
-
from swagger_coverage_py.configs import API_DOCS_FORMAT, API_DOCS_TYPE
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def __write_api_doc_to_json(file_path: str, api_doc_data: requests.Response):
|
|
10
|
-
api_doc_data = api_doc_data.json()
|
|
11
|
-
if API_DOCS_TYPE == "swagger" and not api_doc_data.get("swagger", None):
|
|
12
|
-
api_doc_data["swagger"] = "2.0"
|
|
13
|
-
|
|
14
|
-
with open(file_path, "w+") as file:
|
|
15
|
-
file.write(json.dumps(api_doc_data))
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def __write_api_doc_to_yaml(file_path: str, api_doc_data: requests.Response):
|
|
19
|
-
data = yaml.safe_load(str(api_doc_data.text))
|
|
20
|
-
|
|
21
|
-
if API_DOCS_TYPE == "swagger" and not data.get("swagger", None):
|
|
22
|
-
data["swagger"] = "2.0"
|
|
23
|
-
|
|
24
|
-
with open(file_path, "w+") as file:
|
|
25
|
-
file.write(yaml.safe_dump(data, indent=4, sort_keys=False))
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def write_api_doc_to_file(file_path: str, api_doc_data: requests.Response):
|
|
29
|
-
if API_DOCS_FORMAT == "json":
|
|
30
|
-
__write_api_doc_to_json(file_path, api_doc_data)
|
|
31
|
-
else:
|
|
32
|
-
__write_api_doc_to_yaml(file_path, api_doc_data)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/docs_writers/__init__.py
RENAMED
|
File without changes
|
{swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/request_schema_handler.py
RENAMED
|
File without changes
|
{swagger-coverage-3.3.0 → swagger_coverage-3.5.0}/swagger_coverage_py/results_writers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|