CHANGES
=======

0.5.1
-----

* Updated unit tests, fixed bugs found writing unit tests
* Updated implementation to make customisation of cors\_option method easier
* Updated docs of summary and middleware of Operation class
* Extend ApiContainer.operation to accept summary and middleware arguments

0.5
---

* Updated tests cases to handle changes in behaviour
* Migrated to using origin! Only output Access control if allowed, output Allow header
* Added some formatting to testing methods
* Move accepts header details to request object
* Added BaseHttpRequest and setup typing

0.4.7
-----

* Added CORS notes in README
* Bumped odin version to >=1.4
* Made test more reliable
* Added test cases for security and fixed some discovered bugs
* Added test cases for Middleware returning HTTP responses
* Added more tests and some tweaks to URL Path (required by CORS support)
* Added tests for CORS support, fixed some bugs identified
* Extended HTTPRequest to include the current\_operation
* Spelling mistake corrected
* CORS implementation
* Added features to simplify CORS support
* Corrected typing info
* Implemented CORS middleware
* Removed empty files
* Cleaned up docs
* Minor tweaks to typing a the path node re
* Allow pre-requests to return a HttpResponse object (required for CORS middleware)
* Added CORS middleware
* Remove \_\_all\_\_ structures and import directly

0.4.6
-----

* Support plain listing models
* Fix to not generate a resource if one isn't defined (common for no response requests like DELETE)
* Get-Swagger now exports codecs registered against the ApiInterfaceBase instance

0.4.5
-----

* Better handling of readonly
* Added an opportunity for security definitions to be set
* Should be DefaultResource not DefaultResponse
* Ensure responses are registered
* export security decorator
* Make regex unique
* Added swagger security object
* Improvement to make generation path params tied to key field
* Fix odd new-line

0.4.5b2
-------

* Fix generation of Regex paths

0.4.5b1
-------

* Support regular expressions

0.4.4
-----

* Use requirements environment-markers instead
* Update format of requirements environment markers

0.4.3
-----

* Added tests for pre and post request middleware calls
* Landscape.io fixes
* Moved current\_operation application to request to dispatch method so it is available in pre\_request
* Tests for data structures
* Update dispatch\_operation to apply current\_operation to request
* Moved action to be based on a item (eg sub detail view)
* Added cors header constants
* Added typing and enum32 for python 2.7
* Added typing and enum32 for python 2.7

0.4.2
-----

* Re-organise dispatch and support pre-post request middleware hooks
* Tweak patch

0.4.1
-----

