Justin Niessner db5941379f
[Python] Fix Python UTF-8 Encoding Issue (#5679)
* Try decoding but don't bail on error

* Switch binary and ByteArray to bytes

* Read content type and parse appropriately

* Remove response parsing

* Remove response parsing and just return the data

* Update petshop examples w/ new generator code

* Fix copy/paste error with naming

* Update petstore examples

* Move response decoding to inside _preload_content block

* Update the clients again

* Use a raw string for the regex pattern

* Regenerate petstore clients

* Add bytes to python primitives as it's supported in 2.7 and 3

* Add bytes to the exports from model_utils

* Import bytes from model_utils

* Add conditional typing for regex pattern to match variable type

* Regenerate petstore clients

* Use read() instead of text() for asyncio

* Regenerate petstore clients

* Remove unused six import

* Regenerate petstore clients

* Add newline to kick Circle to re-run

* Remove whitespace from tox.ini

* Update more examples after ensure_updated

* Add sample updates that didn't run with the --batch flag

* Remove extra bracket in regex to remove warning

* Stop printing debug messages

* Add bytes examples to python doc generators

* Update generated FakeApi docs

* Regenerate api_client.py

* Remove print statements from generated clients

* Update bytes example in FakeApi.md. Again. I swear.

* Add yet another seemingly missing doc update

* Catch the error, decode the body, and re-throw

* Remove the updates now that the change is non-breaking

* Regenerate client

* Add bytes deserialization test

* Update exception parsing

* Add exception parsing for python-experimental

* Regenerate client with minor changes

* Revert test changes

* Regenerate model_utils.py

* Update confusing test name

* Remove bytes from mapping and examples

* Add back in the old binary/ByteArray to str mapping

* Update docs and api_client template

* Add experimental api_client changes

* Regenerate samples again

* Add Tornado handling to early return

* Try fixing Tornado python returns

* More documentation changes

* Re-generate the client code

* Remove bytes from test_format_test

* Remove more leftover bytes usages

* Switch bytes validation back to string

* Fix format_test template and regenerate

* Remove unused bytes var

* Remove bytes import from models and regenerate

* Remove bytes import from test_deserialization

* Reduce nested ifs

* Remove byte logic for now

* Regenerate client after latest changes

* Remove another bytes usage

* Regenerate after removing dangling byte string usage

* Reduce the scope of the try/catch in api_client

* Regenerate after try/catch cleanup

* Swap catch for except

* Regenerate Python client after api_client change

* Fix lint error on the generated api_client

* Add binary format test back in w/ string

* Add decoding to python-experimental and regenerate

* Import re into python-experimental api_client

* Ensure file upload json response is utf-8 encoded bytes
2020-04-26 13:33:42 -07:00
..
2019-12-23 11:39:49 +08:00

php-base - PHP Slim 4 Server library for OpenAPI Petstore

This server has been generated with Slim PSR-7 implementation.

Requirements

  • Web server with URL rewriting
  • PHP 7.1 or newer

This package contains .htaccess for Apache configuration. If you use another server(Nginx, HHVM, IIS, lighttpd) check out Web Servers doc.

Installation via Composer

Navigate into your project's root directory and execute the bash command shown below. This command downloads the Slim Framework and its third-party dependencies into your project's vendor/ directory.

$ composer install

Start devserver

Run the following command in terminal to start localhost web server, assuming ./php-slim-server/ is public-accessible directory with index.php file:

$ php -S localhost:8888 -t php-slim-server

Warning

This web server was designed to aid application development. It may also be useful for testing purposes or for application demonstrations that are run in controlled environments. It is not intended to be a full-featured web server. It should not be used on a public network.

Tests

PHPUnit

This package uses PHPUnit 6 or 7(depends from your PHP version) for unit testing. Test folder contains templates which you can fill with real test assertions. How to write tests read at PHPUnit Manual - Chapter 2. Writing Tests for PHPUnit.

Run

Command Target
$ composer test All tests
$ composer test-apis Apis tests
$ composer test-models Models tests
$ composer test-mock Mock feature tests
$ composer test-utils Utils tests

Config

Package contains fully functional config ./phpunit.xml.dist file. Create ./phpunit.xml in root folder to override it.

Quote from 3. The Command-Line Test Runner — PHPUnit 7.4 Manual:

If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and --configuration is not used, the configuration will be automatically read from that file.

PHP CodeSniffer

PHP CodeSniffer Documentation. This tool helps to follow coding style and avoid common PHP coding mistakes.

Run

$ composer phpcs

Config

Package contains fully functional config ./phpcs.xml.dist file. It checks source code against PSR-1 and PSR-2 coding standards. Create ./phpcs.xml in root folder to override it. More info at Using a Default Configuration File

PHPLint

PHPLint Documentation. Checks PHP syntax only.

Run

$ composer phplint

Show errors

Switch on option in ./index.php:

/**
 * Add Error Handling Middleware
 *
 * @param bool $displayErrorDetails -> Should be set to false in production
 * @param bool $logErrors -> Parameter is passed to the default ErrorHandler
 * @param bool $logErrorDetails -> Display error details in error log
 * which can be replaced by a callable of your choice.

 * Note: This middleware should be added last. It will not handle any exceptions/errors
 * for middleware added after it.
 */
--- $app->addErrorMiddleware(false, true, true);
+++ $app->addErrorMiddleware(true, true, true);

Mock Server Documentation

API Endpoints

All URIs are relative to http://petstore.swagger.io:80/v2

Important! Do not modify abstract API controllers directly! Instead extend them by implementation classes like:

// src/Api/PetApi.php

namespace OpenAPIServer\Api;

use OpenAPIServer\Api\AbstractPetApi;

class PetApi extends AbstractPetApi
{

    public function addPet($request, $response, $args)
    {
        // your implementation of addPet method here
    }
}

Place all your implementation classes in ./src folder accordingly. For instance, when abstract class located at ./lib/Api/AbstractPetApi.php you need to create implementation class at ./src/Api/PetApi.php.

Class Method HTTP request Description
AbstractAnotherFakeApi call123TestSpecialTags PATCH /another-fake/dummy To test special tags
AbstractFakeApi createXmlItem POST /fake/create_xml_item creates an XmlItem
AbstractFakeApi fakeOuterBooleanSerialize POST /fake/outer/boolean
AbstractFakeApi fakeOuterCompositeSerialize POST /fake/outer/composite
AbstractFakeApi fakeOuterNumberSerialize POST /fake/outer/number
AbstractFakeApi fakeOuterStringSerialize POST /fake/outer/string
AbstractFakeApi testBodyWithFileSchema PUT /fake/body-with-file-schema
AbstractFakeApi testBodyWithQueryParams PUT /fake/body-with-query-params
AbstractFakeApi testClientModel PATCH /fake To test "client" model
AbstractFakeApi testEndpointParameters POST /fake Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
AbstractFakeApi testEnumParameters GET /fake To test enum parameters
AbstractFakeApi testGroupParameters DELETE /fake Fake endpoint to test group parameters (optional)
AbstractFakeApi testInlineAdditionalProperties POST /fake/inline-additionalProperties test inline additionalProperties
AbstractFakeApi testJsonFormData GET /fake/jsonFormData test json serialization of form data
AbstractFakeApi testQueryParameterCollectionFormat PUT /fake/test-query-paramters
AbstractFakeClassnameTags123Api testClassname PATCH /fake_classname_test To test class name in snake case
AbstractPetApi addPet POST /pet Add a new pet to the store
AbstractPetApi findPetsByStatus GET /pet/findByStatus Finds Pets by status
AbstractPetApi findPetsByTags GET /pet/findByTags Finds Pets by tags
AbstractPetApi updatePet PUT /pet Update an existing pet
AbstractPetApi deletePet DELETE /pet/{petId} Deletes a pet
AbstractPetApi getPetById GET /pet/{petId} Find pet by ID
AbstractPetApi updatePetWithForm POST /pet/{petId} Updates a pet in the store with form data
AbstractPetApi uploadFile POST /pet/{petId}/uploadImage uploads an image
AbstractPetApi uploadFileWithRequiredFile POST /fake/{petId}/uploadImageWithRequiredFile uploads an image (required)
AbstractStoreApi getInventory GET /store/inventory Returns pet inventories by status
AbstractStoreApi placeOrder POST /store/order Place an order for a pet
AbstractStoreApi deleteOrder DELETE /store/order/{order_id} Delete purchase order by ID
AbstractStoreApi getOrderById GET /store/order/{order_id} Find purchase order by ID
AbstractUserApi createUser POST /user Create user
AbstractUserApi createUsersWithArrayInput POST /user/createWithArray Creates list of users with given input array
AbstractUserApi createUsersWithListInput POST /user/createWithList Creates list of users with given input array
AbstractUserApi loginUser GET /user/login Logs user into the system
AbstractUserApi logoutUser GET /user/logout Logs out current logged in user session
AbstractUserApi deleteUser DELETE /user/{username} Delete user
AbstractUserApi getUserByName GET /user/{username} Get user by user name
AbstractUserApi updateUser PUT /user/{username} Updated user

Models

  • OpenAPIServer\Model\AdditionalPropertiesAnyType
  • OpenAPIServer\Model\AdditionalPropertiesArray
  • OpenAPIServer\Model\AdditionalPropertiesBoolean
  • OpenAPIServer\Model\AdditionalPropertiesClass
  • OpenAPIServer\Model\AdditionalPropertiesInteger
  • OpenAPIServer\Model\AdditionalPropertiesNumber
  • OpenAPIServer\Model\AdditionalPropertiesObject
  • OpenAPIServer\Model\AdditionalPropertiesString
  • OpenAPIServer\Model\Animal
  • OpenAPIServer\Model\ApiResponse
  • OpenAPIServer\Model\ArrayOfArrayOfNumberOnly
  • OpenAPIServer\Model\ArrayOfNumberOnly
  • OpenAPIServer\Model\ArrayTest
  • OpenAPIServer\Model\BigCat
  • OpenAPIServer\Model\BigCatAllOf
  • OpenAPIServer\Model\Capitalization
  • OpenAPIServer\Model\Cat
  • OpenAPIServer\Model\CatAllOf
  • OpenAPIServer\Model\Category
  • OpenAPIServer\Model\ClassModel
  • OpenAPIServer\Model\Client
  • OpenAPIServer\Model\Dog
  • OpenAPIServer\Model\DogAllOf
  • OpenAPIServer\Model\EnumArrays
  • OpenAPIServer\Model\EnumClass
  • OpenAPIServer\Model\EnumTest
  • OpenAPIServer\Model\File
  • OpenAPIServer\Model\FileSchemaTestClass
  • OpenAPIServer\Model\FormatTest
  • OpenAPIServer\Model\HasOnlyReadOnly
  • OpenAPIServer\Model\MapTest
  • OpenAPIServer\Model\MixedPropertiesAndAdditionalPropertiesClass
  • OpenAPIServer\Model\Model200Response
  • OpenAPIServer\Model\ModelList
  • OpenAPIServer\Model\ModelReturn
  • OpenAPIServer\Model\Name
  • OpenAPIServer\Model\NumberOnly
  • OpenAPIServer\Model\Order
  • OpenAPIServer\Model\OuterComposite
  • OpenAPIServer\Model\OuterEnum
  • OpenAPIServer\Model\Pet
  • OpenAPIServer\Model\ReadOnlyFirst
  • OpenAPIServer\Model\SpecialModelName
  • OpenAPIServer\Model\Tag
  • OpenAPIServer\Model\TypeHolderDefault
  • OpenAPIServer\Model\TypeHolderExample
  • OpenAPIServer\Model\User
  • OpenAPIServer\Model\XmlItem

Authentication

Security schema api_key

Important! To make ApiKey authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\ApiKeyAuthenticator class.

Security schema api_key_query

Important! To make ApiKey authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\ApiKeyAuthenticator class.

Security schema http_basic_test

Important! To make Basic authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\BasicAuthenticator class.

Security schema petstore_auth

Important! To make OAuth authentication work you need to extend \OpenAPIServer\Auth\AbstractAuthenticator class by \OpenAPIServer\Auth\OAuthAuthenticator class.

Scope list:

  • write:pets - modify pets in your account
  • read:pets - read your pets

Advanced middleware configuration

Ref to used Slim Token Middleware dyorg/slim-token-authentication