init commit
This commit is contained in:
commit
dd619df7a2
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*,cover
|
||||||
|
.hypothesis/
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
.python-version
|
||||||
|
.pytest_cache
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
#Ipython Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
# NOTE: This file is auto generated by OpenAPI Generator.
|
||||||
|
# URL: https://openapi-generator.tech
|
||||||
|
#
|
||||||
|
# ref: https://docs.gitlab.com/ee/ci/README.html
|
||||||
|
# ref: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Python.gitlab-ci.yml
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
|
||||||
|
.pytest:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
- pip install -r test-requirements.txt
|
||||||
|
- pytest --cov=openapi_client
|
||||||
|
|
||||||
|
pytest-3.7:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.7-alpine
|
||||||
|
pytest-3.8:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.8-alpine
|
||||||
|
pytest-3.9:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.9-alpine
|
||||||
|
pytest-3.10:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.10-alpine
|
||||||
|
pytest-3.11:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.11-alpine
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="Flask">
|
||||||
|
<option name="enabled" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (announcementService) (2)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
<component name="TemplatesService">
|
||||||
|
<option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
|
||||||
|
<option name="TEMPLATE_FOLDERS">
|
||||||
|
<list>
|
||||||
|
<option value="$MODULE_DIR$/templates" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
|
<data-source source="LOCAL" name="@localhost" uuid="5bd2f97d-04d9-4780-924c-77d00c802fc5">
|
||||||
|
<driver-ref>mongo</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>com.dbschema.MongoJdbcDriver</jdbc-driver>
|
||||||
|
<jdbc-url>mongodb://localhost:27017</jdbc-url>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredPackages">
|
||||||
|
<value>
|
||||||
|
<list size="2">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="swagger-ui-bundle" />
|
||||||
|
<item index="1" class="java.lang.String" itemvalue="python_dateutil" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.12 (announcementService)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (announcementService) (2)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/announcementService.iml" filepath="$PROJECT_DIR$/.idea/announcementService.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="SwaggerSettings">
|
||||||
|
<option name="defaultPreviewType" value="SWAGGER_UI" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# OpenAPI Generator Ignore
|
||||||
|
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||||
|
|
||||||
|
# Use this file to prevent files from being overwritten by the generator.
|
||||||
|
# The patterns follow closely to .gitignore or .dockerignore.
|
||||||
|
|
||||||
|
# As an example, the C# client generator defines ApiClient.cs.
|
||||||
|
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||||
|
#ApiClient.cs
|
||||||
|
|
||||||
|
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||||
|
#foo/*/qux
|
||||||
|
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||||
|
#foo/**/qux
|
||||||
|
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can also negate patterns with an exclamation (!).
|
||||||
|
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||||
|
#docs/*.md
|
||||||
|
# Then explicitly reverse the ignore rule for a single file:
|
||||||
|
#!docs/README.md
|
||||||
|
openapi_server/controllers/patchnotes_controller.py
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# ref: https://docs.travis-ci.com/user/languages/python
|
||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "3.7"
|
||||||
|
- "3.8"
|
||||||
|
- "3.9"
|
||||||
|
- "3.10"
|
||||||
|
- "3.11"
|
||||||
|
# uncomment the following if needed
|
||||||
|
#- "3.11-dev" # 3.11 development branch
|
||||||
|
#- "nightly" # nightly build
|
||||||
|
# command to install dependencies
|
||||||
|
install:
|
||||||
|
- "pip install -r requirements.txt"
|
||||||
|
- "pip install -r test-requirements.txt"
|
||||||
|
# command to run tests
|
||||||
|
script: pytest --cov=openapi_client
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
# openapi-client
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
|
- API version: 1.0.0
|
||||||
|
- Package version: 1.0.0
|
||||||
|
- Generator version: 7.7.0
|
||||||
|
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
|
||||||
|
|
||||||
|
## Requirements.
|
||||||
|
|
||||||
|
Python 3.7+
|
||||||
|
|
||||||
|
## Installation & Usage
|
||||||
|
### pip install
|
||||||
|
|
||||||
|
If the python package is hosted on a repository, you can install directly using:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git
|
||||||
|
```
|
||||||
|
(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`)
|
||||||
|
|
||||||
|
Then import the package:
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setuptools
|
||||||
|
|
||||||
|
Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python setup.py install --user
|
||||||
|
```
|
||||||
|
(or `sudo python setup.py install` to install the package for all users)
|
||||||
|
|
||||||
|
Then import the package:
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
Execute `pytest` to run the tests.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Please follow the [installation procedure](#installation--usage) and then run the following:
|
||||||
|
|
||||||
|
```python
|
||||||
|
|
||||||
|
import openapi_client
|
||||||
|
from openapi_client.rest import ApiException
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Defining the host is optional and defaults to http://https
|
||||||
|
# See configuration.py for a list of all supported configuration parameters.
|
||||||
|
configuration = openapi_client.Configuration(
|
||||||
|
host = "http://https"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Enter a context with an instance of the API client
|
||||||
|
with openapi_client.ApiClient(configuration) as api_client:
|
||||||
|
# Create an instance of the API class
|
||||||
|
api_instance = openapi_client.DefaultApi(api_client)
|
||||||
|
|
||||||
|
try:
|
||||||
|
api_response = api_instance.get_patchnotes()
|
||||||
|
print("The response of DefaultApi->get_patchnotes:\n")
|
||||||
|
pprint(api_response)
|
||||||
|
except ApiException as e:
|
||||||
|
print("Exception when calling DefaultApi->get_patchnotes: %s\n" % e)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation for API Endpoints
|
||||||
|
|
||||||
|
All URIs are relative to *http://https*
|
||||||
|
|
||||||
|
Class | Method | HTTP request | Description
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
*DefaultApi* | [**get_patchnotes**](docs/DefaultApi.md#get_patchnotes) | **GET** /patchnotes |
|
||||||
|
*DefaultApi* | [**patch_note_delete**](docs/DefaultApi.md#patch_note_delete) | **DELETE** /patchnotes/{patchID} |
|
||||||
|
*DefaultApi* | [**post_patchnotes**](docs/DefaultApi.md#post_patchnotes) | **POST** /patchnotes |
|
||||||
|
|
||||||
|
|
||||||
|
## Documentation For Models
|
||||||
|
|
||||||
|
- [PatchNotes](docs/PatchNotes.md)
|
||||||
|
- [User](docs/User.md)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="documentation-for-authorization"></a>
|
||||||
|
## Documentation For Authorization
|
||||||
|
|
||||||
|
Endpoints do not require authorization.
|
||||||
|
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
openapi: 3.0.3
|
||||||
|
info:
|
||||||
|
title: announcementService
|
||||||
|
description: Announcing patchnotes for KanzleiApp
|
||||||
|
version: 1.0.0
|
||||||
|
paths:
|
||||||
|
/patchnotes:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
description: returns list of all unseen Patch notes from the user
|
||||||
|
operationId: get_patchnotes
|
||||||
|
requestBody:
|
||||||
|
description: last seen patchnote by the user
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
title: date
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
type: array
|
||||||
|
description: returns list of all unseen Patch notes from the user
|
||||||
|
"404":
|
||||||
|
description: no Patch notes found
|
||||||
|
"500":
|
||||||
|
description: Internal Server error, Failed to get Patch Notes
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
description: creates new Patch notes
|
||||||
|
operationId: post_patchnotes
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: game created
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
/patchnotes/{patchID}:
|
||||||
|
delete:
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
description: deletes one Patch note
|
||||||
|
operationId: patch_note_delete
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: patchID
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
format: uuid
|
||||||
|
type: string
|
||||||
|
style: simple
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: patch successfully deleted
|
||||||
|
"404":
|
||||||
|
description: patch not found
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error, Patch not deleted
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
patch_notes:
|
||||||
|
example:
|
||||||
|
patchID: 29e80bcc-5981-4a52-99e1-373442dea9b9
|
||||||
|
title: Patch note 1
|
||||||
|
changes: changes
|
||||||
|
date: date
|
||||||
|
properties:
|
||||||
|
patchID:
|
||||||
|
format: uuid
|
||||||
|
title: patchID
|
||||||
|
type: string
|
||||||
|
title:
|
||||||
|
type: string
|
||||||
|
title: title
|
||||||
|
changes:
|
||||||
|
type: string
|
||||||
|
title: changes
|
||||||
|
date:
|
||||||
|
title: date
|
||||||
|
type: string
|
||||||
|
user:
|
||||||
|
example:
|
||||||
|
lastNoteChecked: f00fa08d-0cd8-4c05-9409-5e75aa2d4f68
|
||||||
|
properties:
|
||||||
|
lastNoteChecked:
|
||||||
|
format: uuid
|
||||||
|
title: lastNoteChecked
|
||||||
|
type: string
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
from flask import Flask
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def hello_world(): # put application's code here
|
||||||
|
return 'Hello World!'
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run()
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
-v "${PWD}:/local" \
|
||||||
|
openapitools/openapi-generator-cli generate \
|
||||||
|
-g python-flask \
|
||||||
|
-i /local/announcement_service_spec.yaml \
|
||||||
|
-o /local/gen/ \
|
||||||
|
--skip-operation-example
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
.travis.yaml
|
||||||
|
.openapi-generator-ignore
|
||||||
|
README.md
|
||||||
|
tox.ini
|
||||||
|
git_push.sh
|
||||||
|
test-requirements.txt
|
||||||
|
setup.py
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*,cover
|
||||||
|
.hypothesis/
|
||||||
|
venv/
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
#Ipython Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
# NOTE: This file is auto generated by OpenAPI Generator.
|
||||||
|
# URL: https://openapi-generator.tech
|
||||||
|
#
|
||||||
|
# ref: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
||||||
|
|
||||||
|
name: openapi_client Python package
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install flake8 pytest
|
||||||
|
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||||
|
if [ -f test-requirements.txt ]; then pip install -r test-requirements.txt; fi
|
||||||
|
- name: Lint with flake8
|
||||||
|
run: |
|
||||||
|
# stop the build if there are Python syntax errors or undefined names
|
||||||
|
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||||
|
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
|
||||||
|
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||||
|
- name: Test with pytest
|
||||||
|
run: |
|
||||||
|
pytest
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*,cover
|
||||||
|
.hypothesis/
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
.python-version
|
||||||
|
.pytest_cache
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
#Ipython Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
# NOTE: This file is auto generated by OpenAPI Generator.
|
||||||
|
# URL: https://openapi-generator.tech
|
||||||
|
#
|
||||||
|
# ref: https://docs.gitlab.com/ee/ci/README.html
|
||||||
|
# ref: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Python.gitlab-ci.yml
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
|
||||||
|
.pytest:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
- pip install -r test-requirements.txt
|
||||||
|
- pytest --cov=openapi_client
|
||||||
|
|
||||||
|
pytest-3.7:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.7-alpine
|
||||||
|
pytest-3.8:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.8-alpine
|
||||||
|
pytest-3.9:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.9-alpine
|
||||||
|
pytest-3.10:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.10-alpine
|
||||||
|
pytest-3.11:
|
||||||
|
extends: .pytest
|
||||||
|
image: python:3.11-alpine
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
# OpenAPI Generator Ignore
|
||||||
|
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||||
|
|
||||||
|
# Use this file to prevent files from being overwritten by the generator.
|
||||||
|
# The patterns follow closely to .gitignore or .dockerignore.
|
||||||
|
|
||||||
|
# As an example, the C# client generator defines ApiClient.cs.
|
||||||
|
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||||
|
#ApiClient.cs
|
||||||
|
|
||||||
|
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||||
|
#foo/*/qux
|
||||||
|
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||||
|
#foo/**/qux
|
||||||
|
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can also negate patterns with an exclamation (!).
|
||||||
|
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||||
|
#docs/*.md
|
||||||
|
# Then explicitly reverse the ignore rule for a single file:
|
||||||
|
#!docs/README.md
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
.github/workflows/python.yml
|
||||||
|
.gitignore
|
||||||
|
.gitlab-ci.yml
|
||||||
|
.travis.yml
|
||||||
|
README.md
|
||||||
|
docs/PatchNotes.md
|
||||||
|
docs/PatchnotesApi.md
|
||||||
|
docs/User.md
|
||||||
|
git_push.sh
|
||||||
|
openapi_client/__init__.py
|
||||||
|
openapi_client/api/__init__.py
|
||||||
|
openapi_client/api/patchnotes_api.py
|
||||||
|
openapi_client/api_client.py
|
||||||
|
openapi_client/api_response.py
|
||||||
|
openapi_client/configuration.py
|
||||||
|
openapi_client/exceptions.py
|
||||||
|
openapi_client/models/__init__.py
|
||||||
|
openapi_client/models/patch_notes.py
|
||||||
|
openapi_client/models/user.py
|
||||||
|
openapi_client/py.typed
|
||||||
|
openapi_client/rest.py
|
||||||
|
pyproject.toml
|
||||||
|
requirements.txt
|
||||||
|
setup.cfg
|
||||||
|
setup.py
|
||||||
|
test-requirements.txt
|
||||||
|
test/__init__.py
|
||||||
|
tox.ini
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
7.7.0
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# ref: https://docs.travis-ci.com/user/languages/python
|
||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "3.7"
|
||||||
|
- "3.8"
|
||||||
|
- "3.9"
|
||||||
|
- "3.10"
|
||||||
|
- "3.11"
|
||||||
|
# uncomment the following if needed
|
||||||
|
#- "3.11-dev" # 3.11 development branch
|
||||||
|
#- "nightly" # nightly build
|
||||||
|
# command to install dependencies
|
||||||
|
install:
|
||||||
|
- "pip install -r requirements.txt"
|
||||||
|
- "pip install -r test-requirements.txt"
|
||||||
|
# command to run tests
|
||||||
|
script: pytest --cov=openapi_client
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
FROM python:3-alpine
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY requirements.txt /usr/src/app/
|
||||||
|
|
||||||
|
RUN pip3 install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY . /usr/src/app
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
ENTRYPOINT ["python3"]
|
||||||
|
|
||||||
|
CMD ["-m", "openapi_server"]
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
# openapi-client
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
|
- API version: 1.0.0
|
||||||
|
- Package version: 1.0.0
|
||||||
|
- Generator version: 7.7.0
|
||||||
|
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
|
||||||
|
|
||||||
|
## Requirements.
|
||||||
|
|
||||||
|
Python 3.7+
|
||||||
|
|
||||||
|
## Installation & Usage
|
||||||
|
### pip install
|
||||||
|
|
||||||
|
If the python package is hosted on a repository, you can install directly using:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git
|
||||||
|
```
|
||||||
|
(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`)
|
||||||
|
|
||||||
|
Then import the package:
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setuptools
|
||||||
|
|
||||||
|
Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python setup.py install --user
|
||||||
|
```
|
||||||
|
(or `sudo python setup.py install` to install the package for all users)
|
||||||
|
|
||||||
|
Then import the package:
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
Execute `pytest` to run the tests.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Please follow the [installation procedure](#installation--usage) and then run the following:
|
||||||
|
|
||||||
|
```python
|
||||||
|
|
||||||
|
import openapi_client
|
||||||
|
from openapi_client.rest import ApiException
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Defining the host is optional and defaults to http://localhost
|
||||||
|
# See configuration.py for a list of all supported configuration parameters.
|
||||||
|
configuration = openapi_client.Configuration(
|
||||||
|
host = "http://localhost"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Enter a context with an instance of the API client
|
||||||
|
with openapi_client.ApiClient(configuration) as api_client:
|
||||||
|
# Create an instance of the API class
|
||||||
|
api_instance = openapi_client.PatchnotesApi(api_client)
|
||||||
|
body = 'body_example' # str | last seen patchnote by the user
|
||||||
|
|
||||||
|
try:
|
||||||
|
api_response = api_instance.get_patchnotes(body)
|
||||||
|
print("The response of PatchnotesApi->get_patchnotes:\n")
|
||||||
|
pprint(api_response)
|
||||||
|
except ApiException as e:
|
||||||
|
print("Exception when calling PatchnotesApi->get_patchnotes: %s\n" % e)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation for API Endpoints
|
||||||
|
|
||||||
|
All URIs are relative to *http://localhost*
|
||||||
|
|
||||||
|
Class | Method | HTTP request | Description
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
*PatchnotesApi* | [**get_patchnotes**](docs/PatchnotesApi.md#get_patchnotes) | **GET** /patchnotes | gets all unseen Patchnotes from the User
|
||||||
|
*PatchnotesApi* | [**patch_note_delete**](docs/PatchnotesApi.md#patch_note_delete) | **DELETE** /patchnotes/{patchID} | Deletes selected Patchnote
|
||||||
|
*PatchnotesApi* | [**post_patchnotes**](docs/PatchnotesApi.md#post_patchnotes) | **POST** /patchnotes | Creates a new Patchnote
|
||||||
|
|
||||||
|
|
||||||
|
## Documentation For Models
|
||||||
|
|
||||||
|
- [PatchNotes](docs/PatchNotes.md)
|
||||||
|
- [User](docs/User.md)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="documentation-for-authorization"></a>
|
||||||
|
## Documentation For Authorization
|
||||||
|
|
||||||
|
Endpoints do not require authorization.
|
||||||
|
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
Justin Weins
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
# PatchNotes
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
**patch_id** | **str** | | [optional]
|
||||||
|
**title** | **str** | | [optional]
|
||||||
|
**changes** | **str** | | [optional]
|
||||||
|
**var_date** | **str** | | [optional]
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
|
||||||
|
# TODO update the JSON string below
|
||||||
|
json = "{}"
|
||||||
|
# create an instance of PatchNotes from a JSON string
|
||||||
|
patch_notes_instance = PatchNotes.from_json(json)
|
||||||
|
# print the JSON string representation of the object
|
||||||
|
print(PatchNotes.to_json())
|
||||||
|
|
||||||
|
# convert the object into a dict
|
||||||
|
patch_notes_dict = patch_notes_instance.to_dict()
|
||||||
|
# create an instance of PatchNotes from a dict
|
||||||
|
patch_notes_from_dict = PatchNotes.from_dict(patch_notes_dict)
|
||||||
|
```
|
||||||
|
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,213 @@
|
||||||
|
# openapi_client.PatchnotesApi
|
||||||
|
|
||||||
|
All URIs are relative to *http://localhost*
|
||||||
|
|
||||||
|
Method | HTTP request | Description
|
||||||
|
------------- | ------------- | -------------
|
||||||
|
[**get_patchnotes**](PatchnotesApi.md#get_patchnotes) | **GET** /patchnotes |
|
||||||
|
[**patch_note_delete**](PatchnotesApi.md#patch_note_delete) | **DELETE** /patchnotes/{patchID} |
|
||||||
|
[**post_patchnotes**](PatchnotesApi.md#post_patchnotes) | **POST** /patchnotes |
|
||||||
|
|
||||||
|
|
||||||
|
# **get_patchnotes**
|
||||||
|
> List[PatchNotes] get_patchnotes(body)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
returns list of all unseen Patch notes from the user
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
from openapi_client.rest import ApiException
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Defining the host is optional and defaults to http://localhost
|
||||||
|
# See configuration.py for a list of all supported configuration parameters.
|
||||||
|
configuration = openapi_client.Configuration(
|
||||||
|
host = "http://localhost"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Enter a context with an instance of the API client
|
||||||
|
with openapi_client.ApiClient(configuration) as api_client:
|
||||||
|
# Create an instance of the API class
|
||||||
|
api_instance = openapi_client.PatchnotesApi(api_client)
|
||||||
|
body = 'body_example' # str | last seen patchnote by the user
|
||||||
|
|
||||||
|
try:
|
||||||
|
api_response = api_instance.get_patchnotes(body)
|
||||||
|
print("The response of PatchnotesApi->get_patchnotes:\n")
|
||||||
|
pprint(api_response)
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception when calling PatchnotesApi->get_patchnotes: %s\n" % e)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**body** | **str**| last seen patchnote by the user |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[**List[PatchNotes]**](PatchNotes.md)
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### HTTP request headers
|
||||||
|
|
||||||
|
- **Content-Type**: application/json
|
||||||
|
- **Accept**: application/json
|
||||||
|
|
||||||
|
### HTTP response details
|
||||||
|
|
||||||
|
| Status code | Description | Response headers |
|
||||||
|
|-------------|-------------|------------------|
|
||||||
|
**200** | returns list of all unseen Patch notes from the user | - |
|
||||||
|
**404** | no Patch notes found | - |
|
||||||
|
**500** | Internal Server error, Failed to get Patch Notes | - |
|
||||||
|
|
||||||
|
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
# **patch_note_delete**
|
||||||
|
> patch_note_delete(patch_id)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
deletes one Patch note
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
from openapi_client.rest import ApiException
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Defining the host is optional and defaults to http://localhost
|
||||||
|
# See configuration.py for a list of all supported configuration parameters.
|
||||||
|
configuration = openapi_client.Configuration(
|
||||||
|
host = "http://localhost"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Enter a context with an instance of the API client
|
||||||
|
with openapi_client.ApiClient(configuration) as api_client:
|
||||||
|
# Create an instance of the API class
|
||||||
|
api_instance = openapi_client.PatchnotesApi(api_client)
|
||||||
|
patch_id = 'patch_id_example' # str |
|
||||||
|
|
||||||
|
try:
|
||||||
|
api_instance.patch_note_delete(patch_id)
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception when calling PatchnotesApi->patch_note_delete: %s\n" % e)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**patch_id** | **str**| |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
void (empty response body)
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### HTTP request headers
|
||||||
|
|
||||||
|
- **Content-Type**: Not defined
|
||||||
|
- **Accept**: Not defined
|
||||||
|
|
||||||
|
### HTTP response details
|
||||||
|
|
||||||
|
| Status code | Description | Response headers |
|
||||||
|
|-------------|-------------|------------------|
|
||||||
|
**200** | patch successfully deleted | - |
|
||||||
|
**404** | patch not found | - |
|
||||||
|
**500** | Internal Server Error, Patch not deleted | - |
|
||||||
|
|
||||||
|
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
# **post_patchnotes**
|
||||||
|
> List[PatchNotes] post_patchnotes(patch_notes=patch_notes)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
creates new Patch notes
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
import openapi_client
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
from openapi_client.rest import ApiException
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Defining the host is optional and defaults to http://localhost
|
||||||
|
# See configuration.py for a list of all supported configuration parameters.
|
||||||
|
configuration = openapi_client.Configuration(
|
||||||
|
host = "http://localhost"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Enter a context with an instance of the API client
|
||||||
|
with openapi_client.ApiClient(configuration) as api_client:
|
||||||
|
# Create an instance of the API class
|
||||||
|
api_instance = openapi_client.PatchnotesApi(api_client)
|
||||||
|
patch_notes = openapi_client.PatchNotes() # PatchNotes | (optional)
|
||||||
|
|
||||||
|
try:
|
||||||
|
api_response = api_instance.post_patchnotes(patch_notes=patch_notes)
|
||||||
|
print("The response of PatchnotesApi->post_patchnotes:\n")
|
||||||
|
pprint(api_response)
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception when calling PatchnotesApi->post_patchnotes: %s\n" % e)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
|
||||||
|
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**patch_notes** | [**PatchNotes**](PatchNotes.md)| | [optional]
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[**List[PatchNotes]**](PatchNotes.md)
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### HTTP request headers
|
||||||
|
|
||||||
|
- **Content-Type**: application/json
|
||||||
|
- **Accept**: application/json
|
||||||
|
|
||||||
|
### HTTP response details
|
||||||
|
|
||||||
|
| Status code | Description | Response headers |
|
||||||
|
|-------------|-------------|------------------|
|
||||||
|
**200** | game created | - |
|
||||||
|
|
||||||
|
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
# User
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
**last_note_checked** | **str** | | [optional]
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
from openapi_client.models.user import User
|
||||||
|
|
||||||
|
# TODO update the JSON string below
|
||||||
|
json = "{}"
|
||||||
|
# create an instance of User from a JSON string
|
||||||
|
user_instance = User.from_json(json)
|
||||||
|
# print the JSON string representation of the object
|
||||||
|
print(User.to_json())
|
||||||
|
|
||||||
|
# convert the object into a dict
|
||||||
|
user_dict = user_instance.to_dict()
|
||||||
|
# create an instance of User from a dict
|
||||||
|
user_from_dict = User.from_dict(user_dict)
|
||||||
|
```
|
||||||
|
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
git_host=$4
|
||||||
|
|
||||||
|
if [ "$git_host" = "" ]; then
|
||||||
|
git_host="github.com"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="GIT_USER_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="GIT_REPO_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="Minor update"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=$(git remote)
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||||
|
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
# flake8: noqa
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = "1.0.0"
|
||||||
|
|
||||||
|
# import apis into sdk package
|
||||||
|
from openapi_client.api.patchnotes_api import PatchnotesApi
|
||||||
|
|
||||||
|
# import ApiClient
|
||||||
|
from openapi_client.api_response import ApiResponse
|
||||||
|
from openapi_client.api_client import ApiClient
|
||||||
|
from openapi_client.configuration import Configuration
|
||||||
|
from openapi_client.exceptions import OpenApiException
|
||||||
|
from openapi_client.exceptions import ApiTypeError
|
||||||
|
from openapi_client.exceptions import ApiValueError
|
||||||
|
from openapi_client.exceptions import ApiKeyError
|
||||||
|
from openapi_client.exceptions import ApiAttributeError
|
||||||
|
from openapi_client.exceptions import ApiException
|
||||||
|
|
||||||
|
# import models into sdk package
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
from openapi_client.models.user import User
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# flake8: noqa
|
||||||
|
|
||||||
|
# import apis into api package
|
||||||
|
from openapi_client.api.patchnotes_api import PatchnotesApi
|
||||||
|
|
||||||
|
|
@ -0,0 +1,844 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
import warnings
|
||||||
|
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
|
||||||
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||||
|
from typing_extensions import Annotated
|
||||||
|
|
||||||
|
from pydantic import Field, StrictStr
|
||||||
|
from typing import List, Optional
|
||||||
|
from typing_extensions import Annotated
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
|
||||||
|
from openapi_client.api_client import ApiClient, RequestSerialized
|
||||||
|
from openapi_client.api_response import ApiResponse
|
||||||
|
from openapi_client.rest import RESTResponseType
|
||||||
|
|
||||||
|
|
||||||
|
class PatchnotesApi:
|
||||||
|
"""NOTE: This class is auto generated by OpenAPI Generator
|
||||||
|
Ref: https://openapi-generator.tech
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, api_client=None) -> None:
|
||||||
|
if api_client is None:
|
||||||
|
api_client = ApiClient.get_default()
|
||||||
|
self.api_client = api_client
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def get_patchnotes(
|
||||||
|
self,
|
||||||
|
body: Annotated[StrictStr, Field(description="last seen patchnote by the user")],
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> List[PatchNotes]:
|
||||||
|
"""get_patchnotes
|
||||||
|
|
||||||
|
returns list of all unseen Patch notes from the user
|
||||||
|
|
||||||
|
:param body: last seen patchnote by the user (required)
|
||||||
|
:type body: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._get_patchnotes_serialize(
|
||||||
|
body=body,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
).data
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def get_patchnotes_with_http_info(
|
||||||
|
self,
|
||||||
|
body: Annotated[StrictStr, Field(description="last seen patchnote by the user")],
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> ApiResponse[List[PatchNotes]]:
|
||||||
|
"""get_patchnotes
|
||||||
|
|
||||||
|
returns list of all unseen Patch notes from the user
|
||||||
|
|
||||||
|
:param body: last seen patchnote by the user (required)
|
||||||
|
:type body: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._get_patchnotes_serialize(
|
||||||
|
body=body,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def get_patchnotes_without_preload_content(
|
||||||
|
self,
|
||||||
|
body: Annotated[StrictStr, Field(description="last seen patchnote by the user")],
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> RESTResponseType:
|
||||||
|
"""get_patchnotes
|
||||||
|
|
||||||
|
returns list of all unseen Patch notes from the user
|
||||||
|
|
||||||
|
:param body: last seen patchnote by the user (required)
|
||||||
|
:type body: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._get_patchnotes_serialize(
|
||||||
|
body=body,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
return response_data.response
|
||||||
|
|
||||||
|
|
||||||
|
def _get_patchnotes_serialize(
|
||||||
|
self,
|
||||||
|
body,
|
||||||
|
_request_auth,
|
||||||
|
_content_type,
|
||||||
|
_headers,
|
||||||
|
_host_index,
|
||||||
|
) -> RequestSerialized:
|
||||||
|
|
||||||
|
_host = None
|
||||||
|
|
||||||
|
_collection_formats: Dict[str, str] = {
|
||||||
|
}
|
||||||
|
|
||||||
|
_path_params: Dict[str, str] = {}
|
||||||
|
_query_params: List[Tuple[str, str]] = []
|
||||||
|
_header_params: Dict[str, Optional[str]] = _headers or {}
|
||||||
|
_form_params: List[Tuple[str, str]] = []
|
||||||
|
_files: Dict[str, Union[str, bytes]] = {}
|
||||||
|
_body_params: Optional[bytes] = None
|
||||||
|
|
||||||
|
# process the path parameters
|
||||||
|
# process the query parameters
|
||||||
|
# process the header parameters
|
||||||
|
# process the form parameters
|
||||||
|
# process the body parameter
|
||||||
|
if body is not None:
|
||||||
|
_body_params = body
|
||||||
|
|
||||||
|
|
||||||
|
# set the HTTP header `Accept`
|
||||||
|
if 'Accept' not in _header_params:
|
||||||
|
_header_params['Accept'] = self.api_client.select_header_accept(
|
||||||
|
[
|
||||||
|
'application/json'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# set the HTTP header `Content-Type`
|
||||||
|
if _content_type:
|
||||||
|
_header_params['Content-Type'] = _content_type
|
||||||
|
else:
|
||||||
|
_default_content_type = (
|
||||||
|
self.api_client.select_header_content_type(
|
||||||
|
[
|
||||||
|
'application/json'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if _default_content_type is not None:
|
||||||
|
_header_params['Content-Type'] = _default_content_type
|
||||||
|
|
||||||
|
# authentication setting
|
||||||
|
_auth_settings: List[str] = [
|
||||||
|
]
|
||||||
|
|
||||||
|
return self.api_client.param_serialize(
|
||||||
|
method='GET',
|
||||||
|
resource_path='/patchnotes',
|
||||||
|
path_params=_path_params,
|
||||||
|
query_params=_query_params,
|
||||||
|
header_params=_header_params,
|
||||||
|
body=_body_params,
|
||||||
|
post_params=_form_params,
|
||||||
|
files=_files,
|
||||||
|
auth_settings=_auth_settings,
|
||||||
|
collection_formats=_collection_formats,
|
||||||
|
_host=_host,
|
||||||
|
_request_auth=_request_auth
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def patch_note_delete(
|
||||||
|
self,
|
||||||
|
patch_id: StrictStr,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> None:
|
||||||
|
"""patch_note_delete
|
||||||
|
|
||||||
|
deletes one Patch note
|
||||||
|
|
||||||
|
:param patch_id: (required)
|
||||||
|
:type patch_id: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._patch_note_delete_serialize(
|
||||||
|
patch_id=patch_id,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': None,
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
).data
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def patch_note_delete_with_http_info(
|
||||||
|
self,
|
||||||
|
patch_id: StrictStr,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> ApiResponse[None]:
|
||||||
|
"""patch_note_delete
|
||||||
|
|
||||||
|
deletes one Patch note
|
||||||
|
|
||||||
|
:param patch_id: (required)
|
||||||
|
:type patch_id: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._patch_note_delete_serialize(
|
||||||
|
patch_id=patch_id,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': None,
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def patch_note_delete_without_preload_content(
|
||||||
|
self,
|
||||||
|
patch_id: StrictStr,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> RESTResponseType:
|
||||||
|
"""patch_note_delete
|
||||||
|
|
||||||
|
deletes one Patch note
|
||||||
|
|
||||||
|
:param patch_id: (required)
|
||||||
|
:type patch_id: str
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._patch_note_delete_serialize(
|
||||||
|
patch_id=patch_id,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': None,
|
||||||
|
'404': None,
|
||||||
|
'500': None,
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
return response_data.response
|
||||||
|
|
||||||
|
|
||||||
|
def _patch_note_delete_serialize(
|
||||||
|
self,
|
||||||
|
patch_id,
|
||||||
|
_request_auth,
|
||||||
|
_content_type,
|
||||||
|
_headers,
|
||||||
|
_host_index,
|
||||||
|
) -> RequestSerialized:
|
||||||
|
|
||||||
|
_host = None
|
||||||
|
|
||||||
|
_collection_formats: Dict[str, str] = {
|
||||||
|
}
|
||||||
|
|
||||||
|
_path_params: Dict[str, str] = {}
|
||||||
|
_query_params: List[Tuple[str, str]] = []
|
||||||
|
_header_params: Dict[str, Optional[str]] = _headers or {}
|
||||||
|
_form_params: List[Tuple[str, str]] = []
|
||||||
|
_files: Dict[str, Union[str, bytes]] = {}
|
||||||
|
_body_params: Optional[bytes] = None
|
||||||
|
|
||||||
|
# process the path parameters
|
||||||
|
if patch_id is not None:
|
||||||
|
_path_params['patchID'] = patch_id
|
||||||
|
# process the query parameters
|
||||||
|
# process the header parameters
|
||||||
|
# process the form parameters
|
||||||
|
# process the body parameter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# authentication setting
|
||||||
|
_auth_settings: List[str] = [
|
||||||
|
]
|
||||||
|
|
||||||
|
return self.api_client.param_serialize(
|
||||||
|
method='DELETE',
|
||||||
|
resource_path='/patchnotes/{patchID}',
|
||||||
|
path_params=_path_params,
|
||||||
|
query_params=_query_params,
|
||||||
|
header_params=_header_params,
|
||||||
|
body=_body_params,
|
||||||
|
post_params=_form_params,
|
||||||
|
files=_files,
|
||||||
|
auth_settings=_auth_settings,
|
||||||
|
collection_formats=_collection_formats,
|
||||||
|
_host=_host,
|
||||||
|
_request_auth=_request_auth
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def post_patchnotes(
|
||||||
|
self,
|
||||||
|
patch_notes: Optional[PatchNotes] = None,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> List[PatchNotes]:
|
||||||
|
"""post_patchnotes
|
||||||
|
|
||||||
|
creates new Patch notes
|
||||||
|
|
||||||
|
:param patch_notes:
|
||||||
|
:type patch_notes: PatchNotes
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._post_patchnotes_serialize(
|
||||||
|
patch_notes=patch_notes,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
).data
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def post_patchnotes_with_http_info(
|
||||||
|
self,
|
||||||
|
patch_notes: Optional[PatchNotes] = None,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> ApiResponse[List[PatchNotes]]:
|
||||||
|
"""post_patchnotes
|
||||||
|
|
||||||
|
creates new Patch notes
|
||||||
|
|
||||||
|
:param patch_notes:
|
||||||
|
:type patch_notes: PatchNotes
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._post_patchnotes_serialize(
|
||||||
|
patch_notes=patch_notes,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
response_data.read()
|
||||||
|
return self.api_client.response_deserialize(
|
||||||
|
response_data=response_data,
|
||||||
|
response_types_map=_response_types_map,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@validate_call
|
||||||
|
def post_patchnotes_without_preload_content(
|
||||||
|
self,
|
||||||
|
patch_notes: Optional[PatchNotes] = None,
|
||||||
|
_request_timeout: Union[
|
||||||
|
None,
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Tuple[
|
||||||
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
Annotated[StrictFloat, Field(gt=0)]
|
||||||
|
]
|
||||||
|
] = None,
|
||||||
|
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_content_type: Optional[StrictStr] = None,
|
||||||
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
||||||
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
||||||
|
) -> RESTResponseType:
|
||||||
|
"""post_patchnotes
|
||||||
|
|
||||||
|
creates new Patch notes
|
||||||
|
|
||||||
|
:param patch_notes:
|
||||||
|
:type patch_notes: PatchNotes
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
:type _request_timeout: int, tuple(int, int), optional
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the
|
||||||
|
authentication in the spec for a single request.
|
||||||
|
:type _request_auth: dict, optional
|
||||||
|
:param _content_type: force content-type for the request.
|
||||||
|
:type _content_type: str, Optional
|
||||||
|
:param _headers: set to override the headers for a single
|
||||||
|
request; this effectively ignores the headers
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _headers: dict, optional
|
||||||
|
:param _host_index: set to override the host_index for a single
|
||||||
|
request; this effectively ignores the host_index
|
||||||
|
in the spec for a single request.
|
||||||
|
:type _host_index: int, optional
|
||||||
|
:return: Returns the result object.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
_param = self._post_patchnotes_serialize(
|
||||||
|
patch_notes=patch_notes,
|
||||||
|
_request_auth=_request_auth,
|
||||||
|
_content_type=_content_type,
|
||||||
|
_headers=_headers,
|
||||||
|
_host_index=_host_index
|
||||||
|
)
|
||||||
|
|
||||||
|
_response_types_map: Dict[str, Optional[str]] = {
|
||||||
|
'200': "List[PatchNotes]",
|
||||||
|
}
|
||||||
|
response_data = self.api_client.call_api(
|
||||||
|
*_param,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
return response_data.response
|
||||||
|
|
||||||
|
|
||||||
|
def _post_patchnotes_serialize(
|
||||||
|
self,
|
||||||
|
patch_notes,
|
||||||
|
_request_auth,
|
||||||
|
_content_type,
|
||||||
|
_headers,
|
||||||
|
_host_index,
|
||||||
|
) -> RequestSerialized:
|
||||||
|
|
||||||
|
_host = None
|
||||||
|
|
||||||
|
_collection_formats: Dict[str, str] = {
|
||||||
|
}
|
||||||
|
|
||||||
|
_path_params: Dict[str, str] = {}
|
||||||
|
_query_params: List[Tuple[str, str]] = []
|
||||||
|
_header_params: Dict[str, Optional[str]] = _headers or {}
|
||||||
|
_form_params: List[Tuple[str, str]] = []
|
||||||
|
_files: Dict[str, Union[str, bytes]] = {}
|
||||||
|
_body_params: Optional[bytes] = None
|
||||||
|
|
||||||
|
# process the path parameters
|
||||||
|
# process the query parameters
|
||||||
|
# process the header parameters
|
||||||
|
# process the form parameters
|
||||||
|
# process the body parameter
|
||||||
|
if patch_notes is not None:
|
||||||
|
_body_params = patch_notes
|
||||||
|
|
||||||
|
|
||||||
|
# set the HTTP header `Accept`
|
||||||
|
if 'Accept' not in _header_params:
|
||||||
|
_header_params['Accept'] = self.api_client.select_header_accept(
|
||||||
|
[
|
||||||
|
'application/json'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# set the HTTP header `Content-Type`
|
||||||
|
if _content_type:
|
||||||
|
_header_params['Content-Type'] = _content_type
|
||||||
|
else:
|
||||||
|
_default_content_type = (
|
||||||
|
self.api_client.select_header_content_type(
|
||||||
|
[
|
||||||
|
'application/json'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if _default_content_type is not None:
|
||||||
|
_header_params['Content-Type'] = _default_content_type
|
||||||
|
|
||||||
|
# authentication setting
|
||||||
|
_auth_settings: List[str] = [
|
||||||
|
]
|
||||||
|
|
||||||
|
return self.api_client.param_serialize(
|
||||||
|
method='POST',
|
||||||
|
resource_path='/patchnotes',
|
||||||
|
path_params=_path_params,
|
||||||
|
query_params=_query_params,
|
||||||
|
header_params=_header_params,
|
||||||
|
body=_body_params,
|
||||||
|
post_params=_form_params,
|
||||||
|
files=_files,
|
||||||
|
auth_settings=_auth_settings,
|
||||||
|
collection_formats=_collection_formats,
|
||||||
|
_host=_host,
|
||||||
|
_request_auth=_request_auth
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,781 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from dateutil.parser import parse
|
||||||
|
from enum import Enum
|
||||||
|
import json
|
||||||
|
import mimetypes
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from urllib.parse import quote
|
||||||
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
|
from pydantic import SecretStr
|
||||||
|
|
||||||
|
from openapi_client.configuration import Configuration
|
||||||
|
from openapi_client.api_response import ApiResponse, T as ApiResponseT
|
||||||
|
import openapi_client.models
|
||||||
|
from openapi_client import rest
|
||||||
|
from openapi_client.exceptions import (
|
||||||
|
ApiValueError,
|
||||||
|
ApiException,
|
||||||
|
BadRequestException,
|
||||||
|
UnauthorizedException,
|
||||||
|
ForbiddenException,
|
||||||
|
NotFoundException,
|
||||||
|
ServiceException
|
||||||
|
)
|
||||||
|
|
||||||
|
RequestSerialized = Tuple[str, str, Dict[str, str], Optional[str], List[str]]
|
||||||
|
|
||||||
|
class ApiClient:
|
||||||
|
"""Generic API client for OpenAPI client library builds.
|
||||||
|
|
||||||
|
OpenAPI generic API client. This client handles the client-
|
||||||
|
server communication, and is invariant across implementations. Specifics of
|
||||||
|
the methods and models for each application are generated from the OpenAPI
|
||||||
|
templates.
|
||||||
|
|
||||||
|
:param configuration: .Configuration object for this client
|
||||||
|
:param header_name: a header to pass when making calls to the API.
|
||||||
|
:param header_value: a header value to pass when making calls to
|
||||||
|
the API.
|
||||||
|
:param cookie: a cookie to include in the header when making calls
|
||||||
|
to the API
|
||||||
|
"""
|
||||||
|
|
||||||
|
PRIMITIVE_TYPES = (float, bool, bytes, str, int)
|
||||||
|
NATIVE_TYPES_MAPPING = {
|
||||||
|
'int': int,
|
||||||
|
'long': int, # TODO remove as only py3 is supported?
|
||||||
|
'float': float,
|
||||||
|
'str': str,
|
||||||
|
'bool': bool,
|
||||||
|
'date': datetime.date,
|
||||||
|
'datetime': datetime.datetime,
|
||||||
|
'object': object,
|
||||||
|
}
|
||||||
|
_pool = None
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
configuration=None,
|
||||||
|
header_name=None,
|
||||||
|
header_value=None,
|
||||||
|
cookie=None
|
||||||
|
) -> None:
|
||||||
|
# use default configuration if none is provided
|
||||||
|
if configuration is None:
|
||||||
|
configuration = Configuration.get_default()
|
||||||
|
self.configuration = configuration
|
||||||
|
|
||||||
|
self.rest_client = rest.RESTClientObject(configuration)
|
||||||
|
self.default_headers = {}
|
||||||
|
if header_name is not None:
|
||||||
|
self.default_headers[header_name] = header_value
|
||||||
|
self.cookie = cookie
|
||||||
|
# Set default User-Agent.
|
||||||
|
self.user_agent = 'OpenAPI-Generator/1.0.0/python'
|
||||||
|
self.client_side_validation = configuration.client_side_validation
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, traceback):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user_agent(self):
|
||||||
|
"""User agent for this API client"""
|
||||||
|
return self.default_headers['User-Agent']
|
||||||
|
|
||||||
|
@user_agent.setter
|
||||||
|
def user_agent(self, value):
|
||||||
|
self.default_headers['User-Agent'] = value
|
||||||
|
|
||||||
|
def set_default_header(self, header_name, header_value):
|
||||||
|
self.default_headers[header_name] = header_value
|
||||||
|
|
||||||
|
|
||||||
|
_default = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_default(cls):
|
||||||
|
"""Return new instance of ApiClient.
|
||||||
|
|
||||||
|
This method returns newly created, based on default constructor,
|
||||||
|
object of ApiClient class or returns a copy of default
|
||||||
|
ApiClient.
|
||||||
|
|
||||||
|
:return: The ApiClient object.
|
||||||
|
"""
|
||||||
|
if cls._default is None:
|
||||||
|
cls._default = ApiClient()
|
||||||
|
return cls._default
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def set_default(cls, default):
|
||||||
|
"""Set default instance of ApiClient.
|
||||||
|
|
||||||
|
It stores default ApiClient.
|
||||||
|
|
||||||
|
:param default: object of ApiClient.
|
||||||
|
"""
|
||||||
|
cls._default = default
|
||||||
|
|
||||||
|
def param_serialize(
|
||||||
|
self,
|
||||||
|
method,
|
||||||
|
resource_path,
|
||||||
|
path_params=None,
|
||||||
|
query_params=None,
|
||||||
|
header_params=None,
|
||||||
|
body=None,
|
||||||
|
post_params=None,
|
||||||
|
files=None, auth_settings=None,
|
||||||
|
collection_formats=None,
|
||||||
|
_host=None,
|
||||||
|
_request_auth=None
|
||||||
|
) -> RequestSerialized:
|
||||||
|
|
||||||
|
"""Builds the HTTP request params needed by the request.
|
||||||
|
:param method: Method to call.
|
||||||
|
:param resource_path: Path to method endpoint.
|
||||||
|
:param path_params: Path parameters in the url.
|
||||||
|
:param query_params: Query parameters in the url.
|
||||||
|
:param header_params: Header parameters to be
|
||||||
|
placed in the request header.
|
||||||
|
:param body: Request body.
|
||||||
|
:param post_params dict: Request post form parameters,
|
||||||
|
for `application/x-www-form-urlencoded`, `multipart/form-data`.
|
||||||
|
:param auth_settings list: Auth Settings names for the request.
|
||||||
|
:param files dict: key -> filename, value -> filepath,
|
||||||
|
for `multipart/form-data`.
|
||||||
|
:param collection_formats: dict of collection formats for path, query,
|
||||||
|
header, and post parameters.
|
||||||
|
:param _request_auth: set to override the auth_settings for an a single
|
||||||
|
request; this effectively ignores the authentication
|
||||||
|
in the spec for a single request.
|
||||||
|
:return: tuple of form (path, http_method, query_params, header_params,
|
||||||
|
body, post_params, files)
|
||||||
|
"""
|
||||||
|
|
||||||
|
config = self.configuration
|
||||||
|
|
||||||
|
# header parameters
|
||||||
|
header_params = header_params or {}
|
||||||
|
header_params.update(self.default_headers)
|
||||||
|
if self.cookie:
|
||||||
|
header_params['Cookie'] = self.cookie
|
||||||
|
if header_params:
|
||||||
|
header_params = self.sanitize_for_serialization(header_params)
|
||||||
|
header_params = dict(
|
||||||
|
self.parameters_to_tuples(header_params,collection_formats)
|
||||||
|
)
|
||||||
|
|
||||||
|
# path parameters
|
||||||
|
if path_params:
|
||||||
|
path_params = self.sanitize_for_serialization(path_params)
|
||||||
|
path_params = self.parameters_to_tuples(
|
||||||
|
path_params,
|
||||||
|
collection_formats
|
||||||
|
)
|
||||||
|
for k, v in path_params:
|
||||||
|
# specified safe chars, encode everything
|
||||||
|
resource_path = resource_path.replace(
|
||||||
|
'{%s}' % k,
|
||||||
|
quote(str(v), safe=config.safe_chars_for_path_param)
|
||||||
|
)
|
||||||
|
|
||||||
|
# post parameters
|
||||||
|
if post_params or files:
|
||||||
|
post_params = post_params if post_params else []
|
||||||
|
post_params = self.sanitize_for_serialization(post_params)
|
||||||
|
post_params = self.parameters_to_tuples(
|
||||||
|
post_params,
|
||||||
|
collection_formats
|
||||||
|
)
|
||||||
|
if files:
|
||||||
|
post_params.extend(self.files_parameters(files))
|
||||||
|
|
||||||
|
# auth setting
|
||||||
|
self.update_params_for_auth(
|
||||||
|
header_params,
|
||||||
|
query_params,
|
||||||
|
auth_settings,
|
||||||
|
resource_path,
|
||||||
|
method,
|
||||||
|
body,
|
||||||
|
request_auth=_request_auth
|
||||||
|
)
|
||||||
|
|
||||||
|
# body
|
||||||
|
if body:
|
||||||
|
body = self.sanitize_for_serialization(body)
|
||||||
|
|
||||||
|
# request url
|
||||||
|
if _host is None or self.configuration.ignore_operation_servers:
|
||||||
|
url = self.configuration.host + resource_path
|
||||||
|
else:
|
||||||
|
# use server/host defined in path or operation instead
|
||||||
|
url = _host + resource_path
|
||||||
|
|
||||||
|
# query parameters
|
||||||
|
if query_params:
|
||||||
|
query_params = self.sanitize_for_serialization(query_params)
|
||||||
|
url_query = self.parameters_to_url_query(
|
||||||
|
query_params,
|
||||||
|
collection_formats
|
||||||
|
)
|
||||||
|
url += "?" + url_query
|
||||||
|
|
||||||
|
return method, url, header_params, body, post_params
|
||||||
|
|
||||||
|
|
||||||
|
def call_api(
|
||||||
|
self,
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
header_params=None,
|
||||||
|
body=None,
|
||||||
|
post_params=None,
|
||||||
|
_request_timeout=None
|
||||||
|
) -> rest.RESTResponse:
|
||||||
|
"""Makes the HTTP request (synchronous)
|
||||||
|
:param method: Method to call.
|
||||||
|
:param url: Path to method endpoint.
|
||||||
|
:param header_params: Header parameters to be
|
||||||
|
placed in the request header.
|
||||||
|
:param body: Request body.
|
||||||
|
:param post_params dict: Request post form parameters,
|
||||||
|
for `application/x-www-form-urlencoded`, `multipart/form-data`.
|
||||||
|
:param _request_timeout: timeout setting for this request.
|
||||||
|
:return: RESTResponse
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# perform request and return response
|
||||||
|
response_data = self.rest_client.request(
|
||||||
|
method, url,
|
||||||
|
headers=header_params,
|
||||||
|
body=body, post_params=post_params,
|
||||||
|
_request_timeout=_request_timeout
|
||||||
|
)
|
||||||
|
|
||||||
|
except ApiException as e:
|
||||||
|
raise e
|
||||||
|
|
||||||
|
return response_data
|
||||||
|
|
||||||
|
def response_deserialize(
|
||||||
|
self,
|
||||||
|
response_data: rest.RESTResponse,
|
||||||
|
response_types_map: Optional[Dict[str, ApiResponseT]]=None
|
||||||
|
) -> ApiResponse[ApiResponseT]:
|
||||||
|
"""Deserializes response into an object.
|
||||||
|
:param response_data: RESTResponse object to be deserialized.
|
||||||
|
:param response_types_map: dict of response types.
|
||||||
|
:return: ApiResponse
|
||||||
|
"""
|
||||||
|
|
||||||
|
msg = "RESTResponse.read() must be called before passing it to response_deserialize()"
|
||||||
|
assert response_data.data is not None, msg
|
||||||
|
|
||||||
|
response_type = response_types_map.get(str(response_data.status), None)
|
||||||
|
if not response_type and isinstance(response_data.status, int) and 100 <= response_data.status <= 599:
|
||||||
|
# if not found, look for '1XX', '2XX', etc.
|
||||||
|
response_type = response_types_map.get(str(response_data.status)[0] + "XX", None)
|
||||||
|
|
||||||
|
# deserialize response data
|
||||||
|
response_text = None
|
||||||
|
return_data = None
|
||||||
|
try:
|
||||||
|
if response_type == "bytearray":
|
||||||
|
return_data = response_data.data
|
||||||
|
elif response_type == "file":
|
||||||
|
return_data = self.__deserialize_file(response_data)
|
||||||
|
elif response_type is not None:
|
||||||
|
match = None
|
||||||
|
content_type = response_data.getheader('content-type')
|
||||||
|
if content_type is not None:
|
||||||
|
match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type)
|
||||||
|
encoding = match.group(1) if match else "utf-8"
|
||||||
|
response_text = response_data.data.decode(encoding)
|
||||||
|
return_data = self.deserialize(response_text, response_type, content_type)
|
||||||
|
finally:
|
||||||
|
if not 200 <= response_data.status <= 299:
|
||||||
|
raise ApiException.from_response(
|
||||||
|
http_resp=response_data,
|
||||||
|
body=response_text,
|
||||||
|
data=return_data,
|
||||||
|
)
|
||||||
|
|
||||||
|
return ApiResponse(
|
||||||
|
status_code = response_data.status,
|
||||||
|
data = return_data,
|
||||||
|
headers = response_data.getheaders(),
|
||||||
|
raw_data = response_data.data
|
||||||
|
)
|
||||||
|
|
||||||
|
def sanitize_for_serialization(self, obj):
|
||||||
|
"""Builds a JSON POST object.
|
||||||
|
|
||||||
|
If obj is None, return None.
|
||||||
|
If obj is SecretStr, return obj.get_secret_value()
|
||||||
|
If obj is str, int, long, float, bool, return directly.
|
||||||
|
If obj is datetime.datetime, datetime.date
|
||||||
|
convert to string in iso8601 format.
|
||||||
|
If obj is list, sanitize each element in the list.
|
||||||
|
If obj is dict, return the dict.
|
||||||
|
If obj is OpenAPI model, return the properties dict.
|
||||||
|
|
||||||
|
:param obj: The data to serialize.
|
||||||
|
:return: The serialized form of data.
|
||||||
|
"""
|
||||||
|
if obj is None:
|
||||||
|
return None
|
||||||
|
elif isinstance(obj, Enum):
|
||||||
|
return obj.value
|
||||||
|
elif isinstance(obj, SecretStr):
|
||||||
|
return obj.get_secret_value()
|
||||||
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
|
return obj
|
||||||
|
elif isinstance(obj, list):
|
||||||
|
return [
|
||||||
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
]
|
||||||
|
elif isinstance(obj, tuple):
|
||||||
|
return tuple(
|
||||||
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
)
|
||||||
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
|
return obj.isoformat()
|
||||||
|
|
||||||
|
elif isinstance(obj, dict):
|
||||||
|
obj_dict = obj
|
||||||
|
else:
|
||||||
|
# Convert model obj to dict except
|
||||||
|
# attributes `openapi_types`, `attribute_map`
|
||||||
|
# and attributes which value is not None.
|
||||||
|
# Convert attribute name to json key in
|
||||||
|
# model definition for request.
|
||||||
|
if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')):
|
||||||
|
obj_dict = obj.to_dict()
|
||||||
|
else:
|
||||||
|
obj_dict = obj.__dict__
|
||||||
|
|
||||||
|
return {
|
||||||
|
key: self.sanitize_for_serialization(val)
|
||||||
|
for key, val in obj_dict.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]):
|
||||||
|
"""Deserializes response into an object.
|
||||||
|
|
||||||
|
:param response: RESTResponse object to be deserialized.
|
||||||
|
:param response_type: class literal for
|
||||||
|
deserialized object, or string of class name.
|
||||||
|
:param content_type: content type of response.
|
||||||
|
|
||||||
|
:return: deserialized object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# fetch data from response object
|
||||||
|
if content_type is None:
|
||||||
|
try:
|
||||||
|
data = json.loads(response_text)
|
||||||
|
except ValueError:
|
||||||
|
data = response_text
|
||||||
|
elif content_type.startswith("application/json"):
|
||||||
|
if response_text == "":
|
||||||
|
data = ""
|
||||||
|
else:
|
||||||
|
data = json.loads(response_text)
|
||||||
|
elif content_type.startswith("text/plain"):
|
||||||
|
data = response_text
|
||||||
|
else:
|
||||||
|
raise ApiException(
|
||||||
|
status=0,
|
||||||
|
reason="Unsupported content type: {0}".format(content_type)
|
||||||
|
)
|
||||||
|
|
||||||
|
return self.__deserialize(data, response_type)
|
||||||
|
|
||||||
|
def __deserialize(self, data, klass):
|
||||||
|
"""Deserializes dict, list, str into an object.
|
||||||
|
|
||||||
|
:param data: dict, list or str.
|
||||||
|
:param klass: class literal, or string of class name.
|
||||||
|
|
||||||
|
:return: object.
|
||||||
|
"""
|
||||||
|
if data is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if isinstance(klass, str):
|
||||||
|
if klass.startswith('List['):
|
||||||
|
m = re.match(r'List\[(.*)]', klass)
|
||||||
|
assert m is not None, "Malformed List type definition"
|
||||||
|
sub_kls = m.group(1)
|
||||||
|
return [self.__deserialize(sub_data, sub_kls)
|
||||||
|
for sub_data in data]
|
||||||
|
|
||||||
|
if klass.startswith('Dict['):
|
||||||
|
m = re.match(r'Dict\[([^,]*), (.*)]', klass)
|
||||||
|
assert m is not None, "Malformed Dict type definition"
|
||||||
|
sub_kls = m.group(2)
|
||||||
|
return {k: self.__deserialize(v, sub_kls)
|
||||||
|
for k, v in data.items()}
|
||||||
|
|
||||||
|
# convert str to class
|
||||||
|
if klass in self.NATIVE_TYPES_MAPPING:
|
||||||
|
klass = self.NATIVE_TYPES_MAPPING[klass]
|
||||||
|
else:
|
||||||
|
klass = getattr(openapi_client.models, klass)
|
||||||
|
|
||||||
|
if klass in self.PRIMITIVE_TYPES:
|
||||||
|
return self.__deserialize_primitive(data, klass)
|
||||||
|
elif klass == object:
|
||||||
|
return self.__deserialize_object(data)
|
||||||
|
elif klass == datetime.date:
|
||||||
|
return self.__deserialize_date(data)
|
||||||
|
elif klass == datetime.datetime:
|
||||||
|
return self.__deserialize_datetime(data)
|
||||||
|
elif issubclass(klass, Enum):
|
||||||
|
return self.__deserialize_enum(data, klass)
|
||||||
|
else:
|
||||||
|
return self.__deserialize_model(data, klass)
|
||||||
|
|
||||||
|
def parameters_to_tuples(self, params, collection_formats):
|
||||||
|
"""Get parameters as list of tuples, formatting collections.
|
||||||
|
|
||||||
|
:param params: Parameters as dict or list of two-tuples
|
||||||
|
:param dict collection_formats: Parameter collection formats
|
||||||
|
:return: Parameters as list of tuples, collections formatted
|
||||||
|
"""
|
||||||
|
new_params: List[Tuple[str, str]] = []
|
||||||
|
if collection_formats is None:
|
||||||
|
collection_formats = {}
|
||||||
|
for k, v in params.items() if isinstance(params, dict) else params:
|
||||||
|
if k in collection_formats:
|
||||||
|
collection_format = collection_formats[k]
|
||||||
|
if collection_format == 'multi':
|
||||||
|
new_params.extend((k, value) for value in v)
|
||||||
|
else:
|
||||||
|
if collection_format == 'ssv':
|
||||||
|
delimiter = ' '
|
||||||
|
elif collection_format == 'tsv':
|
||||||
|
delimiter = '\t'
|
||||||
|
elif collection_format == 'pipes':
|
||||||
|
delimiter = '|'
|
||||||
|
else: # csv is the default
|
||||||
|
delimiter = ','
|
||||||
|
new_params.append(
|
||||||
|
(k, delimiter.join(str(value) for value in v)))
|
||||||
|
else:
|
||||||
|
new_params.append((k, v))
|
||||||
|
return new_params
|
||||||
|
|
||||||
|
def parameters_to_url_query(self, params, collection_formats):
|
||||||
|
"""Get parameters as list of tuples, formatting collections.
|
||||||
|
|
||||||
|
:param params: Parameters as dict or list of two-tuples
|
||||||
|
:param dict collection_formats: Parameter collection formats
|
||||||
|
:return: URL query string (e.g. a=Hello%20World&b=123)
|
||||||
|
"""
|
||||||
|
new_params: List[Tuple[str, str]] = []
|
||||||
|
if collection_formats is None:
|
||||||
|
collection_formats = {}
|
||||||
|
for k, v in params.items() if isinstance(params, dict) else params:
|
||||||
|
if isinstance(v, bool):
|
||||||
|
v = str(v).lower()
|
||||||
|
if isinstance(v, (int, float)):
|
||||||
|
v = str(v)
|
||||||
|
if isinstance(v, dict):
|
||||||
|
v = json.dumps(v)
|
||||||
|
|
||||||
|
if k in collection_formats:
|
||||||
|
collection_format = collection_formats[k]
|
||||||
|
if collection_format == 'multi':
|
||||||
|
new_params.extend((k, str(value)) for value in v)
|
||||||
|
else:
|
||||||
|
if collection_format == 'ssv':
|
||||||
|
delimiter = ' '
|
||||||
|
elif collection_format == 'tsv':
|
||||||
|
delimiter = '\t'
|
||||||
|
elif collection_format == 'pipes':
|
||||||
|
delimiter = '|'
|
||||||
|
else: # csv is the default
|
||||||
|
delimiter = ','
|
||||||
|
new_params.append(
|
||||||
|
(k, delimiter.join(quote(str(value)) for value in v))
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
new_params.append((k, quote(str(v))))
|
||||||
|
|
||||||
|
return "&".join(["=".join(map(str, item)) for item in new_params])
|
||||||
|
|
||||||
|
def files_parameters(self, files: Dict[str, Union[str, bytes]]):
|
||||||
|
"""Builds form parameters.
|
||||||
|
|
||||||
|
:param files: File parameters.
|
||||||
|
:return: Form parameters with files.
|
||||||
|
"""
|
||||||
|
params = []
|
||||||
|
for k, v in files.items():
|
||||||
|
if isinstance(v, str):
|
||||||
|
with open(v, 'rb') as f:
|
||||||
|
filename = os.path.basename(f.name)
|
||||||
|
filedata = f.read()
|
||||||
|
elif isinstance(v, bytes):
|
||||||
|
filename = k
|
||||||
|
filedata = v
|
||||||
|
else:
|
||||||
|
raise ValueError("Unsupported file value")
|
||||||
|
mimetype = (
|
||||||
|
mimetypes.guess_type(filename)[0]
|
||||||
|
or 'application/octet-stream'
|
||||||
|
)
|
||||||
|
params.append(
|
||||||
|
tuple([k, tuple([filename, filedata, mimetype])])
|
||||||
|
)
|
||||||
|
return params
|
||||||
|
|
||||||
|
def select_header_accept(self, accepts: List[str]) -> Optional[str]:
|
||||||
|
"""Returns `Accept` based on an array of accepts provided.
|
||||||
|
|
||||||
|
:param accepts: List of headers.
|
||||||
|
:return: Accept (e.g. application/json).
|
||||||
|
"""
|
||||||
|
if not accepts:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for accept in accepts:
|
||||||
|
if re.search('json', accept, re.IGNORECASE):
|
||||||
|
return accept
|
||||||
|
|
||||||
|
return accepts[0]
|
||||||
|
|
||||||
|
def select_header_content_type(self, content_types):
|
||||||
|
"""Returns `Content-Type` based on an array of content_types provided.
|
||||||
|
|
||||||
|
:param content_types: List of content-types.
|
||||||
|
:return: Content-Type (e.g. application/json).
|
||||||
|
"""
|
||||||
|
if not content_types:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for content_type in content_types:
|
||||||
|
if re.search('json', content_type, re.IGNORECASE):
|
||||||
|
return content_type
|
||||||
|
|
||||||
|
return content_types[0]
|
||||||
|
|
||||||
|
def update_params_for_auth(
|
||||||
|
self,
|
||||||
|
headers,
|
||||||
|
queries,
|
||||||
|
auth_settings,
|
||||||
|
resource_path,
|
||||||
|
method,
|
||||||
|
body,
|
||||||
|
request_auth=None
|
||||||
|
) -> None:
|
||||||
|
"""Updates header and query params based on authentication setting.
|
||||||
|
|
||||||
|
:param headers: Header parameters dict to be updated.
|
||||||
|
:param queries: Query parameters tuple list to be updated.
|
||||||
|
:param auth_settings: Authentication setting identifiers list.
|
||||||
|
:resource_path: A string representation of the HTTP request resource path.
|
||||||
|
:method: A string representation of the HTTP request method.
|
||||||
|
:body: A object representing the body of the HTTP request.
|
||||||
|
The object type is the return value of sanitize_for_serialization().
|
||||||
|
:param request_auth: if set, the provided settings will
|
||||||
|
override the token in the configuration.
|
||||||
|
"""
|
||||||
|
if not auth_settings:
|
||||||
|
return
|
||||||
|
|
||||||
|
if request_auth:
|
||||||
|
self._apply_auth_params(
|
||||||
|
headers,
|
||||||
|
queries,
|
||||||
|
resource_path,
|
||||||
|
method,
|
||||||
|
body,
|
||||||
|
request_auth
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
for auth in auth_settings:
|
||||||
|
auth_setting = self.configuration.auth_settings().get(auth)
|
||||||
|
if auth_setting:
|
||||||
|
self._apply_auth_params(
|
||||||
|
headers,
|
||||||
|
queries,
|
||||||
|
resource_path,
|
||||||
|
method,
|
||||||
|
body,
|
||||||
|
auth_setting
|
||||||
|
)
|
||||||
|
|
||||||
|
def _apply_auth_params(
|
||||||
|
self,
|
||||||
|
headers,
|
||||||
|
queries,
|
||||||
|
resource_path,
|
||||||
|
method,
|
||||||
|
body,
|
||||||
|
auth_setting
|
||||||
|
) -> None:
|
||||||
|
"""Updates the request parameters based on a single auth_setting
|
||||||
|
|
||||||
|
:param headers: Header parameters dict to be updated.
|
||||||
|
:param queries: Query parameters tuple list to be updated.
|
||||||
|
:resource_path: A string representation of the HTTP request resource path.
|
||||||
|
:method: A string representation of the HTTP request method.
|
||||||
|
:body: A object representing the body of the HTTP request.
|
||||||
|
The object type is the return value of sanitize_for_serialization().
|
||||||
|
:param auth_setting: auth settings for the endpoint
|
||||||
|
"""
|
||||||
|
if auth_setting['in'] == 'cookie':
|
||||||
|
headers['Cookie'] = auth_setting['value']
|
||||||
|
elif auth_setting['in'] == 'header':
|
||||||
|
if auth_setting['type'] != 'http-signature':
|
||||||
|
headers[auth_setting['key']] = auth_setting['value']
|
||||||
|
elif auth_setting['in'] == 'query':
|
||||||
|
queries.append((auth_setting['key'], auth_setting['value']))
|
||||||
|
else:
|
||||||
|
raise ApiValueError(
|
||||||
|
'Authentication token must be in `query` or `header`'
|
||||||
|
)
|
||||||
|
|
||||||
|
def __deserialize_file(self, response):
|
||||||
|
"""Deserializes body to file
|
||||||
|
|
||||||
|
Saves response body into a file in a temporary folder,
|
||||||
|
using the filename from the `Content-Disposition` header if provided.
|
||||||
|
|
||||||
|
handle file downloading
|
||||||
|
save response body into a tmp file and return the instance
|
||||||
|
|
||||||
|
:param response: RESTResponse.
|
||||||
|
:return: file path.
|
||||||
|
"""
|
||||||
|
fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path)
|
||||||
|
os.close(fd)
|
||||||
|
os.remove(path)
|
||||||
|
|
||||||
|
content_disposition = response.getheader("Content-Disposition")
|
||||||
|
if content_disposition:
|
||||||
|
m = re.search(
|
||||||
|
r'filename=[\'"]?([^\'"\s]+)[\'"]?',
|
||||||
|
content_disposition
|
||||||
|
)
|
||||||
|
assert m is not None, "Unexpected 'content-disposition' header value"
|
||||||
|
filename = m.group(1)
|
||||||
|
path = os.path.join(os.path.dirname(path), filename)
|
||||||
|
|
||||||
|
with open(path, "wb") as f:
|
||||||
|
f.write(response.data)
|
||||||
|
|
||||||
|
return path
|
||||||
|
|
||||||
|
def __deserialize_primitive(self, data, klass):
|
||||||
|
"""Deserializes string to primitive type.
|
||||||
|
|
||||||
|
:param data: str.
|
||||||
|
:param klass: class literal.
|
||||||
|
|
||||||
|
:return: int, long, float, str, bool.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return klass(data)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
return str(data)
|
||||||
|
except TypeError:
|
||||||
|
return data
|
||||||
|
|
||||||
|
def __deserialize_object(self, value):
|
||||||
|
"""Return an original value.
|
||||||
|
|
||||||
|
:return: object.
|
||||||
|
"""
|
||||||
|
return value
|
||||||
|
|
||||||
|
def __deserialize_date(self, string):
|
||||||
|
"""Deserializes string to date.
|
||||||
|
|
||||||
|
:param string: str.
|
||||||
|
:return: date.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return parse(string).date()
|
||||||
|
except ImportError:
|
||||||
|
return string
|
||||||
|
except ValueError:
|
||||||
|
raise rest.ApiException(
|
||||||
|
status=0,
|
||||||
|
reason="Failed to parse `{0}` as date object".format(string)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __deserialize_datetime(self, string):
|
||||||
|
"""Deserializes string to datetime.
|
||||||
|
|
||||||
|
The string should be in iso8601 datetime format.
|
||||||
|
|
||||||
|
:param string: str.
|
||||||
|
:return: datetime.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return parse(string)
|
||||||
|
except ImportError:
|
||||||
|
return string
|
||||||
|
except ValueError:
|
||||||
|
raise rest.ApiException(
|
||||||
|
status=0,
|
||||||
|
reason=(
|
||||||
|
"Failed to parse `{0}` as datetime object"
|
||||||
|
.format(string)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __deserialize_enum(self, data, klass):
|
||||||
|
"""Deserializes primitive type to enum.
|
||||||
|
|
||||||
|
:param data: primitive type.
|
||||||
|
:param klass: class literal.
|
||||||
|
:return: enum value.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return klass(data)
|
||||||
|
except ValueError:
|
||||||
|
raise rest.ApiException(
|
||||||
|
status=0,
|
||||||
|
reason=(
|
||||||
|
"Failed to parse `{0}` as `{1}`"
|
||||||
|
.format(data, klass)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __deserialize_model(self, data, klass):
|
||||||
|
"""Deserializes list or dict to model.
|
||||||
|
|
||||||
|
:param data: dict, list.
|
||||||
|
:param klass: class literal.
|
||||||
|
:return: model object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return klass.from_dict(data)
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
"""API response object."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from typing import Optional, Generic, Mapping, TypeVar
|
||||||
|
from pydantic import Field, StrictInt, StrictBytes, BaseModel
|
||||||
|
|
||||||
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
class ApiResponse(BaseModel, Generic[T]):
|
||||||
|
"""
|
||||||
|
API response object
|
||||||
|
"""
|
||||||
|
|
||||||
|
status_code: StrictInt = Field(description="HTTP status code")
|
||||||
|
headers: Optional[Mapping[str, str]] = Field(None, description="HTTP headers")
|
||||||
|
data: T = Field(description="Deserialized data given the data type")
|
||||||
|
raw_data: StrictBytes = Field(description="Raw data (HTTP response body)")
|
||||||
|
|
||||||
|
model_config = {
|
||||||
|
"arbitrary_types_allowed": True
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,450 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import copy
|
||||||
|
import logging
|
||||||
|
from logging import FileHandler
|
||||||
|
import multiprocessing
|
||||||
|
import sys
|
||||||
|
from typing import Optional
|
||||||
|
import urllib3
|
||||||
|
|
||||||
|
import http.client as httplib
|
||||||
|
|
||||||
|
JSON_SCHEMA_VALIDATION_KEYWORDS = {
|
||||||
|
'multipleOf', 'maximum', 'exclusiveMaximum',
|
||||||
|
'minimum', 'exclusiveMinimum', 'maxLength',
|
||||||
|
'minLength', 'pattern', 'maxItems', 'minItems'
|
||||||
|
}
|
||||||
|
|
||||||
|
class Configuration:
|
||||||
|
"""This class contains various settings of the API client.
|
||||||
|
|
||||||
|
:param host: Base url.
|
||||||
|
:param ignore_operation_servers
|
||||||
|
Boolean to ignore operation servers for the API client.
|
||||||
|
Config will use `host` as the base url regardless of the operation servers.
|
||||||
|
:param api_key: Dict to store API key(s).
|
||||||
|
Each entry in the dict specifies an API key.
|
||||||
|
The dict key is the name of the security scheme in the OAS specification.
|
||||||
|
The dict value is the API key secret.
|
||||||
|
:param api_key_prefix: Dict to store API prefix (e.g. Bearer).
|
||||||
|
The dict key is the name of the security scheme in the OAS specification.
|
||||||
|
The dict value is an API key prefix when generating the auth data.
|
||||||
|
:param username: Username for HTTP basic authentication.
|
||||||
|
:param password: Password for HTTP basic authentication.
|
||||||
|
:param access_token: Access token.
|
||||||
|
:param server_index: Index to servers configuration.
|
||||||
|
:param server_variables: Mapping with string values to replace variables in
|
||||||
|
templated server configuration. The validation of enums is performed for
|
||||||
|
variables with defined enum values before.
|
||||||
|
:param server_operation_index: Mapping from operation ID to an index to server
|
||||||
|
configuration.
|
||||||
|
:param server_operation_variables: Mapping from operation ID to a mapping with
|
||||||
|
string values to replace variables in templated server configuration.
|
||||||
|
The validation of enums is performed for variables with defined enum
|
||||||
|
values before.
|
||||||
|
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
|
||||||
|
in PEM format.
|
||||||
|
:param retries: Number of retries for API requests.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
_default = None
|
||||||
|
|
||||||
|
def __init__(self, host=None,
|
||||||
|
api_key=None, api_key_prefix=None,
|
||||||
|
username=None, password=None,
|
||||||
|
access_token=None,
|
||||||
|
server_index=None, server_variables=None,
|
||||||
|
server_operation_index=None, server_operation_variables=None,
|
||||||
|
ignore_operation_servers=False,
|
||||||
|
ssl_ca_cert=None,
|
||||||
|
retries=None,
|
||||||
|
*,
|
||||||
|
debug: Optional[bool] = None
|
||||||
|
) -> None:
|
||||||
|
"""Constructor
|
||||||
|
"""
|
||||||
|
self._base_path = "http://localhost" if host is None else host
|
||||||
|
"""Default Base url
|
||||||
|
"""
|
||||||
|
self.server_index = 0 if server_index is None and host is None else server_index
|
||||||
|
self.server_operation_index = server_operation_index or {}
|
||||||
|
"""Default server index
|
||||||
|
"""
|
||||||
|
self.server_variables = server_variables or {}
|
||||||
|
self.server_operation_variables = server_operation_variables or {}
|
||||||
|
"""Default server variables
|
||||||
|
"""
|
||||||
|
self.ignore_operation_servers = ignore_operation_servers
|
||||||
|
"""Ignore operation servers
|
||||||
|
"""
|
||||||
|
self.temp_folder_path = None
|
||||||
|
"""Temp file folder for downloading files
|
||||||
|
"""
|
||||||
|
# Authentication Settings
|
||||||
|
self.api_key = {}
|
||||||
|
if api_key:
|
||||||
|
self.api_key = api_key
|
||||||
|
"""dict to store API key(s)
|
||||||
|
"""
|
||||||
|
self.api_key_prefix = {}
|
||||||
|
if api_key_prefix:
|
||||||
|
self.api_key_prefix = api_key_prefix
|
||||||
|
"""dict to store API prefix (e.g. Bearer)
|
||||||
|
"""
|
||||||
|
self.refresh_api_key_hook = None
|
||||||
|
"""function hook to refresh API key if expired
|
||||||
|
"""
|
||||||
|
self.username = username
|
||||||
|
"""Username for HTTP basic authentication
|
||||||
|
"""
|
||||||
|
self.password = password
|
||||||
|
"""Password for HTTP basic authentication
|
||||||
|
"""
|
||||||
|
self.access_token = access_token
|
||||||
|
"""Access token
|
||||||
|
"""
|
||||||
|
self.logger = {}
|
||||||
|
"""Logging Settings
|
||||||
|
"""
|
||||||
|
self.logger["package_logger"] = logging.getLogger("openapi_client")
|
||||||
|
self.logger["urllib3_logger"] = logging.getLogger("urllib3")
|
||||||
|
self.logger_format = '%(asctime)s %(levelname)s %(message)s'
|
||||||
|
"""Log format
|
||||||
|
"""
|
||||||
|
self.logger_stream_handler = None
|
||||||
|
"""Log stream handler
|
||||||
|
"""
|
||||||
|
self.logger_file_handler: Optional[FileHandler] = None
|
||||||
|
"""Log file handler
|
||||||
|
"""
|
||||||
|
self.logger_file = None
|
||||||
|
"""Debug file location
|
||||||
|
"""
|
||||||
|
if debug is not None:
|
||||||
|
self.debug = debug
|
||||||
|
else:
|
||||||
|
self.__debug = False
|
||||||
|
"""Debug switch
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.verify_ssl = True
|
||||||
|
"""SSL/TLS verification
|
||||||
|
Set this to false to skip verifying SSL certificate when calling API
|
||||||
|
from https server.
|
||||||
|
"""
|
||||||
|
self.ssl_ca_cert = ssl_ca_cert
|
||||||
|
"""Set this to customize the certificate file to verify the peer.
|
||||||
|
"""
|
||||||
|
self.cert_file = None
|
||||||
|
"""client certificate file
|
||||||
|
"""
|
||||||
|
self.key_file = None
|
||||||
|
"""client key file
|
||||||
|
"""
|
||||||
|
self.assert_hostname = None
|
||||||
|
"""Set this to True/False to enable/disable SSL hostname verification.
|
||||||
|
"""
|
||||||
|
self.tls_server_name = None
|
||||||
|
"""SSL/TLS Server Name Indication (SNI)
|
||||||
|
Set this to the SNI value expected by the server.
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
|
||||||
|
"""urllib3 connection pool's maximum number of connections saved
|
||||||
|
per pool. urllib3 uses 1 connection as default value, but this is
|
||||||
|
not the best value when you are making a lot of possibly parallel
|
||||||
|
requests to the same host, which is often the case here.
|
||||||
|
cpu_count * 5 is used as default value to increase performance.
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.proxy: Optional[str] = None
|
||||||
|
"""Proxy URL
|
||||||
|
"""
|
||||||
|
self.proxy_headers = None
|
||||||
|
"""Proxy headers
|
||||||
|
"""
|
||||||
|
self.safe_chars_for_path_param = ''
|
||||||
|
"""Safe chars for path_param
|
||||||
|
"""
|
||||||
|
self.retries = retries
|
||||||
|
"""Adding retries to override urllib3 default value 3
|
||||||
|
"""
|
||||||
|
# Enable client side validation
|
||||||
|
self.client_side_validation = True
|
||||||
|
|
||||||
|
self.socket_options = None
|
||||||
|
"""Options to pass down to the underlying urllib3 socket
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z"
|
||||||
|
"""datetime format
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.date_format = "%Y-%m-%d"
|
||||||
|
"""date format
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
cls = self.__class__
|
||||||
|
result = cls.__new__(cls)
|
||||||
|
memo[id(self)] = result
|
||||||
|
for k, v in self.__dict__.items():
|
||||||
|
if k not in ('logger', 'logger_file_handler'):
|
||||||
|
setattr(result, k, copy.deepcopy(v, memo))
|
||||||
|
# shallow copy of loggers
|
||||||
|
result.logger = copy.copy(self.logger)
|
||||||
|
# use setters to configure loggers
|
||||||
|
result.logger_file = self.logger_file
|
||||||
|
result.debug = self.debug
|
||||||
|
return result
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
object.__setattr__(self, name, value)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def set_default(cls, default):
|
||||||
|
"""Set default instance of configuration.
|
||||||
|
|
||||||
|
It stores default configuration, which can be
|
||||||
|
returned by get_default_copy method.
|
||||||
|
|
||||||
|
:param default: object of Configuration
|
||||||
|
"""
|
||||||
|
cls._default = default
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_default_copy(cls):
|
||||||
|
"""Deprecated. Please use `get_default` instead.
|
||||||
|
|
||||||
|
Deprecated. Please use `get_default` instead.
|
||||||
|
|
||||||
|
:return: The configuration object.
|
||||||
|
"""
|
||||||
|
return cls.get_default()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_default(cls):
|
||||||
|
"""Return the default configuration.
|
||||||
|
|
||||||
|
This method returns newly created, based on default constructor,
|
||||||
|
object of Configuration class or returns a copy of default
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
:return: The configuration object.
|
||||||
|
"""
|
||||||
|
if cls._default is None:
|
||||||
|
cls._default = Configuration()
|
||||||
|
return cls._default
|
||||||
|
|
||||||
|
@property
|
||||||
|
def logger_file(self):
|
||||||
|
"""The logger file.
|
||||||
|
|
||||||
|
If the logger_file is None, then add stream handler and remove file
|
||||||
|
handler. Otherwise, add file handler and remove stream handler.
|
||||||
|
|
||||||
|
:param value: The logger_file path.
|
||||||
|
:type: str
|
||||||
|
"""
|
||||||
|
return self.__logger_file
|
||||||
|
|
||||||
|
@logger_file.setter
|
||||||
|
def logger_file(self, value):
|
||||||
|
"""The logger file.
|
||||||
|
|
||||||
|
If the logger_file is None, then add stream handler and remove file
|
||||||
|
handler. Otherwise, add file handler and remove stream handler.
|
||||||
|
|
||||||
|
:param value: The logger_file path.
|
||||||
|
:type: str
|
||||||
|
"""
|
||||||
|
self.__logger_file = value
|
||||||
|
if self.__logger_file:
|
||||||
|
# If set logging file,
|
||||||
|
# then add file handler and remove stream handler.
|
||||||
|
self.logger_file_handler = logging.FileHandler(self.__logger_file)
|
||||||
|
self.logger_file_handler.setFormatter(self.logger_formatter)
|
||||||
|
for _, logger in self.logger.items():
|
||||||
|
logger.addHandler(self.logger_file_handler)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def debug(self):
|
||||||
|
"""Debug status
|
||||||
|
|
||||||
|
:param value: The debug status, True or False.
|
||||||
|
:type: bool
|
||||||
|
"""
|
||||||
|
return self.__debug
|
||||||
|
|
||||||
|
@debug.setter
|
||||||
|
def debug(self, value):
|
||||||
|
"""Debug status
|
||||||
|
|
||||||
|
:param value: The debug status, True or False.
|
||||||
|
:type: bool
|
||||||
|
"""
|
||||||
|
self.__debug = value
|
||||||
|
if self.__debug:
|
||||||
|
# if debug status is True, turn on debug logging
|
||||||
|
for _, logger in self.logger.items():
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
# turn on httplib debug
|
||||||
|
httplib.HTTPConnection.debuglevel = 1
|
||||||
|
else:
|
||||||
|
# if debug status is False, turn off debug logging,
|
||||||
|
# setting log level to default `logging.WARNING`
|
||||||
|
for _, logger in self.logger.items():
|
||||||
|
logger.setLevel(logging.WARNING)
|
||||||
|
# turn off httplib debug
|
||||||
|
httplib.HTTPConnection.debuglevel = 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def logger_format(self):
|
||||||
|
"""The logger format.
|
||||||
|
|
||||||
|
The logger_formatter will be updated when sets logger_format.
|
||||||
|
|
||||||
|
:param value: The format string.
|
||||||
|
:type: str
|
||||||
|
"""
|
||||||
|
return self.__logger_format
|
||||||
|
|
||||||
|
@logger_format.setter
|
||||||
|
def logger_format(self, value):
|
||||||
|
"""The logger format.
|
||||||
|
|
||||||
|
The logger_formatter will be updated when sets logger_format.
|
||||||
|
|
||||||
|
:param value: The format string.
|
||||||
|
:type: str
|
||||||
|
"""
|
||||||
|
self.__logger_format = value
|
||||||
|
self.logger_formatter = logging.Formatter(self.__logger_format)
|
||||||
|
|
||||||
|
def get_api_key_with_prefix(self, identifier, alias=None):
|
||||||
|
"""Gets API key (with prefix if set).
|
||||||
|
|
||||||
|
:param identifier: The identifier of apiKey.
|
||||||
|
:param alias: The alternative identifier of apiKey.
|
||||||
|
:return: The token for api key authentication.
|
||||||
|
"""
|
||||||
|
if self.refresh_api_key_hook is not None:
|
||||||
|
self.refresh_api_key_hook(self)
|
||||||
|
key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None)
|
||||||
|
if key:
|
||||||
|
prefix = self.api_key_prefix.get(identifier)
|
||||||
|
if prefix:
|
||||||
|
return "%s %s" % (prefix, key)
|
||||||
|
else:
|
||||||
|
return key
|
||||||
|
|
||||||
|
def get_basic_auth_token(self):
|
||||||
|
"""Gets HTTP basic authentication header (string).
|
||||||
|
|
||||||
|
:return: The token for basic HTTP authentication.
|
||||||
|
"""
|
||||||
|
username = ""
|
||||||
|
if self.username is not None:
|
||||||
|
username = self.username
|
||||||
|
password = ""
|
||||||
|
if self.password is not None:
|
||||||
|
password = self.password
|
||||||
|
return urllib3.util.make_headers(
|
||||||
|
basic_auth=username + ':' + password
|
||||||
|
).get('authorization')
|
||||||
|
|
||||||
|
def auth_settings(self):
|
||||||
|
"""Gets Auth Settings dict for api client.
|
||||||
|
|
||||||
|
:return: The Auth Settings information dict.
|
||||||
|
"""
|
||||||
|
auth = {}
|
||||||
|
return auth
|
||||||
|
|
||||||
|
def to_debug_report(self):
|
||||||
|
"""Gets the essential information for debugging.
|
||||||
|
|
||||||
|
:return: The report for debugging.
|
||||||
|
"""
|
||||||
|
return "Python SDK Debug Report:\n"\
|
||||||
|
"OS: {env}\n"\
|
||||||
|
"Python Version: {pyversion}\n"\
|
||||||
|
"Version of the API: 1.0.0\n"\
|
||||||
|
"SDK Package Version: 1.0.0".\
|
||||||
|
format(env=sys.platform, pyversion=sys.version)
|
||||||
|
|
||||||
|
def get_host_settings(self):
|
||||||
|
"""Gets an array of host settings
|
||||||
|
|
||||||
|
:return: An array of host settings
|
||||||
|
"""
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'url': "",
|
||||||
|
'description': "No description provided",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_host_from_settings(self, index, variables=None, servers=None):
|
||||||
|
"""Gets host URL based on the index and variables
|
||||||
|
:param index: array index of the host settings
|
||||||
|
:param variables: hash of variable and the corresponding value
|
||||||
|
:param servers: an array of host settings or None
|
||||||
|
:return: URL based on host settings
|
||||||
|
"""
|
||||||
|
if index is None:
|
||||||
|
return self._base_path
|
||||||
|
|
||||||
|
variables = {} if variables is None else variables
|
||||||
|
servers = self.get_host_settings() if servers is None else servers
|
||||||
|
|
||||||
|
try:
|
||||||
|
server = servers[index]
|
||||||
|
except IndexError:
|
||||||
|
raise ValueError(
|
||||||
|
"Invalid index {0} when selecting the host settings. "
|
||||||
|
"Must be less than {1}".format(index, len(servers)))
|
||||||
|
|
||||||
|
url = server['url']
|
||||||
|
|
||||||
|
# go through variables and replace placeholders
|
||||||
|
for variable_name, variable in server.get('variables', {}).items():
|
||||||
|
used_value = variables.get(
|
||||||
|
variable_name, variable['default_value'])
|
||||||
|
|
||||||
|
if 'enum_values' in variable \
|
||||||
|
and used_value not in variable['enum_values']:
|
||||||
|
raise ValueError(
|
||||||
|
"The variable `{0}` in the host URL has invalid value "
|
||||||
|
"{1}. Must be {2}.".format(
|
||||||
|
variable_name, variables[variable_name],
|
||||||
|
variable['enum_values']))
|
||||||
|
|
||||||
|
url = url.replace("{" + variable_name + "}", used_value)
|
||||||
|
|
||||||
|
return url
|
||||||
|
|
||||||
|
@property
|
||||||
|
def host(self):
|
||||||
|
"""Return generated host."""
|
||||||
|
return self.get_host_from_settings(self.server_index, variables=self.server_variables)
|
||||||
|
|
||||||
|
@host.setter
|
||||||
|
def host(self, value):
|
||||||
|
"""Fix base path."""
|
||||||
|
self._base_path = value
|
||||||
|
self.server_index = None
|
||||||
|
|
@ -0,0 +1,199 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
from typing import Any, Optional
|
||||||
|
from typing_extensions import Self
|
||||||
|
|
||||||
|
class OpenApiException(Exception):
|
||||||
|
"""The base exception class for all OpenAPIExceptions"""
|
||||||
|
|
||||||
|
|
||||||
|
class ApiTypeError(OpenApiException, TypeError):
|
||||||
|
def __init__(self, msg, path_to_item=None, valid_classes=None,
|
||||||
|
key_type=None) -> None:
|
||||||
|
""" Raises an exception for TypeErrors
|
||||||
|
|
||||||
|
Args:
|
||||||
|
msg (str): the exception message
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
path_to_item (list): a list of keys an indices to get to the
|
||||||
|
current_item
|
||||||
|
None if unset
|
||||||
|
valid_classes (tuple): the primitive classes that current item
|
||||||
|
should be an instance of
|
||||||
|
None if unset
|
||||||
|
key_type (bool): False if our value is a value in a dict
|
||||||
|
True if it is a key in a dict
|
||||||
|
False if our item is an item in a list
|
||||||
|
None if unset
|
||||||
|
"""
|
||||||
|
self.path_to_item = path_to_item
|
||||||
|
self.valid_classes = valid_classes
|
||||||
|
self.key_type = key_type
|
||||||
|
full_msg = msg
|
||||||
|
if path_to_item:
|
||||||
|
full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
|
||||||
|
super(ApiTypeError, self).__init__(full_msg)
|
||||||
|
|
||||||
|
|
||||||
|
class ApiValueError(OpenApiException, ValueError):
|
||||||
|
def __init__(self, msg, path_to_item=None) -> None:
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
msg (str): the exception message
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
path_to_item (list) the path to the exception in the
|
||||||
|
received_data dict. None if unset
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.path_to_item = path_to_item
|
||||||
|
full_msg = msg
|
||||||
|
if path_to_item:
|
||||||
|
full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
|
||||||
|
super(ApiValueError, self).__init__(full_msg)
|
||||||
|
|
||||||
|
|
||||||
|
class ApiAttributeError(OpenApiException, AttributeError):
|
||||||
|
def __init__(self, msg, path_to_item=None) -> None:
|
||||||
|
"""
|
||||||
|
Raised when an attribute reference or assignment fails.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
msg (str): the exception message
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
path_to_item (None/list) the path to the exception in the
|
||||||
|
received_data dict
|
||||||
|
"""
|
||||||
|
self.path_to_item = path_to_item
|
||||||
|
full_msg = msg
|
||||||
|
if path_to_item:
|
||||||
|
full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
|
||||||
|
super(ApiAttributeError, self).__init__(full_msg)
|
||||||
|
|
||||||
|
|
||||||
|
class ApiKeyError(OpenApiException, KeyError):
|
||||||
|
def __init__(self, msg, path_to_item=None) -> None:
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
msg (str): the exception message
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
path_to_item (None/list) the path to the exception in the
|
||||||
|
received_data dict
|
||||||
|
"""
|
||||||
|
self.path_to_item = path_to_item
|
||||||
|
full_msg = msg
|
||||||
|
if path_to_item:
|
||||||
|
full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
|
||||||
|
super(ApiKeyError, self).__init__(full_msg)
|
||||||
|
|
||||||
|
|
||||||
|
class ApiException(OpenApiException):
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
status=None,
|
||||||
|
reason=None,
|
||||||
|
http_resp=None,
|
||||||
|
*,
|
||||||
|
body: Optional[str] = None,
|
||||||
|
data: Optional[Any] = None,
|
||||||
|
) -> None:
|
||||||
|
self.status = status
|
||||||
|
self.reason = reason
|
||||||
|
self.body = body
|
||||||
|
self.data = data
|
||||||
|
self.headers = None
|
||||||
|
|
||||||
|
if http_resp:
|
||||||
|
if self.status is None:
|
||||||
|
self.status = http_resp.status
|
||||||
|
if self.reason is None:
|
||||||
|
self.reason = http_resp.reason
|
||||||
|
if self.body is None:
|
||||||
|
try:
|
||||||
|
self.body = http_resp.data.decode('utf-8')
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
self.headers = http_resp.getheaders()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_response(
|
||||||
|
cls,
|
||||||
|
*,
|
||||||
|
http_resp,
|
||||||
|
body: Optional[str],
|
||||||
|
data: Optional[Any],
|
||||||
|
) -> Self:
|
||||||
|
if http_resp.status == 400:
|
||||||
|
raise BadRequestException(http_resp=http_resp, body=body, data=data)
|
||||||
|
|
||||||
|
if http_resp.status == 401:
|
||||||
|
raise UnauthorizedException(http_resp=http_resp, body=body, data=data)
|
||||||
|
|
||||||
|
if http_resp.status == 403:
|
||||||
|
raise ForbiddenException(http_resp=http_resp, body=body, data=data)
|
||||||
|
|
||||||
|
if http_resp.status == 404:
|
||||||
|
raise NotFoundException(http_resp=http_resp, body=body, data=data)
|
||||||
|
|
||||||
|
if 500 <= http_resp.status <= 599:
|
||||||
|
raise ServiceException(http_resp=http_resp, body=body, data=data)
|
||||||
|
raise ApiException(http_resp=http_resp, body=body, data=data)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
"""Custom error messages for exception"""
|
||||||
|
error_message = "({0})\n"\
|
||||||
|
"Reason: {1}\n".format(self.status, self.reason)
|
||||||
|
if self.headers:
|
||||||
|
error_message += "HTTP response headers: {0}\n".format(
|
||||||
|
self.headers)
|
||||||
|
|
||||||
|
if self.data or self.body:
|
||||||
|
error_message += "HTTP response body: {0}\n".format(self.data or self.body)
|
||||||
|
|
||||||
|
return error_message
|
||||||
|
|
||||||
|
|
||||||
|
class BadRequestException(ApiException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NotFoundException(ApiException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class UnauthorizedException(ApiException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ForbiddenException(ApiException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceException(ApiException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def render_path(path_to_item):
|
||||||
|
"""Returns a string representation of a path"""
|
||||||
|
result = ""
|
||||||
|
for pth in path_to_item:
|
||||||
|
if isinstance(pth, int):
|
||||||
|
result += "[{0}]".format(pth)
|
||||||
|
else:
|
||||||
|
result += "['{0}']".format(pth)
|
||||||
|
return result
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
# flake8: noqa
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
# import models into model package
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
from openapi_client.models.user import User
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
import pprint
|
||||||
|
import re # noqa: F401
|
||||||
|
import json
|
||||||
|
|
||||||
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
||||||
|
from typing import Any, ClassVar, Dict, List, Optional
|
||||||
|
from typing import Optional, Set
|
||||||
|
from typing_extensions import Self
|
||||||
|
|
||||||
|
class PatchNotes(BaseModel):
|
||||||
|
"""
|
||||||
|
PatchNotes
|
||||||
|
""" # noqa: E501
|
||||||
|
patch_id: Optional[StrictStr] = Field(default=None, alias="patchID")
|
||||||
|
title: Optional[StrictStr] = None
|
||||||
|
changes: Optional[StrictStr] = None
|
||||||
|
var_date: Optional[StrictStr] = Field(default=None, alias="date")
|
||||||
|
__properties: ClassVar[List[str]] = ["patchID", "title", "changes", "date"]
|
||||||
|
|
||||||
|
model_config = ConfigDict(
|
||||||
|
populate_by_name=True,
|
||||||
|
validate_assignment=True,
|
||||||
|
protected_namespaces=(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def to_str(self) -> str:
|
||||||
|
"""Returns the string representation of the model using alias"""
|
||||||
|
return pprint.pformat(self.model_dump(by_alias=True))
|
||||||
|
|
||||||
|
def to_json(self) -> str:
|
||||||
|
"""Returns the JSON representation of the model using alias"""
|
||||||
|
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
||||||
|
return json.dumps(self.to_dict())
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
||||||
|
"""Create an instance of PatchNotes from a JSON string"""
|
||||||
|
return cls.from_dict(json.loads(json_str))
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
"""Return the dictionary representation of the model using alias.
|
||||||
|
|
||||||
|
This has the following differences from calling pydantic's
|
||||||
|
`self.model_dump(by_alias=True)`:
|
||||||
|
|
||||||
|
* `None` is only added to the output dict for nullable fields that
|
||||||
|
were set at model initialization. Other fields with value `None`
|
||||||
|
are ignored.
|
||||||
|
"""
|
||||||
|
excluded_fields: Set[str] = set([
|
||||||
|
])
|
||||||
|
|
||||||
|
_dict = self.model_dump(
|
||||||
|
by_alias=True,
|
||||||
|
exclude=excluded_fields,
|
||||||
|
exclude_none=True,
|
||||||
|
)
|
||||||
|
return _dict
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||||
|
"""Create an instance of PatchNotes from a dict"""
|
||||||
|
if obj is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not isinstance(obj, dict):
|
||||||
|
return cls.model_validate(obj)
|
||||||
|
|
||||||
|
_obj = cls.model_validate({
|
||||||
|
"patchID": obj.get("patchID"),
|
||||||
|
"title": obj.get("title"),
|
||||||
|
"changes": obj.get("changes"),
|
||||||
|
"date": obj.get("date")
|
||||||
|
})
|
||||||
|
return _obj
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
import pprint
|
||||||
|
import re # noqa: F401
|
||||||
|
import json
|
||||||
|
|
||||||
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
||||||
|
from typing import Any, ClassVar, Dict, List, Optional
|
||||||
|
from typing import Optional, Set
|
||||||
|
from typing_extensions import Self
|
||||||
|
|
||||||
|
class User(BaseModel):
|
||||||
|
"""
|
||||||
|
User
|
||||||
|
""" # noqa: E501
|
||||||
|
last_note_checked: Optional[StrictStr] = Field(default=None, alias="lastNoteChecked")
|
||||||
|
__properties: ClassVar[List[str]] = ["lastNoteChecked"]
|
||||||
|
|
||||||
|
model_config = ConfigDict(
|
||||||
|
populate_by_name=True,
|
||||||
|
validate_assignment=True,
|
||||||
|
protected_namespaces=(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def to_str(self) -> str:
|
||||||
|
"""Returns the string representation of the model using alias"""
|
||||||
|
return pprint.pformat(self.model_dump(by_alias=True))
|
||||||
|
|
||||||
|
def to_json(self) -> str:
|
||||||
|
"""Returns the JSON representation of the model using alias"""
|
||||||
|
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
||||||
|
return json.dumps(self.to_dict())
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
||||||
|
"""Create an instance of User from a JSON string"""
|
||||||
|
return cls.from_dict(json.loads(json_str))
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
"""Return the dictionary representation of the model using alias.
|
||||||
|
|
||||||
|
This has the following differences from calling pydantic's
|
||||||
|
`self.model_dump(by_alias=True)`:
|
||||||
|
|
||||||
|
* `None` is only added to the output dict for nullable fields that
|
||||||
|
were set at model initialization. Other fields with value `None`
|
||||||
|
are ignored.
|
||||||
|
"""
|
||||||
|
excluded_fields: Set[str] = set([
|
||||||
|
])
|
||||||
|
|
||||||
|
_dict = self.model_dump(
|
||||||
|
by_alias=True,
|
||||||
|
exclude=excluded_fields,
|
||||||
|
exclude_none=True,
|
||||||
|
)
|
||||||
|
return _dict
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||||
|
"""Create an instance of User from a dict"""
|
||||||
|
if obj is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not isinstance(obj, dict):
|
||||||
|
return cls.model_validate(obj)
|
||||||
|
|
||||||
|
_obj = cls.model_validate({
|
||||||
|
"lastNoteChecked": obj.get("lastNoteChecked")
|
||||||
|
})
|
||||||
|
return _obj
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,257 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import io
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
import urllib3
|
||||||
|
|
||||||
|
from openapi_client.exceptions import ApiException, ApiValueError
|
||||||
|
|
||||||
|
SUPPORTED_SOCKS_PROXIES = {"socks5", "socks5h", "socks4", "socks4a"}
|
||||||
|
RESTResponseType = urllib3.HTTPResponse
|
||||||
|
|
||||||
|
|
||||||
|
def is_socks_proxy_url(url):
|
||||||
|
if url is None:
|
||||||
|
return False
|
||||||
|
split_section = url.split("://")
|
||||||
|
if len(split_section) < 2:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return split_section[0].lower() in SUPPORTED_SOCKS_PROXIES
|
||||||
|
|
||||||
|
|
||||||
|
class RESTResponse(io.IOBase):
|
||||||
|
|
||||||
|
def __init__(self, resp) -> None:
|
||||||
|
self.response = resp
|
||||||
|
self.status = resp.status
|
||||||
|
self.reason = resp.reason
|
||||||
|
self.data = None
|
||||||
|
|
||||||
|
def read(self):
|
||||||
|
if self.data is None:
|
||||||
|
self.data = self.response.data
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
def getheaders(self):
|
||||||
|
"""Returns a dictionary of the response headers."""
|
||||||
|
return self.response.headers
|
||||||
|
|
||||||
|
def getheader(self, name, default=None):
|
||||||
|
"""Returns a given response header."""
|
||||||
|
return self.response.headers.get(name, default)
|
||||||
|
|
||||||
|
|
||||||
|
class RESTClientObject:
|
||||||
|
|
||||||
|
def __init__(self, configuration) -> None:
|
||||||
|
# urllib3.PoolManager will pass all kw parameters to connectionpool
|
||||||
|
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
|
||||||
|
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
|
||||||
|
# Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
|
||||||
|
|
||||||
|
# cert_reqs
|
||||||
|
if configuration.verify_ssl:
|
||||||
|
cert_reqs = ssl.CERT_REQUIRED
|
||||||
|
else:
|
||||||
|
cert_reqs = ssl.CERT_NONE
|
||||||
|
|
||||||
|
pool_args = {
|
||||||
|
"cert_reqs": cert_reqs,
|
||||||
|
"ca_certs": configuration.ssl_ca_cert,
|
||||||
|
"cert_file": configuration.cert_file,
|
||||||
|
"key_file": configuration.key_file,
|
||||||
|
}
|
||||||
|
if configuration.assert_hostname is not None:
|
||||||
|
pool_args['assert_hostname'] = (
|
||||||
|
configuration.assert_hostname
|
||||||
|
)
|
||||||
|
|
||||||
|
if configuration.retries is not None:
|
||||||
|
pool_args['retries'] = configuration.retries
|
||||||
|
|
||||||
|
if configuration.tls_server_name:
|
||||||
|
pool_args['server_hostname'] = configuration.tls_server_name
|
||||||
|
|
||||||
|
|
||||||
|
if configuration.socket_options is not None:
|
||||||
|
pool_args['socket_options'] = configuration.socket_options
|
||||||
|
|
||||||
|
if configuration.connection_pool_maxsize is not None:
|
||||||
|
pool_args['maxsize'] = configuration.connection_pool_maxsize
|
||||||
|
|
||||||
|
# https pool manager
|
||||||
|
self.pool_manager: urllib3.PoolManager
|
||||||
|
|
||||||
|
if configuration.proxy:
|
||||||
|
if is_socks_proxy_url(configuration.proxy):
|
||||||
|
from urllib3.contrib.socks import SOCKSProxyManager
|
||||||
|
pool_args["proxy_url"] = configuration.proxy
|
||||||
|
pool_args["headers"] = configuration.proxy_headers
|
||||||
|
self.pool_manager = SOCKSProxyManager(**pool_args)
|
||||||
|
else:
|
||||||
|
pool_args["proxy_url"] = configuration.proxy
|
||||||
|
pool_args["proxy_headers"] = configuration.proxy_headers
|
||||||
|
self.pool_manager = urllib3.ProxyManager(**pool_args)
|
||||||
|
else:
|
||||||
|
self.pool_manager = urllib3.PoolManager(**pool_args)
|
||||||
|
|
||||||
|
def request(
|
||||||
|
self,
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
headers=None,
|
||||||
|
body=None,
|
||||||
|
post_params=None,
|
||||||
|
_request_timeout=None
|
||||||
|
):
|
||||||
|
"""Perform requests.
|
||||||
|
|
||||||
|
:param method: http request method
|
||||||
|
:param url: http request url
|
||||||
|
:param headers: http request headers
|
||||||
|
:param body: request json body, for `application/json`
|
||||||
|
:param post_params: request post parameters,
|
||||||
|
`application/x-www-form-urlencoded`
|
||||||
|
and `multipart/form-data`
|
||||||
|
:param _request_timeout: timeout setting for this request. If one
|
||||||
|
number provided, it will be total request
|
||||||
|
timeout. It can also be a pair (tuple) of
|
||||||
|
(connection, read) timeouts.
|
||||||
|
"""
|
||||||
|
method = method.upper()
|
||||||
|
assert method in [
|
||||||
|
'GET',
|
||||||
|
'HEAD',
|
||||||
|
'DELETE',
|
||||||
|
'POST',
|
||||||
|
'PUT',
|
||||||
|
'PATCH',
|
||||||
|
'OPTIONS'
|
||||||
|
]
|
||||||
|
|
||||||
|
if post_params and body:
|
||||||
|
raise ApiValueError(
|
||||||
|
"body parameter cannot be used with post_params parameter."
|
||||||
|
)
|
||||||
|
|
||||||
|
post_params = post_params or {}
|
||||||
|
headers = headers or {}
|
||||||
|
|
||||||
|
timeout = None
|
||||||
|
if _request_timeout:
|
||||||
|
if isinstance(_request_timeout, (int, float)):
|
||||||
|
timeout = urllib3.Timeout(total=_request_timeout)
|
||||||
|
elif (
|
||||||
|
isinstance(_request_timeout, tuple)
|
||||||
|
and len(_request_timeout) == 2
|
||||||
|
):
|
||||||
|
timeout = urllib3.Timeout(
|
||||||
|
connect=_request_timeout[0],
|
||||||
|
read=_request_timeout[1]
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
|
||||||
|
if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
|
||||||
|
|
||||||
|
# no content type provided or payload is json
|
||||||
|
content_type = headers.get('Content-Type')
|
||||||
|
if (
|
||||||
|
not content_type
|
||||||
|
or re.search('json', content_type, re.IGNORECASE)
|
||||||
|
):
|
||||||
|
request_body = None
|
||||||
|
if body is not None:
|
||||||
|
request_body = json.dumps(body)
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
body=request_body,
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers,
|
||||||
|
preload_content=False
|
||||||
|
)
|
||||||
|
elif content_type == 'application/x-www-form-urlencoded':
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
fields=post_params,
|
||||||
|
encode_multipart=False,
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers,
|
||||||
|
preload_content=False
|
||||||
|
)
|
||||||
|
elif content_type == 'multipart/form-data':
|
||||||
|
# must del headers['Content-Type'], or the correct
|
||||||
|
# Content-Type which generated by urllib3 will be
|
||||||
|
# overwritten.
|
||||||
|
del headers['Content-Type']
|
||||||
|
# Ensures that dict objects are serialized
|
||||||
|
post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a,b) for a, b in post_params]
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
fields=post_params,
|
||||||
|
encode_multipart=True,
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers,
|
||||||
|
preload_content=False
|
||||||
|
)
|
||||||
|
# Pass a `string` parameter directly in the body to support
|
||||||
|
# other content types than JSON when `body` argument is
|
||||||
|
# provided in serialized form.
|
||||||
|
elif isinstance(body, str) or isinstance(body, bytes):
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
body=body,
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers,
|
||||||
|
preload_content=False
|
||||||
|
)
|
||||||
|
elif headers['Content-Type'] == 'text/plain' and isinstance(body, bool):
|
||||||
|
request_body = "true" if body else "false"
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
body=request_body,
|
||||||
|
preload_content=False,
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers)
|
||||||
|
else:
|
||||||
|
# Cannot generate the request from given parameters
|
||||||
|
msg = """Cannot prepare a request message for provided
|
||||||
|
arguments. Please check that your arguments match
|
||||||
|
declared content type."""
|
||||||
|
raise ApiException(status=0, reason=msg)
|
||||||
|
# For `GET`, `HEAD`
|
||||||
|
else:
|
||||||
|
r = self.pool_manager.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
fields={},
|
||||||
|
timeout=timeout,
|
||||||
|
headers=headers,
|
||||||
|
preload_content=False
|
||||||
|
)
|
||||||
|
except urllib3.exceptions.SSLError as e:
|
||||||
|
msg = "\n".join([type(e).__name__, str(e)])
|
||||||
|
raise ApiException(status=0, reason=msg)
|
||||||
|
|
||||||
|
return RESTResponse(r)
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import connexion
|
||||||
|
|
||||||
|
from openapi_server import encoder
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app = connexion.App(__name__, specification_dir='./openapi/')
|
||||||
|
app.app.json_encoder = encoder.JSONEncoder
|
||||||
|
app.add_api('openapi.yaml',
|
||||||
|
base_path='/api',
|
||||||
|
arguments={'title': 'announcementService'},
|
||||||
|
pythonic_params=True)
|
||||||
|
|
||||||
|
app.run(port=8080)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
import connexion
|
||||||
|
from typing import Dict
|
||||||
|
from typing import Tuple
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from openapi_server.models.patch_notes import PatchNotes # noqa: E501
|
||||||
|
from openapi_server import util
|
||||||
|
|
||||||
|
|
||||||
|
def get_patchnotes(): # noqa: E501
|
||||||
|
"""get_patchnotes
|
||||||
|
|
||||||
|
returns list of all unseen Patch notes from the user # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
:rtype: Union[List[PatchNotes], Tuple[List[PatchNotes], int], Tuple[List[PatchNotes], int, Dict[str, str]]
|
||||||
|
"""
|
||||||
|
return 'do some magic!'
|
||||||
|
|
||||||
|
|
||||||
|
def patch_note_delete(patch_id): # noqa: E501
|
||||||
|
"""patch_note_delete
|
||||||
|
|
||||||
|
deletes one Patch note # noqa: E501
|
||||||
|
|
||||||
|
:param patch_id:
|
||||||
|
:type patch_id: str
|
||||||
|
:type patch_id: str
|
||||||
|
|
||||||
|
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
|
||||||
|
"""
|
||||||
|
return 'do some magic!'
|
||||||
|
|
||||||
|
|
||||||
|
def post_patchnotes(body=None): # noqa: E501
|
||||||
|
"""post_patchnotes
|
||||||
|
|
||||||
|
creates new Patch notes # noqa: E501
|
||||||
|
|
||||||
|
:param patch_notes:
|
||||||
|
:type patch_notes: dict | bytes
|
||||||
|
|
||||||
|
:rtype: Union[List[PatchNotes], Tuple[List[PatchNotes], int], Tuple[List[PatchNotes], int, Dict[str, str]]
|
||||||
|
"""
|
||||||
|
patch_notes = body
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
player_name = player_post_request.name
|
||||||
|
player_id = uuid.uuid4()
|
||||||
|
cur.execute(f"INSERT INTO player VALUES ('{player_id}','{player_name}');")
|
||||||
|
conn.commit() # noqa: E501
|
||||||
|
return 'do some magic!'
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
from connexion.apps.flask_app import FlaskJSONEncoder
|
||||||
|
|
||||||
|
from openapi_server.models.base_model import Model
|
||||||
|
|
||||||
|
|
||||||
|
class JSONEncoder(FlaskJSONEncoder):
|
||||||
|
include_nulls = False
|
||||||
|
|
||||||
|
def default(self, o):
|
||||||
|
if isinstance(o, Model):
|
||||||
|
dikt = {}
|
||||||
|
for attr in o.openapi_types:
|
||||||
|
value = getattr(o, attr)
|
||||||
|
if value is None and not self.include_nulls:
|
||||||
|
continue
|
||||||
|
attr = o.attribute_map[attr]
|
||||||
|
dikt[attr] = value
|
||||||
|
return dikt
|
||||||
|
return FlaskJSONEncoder.default(self, o)
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
# flake8: noqa
|
||||||
|
# import models into model package
|
||||||
|
from openapi_server.models.patch_notes import PatchNotes
|
||||||
|
from openapi_server.models.user import User
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
import typing
|
||||||
|
|
||||||
|
from openapi_server import util
|
||||||
|
|
||||||
|
T = typing.TypeVar('T')
|
||||||
|
|
||||||
|
|
||||||
|
class Model:
|
||||||
|
# openapiTypes: The key is attribute name and the
|
||||||
|
# value is attribute type.
|
||||||
|
openapi_types: typing.Dict[str, type] = {}
|
||||||
|
|
||||||
|
# attributeMap: The key is attribute name and the
|
||||||
|
# value is json key in definition.
|
||||||
|
attribute_map: typing.Dict[str, str] = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls: typing.Type[T], dikt) -> T:
|
||||||
|
"""Returns the dict as a model"""
|
||||||
|
return util.deserialize_model(dikt, cls)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
"""Returns the model properties as a dict
|
||||||
|
|
||||||
|
:rtype: dict
|
||||||
|
"""
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for attr in self.openapi_types:
|
||||||
|
value = getattr(self, attr)
|
||||||
|
if isinstance(value, list):
|
||||||
|
result[attr] = list(map(
|
||||||
|
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
||||||
|
value
|
||||||
|
))
|
||||||
|
elif hasattr(value, "to_dict"):
|
||||||
|
result[attr] = value.to_dict()
|
||||||
|
elif isinstance(value, dict):
|
||||||
|
result[attr] = dict(map(
|
||||||
|
lambda item: (item[0], item[1].to_dict())
|
||||||
|
if hasattr(item[1], "to_dict") else item,
|
||||||
|
value.items()
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
result[attr] = value
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def to_str(self):
|
||||||
|
"""Returns the string representation of the model
|
||||||
|
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return pprint.pformat(self.to_dict())
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
"""For `print` and `pprint`"""
|
||||||
|
return self.to_str()
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
"""Returns true if both objects are equal"""
|
||||||
|
return self.__dict__ == other.__dict__
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
"""Returns true if both objects are not equal"""
|
||||||
|
return not self == other
|
||||||
|
|
@ -0,0 +1,139 @@
|
||||||
|
from datetime import date, datetime # noqa: F401
|
||||||
|
|
||||||
|
from typing import List, Dict # noqa: F401
|
||||||
|
|
||||||
|
from openapi_server.models.base_model import Model
|
||||||
|
from openapi_server import util
|
||||||
|
|
||||||
|
|
||||||
|
class PatchNotes(Model):
|
||||||
|
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, patch_id=None, title=None, changes=None, _date=None): # noqa: E501
|
||||||
|
"""PatchNotes - a model defined in OpenAPI
|
||||||
|
|
||||||
|
:param patch_id: The patch_id of this PatchNotes. # noqa: E501
|
||||||
|
:type patch_id: str
|
||||||
|
:param title: The title of this PatchNotes. # noqa: E501
|
||||||
|
:type title: str
|
||||||
|
:param changes: The changes of this PatchNotes. # noqa: E501
|
||||||
|
:type changes: str
|
||||||
|
:param _date: The _date of this PatchNotes. # noqa: E501
|
||||||
|
:type _date: str
|
||||||
|
"""
|
||||||
|
self.openapi_types = {
|
||||||
|
'patch_id': str,
|
||||||
|
'title': str,
|
||||||
|
'changes': str,
|
||||||
|
'_date': str
|
||||||
|
}
|
||||||
|
|
||||||
|
self.attribute_map = {
|
||||||
|
'patch_id': 'patchID',
|
||||||
|
'title': 'title',
|
||||||
|
'changes': 'changes',
|
||||||
|
'_date': 'date'
|
||||||
|
}
|
||||||
|
|
||||||
|
self._patch_id = patch_id
|
||||||
|
self._title = title
|
||||||
|
self._changes = changes
|
||||||
|
self.__date = _date
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, dikt) -> 'PatchNotes':
|
||||||
|
"""Returns the dict as a model
|
||||||
|
|
||||||
|
:param dikt: A dict.
|
||||||
|
:type: dict
|
||||||
|
:return: The patch_notes of this PatchNotes. # noqa: E501
|
||||||
|
:rtype: PatchNotes
|
||||||
|
"""
|
||||||
|
return util.deserialize_model(dikt, cls)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def patch_id(self) -> str:
|
||||||
|
"""Gets the patch_id of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:return: The patch_id of this PatchNotes.
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self._patch_id
|
||||||
|
|
||||||
|
@patch_id.setter
|
||||||
|
def patch_id(self, patch_id: str):
|
||||||
|
"""Sets the patch_id of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:param patch_id: The patch_id of this PatchNotes.
|
||||||
|
:type patch_id: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
self._patch_id = patch_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title(self) -> str:
|
||||||
|
"""Gets the title of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:return: The title of this PatchNotes.
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self._title
|
||||||
|
|
||||||
|
@title.setter
|
||||||
|
def title(self, title: str):
|
||||||
|
"""Sets the title of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:param title: The title of this PatchNotes.
|
||||||
|
:type title: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
self._title = title
|
||||||
|
|
||||||
|
@property
|
||||||
|
def changes(self) -> str:
|
||||||
|
"""Gets the changes of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:return: The changes of this PatchNotes.
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self._changes
|
||||||
|
|
||||||
|
@changes.setter
|
||||||
|
def changes(self, changes: str):
|
||||||
|
"""Sets the changes of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:param changes: The changes of this PatchNotes.
|
||||||
|
:type changes: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
self._changes = changes
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _date(self) -> str:
|
||||||
|
"""Gets the _date of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:return: The _date of this PatchNotes.
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self.__date
|
||||||
|
|
||||||
|
@_date.setter
|
||||||
|
def _date(self, _date: str):
|
||||||
|
"""Sets the _date of this PatchNotes.
|
||||||
|
|
||||||
|
|
||||||
|
:param _date: The _date of this PatchNotes.
|
||||||
|
:type _date: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.__date = _date
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
from datetime import date, datetime # noqa: F401
|
||||||
|
|
||||||
|
from typing import List, Dict # noqa: F401
|
||||||
|
|
||||||
|
from openapi_server.models.base_model import Model
|
||||||
|
from openapi_server import util
|
||||||
|
|
||||||
|
|
||||||
|
class User(Model):
|
||||||
|
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, last_note_checked=None): # noqa: E501
|
||||||
|
"""User - a model defined in OpenAPI
|
||||||
|
|
||||||
|
:param last_note_checked: The last_note_checked of this User. # noqa: E501
|
||||||
|
:type last_note_checked: str
|
||||||
|
"""
|
||||||
|
self.openapi_types = {
|
||||||
|
'last_note_checked': str
|
||||||
|
}
|
||||||
|
|
||||||
|
self.attribute_map = {
|
||||||
|
'last_note_checked': 'lastNoteChecked'
|
||||||
|
}
|
||||||
|
|
||||||
|
self._last_note_checked = last_note_checked
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, dikt) -> 'User':
|
||||||
|
"""Returns the dict as a model
|
||||||
|
|
||||||
|
:param dikt: A dict.
|
||||||
|
:type: dict
|
||||||
|
:return: The user of this User. # noqa: E501
|
||||||
|
:rtype: User
|
||||||
|
"""
|
||||||
|
return util.deserialize_model(dikt, cls)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def last_note_checked(self) -> str:
|
||||||
|
"""Gets the last_note_checked of this User.
|
||||||
|
|
||||||
|
|
||||||
|
:return: The last_note_checked of this User.
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self._last_note_checked
|
||||||
|
|
||||||
|
@last_note_checked.setter
|
||||||
|
def last_note_checked(self, last_note_checked: str):
|
||||||
|
"""Sets the last_note_checked of this User.
|
||||||
|
|
||||||
|
|
||||||
|
:param last_note_checked: The last_note_checked of this User.
|
||||||
|
:type last_note_checked: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
self._last_note_checked = last_note_checked
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
openapi: 3.0.3
|
||||||
|
info:
|
||||||
|
description: Announcing patchnotes for KanzleiApp
|
||||||
|
title: announcementService
|
||||||
|
version: 1.0.0
|
||||||
|
servers:
|
||||||
|
- url: /
|
||||||
|
paths:
|
||||||
|
/patchnotes:
|
||||||
|
get:
|
||||||
|
description: returns list of all unseen Patch notes from the user
|
||||||
|
operationId: get_patchnotes
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
type: array
|
||||||
|
description: returns list of all unseen Patch notes from the user
|
||||||
|
"404":
|
||||||
|
description: no Patch notes found
|
||||||
|
"500":
|
||||||
|
description: "Internal Server error, Failed to get Patch Notes"
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
x-openapi-router-controller: openapi_server.controllers.patchnotes_controller
|
||||||
|
post:
|
||||||
|
description: creates new Patch notes
|
||||||
|
operationId: post_patchnotes
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/patch_notes'
|
||||||
|
type: array
|
||||||
|
description: game created
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
x-openapi-router-controller: openapi_server.controllers.patchnotes_controller
|
||||||
|
/patchnotes/{patchID}:
|
||||||
|
delete:
|
||||||
|
description: deletes one Patch note
|
||||||
|
operationId: patch_note_delete
|
||||||
|
parameters:
|
||||||
|
- explode: false
|
||||||
|
in: path
|
||||||
|
name: patchID
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
format: uuid
|
||||||
|
type: string
|
||||||
|
style: simple
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: patch successfully deleted
|
||||||
|
"404":
|
||||||
|
description: patch not found
|
||||||
|
"500":
|
||||||
|
description: "Internal Server Error, Patch not deleted"
|
||||||
|
tags:
|
||||||
|
- Patchnotes
|
||||||
|
x-openapi-router-controller: openapi_server.controllers.patchnotes_controller
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
patch_notes:
|
||||||
|
example:
|
||||||
|
patchID: 29e80bcc-5981-4a52-99e1-373442dea9b9
|
||||||
|
title: Patch note 1
|
||||||
|
changes: changes
|
||||||
|
date: date
|
||||||
|
properties:
|
||||||
|
patchID:
|
||||||
|
format: uuid
|
||||||
|
title: patchID
|
||||||
|
type: string
|
||||||
|
title:
|
||||||
|
title: title
|
||||||
|
type: string
|
||||||
|
changes:
|
||||||
|
title: changes
|
||||||
|
type: string
|
||||||
|
date:
|
||||||
|
title: date
|
||||||
|
type: string
|
||||||
|
title: patch_notes
|
||||||
|
user:
|
||||||
|
example:
|
||||||
|
lastNoteChecked: f00fa08d-0cd8-4c05-9409-5e75aa2d4f68
|
||||||
|
properties:
|
||||||
|
lastNoteChecked:
|
||||||
|
format: uuid
|
||||||
|
title: lastNoteChecked
|
||||||
|
type: string
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import connexion
|
||||||
|
from flask_testing import TestCase
|
||||||
|
|
||||||
|
from openapi_server.encoder import JSONEncoder
|
||||||
|
|
||||||
|
|
||||||
|
class BaseTestCase(TestCase):
|
||||||
|
|
||||||
|
def create_app(self):
|
||||||
|
logging.getLogger('connexion.operation').setLevel('ERROR')
|
||||||
|
app = connexion.App(__name__, specification_dir='../openapi/')
|
||||||
|
app.app.json_encoder = JSONEncoder
|
||||||
|
app.add_api('openapi.yaml', pythonic_params=True)
|
||||||
|
return app.app
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from flask import json
|
||||||
|
|
||||||
|
from openapi_server.models.patch_notes import PatchNotes # noqa: E501
|
||||||
|
from openapi_server.test import BaseTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestDefaultController(BaseTestCase):
|
||||||
|
"""DefaultController integration test stubs"""
|
||||||
|
|
||||||
|
def test_get_patchnotes(self):
|
||||||
|
"""Test case for get_patchnotes
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes',
|
||||||
|
method='GET',
|
||||||
|
headers=headers)
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
def test_patch_note_delete(self):
|
||||||
|
"""Test case for patch_note_delete
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
headers = {
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes/{patch_id}'.format(patch_id='patch_id_example'),
|
||||||
|
method='DELETE',
|
||||||
|
headers=headers)
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
def test_post_patchnotes(self):
|
||||||
|
"""Test case for post_patchnotes
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
patch_notes = openapi_server.PatchNotes()
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes',
|
||||||
|
method='POST',
|
||||||
|
headers=headers,
|
||||||
|
data=json.dumps(patch_notes),
|
||||||
|
content_type='application/json')
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from flask import json
|
||||||
|
|
||||||
|
import openapi_server
|
||||||
|
from openapi_server.models.patch_notes import PatchNotes # noqa: E501
|
||||||
|
from openapi_server.test import BaseTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestPatchnotesController(BaseTestCase):
|
||||||
|
"""PatchnotesController integration test stubs"""
|
||||||
|
|
||||||
|
def test_get_patchnotes(self):
|
||||||
|
"""Test case for get_patchnotes
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes',
|
||||||
|
method='GET',
|
||||||
|
headers=headers)
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
def test_patch_note_delete(self):
|
||||||
|
"""Test case for patch_note_delete
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
headers = {
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes/{patch_id}'.format(patch_id='patch_id_example'),
|
||||||
|
method='DELETE',
|
||||||
|
headers=headers)
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
def test_post_patchnotes(self):
|
||||||
|
"""Test case for post_patchnotes
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
patch_notes = openapi_server.PatchNotes()
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
}
|
||||||
|
response = self.client.open(
|
||||||
|
'/patchnotes',
|
||||||
|
method='POST',
|
||||||
|
headers=headers,
|
||||||
|
data=json.dumps(patch_notes),
|
||||||
|
content_type='application/json')
|
||||||
|
self.assert200(response,
|
||||||
|
'Response body is : ' + response.data.decode('utf-8'))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info < (3, 7):
|
||||||
|
import typing
|
||||||
|
|
||||||
|
def is_generic(klass):
|
||||||
|
""" Determine whether klass is a generic class """
|
||||||
|
return type(klass) == typing.GenericMeta
|
||||||
|
|
||||||
|
def is_dict(klass):
|
||||||
|
""" Determine whether klass is a Dict """
|
||||||
|
return klass.__extra__ == dict
|
||||||
|
|
||||||
|
def is_list(klass):
|
||||||
|
""" Determine whether klass is a List """
|
||||||
|
return klass.__extra__ == list
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
def is_generic(klass):
|
||||||
|
""" Determine whether klass is a generic class """
|
||||||
|
return hasattr(klass, '__origin__')
|
||||||
|
|
||||||
|
def is_dict(klass):
|
||||||
|
""" Determine whether klass is a Dict """
|
||||||
|
return klass.__origin__ == dict
|
||||||
|
|
||||||
|
def is_list(klass):
|
||||||
|
""" Determine whether klass is a List """
|
||||||
|
return klass.__origin__ == list
|
||||||
|
|
@ -0,0 +1,147 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import typing
|
||||||
|
from openapi_server import typing_utils
|
||||||
|
|
||||||
|
|
||||||
|
def _deserialize(data, klass):
|
||||||
|
"""Deserializes dict, list, str into an object.
|
||||||
|
|
||||||
|
:param data: dict, list or str.
|
||||||
|
:param klass: class literal, or string of class name.
|
||||||
|
|
||||||
|
:return: object.
|
||||||
|
"""
|
||||||
|
if data is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if klass in (int, float, str, bool, bytearray):
|
||||||
|
return _deserialize_primitive(data, klass)
|
||||||
|
elif klass == object:
|
||||||
|
return _deserialize_object(data)
|
||||||
|
elif klass == datetime.date:
|
||||||
|
return deserialize_date(data)
|
||||||
|
elif klass == datetime.datetime:
|
||||||
|
return deserialize_datetime(data)
|
||||||
|
elif typing_utils.is_generic(klass):
|
||||||
|
if typing_utils.is_list(klass):
|
||||||
|
return _deserialize_list(data, klass.__args__[0])
|
||||||
|
if typing_utils.is_dict(klass):
|
||||||
|
return _deserialize_dict(data, klass.__args__[1])
|
||||||
|
else:
|
||||||
|
return deserialize_model(data, klass)
|
||||||
|
|
||||||
|
|
||||||
|
def _deserialize_primitive(data, klass):
|
||||||
|
"""Deserializes to primitive type.
|
||||||
|
|
||||||
|
:param data: data to deserialize.
|
||||||
|
:param klass: class literal.
|
||||||
|
|
||||||
|
:return: int, long, float, str, bool.
|
||||||
|
:rtype: int | long | float | str | bool
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
value = klass(data)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
value = data
|
||||||
|
except TypeError:
|
||||||
|
value = data
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def _deserialize_object(value):
|
||||||
|
"""Return an original value.
|
||||||
|
|
||||||
|
:return: object.
|
||||||
|
"""
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def deserialize_date(string):
|
||||||
|
"""Deserializes string to date.
|
||||||
|
|
||||||
|
:param string: str.
|
||||||
|
:type string: str
|
||||||
|
:return: date.
|
||||||
|
:rtype: date
|
||||||
|
"""
|
||||||
|
if string is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from dateutil.parser import parse
|
||||||
|
return parse(string).date()
|
||||||
|
except ImportError:
|
||||||
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
def deserialize_datetime(string):
|
||||||
|
"""Deserializes string to datetime.
|
||||||
|
|
||||||
|
The string should be in iso8601 datetime format.
|
||||||
|
|
||||||
|
:param string: str.
|
||||||
|
:type string: str
|
||||||
|
:return: datetime.
|
||||||
|
:rtype: datetime
|
||||||
|
"""
|
||||||
|
if string is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from dateutil.parser import parse
|
||||||
|
return parse(string)
|
||||||
|
except ImportError:
|
||||||
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
def deserialize_model(data, klass):
|
||||||
|
"""Deserializes list or dict to model.
|
||||||
|
|
||||||
|
:param data: dict, list.
|
||||||
|
:type data: dict | list
|
||||||
|
:param klass: class literal.
|
||||||
|
:return: model object.
|
||||||
|
"""
|
||||||
|
instance = klass()
|
||||||
|
|
||||||
|
if not instance.openapi_types:
|
||||||
|
return data
|
||||||
|
|
||||||
|
for attr, attr_type in instance.openapi_types.items():
|
||||||
|
if data is not None \
|
||||||
|
and instance.attribute_map[attr] in data \
|
||||||
|
and isinstance(data, (list, dict)):
|
||||||
|
value = data[instance.attribute_map[attr]]
|
||||||
|
setattr(instance, attr, _deserialize(value, attr_type))
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
def _deserialize_list(data, boxed_type):
|
||||||
|
"""Deserializes a list and its elements.
|
||||||
|
|
||||||
|
:param data: list to deserialize.
|
||||||
|
:type data: list
|
||||||
|
:param boxed_type: class literal.
|
||||||
|
|
||||||
|
:return: deserialized list.
|
||||||
|
:rtype: list
|
||||||
|
"""
|
||||||
|
return [_deserialize(sub_data, boxed_type)
|
||||||
|
for sub_data in data]
|
||||||
|
|
||||||
|
|
||||||
|
def _deserialize_dict(data, boxed_type):
|
||||||
|
"""Deserializes a dict and its elements.
|
||||||
|
|
||||||
|
:param data: dict to deserialize.
|
||||||
|
:type data: dict
|
||||||
|
:param boxed_type: class literal.
|
||||||
|
|
||||||
|
:return: deserialized dict.
|
||||||
|
:rtype: dict
|
||||||
|
"""
|
||||||
|
return {k: _deserialize(v, boxed_type)
|
||||||
|
for k, v in data.items() }
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "openapi_client"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "announcementService"
|
||||||
|
authors = ["OpenAPI Generator Community <team@openapitools.org>"]
|
||||||
|
license = "NoLicense"
|
||||||
|
readme = "README.md"
|
||||||
|
repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID"
|
||||||
|
keywords = ["OpenAPI", "OpenAPI-Generator", "announcementService"]
|
||||||
|
include = ["openapi_client/py.typed"]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.7"
|
||||||
|
|
||||||
|
urllib3 = ">= 1.25.3"
|
||||||
|
python-dateutil = ">=2.8.2"
|
||||||
|
pydantic = ">=2"
|
||||||
|
typing-extensions = ">=4.7.1"
|
||||||
|
|
||||||
|
[tool.poetry.dev-dependencies]
|
||||||
|
pytest = ">=7.2.1"
|
||||||
|
tox = ">=3.9.0"
|
||||||
|
flake8 = ">=4.0.0"
|
||||||
|
types-python-dateutil = ">=2.8.19.14"
|
||||||
|
mypy = "1.4.1"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[tool.pylint.'MESSAGES CONTROL']
|
||||||
|
extension-pkg-whitelist = "pydantic"
|
||||||
|
|
||||||
|
[tool.mypy]
|
||||||
|
files = [
|
||||||
|
"openapi_client",
|
||||||
|
#"test", # auto-generated tests
|
||||||
|
"tests", # hand-written tests
|
||||||
|
]
|
||||||
|
# TODO: enable "strict" once all these individual checks are passing
|
||||||
|
# strict = true
|
||||||
|
|
||||||
|
# List from: https://mypy.readthedocs.io/en/stable/existing_code.html#introduce-stricter-options
|
||||||
|
warn_unused_configs = true
|
||||||
|
warn_redundant_casts = true
|
||||||
|
warn_unused_ignores = true
|
||||||
|
|
||||||
|
## Getting these passing should be easy
|
||||||
|
strict_equality = true
|
||||||
|
strict_concatenate = true
|
||||||
|
|
||||||
|
## Strongly recommend enabling this one as soon as you can
|
||||||
|
check_untyped_defs = true
|
||||||
|
|
||||||
|
## These shouldn't be too much additional work, but may be tricky to
|
||||||
|
## get passing if you use a lot of untyped libraries
|
||||||
|
disallow_subclassing_any = true
|
||||||
|
disallow_untyped_decorators = true
|
||||||
|
disallow_any_generics = true
|
||||||
|
|
||||||
|
### These next few are various gradations of forcing use of type annotations
|
||||||
|
#disallow_untyped_calls = true
|
||||||
|
#disallow_incomplete_defs = true
|
||||||
|
#disallow_untyped_defs = true
|
||||||
|
#
|
||||||
|
### This one isn't too hard to get passing, but return on investment is lower
|
||||||
|
#no_implicit_reexport = true
|
||||||
|
#
|
||||||
|
### This one can be tricky to get passing if you use a lot of untyped libraries
|
||||||
|
#warn_return_any = true
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
python_dateutil >= 2.5.3
|
||||||
|
setuptools >= 21.0.0
|
||||||
|
urllib3 >= 1.25.3, < 2.1.0
|
||||||
|
pydantic >= 2
|
||||||
|
typing-extensions >= 4.7.1
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[flake8]
|
||||||
|
max-line-length=99
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
from setuptools import setup, find_packages # noqa: H301
|
||||||
|
|
||||||
|
# To install the library, run the following
|
||||||
|
#
|
||||||
|
# python setup.py install
|
||||||
|
#
|
||||||
|
# prerequisite: setuptools
|
||||||
|
# http://pypi.python.org/pypi/setuptools
|
||||||
|
NAME = "openapi-client"
|
||||||
|
VERSION = "1.0.0"
|
||||||
|
PYTHON_REQUIRES = ">=3.7"
|
||||||
|
REQUIRES = [
|
||||||
|
"urllib3 >= 1.25.3, < 2.1.0",
|
||||||
|
"python-dateutil",
|
||||||
|
"pydantic >= 2",
|
||||||
|
"typing-extensions >= 4.7.1",
|
||||||
|
]
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name=NAME,
|
||||||
|
version=VERSION,
|
||||||
|
description="announcementService",
|
||||||
|
author="OpenAPI Generator community",
|
||||||
|
author_email="team@openapitools.org",
|
||||||
|
url="",
|
||||||
|
keywords=["OpenAPI", "OpenAPI-Generator", "announcementService"],
|
||||||
|
install_requires=REQUIRES,
|
||||||
|
packages=find_packages(exclude=["test", "tests"]),
|
||||||
|
include_package_data=True,
|
||||||
|
long_description_content_type='text/markdown',
|
||||||
|
long_description="""\
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
""", # noqa: E501
|
||||||
|
package_data={"openapi_client": ["py.typed"]},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
pytest~=7.1.3
|
||||||
|
pytest-cov>=2.8.1
|
||||||
|
pytest-randomly>=3.12.0
|
||||||
|
mypy>=1.4.1
|
||||||
|
types-python-dateutil>=2.8.19
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from openapi_client.models.patch_notes import PatchNotes
|
||||||
|
|
||||||
|
class TestPatchNotes(unittest.TestCase):
|
||||||
|
"""PatchNotes unit test stubs"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def make_instance(self, include_optional) -> PatchNotes:
|
||||||
|
"""Test PatchNotes
|
||||||
|
include_optional is a boolean, when False only required
|
||||||
|
params are included, when True both required and
|
||||||
|
optional params are included """
|
||||||
|
# uncomment below to create an instance of `PatchNotes`
|
||||||
|
"""
|
||||||
|
model = PatchNotes()
|
||||||
|
if include_optional:
|
||||||
|
return PatchNotes(
|
||||||
|
patch_id = '',
|
||||||
|
title = '',
|
||||||
|
changes = '',
|
||||||
|
var_date = ''
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return PatchNotes(
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def testPatchNotes(self):
|
||||||
|
"""Test PatchNotes"""
|
||||||
|
# inst_req_only = self.make_instance(include_optional=False)
|
||||||
|
# inst_req_and_optional = self.make_instance(include_optional=True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from openapi_client.api.patchnotes_api import PatchnotesApi
|
||||||
|
|
||||||
|
|
||||||
|
class TestPatchnotesApi(unittest.TestCase):
|
||||||
|
"""PatchnotesApi unit test stubs"""
|
||||||
|
|
||||||
|
def setUp(self) -> None:
|
||||||
|
self.api = PatchnotesApi()
|
||||||
|
|
||||||
|
def tearDown(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_get_patchnotes(self) -> None:
|
||||||
|
"""Test case for get_patchnotes
|
||||||
|
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_patch_note_delete(self) -> None:
|
||||||
|
"""Test case for patch_note_delete
|
||||||
|
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_post_patchnotes(self) -> None:
|
||||||
|
"""Test case for post_patchnotes
|
||||||
|
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from openapi_client.models.user import User
|
||||||
|
|
||||||
|
class TestUser(unittest.TestCase):
|
||||||
|
"""User unit test stubs"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def make_instance(self, include_optional) -> User:
|
||||||
|
"""Test User
|
||||||
|
include_optional is a boolean, when False only required
|
||||||
|
params are included, when True both required and
|
||||||
|
optional params are included """
|
||||||
|
# uncomment below to create an instance of `User`
|
||||||
|
"""
|
||||||
|
model = User()
|
||||||
|
if include_optional:
|
||||||
|
return User(
|
||||||
|
last_note_checked = ''
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return User(
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def testUser(self):
|
||||||
|
"""Test User"""
|
||||||
|
# inst_req_only = self.make_instance(include_optional=False)
|
||||||
|
# inst_req_and_optional = self.make_instance(include_optional=True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
[tox]
|
||||||
|
envlist = py3
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
deps=-r{toxinidir}/requirements.txt
|
||||||
|
-r{toxinidir}/test-requirements.txt
|
||||||
|
|
||||||
|
commands=
|
||||||
|
pytest --cov=openapi_client
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
git_host=$4
|
||||||
|
|
||||||
|
if [ "$git_host" = "" ]; then
|
||||||
|
git_host="github.com"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="GIT_USER_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="GIT_REPO_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="Minor update"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=$(git remote)
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||||
|
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "openapi_client"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "announcementService"
|
||||||
|
authors = ["OpenAPI Generator Community <team@openapitools.org>"]
|
||||||
|
license = "NoLicense"
|
||||||
|
readme = "README.md"
|
||||||
|
repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID"
|
||||||
|
keywords = ["OpenAPI", "OpenAPI-Generator", "announcementService"]
|
||||||
|
include = ["openapi_client/py.typed"]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.7"
|
||||||
|
|
||||||
|
urllib3 = ">= 1.25.3"
|
||||||
|
python-dateutil = ">=2.8.2"
|
||||||
|
pydantic = ">=2"
|
||||||
|
typing-extensions = ">=4.7.1"
|
||||||
|
|
||||||
|
[tool.poetry.dev-dependencies]
|
||||||
|
pytest = ">=7.2.1"
|
||||||
|
tox = ">=3.9.0"
|
||||||
|
flake8 = ">=4.0.0"
|
||||||
|
types-python-dateutil = ">=2.8.19.14"
|
||||||
|
mypy = "1.4.1"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[tool.pylint.'MESSAGES CONTROL']
|
||||||
|
extension-pkg-whitelist = "pydantic"
|
||||||
|
|
||||||
|
[tool.mypy]
|
||||||
|
files = [
|
||||||
|
"openapi_client",
|
||||||
|
#"test", # auto-generated tests
|
||||||
|
"tests", # hand-written tests
|
||||||
|
]
|
||||||
|
# TODO: enable "strict" once all these individual checks are passing
|
||||||
|
# strict = true
|
||||||
|
|
||||||
|
# List from: https://mypy.readthedocs.io/en/stable/existing_code.html#introduce-stricter-options
|
||||||
|
warn_unused_configs = true
|
||||||
|
warn_redundant_casts = true
|
||||||
|
warn_unused_ignores = true
|
||||||
|
|
||||||
|
## Getting these passing should be easy
|
||||||
|
strict_equality = true
|
||||||
|
strict_concatenate = true
|
||||||
|
|
||||||
|
## Strongly recommend enabling this one as soon as you can
|
||||||
|
check_untyped_defs = true
|
||||||
|
|
||||||
|
## These shouldn't be too much additional work, but may be tricky to
|
||||||
|
## get passing if you use a lot of untyped libraries
|
||||||
|
disallow_subclassing_any = true
|
||||||
|
disallow_untyped_decorators = true
|
||||||
|
disallow_any_generics = true
|
||||||
|
|
||||||
|
### These next few are various gradations of forcing use of type annotations
|
||||||
|
#disallow_untyped_calls = true
|
||||||
|
#disallow_incomplete_defs = true
|
||||||
|
#disallow_untyped_defs = true
|
||||||
|
#
|
||||||
|
### This one isn't too hard to get passing, but return on investment is lower
|
||||||
|
#no_implicit_reexport = true
|
||||||
|
#
|
||||||
|
### This one can be tricky to get passing if you use a lot of untyped libraries
|
||||||
|
#warn_return_any = true
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
python_dateutil >= 2.5.3
|
||||||
|
setuptools >= 21.0.0
|
||||||
|
urllib3 >= 2.2.2, < 2.3.0
|
||||||
|
pydantic >= 2
|
||||||
|
typing-extensions >= 4.7.1
|
||||||
|
Flask
|
||||||
|
pymongo[srv]
|
||||||
|
Flask-PyMongo
|
||||||
|
connexion[swagger-ui] >= 2.6.6
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
announcementService
|
||||||
|
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
""" # noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
from setuptools import setup, find_packages # noqa: H301
|
||||||
|
|
||||||
|
# To install the library, run the following
|
||||||
|
#
|
||||||
|
# python setup.py install
|
||||||
|
#
|
||||||
|
# prerequisite: setuptools
|
||||||
|
# http://pypi.python.org/pypi/setuptools
|
||||||
|
NAME = "openapi-client"
|
||||||
|
VERSION = "1.0.0"
|
||||||
|
PYTHON_REQUIRES = ">=3.7"
|
||||||
|
REQUIRES = [
|
||||||
|
"urllib3 >= 1.25.3, < 2.1.0",
|
||||||
|
"python-dateutil",
|
||||||
|
"pydantic >= 2",
|
||||||
|
"typing-extensions >= 4.7.1",
|
||||||
|
]
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name=NAME,
|
||||||
|
version=VERSION,
|
||||||
|
description="announcementService",
|
||||||
|
author="OpenAPI Generator community",
|
||||||
|
author_email="team@openapitools.org",
|
||||||
|
url="",
|
||||||
|
keywords=["OpenAPI", "OpenAPI-Generator", "announcementService"],
|
||||||
|
install_requires=REQUIRES,
|
||||||
|
packages=find_packages(exclude=["test", "tests"]),
|
||||||
|
include_package_data=True,
|
||||||
|
long_description_content_type='text/markdown',
|
||||||
|
long_description="""\
|
||||||
|
Announcing patchnotes for KanzleiApp
|
||||||
|
""", # noqa: E501
|
||||||
|
package_data={"openapi_client": ["py.typed"]},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
-p 8080:8080 \
|
||||||
|
--env-file ./.env \
|
||||||
|
-v ./gen/:/usr/src/app/ \
|
||||||
|
announcement-service:0.0.1
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
pytest~=7.1.3
|
||||||
|
pytest-cov>=2.8.1
|
||||||
|
pytest-randomly>=3.12.0
|
||||||
|
mypy>=1.4.1
|
||||||
|
types-python-dateutil>=2.8.19
|
||||||
Loading…
Reference in New Issue