* Pass through default\_to\_not\_supplied
* Support full clean and default\_to\_not\_supported options
* Updates to support VirtualFields and tweaks to swagger generation to provide correct type
* Updates to support changes in type definitions
* Updated Type constants to be more useful in mapping
* Added pre-post dispatch hooks for middleware
* Added in top level middleware for handling exceptions
* Updated decorators to allow middleware, removed max\_offset from Listing (didn't make sense) clean up typing

0.4
---

* Moved entry point to api
* Updated to use pkgutil

0.3.1
-----

* Tweak test to get a key field
* Additional test case
* Tweaked type info

0.3
---

* Support combining of methods into single paths for libraries like Django
* ApiInterfaceBase.operation requires a path with simplified decorator (and test changes)
* Updated test to just compare with NoPath
* Changed internals of operator to allow for URLs to dynamically create url\_paths
* Added support for applying args
* Slight change to how api\_name is defined, and simplify some methods
* Added more test coverage and improved some code warnings
* Fixed decorators
* Making naming rules follow standard python rules
* Expanded shortcut decorators to specify more overridable defaults
* Renamed url\_path to path, is a bit more intuitive
* Export PathParam
* Fixed test following update to types
* Updated methods with more and extended types to more supported by Swagger (and OpenAPI 3.0) spec
* Added a path string regular expression to provide a good base point
* Allow headers to be based off collections.MutableMapping
* Improved assert messages renamed from test\_request\_proxy to check\_request\_proxy (to prevent naming collisions with pytest)
* Expanded test coverage to cover custom messages
* Removed popitem and poplistitem methods, very little value and annoying to test
* Corrected some warnings from landscape.io
* Disable too-many-arguments warning as this is used to simplify API!
* Added comments on the differences in implementation between Django/Flask/Bottle of MultiValueDict
* Renamed to check\_request\_proxy and added a message for attribute check
* Added simple check to ensure RequestProxies conform for different implementations
* Additional test cases for Multidict, removed deep copy support
* Put noqa on typing imports
* landscape.io fixes
* Fixed iter items for python 2.7
* Fix landscape yml
* Some tests for updated MultiValueDict
* Updated testing to utilise MultiValueDict
* Updated signing tests to match test MultiValueDict
* Updated signing to use MultiValueDict to match HTTP spec
* Updated MultiDict to MultiValueDict, with updates from the Werkzerg implementation
* Changed to MultiDict, added copy to allow it to be modified
* Migrate to use ImmutableMultiDict for query params to support multiple values
* Added str and repr methods
* Added full unit tests for ImmutableMultiDict and typing information
* Added implementation of multidict for handling Query params

0.2.1
-----

* Bumped dev status to Beta
* Added signing middleware
* Added a filter to only get the first item in query string
* Expand Mock Request to include path and built in URL parsing
* Fix type to string
* Create LICENSE
* Test DefaultResource creation
* Test for "Any" field
* Final tests for signing code
* Added a method for safely comparing URLs
* Support encoding for Python3
* More test coverage for signing code
* Added signing exception
* Fixed max-expiry check and change time call
* Re-ordered file and made time easier to mock, added typing
* Changed approach from random string to token and default to base 32
* Fix tests for python3
* Complete test coverage for swagger file
* Added type spec, allowed schemes to be single value,
* Updated ApiVersion to match ApiContainer type info
* Corrected ContentType to Content-Type
* Normalise content-type to Content-Type (as per definition in MDN)
* Fixed spelling error and have enable\_ui reflect enabled
* Added an enabled flag (this is to allow it to be changed by variable eg from config). Simplified base\_path Additional comments
* Changed odinweb\_node\_formatter to use enum name instead of value, this is to ensure parser matches
* Moved setting parent to constructor so this is more predictable
* Renamed to\_doc to to\_swagger to remain consistent with other objects
* Added test cases for swagger resource\_definition
* Test for Operation.to\_doc

0.2
---

* Added init of SwaggerSpec test
* Tests for Operation str and repr
* Test shortcut decorators
* Test ResourceOperation with invalid data
* Tests for ResourceOperation decorator
* Test ListingOperation
* Fixed test for an incorrect exception caused by a bug in odin
* Simplified generation using or None and ensure list is returned instead of a tags
* Bumped minimum odin version to 1.1.1
* Removed unicode\_literals
* Added more \_\_eq\_\_ checks for doing searches in sets
* Updated doc and fixed bugs find by new test cases
* Take advantage of Operation using UrlPath.parse to parse out PathParams
* Renamed PathNode to PathParam
* Implemented PathParam parsing by UrlPath object
* Updated type data
* Default method to use a Method constant
* Updated containers tests
* Added test cases for much of containers (missing main dispatch)
* Fixed typing of URL path
* Added travis config, have requirements-dev also install requirements
* Added \_\_eq\_\_, \_\_str\_\_ and \_\_repr\_\_ special functions to Operation to allow them to be compared and display correctly in debugger
* Add a hash to UrlPath to allow it to be used as a key and to find unique paths
* Skip tests that require python3
* Prepare to apply to updated code
* Expanded Mock request with codecs
* Disabled some old tests
* Added tests for Operation decorator
* Updates to helpers from tests (with tests)
* Updated random\_string function to work with both Python 2 and 3
* Test the priority and switch back to tuples from generators due to the lazy property caching the result
* Complete test coverage for content\_type\_resolvers
* Improvements from writing test cases, added full test coverage of data\_structures
* Expanded on the PermissionDenied exception into UnAuthorized and AccessDenied
* Fixed styling
* Added django as a supported framework
* Expanded operation id to include the module to ensure uniqueness of the name
* Added a post\_swagger middleware hook
* Change pre/post dispatch hooks to middleware
* Added a method for sorting objects into priority order
* Added final new line\`
* Optimised make\_decorator to remove additional operations
* Refactor HttpError to use Error.from\_status helper
* Use DefaultResponse for the default response and expand shortcuts with other common responses (eg Not Found, Bad Request etc)
* Added a default response (a special case of response for providing the Swagger default response)
* Updated README
* Added some helpers to API
* More docs and normalisation of imports
* Renamed previous api module to containers and replaced api with a common entry point
* Moved common helper methods into helpers module
* Ensure a full clean is performed
* Disabled error checking on compatibility file
* Improved make\_decorator to handle when the first variable is not a callable
* Simplified many decorators and removed un-needed items
* Switched to using response object, to defined responses, added default response definitions
* A response object (for dealing with responses), disabled more pep8 warnings
* Prevented pep8 warnings, correct sorting of operations
* More fixes for landscape io
* Fix issues identified by landscape
* Provide listing query params
* Added basic landscape.io config
* Added make\_decorator decorator
* Fixed paths, and simplified params with Param objects
* Simplified creation of decorators with the make decorator, decorator!
* Updated shortcuts to work with new style of definition, simplified parameter collection to a list of Param classes
* Added a Param structure to represent swagger style parameters, Added a default resource object used as a placeholder for resources defined on bound ResourceApi instances
* Expanded Type enum to include Fields and native types
* Use a absolute import
* Cut off first item
* Support indexing and slicing of UrlPaths
* Added support for BodyParams
* Removed DefaultString and updated the name to match what it is
* Added a filter to return PathNodes from UrlPath
* Started introducing doc decorators back
* Made the doc operations the sources of truth for doc types and build out so order of decorators shouldn't matter
* Started building out documentation decorators and expanding operation to handle them
* Compare against string types
* Handle operation sub path as a url\_path
* Build out more swagger support
* Added a placeholder tags
* Some additional typing annotations added
* Updated implementation of SwaggerSpec resource API class to better support the updated design
* Moved out the Operation decorator simplified the ResourceAPI class further to move more common code into the Operation decorator
* Moved the Operation decorator into decorators and tweaked implementation, extended
* Compare against compat string\_types (for now). Added a NoPath (empty UrlPath) constant
* Path args is not just a dict (allows for modification etc), ensure values are converted to strings
* Added more type info removed ApiRoute
* Build out path building and expanded on the basic details of an operation in preparation for generating docs
* Don't make a copy of UrlPaths as they are designed to be immutable
* Updated the typing to AnyStr
* Moved core dispatching into the API root
* Started building out operation orientated route building
* Added a test that a single '/' is dealt with correctly
* Start migration to swagger style api
* Added a UrlPath data\_structure and tests for handling paths
* Update of Operation class with more details
* Migrated to Operation object rather than decorated functions
* Fix documentation\_applied tests
* Fix passing of resource, docs parent passed
* Filter out swagger endpoints from swagger spec
* Fix bind so resource definition is preserved
* Updated decorators to Applied ordering to paths
* Use route request for resource definition
* Ensure a resource is always applied to a callback
* Updated formatting of Django block
* Updated readme
* Default path-node type to Integer, some typing support
* Utilise the typing module for more inline typing (preparing to support Python 3 only)
* Some fixes for landscape.io, remove resource from body, this should be inferred
* Use types to define routes
* Fixed some tests broken by design changes
* Migrated more strings to enum types, added path\_prefix
* Refactor docs internals to have more work done by OperationDocs class (this makes it easier to integrate other decorators)
* Docs and more consistent naming
* Added resource\_request to \_\_all\_\_
* Method constant to tuple, added decorator to fetch resource
* Started on collection docs Started adding param commands to operation
* Migrated Methods to enum
* Migrated to using http.HTTPStatus for status constants (back-ported from Python 3.5 to support Python 2.7)
* Added overrides for host and schemes

0.1.2
-----

* Fixed a bug in generation of the base path for docs, this lead to simplification of URL path building. Tests included

0.1.1
-----

* Migrated to PBR and fixed inclusion of static files
* Updated name of dict\_filter from odinweb.utils
* Test cases for ResourceApi.create\_response
* Increased test coverage of utils (100%)
* Added filter tools for dictionaries
* Updated doc decorators to reflect more of the swagger spec
* Support debug\_enabled in create\_response
* Added max list values into docs
* Couple small tweaks to layout and some comments
* Added tests for listing and fixed bugs discovered
* Added some utils for converting boolean values, and finding values in iterables
* Added some helpers for testing APIs
* Updates to swagger generation:
* Improved handling of content types:
* Expanded on docs, handle some odd cases with multiple methods for a single route
* Updated doc decorators, fix field type lookup, always define Error and Listing resources and use resource\_name to include namespaces of resources
* Moved doc decorators into doc file
* Fixed error in swagger output
* Refactored docs
* Started an improved way of building documentation
* Gzip files
* Shrunk code
* Updated swagger generation to include resources and handle some UTF-8 annoyances
* Fix issue converting Enums to native values
* Migrated to using Enums (Python 2.7 no requires enum34), seriously migrate!
* Added built in swagger UI
* Added mock for tests
* Removed mixins, was library coupled
* Fix python 3 compatability
* Make swagger version default if not supplied
* Fix type to not be title case
* Added an implementation of swagger spec generation
* Added documentation decorators to support swagger generation
* Added Swagger constants
* Added support for Yaml codec, caching of api\_routes on ResourceApi, support a custom path\_prefix for api\_routes (used in swagger generation)
* Added requirements files
* Fix failing tests
* More test cases for API sitting at ~95% coverage
* Many more test cases
* Small tweaks to design based off test cases for ApiContainer and children
* Started building out test cases for the API
* Finalised Baldr port
* Minor pep8 related tweaks
* Simplified ImmediateErrorHttpResponse name to just HttpError
* Added HTTP response and prepared for returning a standard object
* Commit of initial migration of baldr to odinweb, the routing is somewhat simpiler due to the nature of bottle and flask (support the same route with different methods)
* Removed the route number not needed in this implementation
* Initial work on porting of baldr
* Clean up decorators to work with OdinWeb vs Baldr!
* Defined some common data structures
* Remove unicode literals to fix with\_metaclass method
* Improved deprecation statement
* Remove unicode\_literals future support
* Started to build out workarounds for import errors
* Added version info, notes on Python 2.7
* Fixed name
* Update of odinweb to be the core and utilise python package namespaces
* Initial commit:
* Added code for signing URLs
* Initial commit
