CHANGES
=======

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
